Verify package artifacts before skipping build
All checks were successful
ci/woodpecker/push/woodpecker/1 Pipeline was successful
ci/woodpecker/push/woodpecker/5 Pipeline was successful
ci/woodpecker/push/woodpecker/2 Pipeline was successful
ci/woodpecker/push/woodpecker/4 Pipeline was successful
ci/woodpecker/push/woodpecker/6 Pipeline was successful
ci/woodpecker/push/woodpecker/3 Pipeline was successful
ci/woodpecker/manual/woodpecker/3 Pipeline was successful
ci/woodpecker/manual/woodpecker/4 Pipeline was successful
ci/woodpecker/manual/woodpecker/1 Pipeline was successful
ci/woodpecker/manual/woodpecker/2 Pipeline was successful
ci/woodpecker/manual/woodpecker/5 Pipeline was successful
ci/woodpecker/manual/woodpecker/6 Pipeline was successful
ci/woodpecker/cron/woodpecker/6 Pipeline was successful
ci/woodpecker/cron/woodpecker/4 Pipeline was successful
ci/woodpecker/cron/woodpecker/1 Pipeline was successful
ci/woodpecker/cron/woodpecker/5 Pipeline was successful
ci/woodpecker/cron/woodpecker/2 Pipeline was successful
ci/woodpecker/cron/woodpecker/3 Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker/1 Pipeline was successful
ci/woodpecker/push/woodpecker/5 Pipeline was successful
ci/woodpecker/push/woodpecker/2 Pipeline was successful
ci/woodpecker/push/woodpecker/4 Pipeline was successful
ci/woodpecker/push/woodpecker/6 Pipeline was successful
ci/woodpecker/push/woodpecker/3 Pipeline was successful
ci/woodpecker/manual/woodpecker/3 Pipeline was successful
ci/woodpecker/manual/woodpecker/4 Pipeline was successful
ci/woodpecker/manual/woodpecker/1 Pipeline was successful
ci/woodpecker/manual/woodpecker/2 Pipeline was successful
ci/woodpecker/manual/woodpecker/5 Pipeline was successful
ci/woodpecker/manual/woodpecker/6 Pipeline was successful
ci/woodpecker/cron/woodpecker/6 Pipeline was successful
ci/woodpecker/cron/woodpecker/4 Pipeline was successful
ci/woodpecker/cron/woodpecker/1 Pipeline was successful
ci/woodpecker/cron/woodpecker/5 Pipeline was successful
ci/woodpecker/cron/woodpecker/2 Pipeline was successful
ci/woodpecker/cron/woodpecker/3 Pipeline was successful
This commit is contained in:
@@ -130,11 +130,15 @@ fetch_package_index() {
|
||||
return 1
|
||||
}
|
||||
|
||||
package_exists_in_index() {
|
||||
package_index_match_filenames() {
|
||||
local package_name="$1"
|
||||
local package_version="$2"
|
||||
local package_architecture="$3"
|
||||
|
||||
awk -v target_package="$package_name" -v target_version="$package_version" '
|
||||
awk \
|
||||
-v target_package="$package_name" \
|
||||
-v target_version="$package_version" \
|
||||
-v target_architecture="$package_architecture" '
|
||||
BEGIN {
|
||||
RS = ""
|
||||
FS = "\n"
|
||||
@@ -142,6 +146,9 @@ package_exists_in_index() {
|
||||
{
|
||||
found_package = 0
|
||||
found_version = 0
|
||||
found_architecture = 0
|
||||
filename = ""
|
||||
|
||||
for (i = 1; i <= NF; i++) {
|
||||
if ($i == "Package: " target_package) {
|
||||
found_package = 1
|
||||
@@ -149,10 +156,17 @@ package_exists_in_index() {
|
||||
if ($i == "Version: " target_version) {
|
||||
found_version = 1
|
||||
}
|
||||
if ($i == "Architecture: " target_architecture) {
|
||||
found_architecture = 1
|
||||
}
|
||||
if (found_package && found_version) {
|
||||
if ($i ~ /^Filename: /) {
|
||||
filename = substr($i, 11)
|
||||
}
|
||||
}
|
||||
|
||||
if (found_package && found_version && found_architecture && filename != "") {
|
||||
print filename
|
||||
matched = 1
|
||||
exit
|
||||
}
|
||||
}
|
||||
END {
|
||||
@@ -164,6 +178,36 @@ package_exists_in_index() {
|
||||
'
|
||||
}
|
||||
|
||||
package_file_exists() {
|
||||
local package_filename="${1#/}"
|
||||
local url="$base_url/api/packages/$owner/debian/$package_filename"
|
||||
local status_code
|
||||
|
||||
status_code="$(
|
||||
curl \
|
||||
--silent \
|
||||
--show-error \
|
||||
--location \
|
||||
--output /dev/null \
|
||||
--write-out '%{http_code}' \
|
||||
--user "$username:$GITEA_PACKAGE_TOKEN" \
|
||||
--range 0-0 \
|
||||
"$url"
|
||||
)"
|
||||
|
||||
case "$status_code" in
|
||||
200|206)
|
||||
return 0
|
||||
;;
|
||||
404)
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
die "Package file probe failed with HTTP $status_code for $url"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
write_metadata() {
|
||||
local skip_build="$1"
|
||||
local package_name="$2"
|
||||
@@ -212,17 +256,30 @@ package_version="$(determine_hyperion_version "$hyperion_dir")"
|
||||
log "Checking Gitea for $package_name/$package_version ($package_distribution/$package_component/$package_architecture)"
|
||||
package_index_file="$(mktemp)"
|
||||
have_package_index=false
|
||||
matched_package_filenames=()
|
||||
|
||||
if fetch_package_index >"$package_index_file"; then
|
||||
have_package_index=true
|
||||
fi
|
||||
|
||||
if [[ "$have_package_index" == "true" ]] && package_exists_in_index "$package_name" "$package_version" <"$package_index_file"; then
|
||||
if [[ "$have_package_index" == "true" ]]; then
|
||||
while IFS= read -r package_filename; do
|
||||
matched_package_filenames+=("$package_filename")
|
||||
done < <(
|
||||
package_index_match_filenames "$package_name" "$package_version" "$package_architecture" <"$package_index_file"
|
||||
)
|
||||
fi
|
||||
|
||||
for package_filename in "${matched_package_filenames[@]}"; do
|
||||
if package_file_exists "$package_filename"; then
|
||||
rm -f "$package_index_file"
|
||||
write_metadata true "$package_name" "$package_version"
|
||||
log "Package already exists in registry; build will be skipped"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
log "Package index entry found for $package_name/$package_version, but artifact $package_filename is missing; build will continue"
|
||||
done
|
||||
|
||||
rm -f "$package_index_file"
|
||||
write_metadata false "$package_name" "$package_version"
|
||||
|
||||
Reference in New Issue
Block a user