aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/docker.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/docker.yml')
-rw-r--r--.github/workflows/docker.yml136
1 files changed, 136 insertions, 0 deletions
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
new file mode 100644
index 00000000..129a9f0a
--- /dev/null
+++ b/.github/workflows/docker.yml
@@ -0,0 +1,136 @@
+# Based on https://github.com/docker/build-push-action
+
+name: "Docker Hub"
+
+on:
+ release: # A GitHub release was published
+ types: [published]
+ workflow_run: # The Dendrite pipeline completed successfully on main
+ workflows: [Dendrite]
+ types: [completed]
+ branches: [main]
+
+env:
+ DOCKER_NAMESPACE: matrixdotorg
+ DOCKER_HUB_USER: dendritegithub
+ GHCR_NAMESPACE: matrix-org
+ PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7
+
+jobs:
+ monolith:
+ name: Monolith image
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Get release tag
+ if: github.event_name == 'release' # Only for GitHub releases
+ run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Login to Docker Hub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ env.DOCKER_HUB_USER }}
+ password: ${{ secrets.DOCKER_TOKEN }}
+ - name: Login to GitHub Containers
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build monolith image
+ if: >-
+ github.event_name == 'workflow_run' &&
+ github.event.workflow_run.conclusion == 'success'
+ id: docker_build_monolith
+ uses: docker/build-push-action@v2
+ with:
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ context: .
+ file: ./build/docker/Dockerfile.monolith
+ platforms: ${{ env.PLATFORMS }}
+ push: true
+ tags: |
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-monolith:main
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-monolith:main
+
+ - name: Build release monolith image
+ if: github.event_name == 'release' # Only for GitHub releases
+ id: docker_build_monolith
+ uses: docker/build-push-action@v2
+ with:
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ context: .
+ file: ./build/docker/Dockerfile.monolith
+ platforms: ${{ env.PLATFORMS }}
+ push: true
+ tags: |
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-monolith:latest
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-monolith:${{ env.RELEASE_VERSION }}
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-monolith:latest
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-monolith:${{ env.RELEASE_VERSION }}
+
+ polylith:
+ name: Polylith image
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Get release tag
+ if: github.event_name == 'release' # Only for GitHub releases
+ run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Login to Docker Hub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ env.DOCKER_HUB_USER }}
+ password: ${{ secrets.DOCKER_TOKEN }}
+ - name: Login to GitHub Containers
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build polylith image
+ if: >-
+ github.event_name == 'workflow_run' &&
+ github.event.workflow_run.conclusion == 'success'
+ id: docker_build_polylith
+ uses: docker/build-push-action@v2
+ with:
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ context: .
+ file: ./build/docker/Dockerfile.polylith
+ platforms: ${{ env.PLATFORMS }}
+ push: true
+ tags: |
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-polylith:main
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-polylith:main
+
+ - name: Build release polylith image
+ if: github.event_name == 'release' # Only for GitHub releases
+ id: docker_build_polylith
+ uses: docker/build-push-action@v2
+ with:
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ context: .
+ file: ./build/docker/Dockerfile.polylith
+ platforms: ${{ env.PLATFORMS }}
+ push: true
+ tags: |
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-polylith:latest
+ ${{ env.DOCKER_NAMESPACE }}/dendrite-polylith:${{ env.RELEASE_VERSION }}
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-polylith:latest
+ ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-polylith:${{ env.RELEASE_VERSION }}