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
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
package_exists_in_index() {
|
package_index_match_filenames() {
|
||||||
local package_name="$1"
|
local package_name="$1"
|
||||||
local package_version="$2"
|
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 {
|
BEGIN {
|
||||||
RS = ""
|
RS = ""
|
||||||
FS = "\n"
|
FS = "\n"
|
||||||
@@ -142,6 +146,9 @@ package_exists_in_index() {
|
|||||||
{
|
{
|
||||||
found_package = 0
|
found_package = 0
|
||||||
found_version = 0
|
found_version = 0
|
||||||
|
found_architecture = 0
|
||||||
|
filename = ""
|
||||||
|
|
||||||
for (i = 1; i <= NF; i++) {
|
for (i = 1; i <= NF; i++) {
|
||||||
if ($i == "Package: " target_package) {
|
if ($i == "Package: " target_package) {
|
||||||
found_package = 1
|
found_package = 1
|
||||||
@@ -149,10 +156,17 @@ package_exists_in_index() {
|
|||||||
if ($i == "Version: " target_version) {
|
if ($i == "Version: " target_version) {
|
||||||
found_version = 1
|
found_version = 1
|
||||||
}
|
}
|
||||||
|
if ($i == "Architecture: " target_architecture) {
|
||||||
|
found_architecture = 1
|
||||||
|
}
|
||||||
|
if ($i ~ /^Filename: /) {
|
||||||
|
filename = substr($i, 11)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (found_package && found_version) {
|
|
||||||
|
if (found_package && found_version && found_architecture && filename != "") {
|
||||||
|
print filename
|
||||||
matched = 1
|
matched = 1
|
||||||
exit
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END {
|
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() {
|
write_metadata() {
|
||||||
local skip_build="$1"
|
local skip_build="$1"
|
||||||
local package_name="$2"
|
local package_name="$2"
|
||||||
@@ -212,18 +256,31 @@ package_version="$(determine_hyperion_version "$hyperion_dir")"
|
|||||||
log "Checking Gitea for $package_name/$package_version ($package_distribution/$package_component/$package_architecture)"
|
log "Checking Gitea for $package_name/$package_version ($package_distribution/$package_component/$package_architecture)"
|
||||||
package_index_file="$(mktemp)"
|
package_index_file="$(mktemp)"
|
||||||
have_package_index=false
|
have_package_index=false
|
||||||
|
matched_package_filenames=()
|
||||||
|
|
||||||
if fetch_package_index >"$package_index_file"; then
|
if fetch_package_index >"$package_index_file"; then
|
||||||
have_package_index=true
|
have_package_index=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$have_package_index" == "true" ]] && package_exists_in_index "$package_name" "$package_version" <"$package_index_file"; then
|
if [[ "$have_package_index" == "true" ]]; then
|
||||||
rm -f "$package_index_file"
|
while IFS= read -r package_filename; do
|
||||||
write_metadata true "$package_name" "$package_version"
|
matched_package_filenames+=("$package_filename")
|
||||||
log "Package already exists in registry; build will be skipped"
|
done < <(
|
||||||
exit 0
|
package_index_match_filenames "$package_name" "$package_version" "$package_architecture" <"$package_index_file"
|
||||||
|
)
|
||||||
fi
|
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
|
||||||
|
|
||||||
|
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"
|
rm -f "$package_index_file"
|
||||||
write_metadata false "$package_name" "$package_version"
|
write_metadata false "$package_name" "$package_version"
|
||||||
log "Package does not exist in registry; build will continue"
|
log "Package does not exist in registry; build will continue"
|
||||||
|
|||||||
Reference in New Issue
Block a user