Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 0 additions & 31 deletions .github/workflows/main.yml

This file was deleted.

63 changes: 63 additions & 0 deletions .github/workflows/publish-by-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: publish-by-tag

on:
push:
tags:
- "build/*/v*"

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

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

- name: Parse build tag
id: parse
run: ./scripts/parse-build-tag.sh "${GITHUB_REF_NAME}" "${GITHUB_OUTPUT}"

- name: Resolve variant
id: resolve
env:
DOCKER_USER: ${{ secrets.DOCKER_HUB_USERNAME }}
run: |
./scripts/resolve-variant.sh \
--variant-id "${{ steps.parse.outputs.variant_id }}" \
--release "${{ steps.parse.outputs.release }}" \
--docker-user "${DOCKER_USER}" \
--output "${GITHUB_OUTPUT}"

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
platforms: ${{ steps.resolve.outputs.platforms }}
tags: ${{ steps.resolve.outputs.tags }}
build-args: |
UBUNTU_VERSION=${{ steps.resolve.outputs.ubuntu_version }}
APT_PROFILE=${{ steps.resolve.outputs.apt_profile }}
APT_PACKAGES_CSV=${{ steps.resolve.outputs.apt_packages_csv }}
JAVA_DEFAULT=${{ steps.resolve.outputs.java_default }}
SDK_PACKAGES_CSV=${{ steps.resolve.outputs.sdk_packages_csv }}
ENABLE_PROFILER=${{ steps.resolve.outputs.enable_profiler }}
ENABLE_PYTHON2=${{ steps.resolve.outputs.enable_python2 }}
ENABLE_GCC14=${{ steps.resolve.outputs.enable_gcc14 }}
ENABLE_EMULATOR=${{ steps.resolve.outputs.enable_emulator }}
ENABLE_MARATHON=${{ steps.resolve.outputs.enable_marathon }}
MARATHON_VERSION=${{ steps.resolve.outputs.marathon_version }}
123 changes: 123 additions & 0 deletions .github/workflows/release-all-missing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: release-all-missing

on:
workflow_dispatch:
inputs:
release:
description: "Release suffix in vN format (example: v6)"
required: true
type: string
dry_run:
description: "Build without pushing images"
required: true
default: true
type: boolean
max_parallel:
description: "Maximum number of parallel variant builds"
required: true
default: "3"
type: string

concurrency:
group: release-all-${{ inputs.release }}
cancel-in-progress: false

jobs:
discover:
runs-on: ubuntu-latest
outputs:
missing_count: ${{ steps.missing.outputs.missing_count }}
matrix: ${{ steps.missing.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

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

- name: Validate release format
run: |
if [[ ! "${{ inputs.release }}" =~ ^v[0-9]+$ ]]; then
echo "Invalid release format: ${{ inputs.release }} (expected vN)" >&2
exit 1
fi

- name: Find missing variants
id: missing
env:
DOCKER_USER: ${{ secrets.DOCKER_HUB_USERNAME }}
run: |
./scripts/list-missing-for-release.sh \
--release "${{ inputs.release }}" \
--docker-user "${DOCKER_USER}" \
--output "${GITHUB_OUTPUT}"

build-missing:
needs: discover
if: ${{ needs.discover.outputs.missing_count != '0' }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: ${{ fromJSON(inputs.max_parallel) }}
matrix: ${{ fromJson(needs.discover.outputs.matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

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

- name: Resolve variant
id: resolve
env:
DOCKER_USER: ${{ secrets.DOCKER_HUB_USERNAME }}
run: |
./scripts/resolve-variant.sh \
--variant-id "${{ matrix.variant_id }}" \
--release "${{ inputs.release }}" \
--docker-user "${DOCKER_USER}" \
--output "${GITHUB_OUTPUT}"

- name: Build and optionally push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: ${{ !inputs.dry_run }}
platforms: ${{ steps.resolve.outputs.platforms }}
tags: ${{ steps.resolve.outputs.tags }}
build-args: |
UBUNTU_VERSION=${{ steps.resolve.outputs.ubuntu_version }}
APT_PROFILE=${{ steps.resolve.outputs.apt_profile }}
APT_PACKAGES_CSV=${{ steps.resolve.outputs.apt_packages_csv }}
JAVA_DEFAULT=${{ steps.resolve.outputs.java_default }}
SDK_PACKAGES_CSV=${{ steps.resolve.outputs.sdk_packages_csv }}
ENABLE_PROFILER=${{ steps.resolve.outputs.enable_profiler }}
ENABLE_PYTHON2=${{ steps.resolve.outputs.enable_python2 }}
ENABLE_GCC14=${{ steps.resolve.outputs.enable_gcc14 }}
ENABLE_EMULATOR=${{ steps.resolve.outputs.enable_emulator }}
ENABLE_MARATHON=${{ steps.resolve.outputs.enable_marathon }}
MARATHON_VERSION=${{ steps.resolve.outputs.marathon_version }}

nothing-missing:
needs: discover
if: ${{ needs.discover.outputs.missing_count == '0' }}
runs-on: ubuntu-latest
steps:
- name: No-op
run: echo "All variants already exist for release ${{ inputs.release }}"
31 changes: 31 additions & 0 deletions .github/workflows/validate-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: validate-config

on:
pull_request:
push:

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Validate variants schema and content
run: ./scripts/validate-variants.sh

- name: Validate build tag parser for all variants
run: |
for variant_id in $(jq -r '.variants | keys[]' variants.json); do
./scripts/parse-build-tag.sh "build/${variant_id}/v9999" >/dev/null
done

- name: Validate variant resolution for all variants
run: |
for variant_id in $(jq -r '.variants | keys[]' variants.json); do
./scripts/resolve-variant.sh \
--variant-id "${variant_id}" \
--release "v9999" \
--docker-user "example" \
>/dev/null
done
Loading
Loading