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: | # Build with multiple tags docker build \ --file 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 }} \ . # Push all tags docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${{ steps.meta.outputs.playwright_version }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }} - name: Clean up if: always() run: | docker logout ${{ env.REGISTRY }}