95 lines
2.6 KiB
Bash
Executable File
95 lines
2.6 KiB
Bash
Executable File
#!/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"
|