Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
85d0780
CARRY: Add Konflux hermetic build Dockerfiles for gateway and supervisor
andre-motta Jul 28, 2026
01f156e
Merge remote-tracking branch 'upstream/main'
moulalis Jul 28, 2026
3b91cbf
CARRY: regenerate RPM lockfiles from public UBI repos
mprpic Jul 28, 2026
8a31e85
Merge pull request #7 from opendatahub-io/fix/konflux-hermetic-lockfiles
mprpic Jul 28, 2026
c8bf66a
CARRY: Fix cachi2 output path for prefetched artifacts
andre-motta Jul 28, 2026
e8af596
Merge pull request #9 from opendatahub-io/fix/konflux-cachi2-paths
andre-motta Jul 28, 2026
909cb65
Merge remote-tracking branch 'upstream/main'
moulalis Jul 28, 2026
8bd14d7
Merge remote-tracking branch 'upstream/main'
moulalis Jul 29, 2026
0791b86
Merge remote-tracking branch 'upstream/main'
moulalis Jul 29, 2026
f1f6f7a
Merge remote-tracking branch 'upstream/main'
moulalis Jul 29, 2026
09abc18
CI: update Tekton pipelines
github-actions[bot] Jul 28, 2026
3f77caa
Merge remote-tracking branch 'upstream/main'
moulalis Jul 29, 2026
a91aaac
CARRY: fix supervisor arm64 build and cross-arch local builds
mprpic Jul 29, 2026
83f4cb4
CARRY: Add RHAIV auto-tag workflow
andre-motta Jul 29, 2026
d54d4a8
Merge pull request #14 from opendatahub-io/fix/supervisor-arm64-lockfile
mprpic Jul 29, 2026
b28f913
CI: update Tekton pipelines
github-actions[bot] Jul 29, 2026
76aff7d
Merge pull request #12 from opendatahub-io/ci-openshell-1785337598
mprpic Jul 29, 2026
da6c0d8
Merge remote-tracking branch 'upstream/main'
moulalis Jul 29, 2026
7f6b4a9
Merge pull request #13 from opendatahub-io/feat/rhaiv-auto-tag
andre-motta Jul 29, 2026
956080d
CARRY: fix rhaiv-auto-tag to push by keeping checkout credentials
andre-motta Jul 29, 2026
7fb271f
Merge pull request #15 from opendatahub-io/fix/rhaiv-auto-tag-creds
andre-motta Jul 29, 2026
4635b69
Merge remote-tracking branch 'upstream/main'
moulalis Jul 30, 2026
95ff685
Merge remote-tracking branch 'upstream/main'
moulalis Jul 30, 2026
4b6caf9
Merge remote-tracking branch 'upstream/main'
moulalis Jul 30, 2026
485fad4
CARRY: create -rhaiv.N tags instead of +rhaiv.N
mprpic Jul 30, 2026
d15ffc7
Merge pull request #16 from opendatahub-io/rhaiv-dash-tags
andre-motta Jul 30, 2026
cfe4b4e
Merge remote-tracking branch 'upstream/main'
moulalis Jul 30, 2026
04de852
CARRY: stamp rhaiv version into konflux binaries
mprpic Jul 30, 2026
d8940b9
Merge remote-tracking branch 'upstream/main'
moulalis Jul 31, 2026
5af3314
Merge pull request #17 from opendatahub-io/rhaiv-binary-version
mprpic Jul 31, 2026
75a81b7
CI: update Tekton pipelines
github-actions[bot] Jul 31, 2026
67c4a28
Merge pull request #19 from opendatahub-io/ci-openshell-1785506451
mprpic Jul 31, 2026
d5a2d42
Merge remote-tracking branch 'upstream/main'
moulalis Jul 31, 2026
b296358
Merge remote-tracking branch 'upstream/main'
moulalis Jul 31, 2026
87fa3d0
Merge remote-tracking branch 'upstream/main'
moulalis Aug 1, 2026
b451534
Merge remote-tracking branch 'upstream/main'
moulalis Aug 1, 2026
4408a7f
Merge remote-tracking branch 'upstream/main'
moulalis Aug 1, 2026
5a4c793
Merge remote-tracking branch 'upstream/main'
moulalis Aug 3, 2026
c44f0e0
Merge remote-tracking branch 'upstream/main'
mchamsed-rh Aug 3, 2026
f4a525d
Merge remote-tracking branch 'upstream/main'
moulalis Aug 3, 2026
7a27b37
CARRY: always create initial -rhaiv.0 tag for new upstream versions
andre-motta Aug 3, 2026
ba801d1
Merge pull request #20 from opendatahub-io/fix/rhaiv-auto-tag-skip-logic
andre-motta Aug 3, 2026
4ff8312
Merge remote-tracking branch 'upstream/main'
moulalis Aug 4, 2026
cdb39af
CARRY: Configure MintMaker to refresh RPM lockfiles
mprpic Aug 4, 2026
6a5d917
Merge pull request #21 from opendatahub-io/konflux-rpm-lockfile-renovate
mprpic Aug 4, 2026
8771c3a
Merge remote-tracking branch 'upstream/main'
moulalis Aug 4, 2026
85200b6
Merge remote-tracking branch 'upstream/main'
moulalis Aug 4, 2026
43aaa5c
Merge remote-tracking branch 'upstream/main'
moulalis Aug 5, 2026
7d4e29c
Merge remote-tracking branch 'upstream/main'
moulalis Aug 6, 2026
857607b
Merge remote-tracking branch 'upstream/main'
moulalis Aug 6, 2026
ece68cd
Merge remote-tracking branch 'upstream/main'
alexxfan Aug 7, 2026
7119954
Merge remote-tracking branch 'upstream/main'
moulalis Aug 7, 2026
c3ee5bd
Merge remote-tracking branch 'upstream/main'
moulalis Aug 7, 2026
107340c
Merge remote-tracking branch 'upstream/main'
moulalis Aug 10, 2026
f582ae2
Merge remote-tracking branch 'upstream/main'
moulalis Aug 10, 2026
ad84567
CARRY: add hermetic CLI container image for Konflux
andre-motta Aug 10, 2026
aa3ed64
Merge remote-tracking branch 'upstream/main'
moulalis Aug 10, 2026
e6a4730
Merge pull request #22 from opendatahub-io/konflux-cli-image
andre-motta Aug 10, 2026
4788034
Merge remote-tracking branch 'upstream/main'
moulalis Aug 10, 2026
de5b3ce
Merge remote-tracking branch 'upstream/main'
moulalis Aug 11, 2026
1ffd2ba
CI: update Tekton pipelines
github-actions[bot] Aug 11, 2026
c06ef02
Merge pull request #24 from opendatahub-io/ci-openshell-1786450432
andre-motta Aug 11, 2026
fa0130c
CARRY: build Konflux supervisor and CLI images with static glibc inst…
EmilienM Aug 11, 2026
5724070
Merge remote-tracking branch 'upstream/main'
moulalis Aug 11, 2026
ccacc37
Merge pull request #25 from EmilienM/glibc-static
andre-motta Aug 11, 2026
00ca314
Merge remote-tracking branch 'upstream/main'
moulalis Aug 12, 2026
7438101
Merge remote-tracking branch 'upstream/main'
moulalis Aug 12, 2026
bc7b73c
Merge remote-tracking branch 'upstream/main'
moulalis Aug 13, 2026
28cc309
Merge remote-tracking branch 'upstream/main'
moulalis Aug 13, 2026
87cc5d9
Merge remote-tracking branch 'upstream/main'
moulalis Aug 13, 2026
d031e12
Merge remote-tracking branch 'upstream/main'
moulalis Aug 13, 2026
7a548da
Merge remote-tracking branch 'upstream/main'
moulalis Aug 14, 2026
020d946
Merge remote-tracking branch 'upstream/main'
moulalis Aug 14, 2026
9f9372e
Merge remote-tracking branch 'upstream/main'
moulalis Aug 14, 2026
b8d0335
Merge remote-tracking branch 'upstream/main'
moulalis Aug 14, 2026
67ec34f
Merge remote-tracking branch 'upstream/main'
moulalis Aug 15, 2026
69c17c7
Merge remote-tracking branch 'upstream/main'
moulalis Aug 15, 2026
4a368be
Merge remote-tracking branch 'upstream/main'
moulalis Aug 17, 2026
d2dced7
Merge remote-tracking branch 'upstream/main'
moulalis Aug 17, 2026
def346f
Merge remote-tracking branch 'upstream/main'
moulalis Aug 18, 2026
ce53981
Merge remote-tracking branch 'upstream/main'
moulalis Aug 18, 2026
48d7816
Merge remote-tracking branch 'upstream/main'
moulalis Aug 18, 2026
de7e564
Merge remote-tracking branch 'upstream/main'
moulalis Aug 18, 2026
d67f119
Merge remote-tracking branch 'upstream/main'
moulalis Aug 19, 2026
08b287e
Merge remote-tracking branch 'upstream/main'
moulalis Aug 19, 2026
4acb42d
Merge remote-tracking branch 'upstream/main'
moulalis Aug 19, 2026
7df70ed
Merge remote-tracking branch 'upstream/main'
moulalis Aug 20, 2026
50e4ee9
Merge remote-tracking branch 'upstream/main'
moulalis Aug 20, 2026
00381d9
Merge remote-tracking branch 'upstream/main'
moulalis Aug 20, 2026
c895136
Merge remote-tracking branch 'upstream/main'
moulalis Aug 20, 2026
e800978
Merge remote-tracking branch 'upstream/main'
moulalis Aug 20, 2026
03ec6ce
Merge remote-tracking branch 'upstream/main'
moulalis Aug 21, 2026
681c9b2
Merge remote-tracking branch 'upstream/main'
moulalis Aug 21, 2026
3142b61
Merge remote-tracking branch 'upstream/main'
moulalis Aug 21, 2026
49eaee9
Merge remote-tracking branch 'upstream/main'
moulalis Aug 21, 2026
f85cc8b
Merge remote-tracking branch 'upstream/main'
moulalis Aug 24, 2026
2052a6b
Merge remote-tracking branch 'upstream/main'
moulalis Aug 24, 2026
bc59131
Merge remote-tracking branch 'upstream/main'
moulalis Aug 24, 2026
36bd35c
Merge remote-tracking branch 'upstream/main'
moulalis Aug 24, 2026
83e0c1d
Merge remote-tracking branch 'upstream/main'
moulalis Aug 24, 2026
fa18eb2
Merge remote-tracking branch 'upstream/main'
moulalis Aug 25, 2026
adbecea
Merge remote-tracking branch 'upstream/main'
moulalis Aug 25, 2026
b19c88e
Merge remote-tracking branch 'upstream/main'
moulalis Aug 25, 2026
d235b86
Merge remote-tracking branch 'upstream/main'
moulalis Aug 25, 2026
97dc944
Merge remote-tracking branch 'upstream/main'
moulalis Aug 26, 2026
34cfe00
chore(deps): refresh rpm lockfiles
red-hat-konflux[bot] Aug 26, 2026
9fc563f
Merge remote-tracking branch 'upstream/main'
moulalis Aug 26, 2026
f4f5185
Merge pull request #27 from opendatahub-io/konflux/mintmaker/main/loc…
andre-motta Aug 26, 2026
5f0ed14
Merge remote-tracking branch 'upstream/main'
moulalis Aug 26, 2026
5a06563
Merge remote-tracking branch 'upstream/main'
moulalis Aug 26, 2026
577fe09
Merge remote-tracking branch 'upstream/main'
moulalis Aug 27, 2026
54d8945
Merge remote-tracking branch 'upstream/main'
moulalis Aug 27, 2026
231ffcb
Merge remote-tracking branch 'upstream/main'
moulalis Aug 27, 2026
c084d6d
chore(deps): refresh rpm lockfiles
red-hat-konflux[bot] Aug 28, 2026
58e3414
Merge remote-tracking branch 'upstream/main'
jgarciao Sep 2, 2026
a500dbf
Merge pull request #29 from opendatahub-io/konflux/mintmaker/main/loc…
andre-motta Sep 2, 2026
6982eb5
Merge remote-tracking branch 'upstream/main'
moulalis Sep 2, 2026
295a3fb
CARRY: Migrate Konflux base images to RHEL 9.8
EmilienM Sep 1, 2026
0ccd5fd
fix(konflux): build gateway package
EmilienM Sep 2, 2026
69b865e
Merge pull request #32 from EmilienM/rhel-9.8-migration
EmilienM Sep 2, 2026
66a9e18
Merge remote-tracking branch 'upstream/main'
moulalis Sep 2, 2026
6ff3fce
CARRY: compile telemetry out of gateway/supervisor
mprpic Sep 2, 2026
217e601
Merge pull request #33 from opendatahub-io/disable-telemetry
andre-motta Sep 2, 2026
d3df896
Merge remote-tracking branch 'upstream/main'
moulalis Sep 3, 2026
ff9244f
chore(deps): refresh rpm lockfiles [SECURITY]
red-hat-konflux[bot] Sep 3, 2026
3d01800
chore(deps): refresh rpm lockfiles
red-hat-konflux[bot] Sep 3, 2026
0168d92
Merge remote-tracking branch 'upstream/main'
moulalis Sep 3, 2026
06c61ea
Merge remote-tracking branch 'upstream/main'
moulalis Sep 3, 2026
72d554e
Merge pull request #28 from opendatahub-io/konflux/mintmaker/main/loc…
EmilienM Sep 3, 2026
b61f95e
Merge pull request #34 from opendatahub-io/konflux/mintmaker/main/loc…
EmilienM Sep 3, 2026
98f20a6
Merge remote-tracking branch 'upstream/main'
moulalis Sep 3, 2026
6583d37
Merge remote-tracking branch 'upstream/main'
moulalis Sep 3, 2026
eeeb2ae
Merge remote-tracking branch 'upstream/main'
moulalis Sep 4, 2026
ed7c90e
fix(server): preserve in-memory SQLite across reconnects
EmilienM Sep 4, 2026
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
329 changes: 283 additions & 46 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
@@ -1,94 +1,331 @@
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: Docker Build

