name: Docker on: push: branches: - main tags: - "v*.*.*" workflow_dispatch: env: DOCKER_FILE: docker/codex.Dockerfile DOCKER_REPO: codexstorage/nim-codex jobs: # Linux amd64 linux-amd64: name: Linux amd64 runs-on: ubuntu-latest outputs: tags: ${{ steps.tags.outputs.tags }} env: PLATFORM: linux/amd64 SUFFIX: linux-amd64 steps: - name: Checkout uses: actions/checkout@v3 - name: Docker - Meta id: meta uses: docker/metadata-action@v4 with: images: ${{ env.DOCKER_REPO }} flavor: | latest=false tags: | type=semver,pattern={{version}},suffix=-${{ env.SUFFIX }} type=sha,suffix=-${{ env.SUFFIX }},enable=${{ !startsWith(github.ref, 'refs/tags/') }} - name: Docker - Set tags output if: github.event_name != 'pull_request' id: tags run: echo "tags=${{ steps.meta.outputs.tags }}" >> "$GITHUB_OUTPUT" - name: Docker - Login to Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker - Build and export to Docker id: build uses: docker/build-push-action@v4 with: context: . file: ${{ env.DOCKER_FILE }} platforms: ${{ env.PLATFORM }} load: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Docker - Minify image uses: kitabisa/docker-slim-action@v1 id: slim env: DSLIM_HTTP_PROBE: false with: target: ${{ steps.meta.outputs.tags }} overwrite: true - name: Docker - Show slim report run: echo "${REPORT}" | jq -r env: REPORT: ${{ steps.slim.outputs.report }} - name: Docker - Push to Docker registry if: github.event_name != 'pull_request' id: push uses: docker/build-push-action@v4 with: context: . file: ${{ env.DOCKER_FILE }} platforms: ${{ env.PLATFORM }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} # Linux arm64 linux-arm64: name: Linux arm64 runs-on: buildjet-4vcpu-ubuntu-2204-arm outputs: tags: ${{ steps.tags.outputs.tags }} env: PLATFORM: linux/arm64 SUFFIX: linux-arm64 steps: - name: Checkout uses: actions/checkout@v3 - name: Docker - Meta id: meta uses: docker/metadata-action@v4 with: images: ${{ env.DOCKER_REPO }} flavor: | latest=false tags: | type=semver,pattern={{version}},suffix=-${{ env.SUFFIX }} type=sha,suffix=-${{ env.SUFFIX }},enable=${{ !startsWith(github.ref, 'refs/tags/') }} - name: Docker - Set tags output if: github.event_name != 'pull_request' id: tags run: echo "tags=${{ steps.meta.outputs.tags }}" >> "$GITHUB_OUTPUT" - name: Docker - Login to Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker - Build and export to Docker id: build uses: docker/build-push-action@v4 with: context: . file: ${{ env.DOCKER_FILE }} platforms: ${{ env.PLATFORM }} load: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Docker - Minify image uses: kitabisa/docker-slim-action@v1 id: slim env: DSLIM_HTTP_PROBE: false with: target: ${{ steps.meta.outputs.tags }} overwrite: true - name: Docker - Show slim report run: echo "${REPORT}" | jq -r env: REPORT: ${{ steps.slim.outputs.report }} - name: Docker - Push to Docker registry if: github.event_name != 'pull_request' id: push uses: docker/build-push-action@v4 with: context: . file: ${{ env.DOCKER_FILE }} platforms: ${{ env.PLATFORM }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} # Push single image publish: name: Push single image if: github.event_name != 'pull_request' runs-on: ubuntu-latest needs: [linux-amd64, linux-arm64] steps: - name: Docker - Meta id: meta uses: docker/metadata-action@v4 with: images: ${{ env.DOCKER_REPO }} tags: | type=semver,pattern={{version}} type=sha,enable=${{ !startsWith(github.ref, 'refs/tags/') }} - name: Docker - Set tags run: | # Transform multi-line tags in to the comma-seperated TAGS=$(echo "${{ steps.meta.outputs.tags }}" | tr '\n' ',' | awk '{gsub(/,$/,"");}1') echo "TAGS=${TAGS}" >>$GITHUB_ENV echo "${TAGS}" - name: Docker - Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker - Create and push manifest images uses: Noelware/docker-manifest-action@master with: inputs: ${{ env.TAGS }} images: ${{ needs.linux-amd64.outputs.tags }},${{ needs.linux-arm64.outputs.tags }} push: true