name: Build Docker Image and Trigger Docs/Website on: # push: # tags: # - "[0-9]+.[0-9]+.[0-9]+*" release: types: [published] permissions: id-token: write contents: write packages: write actions: write jobs: validate-tag-semver: runs-on: ubuntu-latest outputs: valid: ${{ steps.check_tag.outputs.valid }} steps: - name: Check if tag follows SemVer id: check_tag run: | TAG="${{ github.event.release.tag_name }}" if [[ "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-alpha\.[0-9]+|-beta\.[0-9]+|-rc\.[0-9]+)?$ ]]; then echo "valid=true" >> $GITHUB_OUTPUT else echo "valid=false" >> $GITHUB_OUTPUT fi build: needs: validate-tag-semver runs-on: ubuntu-latest if: needs.validate-tag-semver.outputs.valid == 'true' permissions: id-token: write contents: write packages: write steps: - name: Run only once per release run: echo "Triggered by ${{ github.event_name }}" - name: Checkout code uses: actions/checkout@v4.3.0 - 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 Docker Hub uses: docker/login-action@v3.5.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GitHub Container Registry uses: docker/login-action@v3.5.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Generate Docker metadata (slim) id: meta-slim uses: docker/metadata-action@v5.8.0 with: images: | name=rommapp/romm name=ghcr.io/rommapp/romm flavor: | latest=auto suffix=-slim,onlatest=true tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} labels: | org.opencontainers.image.version={{version}}-slim org.opencontainers.image.title="rommapp/romm" org.opencontainers.image.description="RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes and custom tags, RomM is a must-have for anyone who plays on emulators." org.opencontainers.image.licenses="AGPLv3" - name: Generate Docker metadata (full) id: meta uses: docker/metadata-action@v5.8.0 with: images: | name=rommapp/romm name=ghcr.io/rommapp/romm tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} labels: | org.opencontainers.image.version={{version}} org.opencontainers.image.title="rommapp/romm" org.opencontainers.image.description="RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes and custom tags, RomM is a must-have for anyone who plays on emulators." org.opencontainers.image.licenses="AGPLv3" - name: Set version run: | sed -i 's//${{ steps.meta.outputs.version }}/' backend/__version__.py - name: Build slim image id: build-slim uses: docker/build-push-action@v6.18.0 with: file: docker/Dockerfile context: . push: true platforms: linux/arm64,linux/amd64 tags: ${{ steps.meta-slim.outputs.tags }} labels: ${{ steps.meta-slim.outputs.labels }} target: slim-image - 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 }} labels: ${{ steps.meta.outputs.labels }} target: full-image trigger-docs-and-web: permissions: actions: write needs: build runs-on: ubuntu-latest if: needs.build.result == 'success' && github.event.release.prerelease == false steps: - name: Trigger docs build run: | curl -L -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer ${DOCS_PAT}" \ "https://api.github.com/repos/rommapp/docs/actions/workflows/deploy.yml/dispatches" \ -d '{"ref":"main", "inputs": {"version": "${{ github.event.release.tag_name }}"}}' env: DOCS_PAT: ${{ secrets.DOCS_PAT }} - name: Trigger website build run: | curl -L -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer ${DOCS_PAT}" \ "https://api.github.com/repos/rommapp/marketing-site/actions/workflows/deploy.yml/dispatches" \ -d '{"ref":"main", "inputs": {"version": "${{ github.event.release.tag_name }}"}}' env: DOCS_PAT: ${{ secrets.DOCS_PAT }}