From d4495040888497f21f5eb32914c2f97ffb8589c5 Mon Sep 17 00:00:00 2001 From: wbsong111 Date: Tue, 4 Aug 2026 15:26:17 +0900 Subject: [PATCH] =?UTF-8?q?self-build-image:=20=EC=9E=90=EB=8F=99=20PR=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=A0=9C=EA=B1=B0,=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=20push=20+=20compare=20=EB=A7=81=ED=81=AC=20=EC=95=88?= =?UTF-8?q?=EB=82=B4=EB=A1=9C=20=EB=8C=80=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GITHUB_TOKEN 으로 PR 을 생성하는 것 자체를 조직 정책이 막는다는 것을 실측으로 확인했다(run 30882785612, GraphQL: "GitHub Actions is not permitted to create or approve pull requests") — 리포 설정으로 못 바꾸는 제약이라 gh pr create 호출을 워크플로에서 없앤다. 브랜치 커밋·push 까지는 그대로 자동화하고, PR 오픈은 Job Summary 에 남는 compare 링크로 사람이 직접 하도록 바꿨다. 더 이상 쓰지 않는 pull-requests: write 권한도 제거. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/build-image.yml | 49 ++++++++++++++++++------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 1010f1e..63dcd61 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -19,15 +19,22 @@ name: self-build-image # 빌드는 호스트 러너여야 한다. # # 트리거 2종이 같은 스텝(빌드→verify.sh→SBOM→scan-sbom.sh→cve-gate.py)을 돈다. -# 차이는 대상 이미지를 어떻게 정하는지, 그리고 push·카탈로그 PR 생성 여부뿐이다. +# 차이는 대상 이미지를 어떻게 정하는지, 그리고 push·카탈로그 브랜치 push 여부뿐이다. # # pull_request(images/**) 변경된 images// 디렉토리를 diff 로 자동 탐지해 그 -# 이미지들만 검증한다(push·카탈로그 PR 생성 없음). 여러 이미지가 +# 이미지들만 검증한다(push·카탈로그 브랜치 없음). 여러 이미지가 # 한 PR 에서 바뀌면 각각 매트릭스로 병렬 실행된다. -# workflow_dispatch `image` 입력으로 대상을 명시한다. 실제 빌드·push·카탈로그 PR -# 생성은 이 트리거로만 일어난다(사람이 수동 실행) — sbom.yml 의 -# 게이트는 현재 이 워크플로를 자동으로 호출하지 않는다. +# workflow_dispatch `image` 입력으로 대상을 명시한다. 실제 빌드·push·카탈로그 태그 +# 갱신 브랜치 push 는 이 트리거로만 일어난다(사람이 수동 실행) — +# sbom.yml 의 게이트는 현재 이 워크플로를 자동으로 호출하지 않는다. # push 입력이 false 면 검증만 한다. +# +# 카탈로그 PR 은 자동 생성하지 않는다 — GitHub Actions 는 GITHUB_TOKEN 으로 PR 을 만들 수 +# 없다는 조직 정책("Allow GitHub Actions to create and approve pull requests" 미허용, +# 리포 설정으로 못 바꿈)에 실측으로 막혔다(2026-08-04, run 30882785612, GraphQL: +# "GitHub Actions is not permitted to create or approve pull requests"). 브랜치·커밋·push +# 까지만 워크플로가 하고, PR 오픈은 Job Summary 에 남는 compare 링크로 사람이 직접 연다 +# (사람의 gh/브라우저 인증은 이 제약을 받지 않는다). on: workflow_dispatch: @@ -40,7 +47,7 @@ on: required: false default: '' push: - description: '레지스트리 push + 카탈로그 PR 생성 여부' + description: '레지스트리 push + 카탈로그 태그 갱신 브랜치 push 여부' required: false default: 'true' pull_request: @@ -49,7 +56,6 @@ on: permissions: contents: write - pull-requests: write env: REGISTRY_HOST: docker.io/paasup @@ -239,12 +245,14 @@ jobs: # 게이트가 차단+수정가능 CVE 를 확인)이거나 사람의 명시적 실행이다. 예전에는 # 블라인드 스케줄 재빌드가 있어서 "정말 개선인지" 를 여기서 재확인해야 했는데, # 그 트리거를 없앤 뒤로는 불필요해졌다 — 게이트 PASS + 태그 변경만 확인한다. - - name: 카탈로그 PR 생성 + # + # PR 은 만들지 않는다(위 파일 헤더 참고 — GITHUB_TOKEN 으로 PR 생성이 조직 정책으로 + # 막혀 있고 우리 쪽에서 그 정책을 못 바꾼다, 실측: run 30882785612). 브랜치 push 까지만 + # 하고 compare 링크를 Job Summary 에 남겨 사람이 직접 PR 을 연다. + - name: 카탈로그 브랜치 push + PR 안내 if: > steps.publish.outputs.enabled == 'true' && steps.build.outputs.rc == '0' && steps.current.outputs.tag != steps.build.outputs.tag - env: - GH_TOKEN: ${{ github.token }} run: | set -uo pipefail NEW="${{ steps.build.outputs.tag }}" @@ -278,19 +286,21 @@ jobs: -m "Co-Authored-By: github-actions[bot] " git push -u origin "$BRANCH" - # 본문을 파일로 만든다. heredoc 을 워크플로 run 블록 안에 그대로 두면 내용의 - # 들여쓰기가 YAML 블록 스칼라 들여쓰기와 어긋난다. - BODY="$GITHUB_WORKSPACE/pr_body.md" + COMPARE_URL="https://github.com/${{ github.repository }}/compare/main...${BRANCH}?expand=1" { - echo "자체 빌드 이미지(\`${IMAGE}\`) 태그 갱신. 트리거: \`${{ github.event_name }}\`." + echo "## ${IMAGE} 카탈로그 태그 갱신 — 브랜치 push 완료, PR 은 직접 열어야 함" echo echo "- 이전 태그: \`$OLD\`" echo "- 새 태그: \`$NEW\`" + echo "- 브랜치: \`$BRANCH\`" echo "- 게이트: PASS (아티팩트의 \`cve-gate.md\` 참고)" echo - echo "**주의 — 이 PR 은 다른 워크플로를 자동으로 트리거하지 않는다**" - echo "(\`GITHUB_TOKEN\` 이 만든 PR 에 대한 GitHub 의 재귀 방지 정책). 병합 전에 아래를 수동으로" - echo "실행해 카탈로그 게이트를 확인한다." + echo "**PR 은 자동 생성되지 않는다** — GitHub 조직 정책상 \`GITHUB_TOKEN\`(Actions 자체 토큰)으로는" + echo "PR 을 만들 수 없다. 아래 링크에서 사람이 직접 연다:" + echo + echo "$COMPARE_URL" + echo + echo "PR을 연 뒤 병합 전에 아래를 수동으로 실행해 카탈로그 게이트를 확인한다." echo echo '```sh' echo "gh workflow run helm-catalog-sbom --ref $BRANCH" @@ -298,6 +308,5 @@ jobs: echo echo "이미지가 실제로 동작하는지도 병합 전에 수동으로 확인한다(해당 차트 배포 후" echo "기능 점검 — 자동화된 배포 테스트 절차는 아직 없다)." - } > "$BODY" - - gh pr create --title "${IMAGE}: ${OLD##*:} → ${NEW##*:}" --body-file "$BODY" + } >> "$GITHUB_STEP_SUMMARY" + echo "브랜치 push 완료 — PR은 사람이 직접 열어야 한다: $COMPARE_URL"