Add Woodpecker Debian package pipeline
Some checks failed
ci/woodpecker/manual/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/manual/woodpecker Pipeline failed
This commit is contained in:
94
scripts/ci/upload-package.sh
Executable file
94
scripts/ci/upload-package.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
source "$(cd "$(dirname "$0")/.." && pwd)/lib/common.sh"
|
||||
|
||||
require_cmd curl
|
||||
require_env GITEA_PACKAGE_TOKEN
|
||||
|
||||
work_root="$(ci_work_root)"
|
||||
metadata_file="$work_root/artifacts/package.env"
|
||||
|
||||
[[ -f "$metadata_file" ]] || die "Package metadata file not found: $metadata_file"
|
||||
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
. "$metadata_file"
|
||||
set +a
|
||||
|
||||
owner="${GITEA_PACKAGE_OWNER:-${CI_REPO_OWNER:-}}"
|
||||
username="${GITEA_PACKAGE_USERNAME:-${CI_REPO_OWNER:-}}"
|
||||
base_url="${GITEA_BASE_URL:-$DEFAULT_GITEA_BASE_URL}"
|
||||
|
||||
[[ -n "$owner" ]] || die "Unable to determine Gitea package owner. Set GITEA_PACKAGE_OWNER or CI_REPO_OWNER."
|
||||
[[ -n "$username" ]] || die "Unable to determine Gitea upload username. Set GITEA_PACKAGE_USERNAME or CI_REPO_OWNER."
|
||||
[[ -f "${PACKAGE_FILE:-}" ]] || die "Built package file not found: ${PACKAGE_FILE:-unset}"
|
||||
|
||||
upload_url="$base_url/api/packages/$owner/debian/pool/$PACKAGE_DISTRIBUTION/$PACKAGE_COMPONENT/upload"
|
||||
upload_response_file="$(mktemp)"
|
||||
|
||||
urlencode() {
|
||||
local input="$1"
|
||||
local length="${#input}"
|
||||
local index char encoded=""
|
||||
|
||||
for ((index = 0; index < length; index++)); do
|
||||
char="${input:index:1}"
|
||||
case "$char" in
|
||||
[a-zA-Z0-9._~-]) encoded+="$char" ;;
|
||||
*)
|
||||
printf -v char '%%%02X' "'$char"
|
||||
encoded+="$char"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
printf '%s\n' "$encoded"
|
||||
}
|
||||
|
||||
upload_package() {
|
||||
curl \
|
||||
--silent \
|
||||
--show-error \
|
||||
--output "$upload_response_file" \
|
||||
--write-out '%{http_code}' \
|
||||
--user "$username:$GITEA_PACKAGE_TOKEN" \
|
||||
--upload-file "$PACKAGE_FILE" \
|
||||
"$upload_url"
|
||||
}
|
||||
|
||||
log "Uploading ${PACKAGE_FILE##*/} to $upload_url"
|
||||
status_code="$(upload_package)"
|
||||
|
||||
if [[ "$status_code" == "409" ]]; then
|
||||
delete_url="$base_url/api/packages/$owner/debian/pool/$PACKAGE_DISTRIBUTION/$PACKAGE_COMPONENT/$(urlencode "$PACKAGE_NAME")/$(urlencode "$PACKAGE_VERSION")/$(urlencode "$PACKAGE_ARCHITECTURE")"
|
||||
|
||||
log "Package already exists, deleting current $PACKAGE_NAME/$PACKAGE_VERSION/$PACKAGE_ARCHITECTURE before retry"
|
||||
delete_status="$(
|
||||
curl \
|
||||
--silent \
|
||||
--show-error \
|
||||
--output "$upload_response_file" \
|
||||
--write-out '%{http_code}' \
|
||||
--user "$username:$GITEA_PACKAGE_TOKEN" \
|
||||
--request DELETE \
|
||||
"$delete_url"
|
||||
)"
|
||||
|
||||
if [[ "$delete_status" != "204" ]]; then
|
||||
cat "$upload_response_file" >&2
|
||||
die "Package delete failed with HTTP $delete_status"
|
||||
fi
|
||||
|
||||
status_code="$(upload_package)"
|
||||
fi
|
||||
|
||||
if [[ "$status_code" != "201" ]]; then
|
||||
cat "$upload_response_file" >&2
|
||||
die "Package upload failed with HTTP $status_code"
|
||||
fi
|
||||
|
||||
rm -f "$upload_response_file"
|
||||
|
||||
log "Upload finished"
|
||||
Reference in New Issue
Block a user