#!/usr/bin/env bash set -euo pipefail if [[ $# -lt 2 ]]; then echo "Usage: $0 [additional docker buildx args...]" >&2 exit 64 fi context=$1 shift image_tag=$1 shift || true builder_args=("$@") : "${STELLAOPS_BUILDX_PUBLISH_DIR:=out/buildx}" : "${STELLAOPS_BUILDX_DLL:=${STELLAOPS_BUILDX_PUBLISH_DIR}/StellaOps.Scanner.Sbomer.BuildXPlugin.dll}" : "${STELLAOPS_BUILDX_MANIFEST_DIR:=${STELLAOPS_BUILDX_PUBLISH_DIR}}" : "${STELLAOPS_BUILDX_CAS_ROOT:=out/cas}" : "${STELLAOPS_SURFACE_TENANT:=default}" : "${STELLAOPS_SURFACE_CACHE_ROOT:=${STELLAOPS_BUILDX_CAS_ROOT}}" : "${STELLAOPS_SURFACE_MANIFEST_OUTPUT:=out/surface-manifest.json}" : "${STELLAOPS_SBOM_PATH:=out/buildx-sbom.cdx.json}" : "${STELLAOPS_SBOM_FORMAT:=cyclonedx-json}" : "${STELLAOPS_SBOM_MEDIA_TYPE:=application/vnd.cyclonedx+json}" : "${STELLAOPS_SBOM_KIND:=inventory}" : "${STELLAOPS_SBOM_ARTIFACT_TYPE:=application/vnd.stellaops.sbom.layer+json}" : "${STELLAOPS_SUBJECT_MEDIA_TYPE:=application/vnd.oci.image.manifest.v1+json}" : "${STELLAOPS_PREDICATE_TYPE:=https://slsa.dev/provenance/v1}" mkdir -p "$STELLAOPS_BUILDX_PUBLISH_DIR" "$STELLAOPS_BUILDX_CAS_ROOT" "$(dirname "$STELLAOPS_SBOM_PATH")" "$(dirname "$STELLAOPS_SURFACE_MANIFEST_OUTPUT")" if [[ ! -s "$STELLAOPS_BUILDX_DLL" ]]; then echo "Publishing BuildX plug-in to $STELLAOPS_BUILDX_PUBLISH_DIR" >&2 dotnet publish src/Scanner/StellaOps.Scanner.Sbomer.BuildXPlugin/StellaOps.Scanner.Sbomer.BuildXPlugin.csproj \ -c Release \ -o "$STELLAOPS_BUILDX_PUBLISH_DIR" fi if [[ ! -d "$STELLAOPS_BUILDX_MANIFEST_DIR" ]]; then echo "Manifest directory missing" >&2 exit 65 fi if ! command -v docker >/dev/null 2>&1; then echo "docker CLI is not available in this environment" >&2 exit 69 fi set -x format={{index