aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/publish.yml
blob: a279abe56ba96fee8832c5f1956ab7dacbf26a52 (plain)
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
name: Make release & publish Docker image

on:
  push:
    tags:
    - 'v*'

env:
  REGISTRY_IMAGE: ghcr.io/museofficial/muse

jobs:
  publish:
    strategy:
      matrix:
        runner-platform:
          - ubuntu-latest
          - namespace-profile-default-arm64
        include:
          - runner-platform: ubuntu-latest
            build-arch: linux/amd64
            tagged-platform: amd64
          - runner-platform: namespace-profile-default-arm64
            build-arch: linux/arm64
            tagged-platform: arm64
    runs-on: ${{ matrix.runner-platform }}
    permissions:
      contents: read
      packages: write
      attestations: write
      id-token: write
    steps:
      - name: Set up Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Get current time
        uses: josStorer/get-current-time@v2
        id: current-time

      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v6
        with:
          push: true
          tags: |
            codetheweb/muse:${{ github.sha }}-${{ matrix.tagged-platform }}
            ${{ env.REGISTRY_IMAGE }}:${{ github.sha }}-${{ matrix.tagged-platform }}
          platforms: ${{ matrix.build-arch }}
          build-args: |
            COMMIT_HASH=${{ github.sha }}
            BUILD_DATE=${{ steps.current-time.outputs.time }}

  combine:
    name: Combine platform tags
    runs-on: ubuntu-latest
    needs: publish
    permissions:
      contents: read
      packages: write
      attestations: write
      id-token: write
    steps:
      - uses: actions/checkout@v1

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

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Get tags (Docker Hub)
        id: get-tags-dockerhub
        uses: Surgo/docker-smart-tag-action@v1
        with:
          docker_image: codetheweb/muse

      - name: Get tags (ghcr.io)
        id: get-tags-ghcr
        uses: Surgo/docker-smart-tag-action@v1
        with:
          docker_image: ${{ env.REGISTRY_IMAGE }}

      - name: Combine tags (Docker Hub)
        run: docker buildx imagetools create $(echo '${{ steps.get-tags-dockerhub.outputs.tag }}' | tr "," "\0" | xargs -0 printf -- '-t %s ') 'codetheweb/muse:${{ github.sha }}-arm64' 'codetheweb/muse:${{ github.sha }}-amd64'

      - name: Combine tags (GitHub Container Registry)
        run: docker buildx imagetools create $(echo '${{ steps.get-tags-ghcr.outputs.tag }}' | tr "," "\0" | xargs -0 printf -- '-t %s ') '${{ env.REGISTRY_IMAGE }}:${{ github.sha }}-arm64' '${{ env.REGISTRY_IMAGE }}:${{ github.sha }}-amd64'

      - name: Update Docker Hub description
        uses: peter-evans/[email protected]
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
          repository: codetheweb/muse

  release:
    name: Create GitHub release
    runs-on: ubuntu-latest
    needs: combine
    steps:
      - uses: actions/checkout@v2

      - name: Get version from tag
        id: tag_name
        run: |
          echo ::set-output name=current_version::${GITHUB_REF#refs/tags/v}
        shell: bash

      - name: Get Changelog Entry
        id: changelog_reader
        uses: mindsers/changelog-reader-action@v2
        with:
          version: ${{ steps.tag_name.outputs.current_version }}
          path: ./CHANGELOG.md

      - name: Create/update release
        uses: ncipollo/release-action@v1
        with:
          tag: v${{ steps.changelog_reader.outputs.version }}
          name: Release v${{ steps.changelog_reader.outputs.version }}
          body: ${{ steps.changelog_reader.outputs.changes }}
          prerelease: ${{ steps.changelog_reader.outputs.status == 'prereleased' }}
          draft: ${{ steps.changelog_reader.outputs.status == 'unreleased' }}
          allowUpdates: true
          token: ${{ secrets.GH_PAT }}