name: Release - SH Runner 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_CONTAINERS: 1 REMOVE_CONTAINERS: 0 jobs: build-and-test: runs-on: [self-hosted, vanity] steps: - name: Prepare workspace 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_ENV mkdir -p "$CHECKOUT_PATH" - name: Checkout code uses: actions/checkout@v4 with: path: ${{ env.CHECKOUT_PATH }} clean: true fetch-depth: 2 - name: Set Cleanup Script Path run: | echo "JOB_CLEANUP_SCRIPT=$(mktemp)" >> $GITHUB_ENV - name: Build using Docker working-directory: ${{ env.CHECKOUT_PATH }} run: /bin/bash release-builder.sh - name: Stop Container (Cleanup after build) if: always() working-directory: ${{ env.CHECKOUT_PATH }} 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_CONTAINERS}" == "1" ]]; then echo "🔍 Checking for leftover containers..." BUILD_CONTAINERS=$(docker ps --format '{{.Names}}' | grep '^xahaud_cached_builder' || echo "") CONTAINER_NAME="xahaud_cached_builder_${{ github.workflow }}-${{ github.ref_name }}" if [[ -n "$BUILD_CONTAINERS" && "${REMOVE_CONTAINERS}" == "1" ]]; then echo "⚠️ WARNING: Some build containers are still running" echo "$BUILD_CONTAINERS" echo "Attempting to stop build containers.." echo "Stopping container: $CONTAINER_NAME" docker stop "$CONTAINER_NAME" || echo "Failed to stop container: $CONTAINER_NAME" echo "Removing container: $CONTAINER_NAME" docker rm -f "$CONTAINER_NAME" || echo "Failed to remove container: $CONTAINER_NAME" echo "✅ Build container stopped and removed" else echo "✅ No build containers found" fi fi - name: Run unit tests working-directory: ${{ env.CHECKOUT_PATH }} run: /bin/bash docker-unit-tests.sh - name: Cleanup workspace if: always() run: | echo "Cleaning workspace for ${CHECKOUT_PATH}" rm -rf "${{ github.workspace }}/${CHECKOUT_PATH}"