76 lines
3.1 KiB
Bash
76 lines
3.1 KiB
Bash
#!/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 "================================================================="
|