on:
workflow_call:
inputs:
component:
description: "Component to build (gateway, supervisor, cli)"
required: true
type: string
binary:
required: true
timeout-minutes:
description: "Per-arch Docker image job timeout in minutes"
required: false
type: number
default: 20
push:
description: "Push image to registry"
required: false
type: boolean
default: true
platform:
description: "Target platform(s) for Docker build"
required: false
type: string
target-suffix:
required: true
default: "linux/amd64,linux/arm64"
runner:
description: "Deprecated; per-arch native runners are selected automatically"
required: false
type: string
default: "linux-amd64-cpu8"
cargo-version:
description: "Pre-computed cargo version (skips internal git-based computation)"
required: false
type: string
default: ""
auditable:
description: "Embed cargo-auditable dependency metadata in image binaries"
required: false
type: boolean
default: false
image-tag:
description: "Image tag base to build/push (defaults to the GitHub SHA)"
required: false
type: string
default: ""
checkout-ref:
description: "Git ref to check out for build inputs (defaults to the workflow SHA)"
required: false
type: string
default: ""
publish-manifest:
description: "Push the bare-SHA manifest. Set false for single-arch branch workflows."
required: false
type: boolean
default: true

env:
MISE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

permissions:
contents: read
packages: write

defaults:
run:
shell: bash

