test(ci): #373 drift gate red-path smoke — DO NOT MERGE#594
Draft
thxforall wants to merge 1 commit into
Draft
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
Author
Status update#595 fix PR self-validate 1차 실패 → supabase image 권한 문제 추가 노출 ( 본 PR (#594)은 검증 vehicle로 계속 보존. #595가 머지되면 진행 상황:
|
3 tasks
thxforall
added a commit
that referenced
this pull request
May 28, 2026
* fix(ci): #373 drift gate — pgvector image, pipefail, sticky comment path #594 red-path smoke 가 노출한 3 가지 결함 동시 수정. 1. postgres service `image: postgres:17` → `pgvector/pgvector:pg17` - supabase/migrations 가 `CREATE EXTENSION vector` 를 호출하므로 vanilla postgres:17 으로는 setup 단계에서 첫 migration 부터 fail - 결과: SOT 비교 자체가 한 번도 실행된 적 없음 2. `bun run ... | tee /tmp/drift.md` → `set -eo pipefail` + `> drift.md` - GitHub Actions 의 default shell 은 `bash -e` (no pipefail) 이므로 pipe 의 last command (tee) exit 0 이 전체 exit code 가 된다. script `process.exit(1)` 이 가려져 job 이 항상 green 으로 표시됨 - pipe 자체를 제거하고 redirect → cat 으로 동일 효과 + log 가시성 유지 3. `hashFiles('/tmp/drift.md')` → `hashFiles('drift.md')` - `hashFiles()` 는 GITHUB_WORKSPACE 내부 파일만 해시화. `/tmp/*` 는 항상 빈 문자열 → `'' != ''` false → sticky comment step 영구 skip - drift.md 를 workspace 에 두고 path 도 동기화 ## 검증 본 PR self-validate: - workflow trigger (path 매치: `.github/workflows/schema-drift.yml`) - pgvector 이미지로 23 migration 정상 적용 기대 - MAGAZINE_STATUSES 는 dev 와 동일 → "OK — 1 SOT entries match" sticky comment 기대 머지 후 #594 (red-path smoke) 를 origin/dev rebase + force push 하면 의도된 DRIFT 결과 + drift-bypass label flow 까지 자동 재검증된다. ## Refs - 검증 PR: #594 (test/373-drift-smoke, DO NOT MERGE) - 원본 workflow: #588 - SOT: docs/database/schema-drift-sot.md * fix(ci): #373 drift gate — use supabase/postgres image for all required extensions self-validate 첫 시도 (PR #595 initial) 가 노출: pgvector/pgvector:pg17 도 부족. 20260409075040_remote_schema.sql 이 `CREATE EXTENSION pg_graphql` 요구. supabase/postgres 는 prod 에서 사용 중인 모든 ext (vector, pg_graphql, pgsodium, pg_net, pgaudit, pgjwt 등) 를 포함하는 공식 이미지. 17.6.1.131 (2026-05-27 stable) 태그 고정 — latest 사용 시 reproducibility 깨짐. cold start 가 vanilla 대비 다소 느릴 수 있으나 setup fail 위험 제거가 우선. * fix(ci): #373 drift gate — use default postgres DB to avoid supabase init permission issue #595 v2 self-validate 실패 노출: `POSTGRES_DB: drift` 로 별도 DB 를 만들면 supabase/postgres image 의 init script 가 default `postgres` DB 에서만 role/권한을 설정하므로 postgres user 가 `permission denied for database drift` 를 받는다. 별도 DB 만들지 말고 image 가 init 한 default `postgres` DB 위에서 migration 적용. * fix(ci): #373 drift gate — bootstrap supabase namespace stubs supabase/postgres image 의 init script 는 storage/auth/vault/graphql/realtime 객체를 만들지 않아 (그건 별도 docker-compose service 가 담당) storage.buckets INSERT 같은 migration 에서 setup 이 fail 함. 게이트 범위는 CHECK constraint 정합성이지 prod-parity 가 아니므로, migration 적용 전에 FK/INSERT target 만큼만 minimal stub 으로 만든다. stub: - auth, storage, vault, graphql, realtime schemas - auth.users(id uuid PRIMARY KEY) — FK + trigger target - auth.uid() — NULL 반환 stub (RLS USING/WITH CHECK 에서 호출) - storage.buckets(id, name, public) — INSERT target 신규 migration 이 다른 supabase namespace 객체를 참조하면 여기 추가. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): #373 drift gate v5 — drop+recreate auth/storage schemas 이전 v4 (commit 9f89ca4) 는 schema 가 supabase image 에 이미 존재하지만 ownership 이 supabase_admin 이라 postgres user 가 CREATE TABLE 시 `permission denied for schema auth` 로 fail 했음. 해결: auth / storage 만 DROP CASCADE 로 날리고 postgres owner 로 재생성. vault / graphql / realtime 은 첫 migration 의 CREATE EXTENSION 이 의존하므로 건드리지 않음. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ci): #373 drift gate v6 — connect as supabase_admin + diagnostic v5 (drop+create) 가 `must be owner of schema auth` 로 fail. postgres role 은 supabase/postgres image 에서 superuser 가 아님 — schema 가 supabase_admin 소유로 잡혀있어 DROP/CREATE TABLE 둘 다 막힘. v6 변경: - LOCAL_DATABASE_URL 의 user 를 supabase_admin 으로 변경 (POSTGRES_PASSWORD 공용) - DROP/CREATE SCHEMA 제거, IF NOT EXISTS stub 객체만 추가 - gen_random_uuid DEFAULT 제거 (stub PK 는 INSERT 안 함, extensions schema 의존 회피) - 진단 라인 (current_user / \du) 추가 — 다음 fail 시 즉시 원인 파악 v6 도 fail 하면 stub 접근 폐기 → supabase CLI 로 전환. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci: empty commit to re-trigger drift workflow after drift-bypass label add --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MAGAZINE_STATUSES 에 'foo' 추가 — DB CHECK constraint 와 의도적 drift 발생. 목적: - #588 에서 머지된 schema-drift PR gate workflow 의 red path 검증 - 기대 결과: workflow fail + sticky comment 에 TS-only: foo 표기 부수 효과: - packages/web/lib/api/admin/__tests__/magazines.test.ts hardcoded toEqual fail (lint/test workflow 도 red — 무관) 검증 완료 후 PR close + branch 삭제 예정.
e61d035 to
e2d7842
Compare
Schema drift report (#373 v2)1 of 1 SOT entries failed.
SOT mapping: |
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
목적
#588 에서 머지된
Schema drift gateworkflow 가 실제로 red 를 trigger 하는지 검증하기 위한 의도적 drift smoke PR.머지 금지. 검증 완료 후 close + branch 삭제 예정.
변경
packages/web/lib/api/admin/magazines.tsMAGAZINE_STATUSES에'foo'추가post_magazines_status_check와 의도적 drift 발생기대 결과
Phase 1 (라벨 없음 — 현재 상태)
Schema drift gatejob → fail (bun run scripts/check-schema-drift.tsexit 1)Phase 2 (
drift-bypasslabel 추가 후)continue-on-error: true로 전환부수 효과 (무관)
packages/web/lib/api/admin/__tests__/magazines.test.tshardcodedtoEqual([...])failCleanup
검증 완료 후:
git push origin --delete test/373-drift-smokeRefs
docs/database/schema-drift-sot.md🤖 Generated with Claude Code