From e98d5a14d986ed4f4656e96f5b5e65f976092473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EB=AF=B8?= Date: Tue, 11 Aug 2026 17:34:30 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20promote-to-prod=EA=B0=80=20GITHUB=5FTOKE?= =?UTF-8?q?N=20=EC=97=B0=EC=87=84=20=ED=8A=B8=EB=A6=AC=EA=B1=B0=20?= =?UTF-8?q?=EC=A0=9C=EC=95=BD=EC=97=90=20=EB=A7=89=ED=9E=88=EB=8D=98=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.0.1 태그로 실제 테스트해보니 태그는 push됐지만 prod-cd.yml이 트리거되지 않았다. GitHub Actions는 기본 GITHUB_TOKEN으로 push된 이벤트가 다른 워크플로를 연쇄 실행시키지 않도록 막아두기 때문 (무한루프 방지) — promote-to-prod.yml이 정확히 이 케이스였다. prod-cd.yml에 workflow_dispatch 트리거를 추가하고, promote-to-prod.yml이 태그 push 직후 `gh workflow run prod-cd.yml --ref <태그>`로 명시적으로 호출하도록 바꿔서 우회했다. --- .github/workflows/prod-cd.yml | 6 ++++++ .github/workflows/promote-to-prod.yml | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prod-cd.yml b/.github/workflows/prod-cd.yml index 65d3be2..2621acd 100644 --- a/.github/workflows/prod-cd.yml +++ b/.github/workflows/prod-cd.yml @@ -5,9 +5,15 @@ name: RUNNECT-PROD-CD # v로 시작하는 태그가 push될 때만 실행 (예: v1.3.0) # main push마다 자동으로 상용까지 나가지 않도록, 상용 배포는 태그로 명시적으로 트리거한다. # staging(Render)은 main push에 그대로 자동 배포된다 — staging에서 먼저 확인 후 태그를 찍는 흐름. +# +# workflow_dispatch도 함께 열어둔 이유: GitHub Actions는 기본 GITHUB_TOKEN으로 +# push된 이벤트가 다른 워크플로를 연쇄 트리거하지 않도록 막아둔다(무한루프 방지). +# promote-to-prod.yml이 GITHUB_TOKEN으로 태그를 push해도 이 push 트리거가 안 켜지므로, +# promote-to-prod.yml이 태그 push 직후 이 workflow_dispatch를 명시적으로 호출해 우회한다. on: push: tags: [ 'v*' ] + workflow_dispatch: env: S3_BUCKET_NAME: runnect-prod-bucket-604764467555-ap-northeast-2-an diff --git a/.github/workflows/promote-to-prod.yml b/.github/workflows/promote-to-prod.yml index 1f6e0c3..6be140f 100644 --- a/.github/workflows/promote-to-prod.yml +++ b/.github/workflows/promote-to-prod.yml @@ -1,6 +1,11 @@ # GitHub Actions 탭에서 버튼 한 번으로 상용 배포를 트리거하기 위한 워크플로. -# main의 다음 semver 태그(v1.2.3 형태)를 자동으로 계산해 push하고, -# 그 태그 push가 prod-cd.yml의 트리거(on.push.tags)를 실행시켜 상용 배포로 이어진다. +# main의 다음 semver 태그(v1.2.3 형태)를 자동으로 계산해 push한 뒤, +# prod-cd.yml을 workflow_dispatch로 직접 호출해 상용 배포로 이어지게 한다. +# +# 태그 push만으로 prod-cd.yml을 트리거하지 않는 이유: GitHub Actions는 +# 기본 GITHUB_TOKEN으로 push된 이벤트가 다른 워크플로를 연쇄 실행시키지 +# 않도록 막아둔다(무한루프 방지). 그래서 이 워크플로가 태그를 push해도 +# prod-cd.yml의 push 트리거는 켜지지 않아 명시적으로 호출해줘야 한다. name: Promote to Production on: @@ -18,6 +23,7 @@ on: permissions: contents: write + actions: write jobs: tag: @@ -58,12 +64,17 @@ jobs: echo "새 태그: $NEW_TAG" echo "new_tag=$NEW_TAG" >> "$GITHUB_OUTPUT" - - name: 태그 생성 및 push (→ prod-cd.yml 트리거) + - name: 태그 생성 및 push run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git tag "${{ steps.version.outputs.new_tag }}" git push origin "${{ steps.version.outputs.new_tag }}" + - name: RUNNECT-PROD-CD 직접 트리거 + env: + GH_TOKEN: ${{ github.token }} + run: gh workflow run prod-cd.yml --ref "${{ steps.version.outputs.new_tag }}" + - name: 요약 - run: echo "## ${{ steps.version.outputs.new_tag }} 태그 push 완료 — RUNNECT-PROD-CD가 곧 트리거됩니다." >> "$GITHUB_STEP_SUMMARY" + run: echo "## ${{ steps.version.outputs.new_tag }} 태그 push 완료, RUNNECT-PROD-CD 트리거함" >> "$GITHUB_STEP_SUMMARY"