Skip to content
This repository was archived by the owner on Mar 24, 2026. It is now read-only.

Commit 36fe80a

Browse files
committed
feat: enhance Cloudflare environment configuration and testing setup
- Update `cloudflare-env.d.ts` to include new global properties and durable object bindings for better type safety. - Refactor `env.ts` to simplify environment variable retrieval without prefixes, aligning with separate dev/prod workers. - Modify middleware to remove dynamic URL setting, relying on static configuration in `wrangler.jsonc`. - Introduce Vitest for testing with new configuration in `vitest.config.ts`, including basic tests for API health and QuickBooks integration. - Update documentation to reflect changes in deployment scripts and environment management. - Remove outdated scripts for setting prefixed secrets, consolidating secret management into a single script for clarity. These changes improve the overall structure and maintainability of the project, ensuring a clearer separation between development and production environments.
1 parent 0c9f156 commit 36fe80a

File tree

19 files changed

+4928
-799
lines changed

19 files changed

+4928
-799
lines changed
Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22

3-
# Script to manually set secrets in Cloudflare Worker
4-
# Note: GitHub Actions automatically handles secrets via prefixed secrets (DEV_*, PROD_*)
3+
# Script to manually set secrets in Cloudflare Worker environment
4+
# Note: GitHub Actions automatically handles secrets in separate environment workers
55
# This script is for manual local secret management only
66

77
# Environment to set secrets for (dev or prod)
@@ -13,11 +13,9 @@ if [ "$ENV" != "dev" ] && [ "$ENV" != "prod" ]; then
1313
exit 1
1414
fi
1515

16-
# Determine prefix based on environment
17-
PREFIX="${ENV^^}" # Convert to uppercase (dev -> DEV, prod -> PROD)
18-
WORKER_NAME="allthingslinux"
16+
WORKER_NAME="allthingslinux-${ENV}"
1917

20-
echo "Setting ${PREFIX}_* prefixed secrets for worker: $WORKER_NAME"
18+
echo "Setting secrets for worker: $WORKER_NAME"
2119
echo "Environment: $ENV"
2220
echo ""
2321

@@ -49,54 +47,54 @@ fi
4947
echo "✓ Authentication verified"
5048
echo ""
5149

