From 2a7334519b96396b8453512971307f0df2b74ec7 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Wed, 18 Sep 2024 19:15:11 +0100 Subject: [PATCH] Add docker build/publish CI --- .../workflows/build-and-publish-docker.yml | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/build-and-publish-docker.yml diff --git a/.github/workflows/build-and-publish-docker.yml b/.github/workflows/build-and-publish-docker.yml new file mode 100644 index 0000000..7aac29c --- /dev/null +++ b/.github/workflows/build-and-publish-docker.yml @@ -0,0 +1,61 @@ +name: Publish Docker images + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + push_to_registry: + name: Push Docker image to Docker Hub and GHCR + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + attestations: write + id-token: write + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Extract version from setup.py + # Note: explicitly requesting bash will mean bash is invoked with `-eo pipefail`, see + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell + shell: bash + run: | + echo "RELEASE_VERSION=$(grep "^version" setup.py | sed -E 's/\s*version\s*=\s*["]([^"]*)["],/\1/')" >> $GITHUB_ENV + + - name: Log in to Docker Hub + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PERSONAL_ACCESS_TOKEN }} + + - name: Log in to GitHub Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ghcr.io + # Login as the user that published the release. + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: | + docker.io/matrixdotorg/mscbot-python + ghcr.io/matrix-org/mscbot-python + + - name: Build and push images + id: push + uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: | + gitsha1=${{ github.sha }} + org.opencontainers.image.version=${{ env.RELEASE_VERSION }} + ${{ steps.meta.outputs.labels }}