name: Build using Docker on: push: branches: ["dev", "candidate", "release", "jshooks"] pull_request: branches: ["dev", "candidate", "release", "jshooks"] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: DEBUG_BUILD_CONTAINERS_AFTER_CLEANUP: 1 jobs: checkout: runs-on: [self-hosted, vanity] outputs: checkout_path: ${{ steps.vars.outputs.checkout_path }} steps: - name: Prepare checkout path id: vars run: | SAFE_BRANCH=$(echo "${{ github.ref_name }}" | sed -e 's/[^a-zA-Z0-9._-]/-/g') CHECKOUT_PATH="${SAFE_BRANCH}-${{ github.sha }}" echo "checkout_path=${CHECKOUT_PATH}" >> "$GITHUB_OUTPUT" - uses: actions/checkout@v4 with: path: ${{ steps.vars.outputs.checkout_path }} clean: true fetch-depth: 2 # Only get the last 2 commits, to avoid fetching all history build: runs-on: [self-hosted, vanity] needs: [checkout] defaults: run: working-directory: ${{ needs.checkout.outputs.checkout_path }} steps: - name: Set Cleanup Script Path run: | echo "JOB_CLEANUP_SCRIPT=$(mktemp)" >> $GITHUB_ENV - name: Build using Docker run: /bin/bash release-builder.sh - name: Stop Container (Cleanup) if: always() run: | echo "Running cleanup script: $JOB_CLEANUP_SCRIPT" /bin/bash -e -x "$JOB_CLEANUP_SCRIPT" CLEANUP_EXIT_CODE=$? if [[ "$CLEANUP_EXIT_CODE" -eq 0 ]]; then echo "Cleanup script succeeded." rm -f "$JOB_CLEANUP_SCRIPT" echo "Cleanup script removed." else echo "⚠️ Cleanup script failed! Keeping for debugging: $JOB_CLEANUP_SCRIPT" fi if [[ "${DEBUG_BUILD_CONTAINERS_AFTER_CLEANUP}" == "1" ]]; then echo "🔍 Checking for leftover containers..." BUILD_CONTAINERS=$(docker ps --format '{{.Names}}' | grep '^xahaud_cached_builder' || echo "") if [[ -n "$BUILD_CONTAINERS" ]]; then echo "⚠️ WARNING: Some build containers are still running" echo "$BUILD_CONTAINERS" else echo "✅ No build containers found" fi fi tests: runs-on: [self-hosted, vanity] needs: [build, checkout] defaults: run: working-directory: ${{ needs.checkout.outputs.checkout_path }} steps: - name: Unit tests run: /bin/bash docker-unit-tests.sh cleanup: runs-on: [self-hosted, vanity] needs: [tests, checkout] if: always() steps: - name: Cleanup workspace run: | CHECKOUT_PATH="${{ needs.checkout.outputs.checkout_path }}" echo "Cleaning workspace for ${CHECKOUT_PATH}" rm -rf "${{ github.workspace }}/${CHECKOUT_PATH}"