fix: implement linux/arm64 container #131
Workflow file for this run
This file contains 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-containers | |
on: | |
push: | |
tags: | |
- "v*" | |
pull_request: | |
workflow_dispatch: | |
workflow_run: | |
workflows: ["add-tag"] | |
types: | |
- completed | |
concurrency: | |
group: '${{ github.workflow }}-${{ github.job }}-${{ github.head_ref || github.ref_name }}' | |
cancel-in-progress: true | |
jobs: | |
build-containers: | |
name: ${{ matrix.container }} ${{ matrix.architecture.platform }} | |
runs-on: ${{ matrix.architecture.host }} | |
permissions: | |
contents: read | |
packages: write | |
strategy: | |
fail-fast: false | |
matrix: | |
container: | |
- 'ubuntu-20.04' | |
- 'alpine-3.17' | |
architecture: | |
- { host: 'ubuntu-22.04', platform: linux/amd64, suffix: 'x64', suffix2: 'amd64' } | |
- { host: 'ubuntu-22.04-arm', platform: linux/arm64, suffix: 'arm64', suffix2: 'arm64' } | |
outputs: | |
tags: ${{ steps.meta.outputs.tags }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set GITHUB_REF | |
if: github.event_name == 'workflow_run' | |
run: | | |
TAG=$(git tag --sort=-v:refname | grep -v '\.rc[0-9]\+$' | head -n 1) | |
VERSION=${TAG#v} | |
echo "Setting VERSION to $VERSION" | |
echo "Setting GITHUB_REF to refs/tags/$TAG" | |
echo "GITHUB_REF=refs/tags/$TAG" >> $GITHUB_ENV | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
- name: Log in to the Container registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: tamatebako | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
ghcr.io/tamatebako/tebako-${{ matrix.container }} | |
tags: | | |
type=semver,pattern={{version}}-${{ matrix.architecture.suffix2 }},value=${{ env.VERSION }},enable=${{ github.event_name == 'workflow_run' }} | |
type=semver,pattern={{version}}-${{ matrix.architecture.suffix2 }},enable=${{ github.event_name != 'workflow_run' }} | |
type=semver,pattern={{major}}.{{minor}}-${{ matrix.architecture.suffix2 }},value=${{ env.VERSION }},enable=${{ github.event_name == 'workflow_run' }} | |
type=semver,pattern={{major}}.{{minor}}-${{ matrix.architecture.suffix2 }},enable=${{ github.event_name != 'workflow_run' }} | |
type=semver,pattern={{major}}-${{ matrix.architecture.suffix2 }},value=${{ env.VERSION }},enable=${{ github.event_name == 'workflow_run' }} | |
type=semver,pattern={{major}}-${{ matrix.architecture.suffix2 }},enable=${{ github.event_name != 'workflow_run' }} | |
type=sha,suffix=-${{ matrix.architecture.suffix2 }} | |
labels: | | |
org.opencontainers.image.vendor=Ribose Inc. | |
org.opencontainers.image.licenses=BSD-2-Clause | |
org.opencontainers.image.documentation=https://www.tamatebako.org | |
org.opencontainers.image.source==${{ github.repositoryUrl }} | |
org.opencontainers.image.description=Tebako executable packager ${{ matrix.container }} container | |
annotations: | | |
org.opencontainers.image.licenses=BSD-2-Clause | |
org.opencontainers.image.description=Tebako executable packager ${{ matrix.container }} container | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./${{ matrix.container }}.Dockerfile | |
push: true | |
# ${{ contains(github.ref, 'refs/tags/v') || github.event_name == 'workflow_run' }} | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
annotations: ${{ steps.meta.outputs.annotations }} | |
platforms: ${{ matrix.architecture.platform }} | |
build-args: ARCH=${{ matrix.architecture.suffix }} | |
- name: Purge old versions | |
if: contains(github.ref, 'refs/tags/v') | |
continue-on-error: true | |
uses: actions/delete-package-versions@v5 | |
with: | |
package-name: tebako-${{ matrix.container }}, tebako-${{ matrix.container }}-amd64, tebako-${{ matrix.container }}-arm64 | |
package-type: container | |
min-versions-to-keep: 10 | |
delete-only-untagged-versions: false | |
create-manifests: | |
name: Create manifest for ghcr.io/tamatebako/tebako-${{ matrix.container }} | |
runs-on: ubuntu-22.04 | |
needs: build-containers | |
permissions: | |
contents: read | |
packages: write | |
strategy: | |
fail-fast: false | |
matrix: | |
container: | |
- 'ubuntu-20.04' | |
- 'alpine-3.17' | |
steps: | |
- name: Log in to the Container registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: tamatebako | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create SHA manifest and push | |
run: | | |
for tag in $(echo "${{ needs.build-containers.outputs.tags }}" | tr ',' '\n'); do | |
base_tag=$(echo $tag | sed -E 's/.*:(.*)-(amd64|arm64)/\1/') | |
echo "Creating manifest for $tag, using base tag $base_tag" | |
docker manifest create \ | |
ghcr.io/tamatebako/tebako-${{ matrix.container }}:$base_tag \ | |
--amend ghcr.io/tamatebako/tebako-${{ matrix.container }}:$base_tag-amd64 \ | |
--amend ghcr.io/tamatebako/tebako-${{ matrix.container }}:$base_tag-arm64 | |
docker manifest push ghcr.io/tamatebako/tebako-${{ matrix.container }}:$base_tag | |
# Delete architecture specific tags | |
for arch in amd64 arm64; do | |
curl -X DELETE \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/packages/container/tamatebako/tebako-${{ matrix.container }}/versions/$base_tag-$arch" | |
done | |
done | |
curl -X DELETE \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/packages/container/tamatebako/amd64-tebako-ubuntu-20.04/versions/0.7.1 | |
test-packaging-in-container: | |
name: Package ${{ matrix.gem }} in ${{ matrix.container }} ${{ matrix.architecture.platform }} with Ruby ${{ matrix.package_ruby_ver }} | |
if: contains(github.ref, 'refs/tags/v') || github.event_name == 'workflow_run' | |
runs-on: ${{ matrix.architecture.host }} | |
needs: create-manifests | |
strategy: | |
fail-fast: false | |
matrix: | |
gem: | |
- 'fontist' | |
container: | |
- 'ubuntu-20.04' | |
- 'alpine-3.17' | |
architecture: | |
- { host: 'ubuntu-22.04', platform: linux/amd64 } | |
- { host: 'ubuntu-22.04-arm', platform: linux/arm64 } | |
package_ruby_ver: | |
- '3.2.6' | |
- '3.3.6' | |
container: | |
image: ghcr.io/tamatebako/tebako-${{ matrix.container }}:latest | |
options: --platform ${{ matrix.architecture.platform }} | |
steps: | |
- name: Checkout fontist | |
uses: actions/checkout@v4 | |
with: | |
repository: fontist/fontist | |
path: ${{github.workspace}}/fontist | |
- name: Package fontist | |
run: tebako press --root=fontist --entry-point=fontist --output=fontist-package --Ruby=${{ matrix.package_ruby_ver }} | |
- name: Run smoke test | |
run: ./fontist-package help | |
test-packaging-by-container: | |
name: Package ${{ matrix.gem }} by ${{ matrix.container }} ${{ matrix.architecture.platform }} container with Ruby ${{ matrix.package_ruby_ver }} | |
if: contains(github.ref, 'refs/tags/v') || github.event_name == 'workflow_run' | |
runs-on: ${{ matrix.architecture.host }} | |
needs: create-manifests | |
strategy: | |
fail-fast: false | |
matrix: | |
gem: | |
- 'fontist' | |
container: | |
- 'ubuntu-20.04' | |
- 'alpine-3.17' | |
architecture: | |
- { host: 'ubuntu-22.04', platform: linux/amd64 } | |
- { host: 'ubuntu-22.04-arm', platform: linux/arm64 } | |
package_ruby_ver: | |
- '3.2.6' | |
- '3.3.6' | |
steps: | |
- name: Checkout fontist | |
uses: actions/checkout@v4 | |
with: | |
repository: fontist/fontist | |
path: ${{github.workspace}}/fontist | |
- name: Package fontist | |
run: | | |
docker run --platform ${{ matrix.architecture.platform }} -v ${{github.workspace}}:/mnt/w -t ghcr.io/tamatebako/tebako-${{ matrix.container }}:latest \ | |
tebako press --root=/mnt/w/fontist --entry-point=fontist --output=/mnt/w/fontist-package --Ruby=${{ matrix.package_ruby_ver }} | |
- name: Run smoke test Ubuntu | |
if: contains(matrix.container, 'ubuntu') | |
run: ${{github.workspace}}/fontist-package help | |
- name: Run smoke test Alpine | |
if: contains(matrix.container, 'alpine') | |
run: docker run -v ${{github.workspace}}:/mnt/w -t alpine:latest /bin/sh -c "apk add --no-cache libstdc++; /mnt/w/fontist-package help" |