Files
git.stella-ops.org/scripts/scanner/package-analyzer.sh
StellaOps Bot e6119cbe91
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
up
2025-11-24 09:07:40 +02:00

47 lines
1.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Package a scanner analyzer plugin with checksum and SBOM.
# Usage: package-analyzer.sh <project-path> <name>
if [[ $# -lt 2 ]]; then
echo "Usage: $0 <project-path> <name>" >&2
exit 64
fi
PROJECT=$1
NAME=$2
CONFIG=${CONFIG:-Release}
RID=${RID:-linux-x64}
OUT_ROOT="out/scanner-analyzers/${NAME}"
PUBLISH_DIR="${OUT_ROOT}/publish"
mkdir -p "$PUBLISH_DIR"
if ! command -v dotnet >/dev/null 2>&1; then
echo "[analyzer] dotnet CLI not found" >&2
exit 69
fi
echo "[analyzer] publishing ${NAME} (${PROJECT}) for ${RID}"
dotnet publish "$PROJECT" -c "$CONFIG" -r "$RID" --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=false -o "$PUBLISH_DIR" >/dev/null
ARCHIVE="${OUT_ROOT}/${NAME}-${RID}.tar.gz"
tar -C "$PUBLISH_DIR" -czf "$ARCHIVE" .
sha256sum "$ARCHIVE" > "${ARCHIVE}.sha256"
if command -v syft >/dev/null 2>&1; then
syft "dir:${PUBLISH_DIR}" -o json > "${ARCHIVE}.sbom.json"
fi
cat > "${OUT_ROOT}/manifest.json" <<EOF
{
"name": "${NAME}",
"project": "${PROJECT}",
"rid": "${RID}",
"generated_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"archive": "$(basename "$ARCHIVE")"
}
EOF
echo "[analyzer] packaged ${NAME} at ${ARCHIVE}"