Skip to content

Commit c914521

Browse files
authored
fix: prune stale package artifacts (#6)
1 parent 4a8eafe commit c914521

2 files changed

Lines changed: 88 additions & 4 deletions

File tree

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:slim
22

33
RUN apt-get update \
4-
&& apt-get install -y --no-install-recommends aptly createrepo-c gnupg ca-certificates dpkg-dev \
4+
&& apt-get install -y --no-install-recommends aptly createrepo-c gnupg ca-certificates dpkg-dev rpm \
55
&& rm -rf /var/lib/apt/lists/*

scripts/publish-package-repo.sh

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,33 @@ PY
111111

112112
package_file_name() {
113113
local package_file="$1"
114+
local package_name=""
115+
local file_name file_stem
114116

115117
case "$package_file" in
116118
*.deb)
117-
dpkg-deb -f "$package_file" Package 2>/dev/null || true
119+
package_name="$(dpkg-deb -f "$package_file" Package 2>/dev/null || true)"
118120
;;
119121
*.rpm)
120-
rpm -qp --qf '%{NAME}\n' "$package_file" 2>/dev/null || true
122+
package_name="$(rpm -qp --qf '%{NAME}\n' "$package_file" 2>/dev/null || true)"
123+
;;
124+
esac
125+
126+
if [ -n "$package_name" ]; then
127+
printf '%s\n' "$package_name"
128+
return 0
129+
fi
130+
131+
file_name="${package_file##*/}"
132+
case "$file_name" in
133+
*.deb)
134+
printf '%s\n' "${file_name%%_*}"
135+
;;
136+
*.rpm)
137+
file_stem="${file_name%.rpm}"
138+
file_stem="${file_stem%.*}"
139+
file_stem="${file_stem%-*}"
140+
printf '%s\n' "${file_stem%-[0-9]*}"
121141
;;
122142
esac
123143
}
@@ -126,21 +146,85 @@ stage_package_artifacts() {
126146
find "$DIST_DIR" -maxdepth 1 -type f \( -name "*.deb" -o -name "*.rpm" \) -exec cp {} "$PACKAGE_REPO_STAGE_DIR"/ \;
127147
}
128148

149+
current_package_names=()
150+
151+
append_current_package_name() {
152+
local package_name="$1"
153+
local current_package_name
154+
155+
[ -n "$package_name" ] || return 0
156+
157+
for current_package_name in "${current_package_names[@]}"; do
158+
if [ "$current_package_name" = "$package_name" ]; then
159+
return 0
160+
fi
161+
done
162+
163+
current_package_names+=("$package_name")
164+
}
165+
166+
collect_current_package_names() {
167+
local package_file
168+
169+
current_package_names=()
170+
171+
while IFS= read -r -d '' package_file; do
172+
append_current_package_name "$(package_file_name "$package_file")"
173+
done < <(find "$DIST_DIR" -maxdepth 1 -type f \( -name "*.deb" -o -name "*.rpm" \) -print0)
174+
175+
if [ ${#current_package_names[@]} -eq 0 ]; then
176+
append_current_package_name "$PACKAGE_NAME"
177+
fi
178+
}
179+
180+
is_current_package_name() {
181+
local package_name="$1"
182+
local current_package_name
183+
184+
[ -n "$package_name" ] || return 1
185+
186+
for current_package_name in "${current_package_names[@]}"; do
187+
if [ "$current_package_name" = "$package_name" ]; then
188+
return 0
189+
fi
190+
done
191+
192+
return 1
193+
}
194+
129195
prune_stage_package_history() {
196+
local staged_package package_name
197+
198+
collect_current_package_names
199+
130200
while IFS= read -r -d '' staged_package; do
131-
if [ "$(package_file_name "$staged_package")" = "$PACKAGE_NAME" ]; then
201+
package_name="$(package_file_name "$staged_package")"
202+
if is_current_package_name "$package_name"; then
132203
rm -f "$staged_package"
133204
fi
134205
done < <(find "$PACKAGE_REPO_STAGE_DIR" -type f \( -name "*.deb" -o -name "*.rpm" \) -print0)
135206
}
136207

208+
prune_stage_release_history() {
209+
local entry release_name
210+
211+
for entry in "$PACKAGE_REPO_STAGE_DIR"/*; do
212+
[ -d "$entry" ] || continue
213+
release_name="${entry##*/}"
214+
if [[ "$release_name" =~ ^v?[0-9]+(\.[0-9]+){1,2}([-.+~][A-Za-z0-9._~+-]+)?$ ]]; then
215+
rm -rf "$entry"
216+
fi
217+
done
218+
}
219+
137220
acquire_lock
138221

139222
gcloud storage rsync \
140223
--recursive \
141224
"$destination" \
142225
"$PACKAGE_REPO_STAGE_DIR" >/dev/null 2>&1 || true
143226

227+
prune_stage_release_history
144228
prune_stage_package_history
145229
stage_package_artifacts
146230

0 commit comments

Comments
 (0)