Files
chatgpt-business-price-radar/.github/workflows/pages.yml
T
2026-07-23 09:39:20 +08:00

103 lines
2.5 KiB
YAML

name: Refresh prices and deploy Pages
on:
push:
branches: [main]
workflow_dispatch:
schedule:
- cron: "17 3 * * *"
timezone: "Asia/Shanghai"
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: github-pages
cancel-in-progress: true
jobs:
schedule-gate:
runs-on: ubuntu-latest
outputs:
run: ${{ steps.gate.outputs.run }}
steps:
- id: gate
name: Run pushes and manual dispatches immediately; schedules every two days
shell: bash
run: |
if [[ "${{ github.event_name }}" != "schedule" ]]; then
echo "run=true" >> "$GITHUB_OUTPUT"
exit 0
fi
epoch_day=$(( $(date -u +%s) / 86400 ))
if (( epoch_day % 2 == 0 )); then
echo "run=true" >> "$GITHUB_OUTPUT"
else
echo "run=false" >> "$GITHUB_OUTPUT"
fi
build:
needs: schedule-gate
if: needs.schedule-gate.outputs.run == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Locate the previous deployed snapshot
shell: bash
run: |
owner="${GITHUB_REPOSITORY%%/*}"
repo="${GITHUB_REPOSITORY##*/}"
if [[ "${repo,,}" == "${owner,,}.github.io" ]]; then
url="https://${owner}.github.io/data/prices.json"
else
url="https://${owner}.github.io/${repo}/data/prices.json"
fi
echo "PREVIOUS_SNAPSHOT_URL=$url" >> "$GITHUB_ENV"
- name: Probe the OpenAI pricing endpoint
run: npm run probe
- name: Collect and validate official monthly prices
env:
MIN_FIRST_RUN_ROWS: 20
PRICING_CONCURRENCY: 4
run: npm run collect
- name: Type-check and build
run: npm run build
- name: Configure Pages
uses: actions/configure-pages@v5
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v4
with:
path: dist
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4