name: deploy-site on: push: branches: [main] workflow_dispatch: jobs: deploy: runs-on: linux-builder steps: - name: checkout env: { CI_TOKEN: "${{ github.token }}" } run: | proto="${GITHUB_SERVER_URL%%://*}"; host="${GITHUB_SERVER_URL#*://}" url="$proto://actions:${CI_TOKEN}@${host%/}/${GITHUB_REPOSITORY}.git" [ -d .git ] || git init -q . git remote remove origin 2>/dev/null || true git remote add origin "$url" git fetch -q --depth 1 origin "$GITHUB_REF" git checkout -q -f FETCH_HEAD git clean -qfdx - name: 의존성 설치 및 사이트 빌드 run: | npm ci --prefix site npm run build --prefix site node -e "const fs=require('node:fs'); const v=require('./release/product-version.json').version; fs.writeFileSync('site/dist/release-identity.json', JSON.stringify({commit:process.env.GITHUB_SHA,version:v},null,2)+'\n')" - name: Cloudflare Pages 배포 (d3ro.chanpaca.net) env: CLOUDFLARE_API_TOKEN: "${{ secrets.CF_API_TOKEN || secrets.CLOUDFLARE_API_TOKEN }}" CLOUDFLARE_ACCOUNT_ID: "${{ secrets.CF_ACCOUNT_ID || secrets.CLOUDFLARE_ACCOUNT_ID }}" run: | if [ -n "$CLOUDFLARE_API_TOKEN" ]; then echo "Cloudflare Pages 배포 시작 (d3ro)..." npx --yes wrangler@latest pages deploy site/dist \ --project-name d3ro \ --branch main \ --commit-dirty=true || \ npx --yes wrangler@latest pages deploy site/dist \ --project-name d3ro-voice \ --branch main \ --commit-dirty=true else echo "CLOUDFLARE_API_TOKEN 없음" >&2 exit 1 fi - name: 공개 배포 식별자 검증 run: | curl --fail --silent --show-error --retry 6 --retry-delay 5 \ https://d3ro.chanpaca.net/release-identity.json \ --output release-identity.live.json node -e "const fs=require('node:fs'); const live=JSON.parse(fs.readFileSync('release-identity.live.json','utf8')); if(live.commit!==process.env.GITHUB_SHA) throw new Error('public commit mismatch'); const expected=require('./release/product-version.json').version; if(live.version!==expected) throw new Error('public version mismatch')" curl --fail --silent --show-error https://d3ro.chanpaca.net/ --output /dev/null curl --fail --silent --show-error https://d3ro.chanpaca.net/privacy/ --output /dev/null curl --fail --silent --show-error https://d3ro.chanpaca.net/terms/ --output /dev/null curl --fail --silent --show-error https://d3ro.chanpaca.net/delete-account/ --output /dev/null