jobs:
build:
name: ${{ inputs.component }} (${{ matrix.platform }})
resolve:
name: Resolve build plan
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.resolve.outputs.matrix }}
platform_count: ${{ steps.resolve.outputs.platform_count }}
arches: ${{ steps.resolve.outputs.arches }}
binary_component: ${{ steps.resolve.outputs.binary_component }}
binary_name: ${{ steps.resolve.outputs.binary_name }}
artifact_prefix: ${{ steps.resolve.outputs.artifact_prefix }}
image_tag_base: ${{ steps.resolve.outputs.image_tag_base }}
features: ${{ steps.resolve.outputs.features }}
has_image: ${{ steps.resolve.outputs.has_image }}
steps:
- name: Resolve component and platform matrix
id: resolve
run: |
set -euo pipefail

component="${{ inputs.component }}"
case "$component" in
gateway)
binary_component=gateway
binary_name=openshell-gateway
features="bundled-z3"
has_image=true
;;
supervisor)
binary_component=sandbox
binary_name=openshell-sandbox
features=""
has_image=true
;;
cli)
binary_component=cli
binary_name=openshell
features=""
has_image=true
;;
*)
echo "unsupported component: $component" >&2
exit 1
;;
esac

image_tag_base="${{ inputs['image-tag'] }}"
if [[ -z "$image_tag_base" ]]; then
image_tag_base="$GITHUB_SHA"
fi

