Arch Builder INIT
This commit is contained in:
Executable
+50
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
: "${NEXSPENCE_URL:?NEXSPENCE_URL is required}"
|
||||
: "${NEXSPENCE_TOKEN:?NEXSPENCE_TOKEN is required}"
|
||||
: "${NEXSPENCE_REPOSITORY:?NEXSPENCE_REPOSITORY is required}"
|
||||
|
||||
pkg="${1:?package path required}"
|
||||
repo_name="${NEXSPENCE_REPOSITORY}"
|
||||
base="${NEXSPENCE_URL%/}/repository/${repo_name}/x86_64"
|
||||
|
||||
tmp="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmp"' EXIT
|
||||
|
||||
cp "$pkg" "$tmp/"
|
||||
pkg_file="$(basename "$pkg")"
|
||||
|
||||
echo "==> Creating Arch repository database"
|
||||
repo-add --remove "$tmp/${repo_name}.db.tar.zst" "$tmp/$pkg_file"
|
||||
repo-add --remove "$tmp/${repo_name}.files.tar.zst" "$tmp/$pkg_file"
|
||||
|
||||
# Nexspence Raw is HTTP object storage, so symlinks created by repo-add cannot
|
||||
# be relied upon. Create real .db/.files files as well.
|
||||
zstd -q -d -c "$tmp/${repo_name}.db.tar.zst" > "$tmp/${repo_name}.db"
|
||||
zstd -q -d -c "$tmp/${repo_name}.files.tar.zst" > "$tmp/${repo_name}.files"
|
||||
|
||||
upload() {
|
||||
local file="$1"
|
||||
local remote="$base/$(basename "$file")"
|
||||
|
||||
echo "==> PUT $(basename "$file")"
|
||||
curl --fail-with-body \
|
||||
--retry 5 \
|
||||
--retry-all-errors \
|
||||
--connect-timeout 20 \
|
||||
--max-time 900 \
|
||||
-X PUT \
|
||||
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
|
||||
--upload-file "$file" \
|
||||
"$remote"
|
||||
}
|
||||
|
||||
upload "$tmp/$pkg_file"
|
||||
upload "$tmp/${repo_name}.db"
|
||||
upload "$tmp/${repo_name}.db.tar.zst"
|
||||
upload "$tmp/${repo_name}.files"
|
||||
upload "$tmp/${repo_name}.files.tar.zst"
|
||||
|
||||
echo "==> Nexspence publication complete"
|
||||
echo " ${base}/"
|
||||
Reference in New Issue
Block a user