name: Build container image on: push: branches: - master tags: - '*' # This triggers the action on all tag pushes jobs: publish-docker-image: if: github.repository_owner == 'gbdev' runs-on: ubuntu-latest permissions: # So that the workflow can write to the ghcr an upload there packages: write steps: - name: Checkout repo uses: actions/checkout@v4 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push the master container image # When a commit is pushed to master if: github.ref == 'refs/heads/master' run: | COMMIT_HASH=$(git rev-parse --short HEAD) sed -i "2i LABEL org.opencontainers.image.description=\"RGBDS container image, containing the git version master:$COMMIT_HASH\"" Dockerfile docker build . --tag ghcr.io/gbdev/rgbds:master docker push ghcr.io/gbdev/rgbds:master - name: Build and push the version-tagged container image # When a tag is pushed if: startsWith(github.ref, 'refs/tags/') run: | TAG_NAME=${GITHUB_REF#refs/tags/} sed -i "2i LABEL org.opencontainers.image.description=\"RGBDS container image for the release version $TAG_NAME\"" Dockerfile docker build . --tag ghcr.io/gbdev/rgbds:$TAG_NAME docker push ghcr.io/gbdev/rgbds:$TAG_NAME - name: Delete untagged ghcr uses: Chizkiyahu/delete-untagged-ghcr-action@v5 with: # Personal access token (PAT) used to fetch the repository. The PAT is configured # with the local git config, which enables your scripts to run authenticated git # commands. The post-job step removes the PAT. # needs delete:packages permissions # required: true token: ${{ secrets.PAT_TOKEN }} # Repository name or name with owner # Delete only from repository name # Default: ${{ github.repository }} repository: 'rgbds' # 'The repository owner name' # Default: ${{ github.repository_owner }} repository_owner: 'gbdev' # 'The package names' # Delete only from comma separated package names # required: false package_name: 'rgbds' # Delete only package versions without tag # required: false # Default: true # choices: true, false untagged_only: true # Exclude untagged multiplatform packages from deletion # Manifests are usually such packages so they should be excluded # only for untagged_only=true # Default: true # needs docker installed except_untagged_multiplatform: true # the owner type # required: true # choices: org, user owner_type: 'org'