Build-Test-Push #154
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build-Test-Push | |
| on: | |
| schedule: | |
| - cron: "5 4 * * 3" | |
| pull_request: | |
| paths-ignore: | |
| - "README.md" | |
| - "LICENSE.md" | |
| push: | |
| paths-ignore: | |
| - "README.md" | |
| - "LICENSE.md" | |
| jobs: | |
| gather-versions: | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| versions: ${{ steps.ruby-versions.outputs.versions }} | |
| metadata: ${{ steps.ruby-versions.outputs.metadata }} | |
| steps: | |
| - uses: moritzheiber/ruby-versions-action@v1 | |
| name: Fetch latest Ruby versions | |
| id: ruby-versions | |
| build-test-push: | |
| needs: ["gather-versions"] | |
| strategy: | |
| matrix: | |
| version: ${{ fromJSON(needs.gather-versions.outputs.versions) }} | |
| image: [slim, ubuntu-22.04, ubuntu-24.04] | |
| platform: [amd64, arm64] | |
| include: ${{ fromJSON(needs.gather-versions.outputs.metadata) }} | |
| runs-on: ${{ matrix.platform == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} | |
| steps: | |
| - name: Set image_name | |
| id: context | |
| run: | | |
| if [[ "${{ matrix.image }}" == "slim" ]] ; then | |
| echo "image_name=ruby:${{ matrix.version }}-slim" >> ${GITHUB_OUTPUT} | |
| elif [[ "${{ matrix.image }}" == "ubuntu-22.04" ]] ; then | |
| echo "image_name=ubuntu:22.04" >> ${GITHUB_OUTPUT} | |
| elif [[ "${{ matrix.image }}" == "ubuntu-24.04" ]] ; then | |
| echo "image_name=ubuntu:24.04" >> ${GITHUB_OUTPUT} | |
| fi | |
| if [[ "${{ startsWith(matrix.version, '3.2') }}" == "true" ]] ; then | |
| echo "flags=--enable-yjit" >> ${GITHUB_OUTPUT} | |
| fi | |
| - uses: actions/checkout@v4 | |
| - name: Login to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - uses: docker/setup-buildx-action@v3 | |
| - uses: docker/build-push-action@v6 | |
| name: Build | |
| id: build | |
| with: | |
| platforms: linux/${{ matrix.platform }} | |
| push: ${{ github.ref == 'refs/heads/main' }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| build-args: | | |
| RUBY_VERSION=${{ matrix.version }} | |
| RUBY_CHECKSUM=${{ matrix.checksum }} | |
| IMAGE_NAME=${{ steps.context.outputs.image_name }} | |
| ADDITIONAL_FLAGS=${{ steps.context.outputs.flags }} | |
| provenance: false | |
| outputs: | | |
| type=image,name=ghcr.io/moritzheiber/ruby-jemalloc,push-by-digest=true,push=${{ github.ref == 'refs/heads/main' }} | |
| - name: Export digest | |
| if: github.ref == 'refs/heads/main' | |
| run: | | |
| mkdir -p /tmp/digests/${{ matrix.version }}-${{ matrix.image }}-${{ matrix.platform }} | |
| digest="${{ steps.build.outputs.digest }}" | |
| touch "/tmp/digests/${{ matrix.version }}-${{ matrix.image }}-${{ matrix.platform }}/${digest#sha256:}" | |
| - name: Upload digest | |
| if: github.ref == 'refs/heads/main' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: digests-${{ matrix.version }}-${{ matrix.image }}-${{ matrix.platform }} | |
| path: /tmp/digests/${{ matrix.version }}-${{ matrix.image }}-${{ matrix.platform }}/* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| merge-manifests: | |
| needs: ["build-test-push", "gather-versions"] | |
| if: github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| version: ${{ fromJSON(needs.gather-versions.outputs.versions) }} | |
| image: [slim, ubuntu-22.04, ubuntu-24.04] | |
| steps: | |
| - name: Login to GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - uses: docker/setup-buildx-action@v3 | |
| - name: Download digests | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: /tmp/digests/${{ matrix.version }}-${{ matrix.image }} | |
| pattern: digests-${{ matrix.version }}-${{ matrix.image }}-* | |
| merge-multiple: true | |
| - name: Create and push manifest | |
| working-directory: /tmp/digests/${{ matrix.version }}-${{ matrix.image }} | |
| run: | | |
| docker buildx imagetools create -t ghcr.io/moritzheiber/ruby-jemalloc:${{ matrix.version }}-${{ matrix.image }} \ | |
| $(printf 'ghcr.io/moritzheiber/ruby-jemalloc@sha256:%s ' *) |