name: Deploy to Cloudflare Pages (cobalt) on: push: branches: ["main", "master"] workflow_dispatch: {} jobs: build-and-deploy: runs-on: ubuntu-latest env: CF_PAGES_PROJECT: ${{ vars.CF_PAGES_PROJECT }} # 例: blog PROD_BRANCH: "main" # Pages 側の本番ブランチ名 CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CI: "1" steps: - name: Checkout uses: https://github.com/actions/checkout@v4 - name: Install cobalt (prebuilt via eget) shell: bash run: | set -euo pipefail apt-get update && apt-get install -y ca-certificates curl tar git curl -fsSL https://zyedidia.github.io/eget.sh | sh ./eget cobalt-org/cobalt.rs --to /usr/local/bin/cobalt cobalt --version - name: Build site with cobalt run: cobalt build # 既定出力: ./_site - name: Compute BRANCH_NAME and COMMIT metadata id: meta shell: bash run: | bn="${GITHUB_REF_NAME:-${GITEA_REF_NAME:-}}" if [ -z "$bn" ]; then bn="$(git rev-parse --abbrev-ref HEAD)"; fi echo "BRANCH_NAME=$bn" >> "$GITHUB_ENV" echo "COMMIT_SHA=$(git rev-parse HEAD)" >> "$GITHUB_ENV" echo "COMMIT_MSG=$(git log -1 --pretty=%s)" >> "$GITHUB_ENV" - name: Ensure Pages project exists (create if missing) shell: bash run: | set -euo pipefail test -n "${CF_PAGES_PROJECT}" code=$(curl -sS -o /dev/null -w '%{http_code}' \ -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \ "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/pages/projects/${CF_PAGES_PROJECT}") if [ "$code" != "200" ]; then npx --yes wrangler@latest pages project create "${CF_PAGES_PROJECT}" --production-branch "${PROD_BRANCH}" fi # APIで存在確認 → なければ非対話で作成。:contentReference[oaicite:4]{index=4} - name: Deploy to Cloudflare Pages shell: bash run: | npx --yes wrangler@latest pages deploy "_site" \ --project-name "${CF_PAGES_PROJECT}" \ --branch "${BRANCH_NAME}" \ --commit-hash "${COMMIT_SHA}" \ --commit-message "${COMMIT_MSG}" # 公式手順に準拠。ブランチ明示で本番/プレビューを制御。:contentReference[oaicite:5]{index=5}