Skip to content

Fix latest tag manifest #144

Fix latest tag manifest

Fix latest tag manifest #144

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=${{ contains(github.ref, 'refs/tags/v') }}
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=${{ contains(github.ref, 'refs/tags/v') }}
type=semver,pattern={{major}}-${{ matrix.architecture.suffix2 }},value=${{ env.VERSION }},enable=${{ github.event_name == 'workflow_run' }}
type=semver,pattern={{major}}-${{ matrix.architecture.suffix2 }},enable=${{ contains(github.ref, 'refs/tags/v') }}
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: ${{ 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: amd64-tebako-${{ matrix.container }}
package-type: container
min-versions-to-keep: 0
delete-only-untagged-versions: false
create-manifests:
name: Create manifest for ghcr.io/tamatebako/tebako-${{ matrix.container }}
if: contains(github.ref, 'refs/tags/v') || github.event_name == 'workflow_run'
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
if [[ $tag == *:latest ]]; then
base_tag="latest"
else
base_tag=$(echo $tag | sed -E 's/.*:(.*)-(amd64|arm64)/\1/')
fi
echo "Processing $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
done
dispatch-dependent-repositories:
name: Dispatch dependent repositories
if: contains(github.ref, 'refs/tags/v') || github.event_name == 'workflow_run'
needs: create-manifests
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set GITHUB_REF
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: Dispatch dependent repositories
uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.TEBAKO_CI_PAT_TOKEN }}
repository: tamatebako/tebako-samples
event-type: 'tebako release'
client-payload: '{ "tag": "v${{ env.VERSION }}" }'
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"