ci: run CI only on Forgejo and delete the never-run GitHub workflows (WS-D)

The repository has Forgejo and GitLab remotes but no GitHub remote, so
nothing under .github/workflows ever ran - including the daily Payple
renewal job, which means Payple subscriptions were not being renewed.

- Port payple-renew (daily cron + manual dispatch) to Forgejo. Requires the
  Forgejo secrets SUPABASE_URL and CRON_SECRET.
- Port the CI checks (quality incl. version:check and contract:check, build,
  mobile quality, edge functions, API tests) to .forgejo/workflows/ci.yml.
  macOS and Android emulator jobs are dropped: no macOS runner here, and the
  signed Android release stays on GitLab mobile-production-release.
- Keep one site deploy workflow (Linux, Cloudflare Pages); remove the
  manual Windows duplicate. The mobile release boundary self-test runs there.
- Release verifiers read the Forgejo/GitLab workflows, fail if .github
  workflows come back, and check the rewritten site offers no mobile package.

Policy: docs/REFACTOR_POLICY.md Wave 3, W3-7 and W3-8.
This commit is contained in:
Yun Chan 2026-09-26 15:49:00 +09:00
parent cd9d199dbf
commit dc43884e3e
13 changed files with 269 additions and 1370 deletions

View file

@ -0,0 +1,47 @@
name: payple-renew
# Payple 정기결제 자동 갱신 트리거. 매일 한 번 Supabase Edge Function `payple-renew`를 호출한다.
# 예전 .github/workflows/payple-renew.yml은 GitHub 원격이 없어 한 번도 실행되지 않았다.
#
# 주의:
# - Forgejo schedule은 기본 브랜치(main)에 이 파일이 있을 때만 등록된다.
# - cron 시각은 Forgejo 서버 기준으로 해석된다. 서버가 UTC면 01:00 UTC = 10:00 KST.
#
# 필요한 시크릿:
# SUPABASE_URL — https://<project-ref>.supabase.co (끝 슬래시 없이)
# CRON_SECRET — Supabase Function 시크릿 CRON_SECRET 과 같은 값
on:
schedule:
- cron: "0 1 * * *"
workflow_dispatch:
jobs:
renew:
runs-on: linux-builder
steps:
- name: payple-renew Edge Function 호출
env:
SUPABASE_URL: "${{ secrets.SUPABASE_URL }}"
CRON_SECRET: "${{ secrets.CRON_SECRET }}"
run: |
set -eu
if [ -z "${SUPABASE_URL:-}" ] || [ -z "${CRON_SECRET:-}" ]; then
echo "SUPABASE_URL / CRON_SECRET 시크릿이 없습니다." >&2
exit 1
fi
response=$(curl --silent --show-error --max-time 300 -w "\n%{http_code}" -X POST \
"${SUPABASE_URL%/}/functions/v1/payple-renew" \
-H "Authorization: Bearer ${CRON_SECRET}" \
-H "Content-Type: application/json")
http_code=$(printf '%s\n' "$response" | tail -n 1)
body=$(printf '%s\n' "$response" | sed '$d')
echo "HTTP $http_code"
printf '%s\n' "$body" | jq . 2>/dev/null || printf '%s\n' "$body"
if [ "$http_code" -ge 400 ]; then
echo "갱신 실패: HTTP $http_code" >&2
exit 1
fi