summary refs log tree commit diff
path: root/.github/workflows/docker.yml
blob: b0582749dc4c71379506d663d5f93e4deeb6f4d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# GitHub actions workflow which builds and publishes the docker images.

name: Build docker images

on:
  push:
    tags: ["v*"]
    branches: [ master, main, develop ]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        id: qemu
        uses: docker/setup-qemu-action@v1
        with:
          platforms: arm64

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1

      - name: Inspect builder
        run: docker buildx inspect
          
      - name: Log in to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      # TODO: consider using https://github.com/docker/metadata-action instead of this
      # custom magic
      - name: Calculate docker image tag
        id: set-tag
        run: |
          case "${GITHUB_REF}" in
              refs/heads/develop)
                  tag=develop
                  ;;
              refs/heads/master|refs/heads/main)
                  tag=latest
                  ;;
              refs/tags/*)
                  tag=${GITHUB_REF#refs/tags/}
                  ;;
              *)
                  tag=${GITHUB_SHA}
                  ;;
          esac
          echo "::set-output name=tag::$tag"

      - name: Build and push all platforms
        uses: docker/build-push-action@v2
        with:
          push: true
          labels: "gitsha1=${{ github.sha }}"
          tags: "matrixdotorg/synapse:${{ steps.set-tag.outputs.tag }}"
          file: "docker/Dockerfile"
          platforms: linux/amd64,linux/arm64

  build_workers_test:
    runs-on: ubuntu-latest

    # The worker test image depends on the base image, so we must build the base
    # first.
    needs: build

    permissions:
      packages: write
      contents: read

    steps:
      - name: Set up QEMU
        id: qemu
        uses: docker/setup-qemu-action@v1
        with:
          platforms: arm64

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1

      - name: Inspect builder
        run: docker buildx inspect

      - name: Login to GitHub Container Registry (for worker-testing-only image)
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      # This must match EXACTLY the one in the `build` pipeline.
      - name: Calculate docker image tag
        id: set-tag
        run: |
          case "${GITHUB_REF}" in
              refs/heads/develop)
                  tag=develop
                  ;;
              refs/heads/master|refs/heads/main)
                  tag=latest
                  ;;
              refs/tags/*)
                  tag=${GITHUB_REF#refs/tags/}
                  ;;
              *)
                  tag=${GITHUB_SHA}
                  ;;
          esac
          echo "::set-output name=tag::$tag"

      # This image is solely intended to be used for automated test tools,
      # such as mx-tester.
      - name: Build and push worker-testing-only image for all platforms
        uses: docker/build-push-action@v2
        with:
          push: true
          build-args: |
            "base_version=${{ steps.set-tag.outputs.tag }}"
          labels: "gitsha1=${{ github.sha }}"
          tags: "ghcr.io/matrix-org/synapse-workers-testing-only:${{ steps.set-tag.outputs.tag }}"
          file: "docker/Dockerfile-workers"
          platforms: linux/amd64,linux/arm64