fix(sbom-ci): clean artifact layout + add limit input for test runs
- 아티팩트: 요약(trivy-summary.md/tsv)·sbom-index.tsv 를 최상위, 이미지별 상세 SBOM 을 sbom/ 하위로 배치. 절대경로 업로드 시 v4 가 전체 경로트리를 보존하던 문제를 스테이징 디렉토리 + 상대경로 업로드로 해결. - workflow_dispatch 에 limit 입력 추가(0=전체, 테스트 시 소수만 생성). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,12 @@ name: helm-catalog-sbom
|
||||
# 이미지를 지정해야 한다. (Settings > Secrets and variables > Actions > Variables)
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
limit:
|
||||
description: '대상 이미지 수 상한 (0=전체). 테스트 시 예: 3'
|
||||
required: false
|
||||
default: '0'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'manifests/helm/**'
|
||||
@@ -87,6 +92,8 @@ jobs:
|
||||
run: cp "$OUT_DIR/images_final.tsv" "$OUT_DIR/images_scan.tsv"
|
||||
|
||||
- name: SBOM 생성 (CycloneDX)
|
||||
env:
|
||||
LIMIT: ${{ github.event.inputs.limit || '0' }} # workflow_dispatch 테스트용 상한
|
||||
run: |
|
||||
if [ -s "$OUT_DIR/images_scan.tsv" ]; then
|
||||
bash doc/scripts/generate-sbom.sh "$OUT_DIR/images_scan.tsv" "$OUT_DIR"
|
||||
@@ -107,17 +114,29 @@ jobs:
|
||||
run: |
|
||||
if [ -f "$OUT_DIR/trivy-summary.md" ]; then cat "$OUT_DIR/trivy-summary.md" >> "$GITHUB_STEP_SUMMARY"; fi
|
||||
|
||||
- name: 아티팩트 업로드 (SBOM + 요약)
|
||||
# 아티팩트 레이아웃 정리: 요약·인덱스는 최상위, 이미지별 상세 SBOM 은 sbom/ 하위.
|
||||
# (절대경로로 업로드하면 v4 가 전체 경로트리를 보존하므로, 스테이징 후 상대경로로 업로드)
|
||||
- name: 아티팩트 레이아웃 정리
|
||||
if: always()
|
||||
run: |
|
||||
mkdir -p "$GITHUB_WORKSPACE/report/sbom"
|
||||
cd "$OUT_DIR" 2>/dev/null || exit 0
|
||||
# 최상위: 요약(md/tsv)·인덱스·병합 SBOM·실행 로그
|
||||
for f in trivy-summary.md trivy-summary.tsv sbom-index.tsv catalog.cdx.json; do
|
||||
[ -f "$f" ] && cp -f "$f" "$GITHUB_WORKSPACE/report/"
|
||||
done
|
||||
cp -f ./*.log "$GITHUB_WORKSPACE/report/" 2>/dev/null || true
|
||||
# 하위 sbom/: 이미지별 CycloneDX 상세 (.err 제외)
|
||||
cp -f sbom/*.cdx.json "$GITHUB_WORKSPACE/report/sbom/" 2>/dev/null || true
|
||||
echo "=== report/ 최상위 ==="; ls -1 "$GITHUB_WORKSPACE/report"
|
||||
echo "=== report/sbom 개수: $(ls -1 "$GITHUB_WORKSPACE/report/sbom" 2>/dev/null | wc -l) ==="
|
||||
|
||||
- name: 아티팩트 업로드
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sbom-and-vuln-report
|
||||
path: |
|
||||
${{ env.OUT_DIR }}/sbom/**
|
||||
${{ env.OUT_DIR }}/catalog.cdx.json
|
||||
${{ env.OUT_DIR }}/sbom-index.tsv
|
||||
${{ env.OUT_DIR }}/trivy-summary.*
|
||||
${{ env.OUT_DIR }}/*.log
|
||||
path: report # 상대경로 → 아티팩트 루트 = report/ 내용 (깔끔한 구조)
|
||||
if-no-files-found: warn
|
||||
|
||||
# 선택: PR 에서 CRITICAL 발견 시 실패 게이트 (필요 시 주석 해제)
|
||||
|
||||
Reference in New Issue
Block a user