platform_input="${{ inputs.platform }}"
platform_input="${platform_input//[[:space:]]/}"
if [[ -z "$platform_input" ]]; then
echo "platform input must not be empty" >&2
exit 1
fi

IFS=',' read -r -a platforms <<< "$platform_input"
matrix='{"include":['
arches=()
count=0

for platform in "${platforms[@]}"; do
case "$platform" in
linux/amd64)
arch=amd64
runner=linux-amd64-cpu8
;;
linux/arm64)
arch=arm64
runner=linux-arm64-cpu8
;;
*)
echo "unsupported platform: $platform" >&2
echo "supported platforms: linux/amd64, linux/arm64" >&2
exit 1
;;
esac

if [[ $count -gt 0 ]]; then
matrix+=','
fi
matrix+='{"platform":"'"$platform"'","arch":"'"$arch"'","runner":"'"$runner"'"}'
arches+=("$arch")
count=$((count + 1))
done

matrix+=']}'
{
echo "matrix=$matrix"
echo "platform_count=$count"
echo "arches=${arches[*]}"
echo "binary_component=$binary_component"
echo "binary_name=$binary_name"
echo "artifact_prefix=rust-binary-${component}"
echo "image_tag_base=$image_tag_base"
echo "features=$features"
echo "has_image=$has_image"
} >> "$GITHUB_OUTPUT"

