#!/usr/bin/env bash # ============================================================================== # nx9-wg Production Release Packager # ============================================================================== # Generates self-contained, reproducible release archives (.tar.gz and .tar.xz) # containing binary, service units, configuration templates, documentation, # licenses, and installation scripts. # ============================================================================== set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" VERSION="$(sed -n '/^[[:space:]]*\[workspace\.package\]/,/^[[:space:]]*\[/ { /^[[:space:]]*version[[:space:]]*=/ { s/.*= *"\([^"]*\)".*/\1/p; q; } }' "${ROOT_DIR}/Cargo.toml")" if [[ -z "${VERSION}" ]]; then echo "ERROR: unable to determine workspace package version from Cargo.toml" >&2 exit 1 fi ARCH="$(uname -m)" OS="linux" PACKAGE_NAME="nx9-wg-v${VERSION}-${OS}-${ARCH}" DIST_DIR="${ROOT_DIR}/target/dist" STAGE_DIR="${DIST_DIR}/${PACKAGE_NAME}" echo "=================================================================" echo " Packaging nx9-wg Release: ${PACKAGE_NAME}" echo " Workspace version: ${VERSION}" echo "=================================================================" # 1. Ensure release binary is compiled if [[ ! -f "${ROOT_DIR}/target/release/nx9-wg" ]]; then echo "Building release binary..." (cd "${ROOT_DIR}" && cargo build --release --bin nx9-wg) fi # 2. Prepare staging directory rm -rf "${STAGE_DIR}" mkdir -p "${STAGE_DIR}/docs" # 3. Copy release artifacts echo "Copying release artifacts..." install -m 0755 "${ROOT_DIR}/target/release/nx9-wg" "${STAGE_DIR}/nx9-wg" install -m 0644 "${ROOT_DIR}/nx9-wg.service" "${STAGE_DIR}/nx9-wg.service" install -m 0644 "${ROOT_DIR}/config.example.toml" "${STAGE_DIR}/config.example.toml" install -m 0755 "${ROOT_DIR}/scripts/install.sh" "${STAGE_DIR}/install.sh" install -m 0755 "${ROOT_DIR}/scripts/uninstall.sh" "${STAGE_DIR}/uninstall.sh" install -m 0644 "${ROOT_DIR}/README.md" "${STAGE_DIR}/README.md" install -m 0644 "${ROOT_DIR}/LICENSE-MIT" "${STAGE_DIR}/LICENSE-MIT" install -m 0644 "${ROOT_DIR}/LICENSE-APACHE" "${STAGE_DIR}/LICENSE-APACHE" install -m 0644 "${ROOT_DIR}/CHANGELOG.md" "${STAGE_DIR}/CHANGELOG.md" # Copy documentation cp -r "${ROOT_DIR}/docs/"* "${STAGE_DIR}/docs/" # 4. Generate Archive Packages echo "Creating .tar.gz archive..." (cd "${DIST_DIR}" && tar -czf "${PACKAGE_NAME}.tar.gz" "${PACKAGE_NAME}") echo "Creating .tar.xz archive..." (cd "${DIST_DIR}" && tar -cJf "${PACKAGE_NAME}.tar.xz" "${PACKAGE_NAME}") # 5. Generate Checksums echo "Generating SHA256 checksums..." (cd "${DIST_DIR}" && sha256sum "${PACKAGE_NAME}.tar.gz" "${PACKAGE_NAME}.tar.xz" > "${PACKAGE_NAME}.sha256") # 6. Cleanup Staging Directory rm -rf "${STAGE_DIR}" echo "=================================================================" echo " Release Packaging Complete!" echo " Archives located in ${DIST_DIR}:" ls -lh "${DIST_DIR}/${PACKAGE_NAME}".* echo "================================================================="