Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions .github/workflows/smoke-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ name: Smoke Test
# - 보낼 수 있는 요청과 요청 수 상한은 스크립트에 고정되어 있다.
#
# 필요한 Secrets (없으면 할 수 있는 단계까지만 한다)
# SMOKE_PROD_ACCESS_TOKEN_SECRET, SMOKE_PROD_USER_ID, SMOKE_DEV_ACCESS_TOKEN_SECRET, SMOKE_DEV_USER_ID, DISCORD_WEBHOOK_URL
# JWT_ACCESS_TOKEN_SECRET, SMOKE_PROD_USER_ID, SMOKE_DEV_USER_ID, DISCORD_WEBHOOK_URL
#
# JWT_ACCESS_TOKEN_SECRET 은 배포 워크플로가 서버에 넘기는 그 키다(ci-dev.yml, ci-prod.yml). 스모크는 같은 키로
# 토큰을 직접 만들어 쓰기 때문에 값이 같아야 하고, 따로 복사해 두면 키를 바꿀 때 한쪽만 남아 알림이 계속 울린다.
#
# workflow_run 과 schedule 은 이 파일이 기본 브랜치(main)에 있어야 동작한다.

Expand Down Expand Up @@ -124,7 +127,7 @@ jobs:
env:
SMOKE_BASE_URL: ${{ steps.plan.outputs.url }}
SMOKE_LEVEL: ${{ steps.plan.outputs.level }}
SMOKE_ACCESS_TOKEN_SECRET: ${{ secrets.SMOKE_PROD_ACCESS_TOKEN_SECRET }}
SMOKE_ACCESS_TOKEN_SECRET: ${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
SMOKE_USER_ID: ${{ secrets.SMOKE_PROD_USER_ID }}
run: |
if [ "$SMOKE_LEVEL" = "bootstrap" ]; then
Expand All @@ -140,7 +143,7 @@ jobs:
env:
SMOKE_BASE_URL: ${{ steps.plan.outputs.url }}
SMOKE_LEVEL: ${{ steps.plan.outputs.level }}
SMOKE_ACCESS_TOKEN_SECRET: ${{ secrets.SMOKE_DEV_ACCESS_TOKEN_SECRET }}
SMOKE_ACCESS_TOKEN_SECRET: ${{ secrets.JWT_ACCESS_TOKEN_SECRET }}
SMOKE_USER_ID: ${{ secrets.SMOKE_DEV_USER_ID }}
run: |
if [ "$SMOKE_LEVEL" = "bootstrap" ]; then
Expand Down
7 changes: 4 additions & 3 deletions scripts/smoke/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,14 @@ JWT 서명 키, DB 조회가 어긋나도 알 수 없고 배포와 상관없이
## 처음 설정하는 순서

1. **이 파일이 `main` 에 들어가야 한다.** `workflow_run` 과 `schedule` 과 수동 실행 버튼 모두 기본 브랜치의 워크플로 파일로 돈다.
2. **`SMOKE_PROD_ACCESS_TOKEN_SECRET` 을 등록한다.** 서버의 `jwt.accessToken.secret` 과 같은 값이다. 이것만 있어도 매시 확인이 인증과 DB 조회까지 본다.
2. **토큰 서명 키는 이미 있는 `JWT_ACCESS_TOKEN_SECRET` 을 그대로 쓴다.** 배포 워크플로가 서버에 넘기는 그 키다(`ci-dev.yml`, `ci-prod.yml`). 스모크가 같은 키로 토큰을 만들기 때문에 따로 등록할 것이 없다. 이 키만 있어도 매시 확인이 인증과 DB 조회까지 본다.
3. **스모크 계정을 만든다.** Actions 에서 `Smoke Test` 를 `prod`, `bootstrap` 으로 한 번 실행한다. 게스트 가입이라 Discord 에 가입 알림이 한 번 온다.
4. **실행 결과 요약에 나온 계정 ID 를 `SMOKE_PROD_USER_ID` 에 등록한다.** 이때부터 `read` 와 `full` 이 스모크 계정으로 돈다.
5. dev 도 같은 방식으로 `SMOKE_DEV_*` 를 등록한다. dev 서버가 켜져 있을 때 한다.

JWT 서명 키를 바꾸면 `SMOKE_*_ACCESS_TOKEN_SECRET` 도 같이 바꿔야 한다. 계정 ID 는 그대로 쓴다.
이 시크릿은 서버 서명 키 그 자체라 관리자 토큰도 만들 수 있으니 `main` 에서만 쓸 수 있는 GitHub Environment 에 두는 편이 더 안전하다.
JWT 서명 키를 바꿔도 `JWT_ACCESS_TOKEN_SECRET` 한 곳만 고치면 된다. 스모크용으로 값을 복사해 두면 한쪽만 남아 서버는 멀쩡한데 알림만 계속 울린다.
계정 ID 는 키를 바꿔도 그대로 쓴다.
이 키는 서버 서명 키 그 자체라 관리자 토큰도 만들 수 있으니, `main` 에서만 쓸 수 있는 GitHub Environment 에 두는 편이 더 안전하다.

## 실패했을 때 읽는 법

Expand Down
Loading