rust-binary:
name: Rust ${{ needs.resolve.outputs.binary_component }} (${{ matrix.arch }})
needs: resolve
permissions:
contents: read
packages: read
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
rust_arch: x86_64
platform: linux/amd64
runner: linux-amd64-cpu8
- arch: arm64
rust_arch: aarch64
platform: linux/arm64
runner: linux-arm64-cpu8
matrix: ${{ fromJSON(needs.resolve.outputs.matrix) }}
uses: ./.github/workflows/rust-native-build.yml
with:
component: ${{ needs.resolve.outputs.binary_component }}
arch: ${{ matrix.arch }}
cargo-version: ${{ inputs['cargo-version'] }}
image-tag: ${{ needs.resolve.outputs.image_tag_base }}
checkout-ref: ${{ inputs['checkout-ref'] }}
features: ${{ needs.resolve.outputs.features }}
auditable: ${{ inputs.auditable }}
artifact-name: ${{ needs.resolve.outputs.artifact_prefix }}-linux-${{ matrix.arch }}
secrets: inherit

build:
name: Build ${{ inputs.component }} (${{ matrix.arch }})
needs: [resolve, rust-binary]
if: needs.resolve.outputs.has_image == 'true'
runs-on: ${{ matrix.runner }}
timeout-minutes: 20
timeout-minutes: ${{ inputs['timeout-minutes'] }}
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.resolve.outputs.matrix) }}
container:
image: ghcr.io/nvidia/openshell/ci:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
options: --privileged
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Expose the nv-gha-runners buildkitd.toml registry mirror config
# inside the container so setup-buildx can read it.
- /etc/buildkit:/etc/buildkit:ro
env:
IMAGE_TAG: ${{ format('{0}-{1}', needs.resolve.outputs.image_tag_base, matrix.arch) }}
IMAGE_REGISTRY: ghcr.io/nvidia/openshell
DOCKER_PUSH: ${{ inputs.push && '1' || '0' }}
DOCKER_PLATFORM: ${{ matrix.platform }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ inputs['checkout-ref'] || github.sha }}
fetch-depth: 0

- name: Mark workspace safe for git
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Install tools
run: mise install --locked

- name: Log in to GHCR
if: ${{ inputs.push }}
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin

- name: Set up buildx (local driver)
uses: ./.github/actions/setup-buildx
with:
buildkitd-config: /etc/buildkit/buildkitd.toml

