name: Build CI Images on: push: branches: - main paths: - "Dockerfile.ci-base" - "package.json" - "bun.lock" - ".gitea/workflows/build-ci-images.yml" schedule: # Weekly rebuild to get latest Playwright/Bun versions - cron: "0 2 * * 0" # Every Sunday at 2 AM workflow_dispatch: # Manual trigger env: REGISTRY: docker.notsosm.art IMAGE_NAME: euchre-camp jobs: build-ci-base: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Registry run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u ${{ secrets.DOCKER_LOGIN }} --password-stdin - name: Extract metadata for CI base image id: meta run: | # Get Playwright version from package.json PLAYWRIGHT_VERSION=$(grep -o '"@playwright/test": "[^"]*"' package.json | cut -d'"' -f4 | sed 's/^\^//') echo "playwright_version=${PLAYWRIGHT_VERSION}" >> $GITHUB_OUTPUT # Get Bun version (latest) BUN_VERSION=$(bun --version 2>/dev/null || echo "latest") echo "bun_version=${BUN_VERSION}" >> $GITHUB_OUTPUT # Set tags echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${PLAYWRIGHT_VERSION},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }}" >> $GITHUB_OUTPUT - name: Build and push CI base image run: | WORKSPACE_DIR="$GITHUB_WORKSPACE" # Build with multiple tags docker build \ --context "$WORKSPACE_DIR" \ --file "$WORKSPACE_DIR/Dockerfile.ci-base" \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${{ steps.meta.outputs.playwright_version }} \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }} \ - name: Clean up if: always() run: | docker logout ${{ env.REGISTRY }}