blob: 456b3a36d3c53207f6a7b85afc769ce94621cc7a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#!/bin/bash
echo "---> jjb/ci-management/packagecloud-repo-cleanup.sh"
set -euxo pipefail
# Number of packages to keep.
N_PACKAGES=5
PACKAGECLOUD_REPO_DEB="https://packagecloud.io/install/repositories/fdio/${STREAM}/script.deb.sh"
FACTER_OS=$(/usr/bin/facter operatingsystem)
PACKAGE_LIST=""
VERSION_REGEX="[0-9]+.[0-9]+[-_][0-9]+[-_]release(-1)?|[0-9]+.[0-9]+[-_][0-9]+~g[[:graph:]]+"
declare -A FUNCTIONS
echo_err () {
>&2 echo ${@}
exit 1
}
contains() {
[[ ${1} =~ (^|[[:space:]])${2}($|[[:space:]]) ]] && return 1 || return 0
}
check_version_whitelist() {
if [[ ${1} =~ ([0-9]+).([0-9]+)[-_]([0-9]+).+ ]]; then
MAJOR=${BASH_REMATCH[1]}
MINOR=${BASH_REMATCH[2]}
REVISION=${BASH_REMATCH[3]}
VER="${MAJOR}.${MINOR}-${REVISION}"
if contains "${VERSION_WHITELIST}" ${VER}; then
return 1;
fi
fi
return 0
}
# Params
# $1: Package list
build_package_blacklist_ubuntu () {
PACKAGE_LIST=${@}
OUTPUT_LIST=""
ARCH=$(dpkg --print-architecture)
for package in ${PACKAGE_LIST}; do
OUTPUT=$(apt-cache policy ${package} 2> /dev/null)
if [[ ${?} -ne 0 || -z "${OUTPUT}" ]]; then
continue
fi
# N_PACKAGES + 2 is justified by the fact thathe output of apt-cache policy is in the form:
# apt-cache policy libhicn
# libhicn:
# Installed: (none)
# Candidate: 20.05-11-release
# Version table:
# 20.05-11-release 500
#
# The first version candidate is printed twice.
# So we need to exclude the "Candidate: 20.05-11-release" (+1).
# Also `tail -n +M` starts to print from the Mth line, being 1 the first line.
# So to exclude the Mth line an additional +1 is needed.
VERSIONS="$(echo ${OUTPUT} | grep -E -o ${VERSION_REGEX} | tail -n +$((N_PACKAGES + 2)))"
for version in ${VERSIONS}; do
if ! check_version_whitelist ${version}; then
OUTPUT_LIST+="${package}_${version}_${ARCH}.deb "
fi
done
done
echo ${OUTPUT_LIST}
}
promote_attic_repo_ubuntu () {
FACTER_LSBNAME=$(/usr/bin/facter lsbdistcodename)
for package in ${@}; do
echo package_cloud promote ${PCIO_CO}/${STREAM}/ubuntu/${FACTER_LSBNAME}/main/ \
${package} ${PCIO_CO}/attic/ubuntu/${FACTER_LSBNAME}/main/
package_cloud promote ${PCIO_CO}/${STREAM}/ubuntu/${FACTER_LSBNAME}/main/ \
${package} ${PCIO_CO}/attic/ubuntu/${FACTER_LSBNAME}/main/
done
}
promote_to_attic_repo () {
${FUNCTIONS["promote_attic_repo"]} ${@}
}
setup_fdio_repo () {
case "${FACTER_OS}" in
Ubuntu)
curl -s ${PACKAGECLOUD_REPO_DEB} | sudo bash
FUNCTIONS["package_blacklist"]="build_package_blacklist_ubuntu"
FUNCTIONS["promote_attic_repo"]="promote_attic_repo_ubuntu"
PACKAGE_LIST="${PACKAGE_LIST_COMMON} ${PACKAGE_LIST_UBUNTU}"
;;
*)
echo_err "Distribution ${FACTER_OS} is not supported."
;;
esac
}
# Params
# $1: Package list
build_package_blacklist () {
${FUNCTIONS["package_blacklist"]} ${@}
}
setup_fdio_repo
PACKAGES_TO_PROMOTE=$(build_package_blacklist ${PACKAGE_LIST})
promote_to_attic_repo ${PACKAGES_TO_PROMOTE}
|