- uses: ./.github/actions/build-docker-image
- name: Download Rust binary artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
component: ${{ inputs.component }}
binary: ${{ inputs.binary }}
triple: ${{ matrix.rust_arch }}-${{ inputs['target-suffix'] }}
arch: ${{ matrix.arch }}
platform: ${{ matrix.platform }}
image-tag: ${{ inputs.image-tag || github.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}

manifest:
name: ${{ inputs.component }} manifest
needs: build
name: ${{ needs.resolve.outputs.artifact_prefix }}-linux-${{ matrix.arch }}
path: prebuilt-rust-binary

- name: Stage Rust binary in Docker build context
run: |
set -euo pipefail
binary="${{ needs.resolve.outputs.binary_name }}"
download_dir="prebuilt-rust-binary"
stage="deploy/docker/.build/prebuilt-binaries/${{ matrix.arch }}"
found="$(find "$download_dir" -type f -name "$binary" -print -quit)"
if [[ -z "$found" ]]; then
echo "missing downloaded artifact file: $binary" >&2
find "$download_dir" -maxdepth 4 -type f -print >&2 || true
exit 1
fi
mkdir -p "$stage"
install -m 0755 "$found" "$stage/$binary"
ls -lh "$stage/"

- name: Build ${{ inputs.component }} image
env:
DOCKER_BUILDER: openshell
run: |
set -euo pipefail
mise exec -- tasks/scripts/docker-build-image.sh "${{ inputs.component }}" \
--cache-from "type=gha,scope=${{ inputs.component }}-${{ matrix.arch }}" \
--cache-to "type=gha,mode=max,scope=${{ inputs.component }}-${{ matrix.arch }}"

- name: Smoke check ${{ inputs.component }} image
run: |
set -euo pipefail
image="${IMAGE_REGISTRY}/${{ inputs.component }}:${IMAGE_TAG}"
case "${{ inputs.component }}" in
gateway)
output="$(docker run --rm --platform "${{ matrix.platform }}" "$image" --version)"
echo "$output"
grep -q '^openshell-gateway ' <<<"$output"
;;
supervisor)
output="$(docker run --rm --platform "${{ matrix.platform }}" --entrypoint /openshell-sandbox "$image" --version)"
echo "$output"
grep -q '^openshell-sandbox ' <<<"$output"
;;
cli)
output="$(docker run --rm --platform "${{ matrix.platform }}" "$image" --version)"
echo "$output"
grep -q '^openshell ' <<<"$output"
;;
esac

merge:
name: Merge ${{ inputs.component }} manifest
needs: [resolve, build]
if: ${{ inputs.push && inputs['publish-manifest'] && needs.resolve.outputs.has_image == 'true' }}
runs-on: linux-amd64-cpu8
timeout-minutes: 10
container:
image: ghcr.io/nvidia/openshell/ci:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ inputs['checkout-ref'] || github.sha }}

- name: Log in to GHCR
shell: bash
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${GITHUB_ACTOR}" --password-stdin
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin

- name: Create manifest
shell: bash
env:
IMAGE_TAG: ${{ inputs.image-tag || github.sha }}
INPUTS_COMPONENT: ${{ inputs.component }}
- name: Create multi-arch manifest
run: |
image=ghcr.io/nvidia/openshell/${INPUTS_COMPONENT}
set -euo pipefail
image="ghcr.io/nvidia/openshell/${{ inputs.component }}"
refs=()
for arch in ${{ needs.resolve.outputs.arches }}; do
refs+=("${image}:${{ needs.resolve.outputs.image_tag_base }}-${arch}")
done
docker buildx imagetools create \
--prefer-index=false \
--tag "$image:${IMAGE_TAG}" \
"$image:${IMAGE_TAG}-amd64" \
"$image:${IMAGE_TAG}-arm64"
-t "${image}:${{ needs.resolve.outputs.image_tag_base }}" \
"${refs[@]}"

- name: Verify merged manifest SBOM attestation
shell: bash
env:
IMAGE_REF: ghcr.io/nvidia/openshell/${{ inputs.component }}:${{ inputs.image-tag || github.sha }}
run: tasks/scripts/verify-image-sbom.sh "${IMAGE_REF}" --require-cargo
IMAGE_REF: ghcr.io/nvidia/openshell/${{ inputs.component }}:${{ needs.resolve.outputs.image_tag_base }}
REQUIRE_CARGO: ${{ inputs.auditable }}
run: |
args=("${IMAGE_REF}")
if [[ "${REQUIRE_CARGO}" == "true" ]]; then
args+=(--require-cargo)
fi
tasks/scripts/verify-image-sbom.sh "${args[@]}"
Loading
Loading