Skip to content

fix: provision homepage metrics KV explicitly (#73) #2

fix: provision homepage metrics KV explicitly (#73)

fix: provision homepage metrics KV explicitly (#73) #2

name: Deploy homepage metrics Worker
on:
push:
branches: ["main"]
paths:
- ".github/workflows/deploy-homepage-metrics.yml"
- "lib/homepage-metrics.ts"
- "package.json"
- "pnpm-lock.yaml"
- "public/homepage-metrics.json"
- "workers/homepage-metrics/**"
workflow_dispatch:
permissions:
contents: read
concurrency:
group: homepage-metrics-worker
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Install pnpm
uses: pnpm/action-setup@v6
with:
cache: true
- name: Use Node.js
uses: actions/setup-node@v7
with:
node-version: 24
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Verify Worker
run: pnpm run check:homepage-metrics-worker
- name: Validate Cloudflare credentials
shell: bash
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
set -euo pipefail
if [[ -z "${CLOUDFLARE_ACCOUNT_ID}" ]]; then
echo "::error::Missing CLOUDFLARE_ACCOUNT_ID repository secret."
exit 1
fi
if [[ -z "${CLOUDFLARE_API_TOKEN}" ]]; then
echo "::error::Missing CLOUDFLARE_API_TOKEN repository secret."
exit 1
fi
pnpm exec wrangler whoami
- name: Provision homepage metrics KV
shell: bash
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
KV_NAMESPACE_TITLE: rustfs-homepage-metrics
KV_BINDING: HOMEPAGE_METRICS
run: |
set -euo pipefail
namespaces_json="$(pnpm exec wrangler kv namespace list)"
namespace_id="$(
jq -r --arg title "${KV_NAMESPACE_TITLE}" \
'[.[] | select(.title == $title)][0].id // empty' \
<<<"${namespaces_json}"
)"
if [[ -z "${namespace_id}" ]]; then
pnpm exec wrangler kv namespace create "${KV_NAMESPACE_TITLE}"
namespaces_json="$(pnpm exec wrangler kv namespace list)"
namespace_id="$(
jq -r --arg title "${KV_NAMESPACE_TITLE}" \
'[.[] | select(.title == $title)][0].id // empty' \
<<<"${namespaces_json}"
)"
fi
if [[ -z "${namespace_id}" ]]; then
echo "::error::KV namespace was not found after provisioning."
exit 1
fi
jq \
--arg binding "${KV_BINDING}" \
--arg id "${namespace_id}" \
'(.kv_namespaces[] | select(.binding == $binding) | .id) = $id' \
workers/homepage-metrics/wrangler.jsonc \
> workers/homepage-metrics/wrangler.deploy.jsonc
- name: Deploy Worker
run: pnpm exec wrangler deploy --config workers/homepage-metrics/wrangler.deploy.jsonc
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}