67 lines
2.5 KiB
Bash
Executable File
67 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
source /opt/rust-package-builder/scripts/lib.sh
|
|
|
|
: "${SOURCE_REPO:?SOURCE_REPO is required}"
|
|
SOURCE_BRANCH=${SOURCE_BRANCH:-master}
|
|
: "${REPOSITORY_URL:?REPOSITORY_URL is required}"
|
|
POLL_INTERVAL=${POLL_INTERVAL:-300}
|
|
PACKAGE_RELEASE=${PACKAGE_RELEASE:-auto}
|
|
|
|
[[ "$POLL_INTERVAL" =~ ^[0-9]+$ ]] || fatal "POLL_INTERVAL must be an integer"
|
|
(( POLL_INTERVAL >= 1 )) || fatal "POLL_INTERVAL must be >= 1"
|
|
[[ "$PACKAGE_RELEASE" == "auto" || "$PACKAGE_RELEASE" =~ ^[1-9][0-9]*$ ]] || fatal "PACKAGE_RELEASE must be auto or a positive integer"
|
|
|
|
export DATA_DIR=${DATA_DIR:-/var/lib/package-builder}
|
|
export SOURCE_REPO SOURCE_BRANCH REPOSITORY_URL POLL_INTERVAL
|
|
export REPO_DISTRIBUTION=${REPO_DISTRIBUTION:-stable}
|
|
export REPO_COMPONENT=${REPO_COMPONENT:-main}
|
|
export PACKAGE_RELEASE
|
|
export MAX_GLIBC_VERSION=${MAX_GLIBC_VERSION:-2.34}
|
|
export GPG_PRIVATE_KEY_FILE=${GPG_PRIVATE_KEY_FILE:-/run/secrets/gpg/private-key.asc}
|
|
export GPG_PASSPHRASE_FILE=${GPG_PASSPHRASE_FILE:-/run/secrets/gpg/passphrase}
|
|
export GNUPGHOME=${GNUPGHOME:-/run/package-builder/gnupg}
|
|
export CARGO_HOME="$DATA_DIR/cargo"
|
|
export CARGO_TARGET_DIR="$DATA_DIR/cargo/target"
|
|
|
|
for cmd in git cargo rustc nfpm aptly createrepo_c gpg rsync python3 python3.11 objdump ar rpm; do
|
|
require_cmd "$cmd"
|
|
done
|
|
|
|
mkdir -p \
|
|
"$DATA_DIR/repository/releases" \
|
|
"$DATA_DIR/state" \
|
|
"$DATA_DIR/cargo" \
|
|
"$DATA_DIR/work" \
|
|
"$DATA_DIR/packages/rpm/x86_64" \
|
|
"$DATA_DIR/packages/deb"
|
|
mkdir -p "$GNUPGHOME"
|
|
chmod 0700 "$GNUPGHOME"
|
|
|
|
[[ -r "$GPG_PRIVATE_KEY_FILE" ]] || fatal "GPG private key not found: $GPG_PRIVATE_KEY_FILE"
|
|
log "importing GPG signing key"
|
|
gpg --batch --import "$GPG_PRIVATE_KEY_FILE" >/dev/null 2>&1 || fatal "cannot import GPG key"
|
|
|
|
if [[ -z "${GPG_KEY_ID:-}" ]]; then
|
|
GPG_KEY_ID=$(gpg --batch --with-colons --list-secret-keys | awk -F: '/^sec:/ && !seen_sec {seen_sec=1; next} seen_sec && /^fpr:/ && first=="" {first=$10} END {print first}')
|
|
fi
|
|
[[ -n "$GPG_KEY_ID" ]] || fatal "cannot determine GPG key fingerprint"
|
|
export GPG_KEY_ID
|
|
|
|
if [[ -r "$GPG_PASSPHRASE_FILE" ]]; then
|
|
NFPM_PASSPHRASE=$(cat "$GPG_PASSPHRASE_FILE")
|
|
export NFPM_PASSPHRASE
|
|
else
|
|
unset NFPM_PASSPHRASE || true
|
|
fi
|
|
|
|
/opt/rust-package-builder/scripts/init-storage.sh
|
|
|
|
log "builder started: branch=$SOURCE_BRANCH interval=${POLL_INTERVAL}s"
|
|
while true; do
|
|
if ! /opt/rust-package-builder/scripts/check-and-build.sh; then
|
|
log "ERROR: build cycle failed; published repository was not switched"
|
|
fi
|
|
sleep "$POLL_INTERVAL"
|
|
done
|