#!/usr/bin/env bash set -euo pipefail # Build and verify a production release of Open Tasks REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" export PYTHONPATH="${REPO_ROOT}/src:${PYTHONPATH:-}" VERSION="" OUTPUT_DIR="${REPO_ROOT}/dist" while [[ $# -gt 0 ]]; do case "$1" in --version|-v) VERSION="$2" shift 2 ;; --output-dir|-o) OUTPUT_DIR="$2" shift 2 ;; *) if [ -z "$VERSION" ]; then VERSION="$1" fi shift ;; esac done if [ -z "$VERSION" ]; then VERSION=$(python3 -c "import ot; print(ot.__version__)") fi mkdir -p "$OUTPUT_DIR" echo "=== 1. Running Test Suite ===" python3 -m unittest discover -s "${REPO_ROOT}/tests" echo "=== 2. Building Release Artifact (v${VERSION}) ===" python3 -m ot.packaging \ --version "$VERSION" \ --src-dir "${REPO_ROOT}/src" \ --output-dir "$OUTPUT_DIR" \ --artifact-name "ot-${VERSION}.zipapp" # Also maintain canonical ot.zipapp copy in dist/ cp "${OUTPUT_DIR}/ot-${VERSION}.zipapp" "${OUTPUT_DIR}/ot.zipapp" echo "=== 3. Generating SHA256 Checksums ===" cd "$OUTPUT_DIR" if command -v sha256sum >/dev/null 2>&1; then sha256sum "ot-${VERSION}.zipapp" "ot.zipapp" > SHA256SUMS elif command -v shasum >/dev/null 2>&1; then shasum -a 256 "ot-${VERSION}.zipapp" "ot.zipapp" > SHA256SUMS fi echo "=== 4. Validating Built Release Artifact ===" python3 "${OUTPUT_DIR}/ot-${VERSION}.zipapp" version echo "==========================================" echo "Release Pipeline completed successfully for v${VERSION}!" echo "Artifacts created in ${OUTPUT_DIR}:" ls -la "${OUTPUT_DIR}"