perf(backend): materialize roms_metadata and virtual_collections tables #369
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Experimental Docker Image | |
| on: | |
| pull_request: | |
| types: [labeled] | |
| workflow_dispatch: | |
| inputs: | |
| # trunk-ignore(checkov/CKV_GHA_7) | |
| branch: | |
| description: "Git branch" | |
| required: true | |
| registry: | |
| description: "Container registry" | |
| required: true | |
| default: "ghcr" | |
| type: choice | |
| options: | |
| - ghcr | |
| - dockerhub | |
| - both | |
| permissions: | |
| id-token: write | |
| contents: write | |
| packages: write | |
| actions: write | |
| pull-requests: write | |
| jobs: | |
| build: | |
| if: | | |
| github.event_name == 'workflow_dispatch' || | |
| contains(github.event.pull_request.labels.*.name, 'build-preview') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write | |
| contents: write | |
| packages: write | |
| pull-requests: write | |
| env: | |
| USE_GHCR: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.registry == 'ghcr' || github.event.inputs.registry == 'both' }} | |
| USE_DOCKERHUB: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.registry == 'dockerhub' || github.event.inputs.registry == 'both') }} | |
| # Key the Docker Hub namespace off the push credential rather than the GitHub owner. | |
| DOCKERHUB_NAMESPACE: ${{ secrets.DOCKER_NAMESPACE || secrets.DOCKER_USERNAME || github.repository_owner }} | |
| steps: | |
| - name: Run only once per workflow | |
| run: echo "Triggered by ${{ github.event_name }}" | |
| - name: Checkout code | |
| uses: actions/checkout@v4.3.0 | |
| with: | |
| ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.head_ref }} | |
| fetch-depth: 0 | |
| - name: PR comment build starting | |
| if: github.event_name == 'pull_request' | |
| id: build-comment | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const comment = await github.rest.issues.createComment({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: `🔨 Preview build is under way...` | |
| }); | |
| core.setOutput('comment-id', comment.data.id); | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3.6.0 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3.11.1 | |
| - name: Login to GHCR | |
| if: env.USE_GHCR == 'true' | |
| uses: docker/login-action@v3.5.0 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.repository_owner }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Login to Docker Hub | |
| if: env.USE_DOCKERHUB == 'true' | |
| uses: docker/login-action@v3.5.0 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Generate Docker metadata | |
| id: meta | |
| uses: docker/metadata-action@v5.8.0 | |
| with: | |
| images: | | |
| ${{ env.USE_GHCR == 'true' && format('name=ghcr.io/{0}/romm-testing', github.repository_owner) || '' }} | |
| ${{ env.USE_DOCKERHUB == 'true' && format('name={0}/romm-testing', env.DOCKERHUB_NAMESPACE) || '' }} | |
| tags: | | |
| type=raw,value=${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.head_ref }} | |
| - name: Build full image | |
| id: build-full | |
| uses: docker/build-push-action@v6.18.0 | |
| with: | |
| file: docker/Dockerfile | |
| context: . | |
| push: true | |
| platforms: linux/arm64,linux/amd64 | |
| tags: ${{ steps.meta.outputs.tags }} | |
| target: full-image | |
| build-args: | | |
| SCREENSCRAPER_DEV_ID=${{ secrets.SCREENSCRAPER_DEV_ID }} | |
| SCREENSCRAPER_DEV_PASSWORD=${{ secrets.SCREENSCRAPER_DEV_PASSWORD }} | |
| # PR builds always push to GHCR only, so the image link is hardcoded to GHCR. | |
| - name: Comment PR with GHCR image link | |
| if: github.event_name == 'pull_request' | |
| uses: actions/github-script@v7 | |
| env: | |
| HEAD_REF: ${{ github.head_ref }} | |
| with: | |
| script: | | |
| const owner = context.repo.owner; | |
| const tag = process.env.HEAD_REF; | |
| github.rest.issues.updateComment({ | |
| comment_id: ${{ steps.build-comment.outputs.comment-id }}, | |
| owner: owner, | |
| repo: context.repo.repo, | |
| body: `✅ Preview build completed!\n\nDocker image: \`ghcr.io/${owner}/romm-testing:${tag}\`` | |
| }) |