#!/usr/bin/env bash set -Eeuo pipefail source /opt/rust-package-builder/scripts/lib.sh : "${SHA:?SHA required}" : "${SRC:?SRC required}" : "${OUT:?OUT required}" : "${VERSION:?VERSION required}" : "${BINARY_NAME:?BINARY_NAME required}" : "${SOURCE_REVISION:?SOURCE_REVISION required}" REPOSITORY="$DATA_DIR/repository" BRANCH_RELEASE_ID="$(date -u '+%Y%m%dT%H%M%SZ')-${SHORT_SHA}-opnsense" RELEASE_DIR="$REPOSITORY/releases/$BRANCH_RELEASE_ID" PUBLISHED=0 cleanup_opnsense_release() { if [[ "$PUBLISHED" != "1" && -d "$RELEASE_DIR" ]]; then rm -rf "$RELEASE_DIR" fi } trap cleanup_opnsense_release EXIT FREEBSD_BINARY="$OUT/rust-proxy-freebsd" /opt/rust-package-builder/scripts/build-opnsense.sh "$SRC" "$FREEBSD_BINARY" "$BINARY_NAME" "$WORK" if [[ "$SOURCE_REVISION" == "0" ]]; then OPNSENSE_PACKAGE_VERSION="$VERSION" else OPNSENSE_PACKAGE_VERSION="${VERSION}_${SOURCE_REVISION}" fi OPNSENSE_PACKAGE_FILE="$OUT/os-rustproxy-${OPNSENSE_PACKAGE_VERSION}.pkg" /opt/rust-package-builder/scripts/package-opnsense.sh \ "$SRC" "$FREEBSD_BINARY" "$OPNSENSE_PACKAGE_FILE" "$OPNSENSE_PACKAGE_VERSION" mkdir -p "$RELEASE_DIR/apt" "$RELEASE_DIR/rpm/x86_64" "$RELEASE_DIR/opnsense" CURRENT_TARGET="" if [[ -L "$REPOSITORY/current" ]]; then CURRENT_LINK=$(readlink "$REPOSITORY/current") CURRENT_TARGET="$REPOSITORY/$CURRENT_LINK" fi log "staging OPNsense repository snapshot" if [[ -n "$CURRENT_TARGET" ]]; then for component in apt rpm opnsense; do if [[ -d "$CURRENT_TARGET/$component" ]]; then rsync -a --delete --link-dest="$CURRENT_TARGET/$component"/ "$CURRENT_TARGET/$component"/ "$RELEASE_DIR/$component"/ fi done for file in repo-key.gpg index.html LINUX-BUILD-INFO.txt; do if [[ -f "$CURRENT_TARGET/$file" ]]; then cp -a "$CURRENT_TARGET/$file" "$RELEASE_DIR/$file" fi done fi OPNSENSE_PACKAGE_DIR="$RELEASE_DIR/opnsense/$OPNSENSE_ABI/amd64" mkdir -p "$OPNSENSE_PACKAGE_DIR" rm -f \ "$OPNSENSE_PACKAGE_DIR/$(basename "$OPNSENSE_PACKAGE_FILE")" \ "$RELEASE_DIR/opnsense/RustProxy.conf" \ "$RELEASE_DIR/opnsense/os-rustproxy-latest.pkg" \ "$RELEASE_DIR/opnsense/SHA256" \ "$RELEASE_DIR/opnsense/BUILD-INFO.txt" \ "$RELEASE_DIR/opnsense/index.html" cp -f "$OPNSENSE_PACKAGE_FILE" "$OPNSENSE_PACKAGE_DIR/" /opt/rust-package-builder/scripts/generate-opnsense-repo.py "$RELEASE_DIR/opnsense" --retention "$OPNSENSE_RETENTION" cat > "$RELEASE_DIR/opnsense/RustProxy.conf" < "$RELEASE_DIR/opnsense/SHA256" cat > "$RELEASE_DIR/opnsense/BUILD-INFO.txt" </dev/null || fatal "invalid OPNsense packagesite.pkg" bsdtar -xOf "$OPNSENSE_PACKAGE_DIR/$(basename "$OPNSENSE_PACKAGE_FILE")" +COMPACT_MANIFEST >/dev/null || fatal "invalid OPNsense package manifest" log "publishing OPNsense repository branch" rm -f "$REPOSITORY/current.new" ln -s "releases/$BRANCH_RELEASE_ID" "$REPOSITORY/current.new" mv -Tf "$REPOSITORY/current.new" "$REPOSITORY/current" PUBLISHED=1 printf '%s\n' "$SHA" | atomic_write "$DATA_DIR/state/last_opnsense_commit" printf '%s\n' "$OPNSENSE_PACKAGE_VERSION" | atomic_write "$DATA_DIR/state/last_opnsense_package_version" printf '%s\n' "$BRANCH_RELEASE_ID" | atomic_write "$DATA_DIR/state/last_opnsense_release" printf '%s\n' "$BRANCH_RELEASE_ID" | atomic_write "$DATA_DIR/state/last_release" log "OPNsense publication completed: package=$OPNSENSE_PACKAGE_VERSION commit=$SHA"