52-
# Helper function to set a prefixed secret
53-
set_prefixed_secret() {
54-
local BASE_NAME=$1
50+
# Helper function to set a secret
51+
set_secret() {
52+
local SECRET_NAME=$1
5553
local SECRET_VALUE=$2
56-
local PREFIXED_NAME="${PREFIX}_${BASE_NAME}"
57-
54+
5855
if [ -z "$SECRET_VALUE" ]; then
59-
echo "⚠ Skipping $PREFIXED_NAME (value not provided)"
56+
echo "⚠ Skipping $SECRET_NAME (value not provided)"
6057
return 0
6158
fi
62-
63-
echo "Setting $PREFIXED_NAME..."
64-
if echo "$SECRET_VALUE" | pnpm exec wrangler secret put "$PREFIXED_NAME"; then
65-
echo "$PREFIXED_NAME set successfully"
59+
60+
echo "Setting $SECRET_NAME..."
61+
if echo "$SECRET_VALUE" | pnpm exec wrangler secret put "$SECRET_NAME" --env "$ENV"; then
62+
echo "$SECRET_NAME set successfully"
6663
return 0
6764
else
68-
echo "✗ Failed to set $PREFIXED_NAME"
65+
echo "✗ Failed to set $SECRET_NAME"
6966
return 1
7067
fi
7168
}
7269

7370
ERRORS=0
7471

75-
# Set prefixed secrets (same pattern as GitHub Actions workflow)
76-
echo "Setting ${PREFIX}_* prefixed secrets..."
72+
# Set secrets (same pattern as GitHub Actions workflow)
73+
echo "Setting secrets..."
7774
echo ""
7875

7976
# Core secrets
80-
set_prefixed_secret "QUICKBOOKS_CLIENT_ID" "${QUICKBOOKS_CLIENT_ID}" || ((ERRORS++))
81-
set_prefixed_secret "QUICKBOOKS_CLIENT_SECRET" "${QUICKBOOKS_CLIENT_SECRET}" || ((ERRORS++))
82-
set_prefixed_secret "QUICKBOOKS_REFRESH_TOKEN" "${QUICKBOOKS_REFRESH_TOKEN}" || ((ERRORS++))
83-
set_prefixed_secret "QUICKBOOKS_REALM_ID" "${QUICKBOOKS_REALM_ID}" || ((ERRORS++))
84-
set_prefixed_secret "QUICKBOOKS_ADMIN_KEY" "${QUICKBOOKS_ADMIN_KEY}" || ((ERRORS++))
85-
set_prefixed_secret "GITHUB_TOKEN" "${GITHUB_TOKEN}" || ((ERRORS++))
86-
set_prefixed_secret "MONDAY_API_KEY" "${MONDAY_API_KEY}" || ((ERRORS++))
77+
set_secret "QUICKBOOKS_CLIENT_ID" "${QUICKBOOKS_CLIENT_ID}" || ((ERRORS++))
78+
set_secret "QUICKBOOKS_CLIENT_SECRET" "${QUICKBOOKS_CLIENT_SECRET}" || ((ERRORS++))
79+
set_secret "QUICKBOOKS_REFRESH_TOKEN" "${QUICKBOOKS_REFRESH_TOKEN}" || ((ERRORS++))
80+
set_secret "QUICKBOOKS_REALM_ID" "${QUICKBOOKS_REALM_ID}" || ((ERRORS++))
81+
set_secret "QUICKBOOKS_ADMIN_KEY" "${QUICKBOOKS_ADMIN_KEY}" || ((ERRORS++))
82+
set_secret "GITHUB_TOKEN" "${GITHUB_TOKEN}" || ((ERRORS++))
83+
set_secret "MONDAY_API_KEY" "${MONDAY_API_KEY}" || ((ERRORS++))
84+
set_secret "TRIGGER_SECRET_KEY" "${TRIGGER_SECRET_KEY}" || ((ERRORS++))
8785

8886
# Variables (non-sensitive) - note: these are set as secrets for consistency
89-
set_prefixed_secret "MONDAY_BOARD_ID" "${MONDAY_BOARD_ID}" || ((ERRORS++))
90-
set_prefixed_secret "DISCORD_WEBHOOK_URL" "${DISCORD_WEBHOOK_URL}" || ((ERRORS++))
87+
set_secret "MONDAY_BOARD_ID" "${MONDAY_BOARD_ID}" || ((ERRORS++))
88+
set_secret "DISCORD_WEBHOOK_URL" "${DISCORD_WEBHOOK_URL}" || ((ERRORS++))
9189

9290
# QUICKBOOKS_ENVIRONMENT (optional, auto-detected if not set)
9391
if [ -n "$QUICKBOOKS_ENVIRONMENT" ]; then
94-
set_prefixed_secret "QUICKBOOKS_ENVIRONMENT" "${QUICKBOOKS_ENVIRONMENT}" || ((ERRORS++))
92+
set_secret "QUICKBOOKS_ENVIRONMENT" "${QUICKBOOKS_ENVIRONMENT}" || ((ERRORS++))
9593
fi
9694

9795
echo ""
9896
if [ $ERRORS -eq 0 ]; then
99-
echo "✓ All ${PREFIX}_* prefixed secrets set successfully"
97+
echo "✓ All secrets set successfully"
10098
echo ""
10199
echo "Note: GitHub Actions automatically manages these secrets during CI/CD."
102100
echo "This manual script is mainly for local testing and initial setup."

.github/scripts/set-cloudflare-secrets.sh

Lines changed: 0 additions & 77 deletions
This file was deleted.

.github/workflows/deploy.yml

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,24 @@ jobs:
6060
run: |
6161
ENV_NAME="${{ github.ref == 'refs/heads/main' && 'prod' || 'dev' }}"
6262
echo "🔐 Setting secrets for ${ENV_NAME} environment..."
63-
# Deploy to separate workers - no need for prefix logic
64-
# Each environment worker has its own secrets
65-
pnpm exec wrangler secret put QUICKBOOKS_CLIENT_ID --env $ENV_NAME <<< "${{ secrets.QUICKBOOKS_CLIENT_ID }}"
66-
pnpm exec wrangler secret put QUICKBOOKS_CLIENT_SECRET --env $ENV_NAME <<< "${{ secrets.QUICKBOOKS_CLIENT_SECRET }}"
67-
pnpm exec wrangler secret put QUICKBOOKS_REFRESH_TOKEN --env $ENV_NAME <<< "${{ secrets.QUICKBOOKS_REFRESH_TOKEN }}"
68-
pnpm exec wrangler secret put QUICKBOOKS_REALM_ID --env $ENV_NAME <<< "${{ secrets.QUICKBOOKS_REALM_ID }}"
69-
pnpm exec wrangler secret put QUICKBOOKS_ADMIN_KEY --env $ENV_NAME <<< "${{ secrets.QUICKBOOKS_ADMIN_KEY }}"
70-
pnpm exec wrangler secret put GITHUB_TOKEN --env $ENV_NAME <<< "${{ secrets.GITHUB_TOKEN }}"
71-
pnpm exec wrangler secret put MONDAY_API_KEY --env $ENV_NAME <<< "${{ secrets.MONDAY_API_KEY }}"
72-
pnpm exec wrangler secret put MONDAY_BOARD_ID --env $ENV_NAME <<< "${{ vars.MONDAY_BOARD_ID }}"
73-
pnpm exec wrangler secret put DISCORD_WEBHOOK_URL --env $ENV_NAME <<< "${{ vars.DISCORD_WEBHOOK_URL }}"
74-
pnpm exec wrangler secret put QUICKBOOKS_ENVIRONMENT --env $ENV_NAME <<< "${{ vars.QUICKBOOKS_ENVIRONMENT }}"
63+
# Use the same secrets.sh script for consistency between manual and CI/CD
64+
chmod +x .github/scripts/secrets.sh
65+
.github/scripts/secrets.sh "$ENV_NAME"
7566
env:
7667
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
68+
# Export all secrets as environment variables for the script
69+
QUICKBOOKS_CLIENT_ID: ${{ secrets.QUICKBOOKS_CLIENT_ID }}
70+
QUICKBOOKS_CLIENT_SECRET: ${{ secrets.QUICKBOOKS_CLIENT_SECRET }}
71+
QUICKBOOKS_REFRESH_TOKEN: ${{ secrets.QUICKBOOKS_REFRESH_TOKEN }}
72+
QUICKBOOKS_REALM_ID: ${{ secrets.QUICKBOOKS_REALM_ID }}
73+
QUICKBOOKS_ADMIN_KEY: ${{ secrets.QUICKBOOKS_ADMIN_KEY }}
74+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
75+
MONDAY_API_KEY: ${{ secrets.MONDAY_API_KEY }}
76+
TRIGGER_SECRET_KEY: ${{ secrets.TRIGGER_SECRET_KEY }}
77+
# Variables (non-sensitive)
78+
MONDAY_BOARD_ID: ${{ vars.MONDAY_BOARD_ID }}
79+
DISCORD_WEBHOOK_URL: ${{ vars.DISCORD_WEBHOOK_URL }}
80+
QUICKBOOKS_ENVIRONMENT: ${{ vars.QUICKBOOKS_ENVIRONMENT }}
7781

7882
- name: Deploy to Cloudflare Workers
7983
run: |

PNPM_SCRIPTS.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,32 +44,32 @@ This document explains all available pnpm scripts in the project.
4444
## Deployment
4545

4646
- `pnpm run deploy:dev`
47-
Builds and deploys to the development environment.
47+
Builds and deploys to the development Cloudflare Worker (allthingslinux-dev) with separate R2/KV bindings.
4848

4949
- `pnpm run deploy:prod`
50-
Builds and deploys to the production environment.
50+
Builds and deploys to the production Cloudflare Worker (allthingslinux-prod) with separate R2/KV bindings.
5151

5252
- `pnpm run deploy`
5353
Alias for production deployment - the default deploy command.
5454

5555
## Version Management
5656

5757
- `pnpm run version:upload`
58-
Creates a new version in Cloudflare Workers without deploying it immediately.
58+
Creates a new version in the development Cloudflare Worker without deploying it immediately.
5959

6060
- `pnpm run version:deploy`
61-
Deploys the latest uploaded version to production.
61+
Deploys the latest uploaded version to the development Cloudflare Worker.
6262

6363
- `pnpm run version:list`
64-
Lists all versions of the Cloudflare Worker with metadata.
64+
Lists all versions of the development Cloudflare Worker with metadata.
6565

6666
## Secrets Management
6767

6868
- `pnpm run secrets:dev`
69-
Uploads secrets from `.env.secrets.dev` (sandbox credentials) to the development Cloudflare Worker environment.
69+
Uploads secrets from `.env.secrets.dev` to the development Cloudflare Worker (uses `.github/scripts/secrets.sh`).
7070

7171
- `pnpm run secrets:prod`
72-
Uploads secrets from `.env.secrets.prod` (production credentials) to the production Cloudflare Worker environment.
72+
Uploads secrets from `.env.secrets.prod` to the production Cloudflare Worker (uses `.github/scripts/secrets.sh`).
7373

7474
## Code Quality
7575

@@ -99,6 +99,9 @@ This document explains all available pnpm scripts in the project.
9999
- `pnpm run cf:typegen`
100100
Generates TypeScript types for Cloudflare Workers bindings and environment variables.
101101

102+
- `pnpm run test`
103+
Runs the test suite using Vitest with Cloudflare Workers testing capabilities.
104+
102105
- `pnpm run analyze:bundle`
103106
Provides guidance for bundle size analysis using ESBuild Bundle Analyzer on the built worker code.
104107

0 commit comments

Comments
 (0)