File: docker.yml

package info (click to toggle)
coturn 4.6.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,240 kB
  • sloc: ansic: 38,387; sh: 1,857; cpp: 778; makefile: 315; sql: 76; perl: 57
file content (173 lines) | stat: -rw-r--r-- 7,000 bytes parent folder | download | duplicates (2)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
name: Docker CI

on:
  pull_request:
  push:
  schedule:
    - cron: "13 13 * * 3"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  buildx:
    strategy:
      matrix:
        include:
          - dockerfile: debian
            cache: ${{ github.ref != 'refs/heads/master'
                    && !startsWith(github.ref, 'refs/tags/docker/') }}
            publish: ${{ github.event_name == 'push'
                      && github.repository_owner == 'coturn'
                      && (startsWith(github.ref, 'refs/tags/docker/')
                          || github.ref == 'refs/heads/master') }}
          - dockerfile: alpine
            cache: ${{ github.ref != 'refs/heads/master'
                    && !startsWith(github.ref, 'refs/tags/docker/') }}
            publish: ${{ github.event_name == 'push'
                      && github.repository_owner == 'coturn'
                      && (startsWith(github.ref, 'refs/tags/docker/')
                          || github.ref == 'refs/heads/master') }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: docker/setup-qemu-action@v2
      - uses: docker/setup-buildx-action@v2

      - name: Detect correct Git ref for image build
        id: git
        uses: actions/github-script@v6
        with:
          script: |
            let out = {ref: 'HEAD', ver: ''};
            if ('${{ github.ref }}'.startsWith('refs/tags/docker/')) {
              out.ref = '${{ github.ref }}'.substring(17).split('-')[0];
              out.ver = out.ref;
            }
            return out;
      - name: Verify Git ref matches Makefile version
        run: |
          test "${{ fromJSON(steps.git.outputs.result).ref }}" \
            == "$(grep -m1 'COTURN_VER ?=' Makefile | cut -d'=' -f2 | tr -d ' ')"
        working-directory: ./docker/coturn
        if: ${{ matrix.publish
             && github.ref != 'refs/heads/master' }}

      - uses: satackey/action-docker-layer-caching@v0.0.11
        with:
          key: docker-${{ matrix.dockerfile }}-buildx-{hash}
          restore-keys: docker-${{ matrix.dockerfile }}-buildx-
        continue-on-error: true
        timeout-minutes: 10
        if: ${{ matrix.cache }}
      - name: Pre-build Docker images cache
        run: make docker.build.cache DOCKERFILE=${{ matrix.dockerfile }}
                  no-cache=${{ (matrix.cache && 'no') || 'yes' }}
                  ref=${{ fromJSON(steps.git.outputs.result).ref }}
        working-directory: ./docker/coturn

      - name: Test Docker images
        run: |
          # Enable experimental features of Docker Daemon to run multi-arch images.
          echo "$(cat /etc/docker/daemon.json)" '{"experimental": true}' \
          | jq --slurp 'reduce .[] as $item ({}; . * $item)' \
          | sudo tee /etc/docker/daemon.json
          sudo systemctl restart docker

          make npm.install
          make test.docker DOCKERFILE=${{ matrix.dockerfile }} \
               platforms=@all build=yes \
               ref=${{ fromJSON(steps.git.outputs.result).ref }}
        env:
          COTURN_VERSION: ${{ fromJSON(steps.git.outputs.result).ver }}
        working-directory: ./docker/coturn

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
        if: ${{ matrix.publish }}
      - name: Login to Quay.io
        uses: docker/login-action@v2
        with:
          registry: quay.io
          username: ${{ secrets.QUAYIO_ROBOT_USERNAME }}
          password: ${{ secrets.QUAYIO_ROBOT_TOKEN }}
        if: ${{ matrix.publish }}
      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_BOT_USER }}
          password: ${{ secrets.DOCKERHUB_BOT_PASS }}
        if: ${{ matrix.publish }}

      - name: Publish version Docker tags
        run: make docker.push DOCKERFILE=${{ matrix.dockerfile }}
                  ref=${{ fromJSON(steps.git.outputs.result).ref }}
        working-directory: ./docker/coturn
        if: ${{ matrix.publish
             && github.ref != 'refs/heads/master' }}
      - name: Publish edge Docker tags
        run: make docker.push DOCKERFILE=${{ matrix.dockerfile }}
                  tags=edge-${{ matrix.dockerfile }}
                  ref=${{ fromJSON(steps.git.outputs.result).ref }}
        working-directory: ./docker/coturn
        if: ${{ matrix.publish
             && github.ref == 'refs/heads/master' }}

      # On GitHub Container Registry README is automatically updated on pushes.
      - name: Update README on Quay.io
        uses: christian-korneck/update-container-description-action@v1
        env:
          DOCKER_APIKEY: ${{ secrets.QUAYIO_API_TOKEN }}
        with:
          provider: quay
          destination_container_repo: quay.io/coturn/coturn
          readme_file: docker/coturn/README.md
        if: ${{ matrix.publish }}
      - name: Update README on Docker Hub
        uses: christian-korneck/update-container-description-action@v1
        env:
          DOCKER_USER: ${{ secrets.DOCKERHUB_BOT_USER }}
          DOCKER_PASS: ${{ secrets.DOCKERHUB_BOT_PASS }}
        with:
          provider: dockerhub
          destination_container_repo: coturn/coturn
          readme_file: docker/coturn/README.md
        if: ${{ matrix.publish }}

  release:
    needs: ["buildx"]
    if: ${{ github.event_name == 'push'
         && github.repository_owner == 'coturn'
         && startsWith(github.ref, 'refs/tags/docker/') }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Parse semver versions from Git tag
        id: semver
        uses: actions-ecosystem/action-regex-match@v2
        with:
          text: ${{ github.ref }}
          regex: '^refs/tags/docker/(((([0-9]+)\.[0-9]+)\.[0-9]+)-(.+))$'
      - name: Parse CHANGELOG link
        id: changelog
        run: echo ::set-output name=link::${{ github.server_url }}/${{ github.repository }}/blob/docker/${{ steps.semver.outputs.group1 }}/docker/coturn/CHANGELOG.md#$(sed -n '/^## \[${{ steps.semver.outputs.group1 }}\]/{s/^## \[\(.*\)\][^0-9]*\([0-9].*\)/\1--\2/;s/[^0-9a-z-]*//g;p;}' CHANGELOG.md)
        working-directory: ./docker/coturn

      - name: Create GitHub release
        uses: softprops/action-gh-release@v1
        with:
          name: docker/${{ steps.semver.outputs.group1 }}
          body: |
            `${{ steps.semver.outputs.group1 }}` Docker image version of ${{ steps.semver.outputs.group2 }} Coturn release.

            [Docker Hub](https://hub.docker.com/r/coturn/coturn) | [GitHub Container Registry](https://github.com/orgs/coturn/packages/container/package/coturn) | [Quay.io](https://quay.io/repository/coturn/coturn)

            [Changelog](${{ steps.changelog.outputs.link }})