@getvitops/create 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -5
- package/README.md +7 -0
- package/package.json +17 -2
- package/templates/emdash/.env +1 -0
- package/templates/emdash/.github/workflows/ci.yml +12 -0
- package/templates/emdash/.github/workflows/deploy-dev.yml +17 -19
- package/templates/emdash/.github/workflows/deploy-prod.yml +17 -21
- package/templates/emdash/.github/workflows/promote.yml +8 -36
- package/templates/emdash/.mcp.json +4 -0
- package/templates/emdash/.nvmrc +1 -0
- package/templates/emdash/AGENTS.md +4 -0
- package/templates/emdash/README.md +4 -0
- package/templates/emdash/design-system.json +1 -1
- package/templates/emdash/scripts/init-github.mjs +94 -10
- package/templates/emdash/src/assets/placeholder/wireframe-400x400.png +0 -0
- package/templates/emdash/src/assets/placeholder/wireframe-400x400.svg +1 -0
- package/templates/emdash/src/assets/placeholder/wireframe-400x600.png +0 -0
- package/templates/emdash/src/assets/placeholder/wireframe-400x600.svg +1 -0
- package/templates/emdash/src/assets/placeholder/wireframe-600x400.png +0 -0
- package/templates/emdash/src/assets/placeholder/wireframe-600x400.svg +1 -0
- package/templates/static/.env +1 -0
- package/templates/static/.github/workflows/ci.yml +12 -0
- package/templates/static/.github/workflows/deploy-dev.yml +33 -0
- package/templates/static/.github/workflows/deploy-prod.yml +29 -0
- package/templates/static/.github/workflows/promote.yml +16 -0
- package/templates/static/.nvmrc +1 -0
- package/templates/static/AGENTS.md +57 -0
- package/templates/static/README.md +85 -0
- package/templates/static/_gitignore +24 -0
- package/templates/static/astro.config.mjs +19 -0
- package/templates/static/design-system.json +148 -0
- package/templates/static/package.json +39 -0
- package/templates/static/scripts/dev-wrangler-config.mjs +28 -0
- package/templates/static/scripts/init-github.mjs +186 -0
- package/templates/static/scripts/init-hosting.mjs +62 -0
- package/templates/static/src/assets/placeholder/wireframe-400x400.png +0 -0
- package/templates/static/src/assets/placeholder/wireframe-400x400.svg +1 -0
- package/templates/static/src/assets/placeholder/wireframe-400x600.png +0 -0
- package/templates/static/src/assets/placeholder/wireframe-400x600.svg +1 -0
- package/templates/static/src/assets/placeholder/wireframe-600x400.png +0 -0
- package/templates/static/src/assets/placeholder/wireframe-600x400.svg +1 -0
- package/templates/static/src/layouts/Layout.astro +26 -0
- package/templates/static/src/pages/404.astro +11 -0
- package/templates/static/src/pages/index.astro +13 -0
- package/templates/static/tsconfig.json +5 -0
- package/templates/static/wrangler.jsonc +15 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @getvitops/create
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Scaffolded `static` and `emdash` projects now ship neutral placeholder wireframe images under
|
|
8
|
+
`src/assets/placeholder/` (square, portrait, landscape; SVG + PNG) for layout work before real
|
|
9
|
+
imagery exists. Delete the directory once real assets land.
|
|
10
|
+
|
|
3
11
|
## 0.5.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
|
@@ -227,15 +235,15 @@
|
|
|
227
235
|
which `@getvitops/astro` re-exports wholesale. So from `astro.config.mjs`:
|
|
228
236
|
|
|
229
237
|
```js
|
|
230
|
-
import { generateIconInclude } from
|
|
231
|
-
import icon from
|
|
238
|
+
import { generateIconInclude } from "@getvitops/astro";
|
|
239
|
+
import icon from "astro-icon";
|
|
232
240
|
|
|
233
241
|
integrations: [
|
|
234
242
|
icon({
|
|
235
243
|
include: generateIconInclude({
|
|
236
|
-
ui:
|
|
237
|
-
brand:
|
|
238
|
-
semantic: [
|
|
244
|
+
ui: "fa7-solid",
|
|
245
|
+
brand: "simple-icons",
|
|
246
|
+
semantic: ["menu", "close", "search", "github"],
|
|
239
247
|
}),
|
|
240
248
|
}),
|
|
241
249
|
];
|
package/README.md
CHANGED
|
@@ -73,6 +73,13 @@ provisions the D1/R2 resources on first deploy).
|
|
|
73
73
|
Template dependencies must use concrete npm ranges (no `workspace:*` /
|
|
74
74
|
`catalog:` — the scaffolded project lives outside this monorepo).
|
|
75
75
|
|
|
76
|
+
`assets/` (this package root, unpublished) is the source of truth for
|
|
77
|
+
placeholder imagery shared across templates — `vp create` copies only the
|
|
78
|
+
one directory a template names, so there's no step that could copy a
|
|
79
|
+
sibling `assets/` for you. Mirror any new file into each template's
|
|
80
|
+
`src/assets/placeholder/` by hand; `templates.test.ts` asserts every mirror
|
|
81
|
+
stays byte-identical to the source.
|
|
82
|
+
|
|
76
83
|
## Changelog
|
|
77
84
|
|
|
78
85
|
This package's history: [`CHANGELOG.md`](./CHANGELOG.md) (shipped in the npm tarball, so it
|
package/package.json
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getvitops/create",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Project templates for the Vitops design system — scaffold wired-up sites with `vp create @getvitops`.",
|
|
5
|
+
"homepage": "https://docs.vitops.ca",
|
|
6
|
+
"bugs": "https://github.com/getvitops/design-system/issues",
|
|
5
7
|
"license": "MIT",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/getvitops/design-system.git",
|
|
11
|
+
"directory": "packages/create"
|
|
12
|
+
},
|
|
6
13
|
"files": [
|
|
7
14
|
"templates",
|
|
8
15
|
"CHANGELOG.md"
|
|
@@ -12,10 +19,18 @@
|
|
|
12
19
|
"access": "public"
|
|
13
20
|
},
|
|
14
21
|
"devDependencies": {
|
|
15
|
-
"vitest": "
|
|
22
|
+
"vitest": "4.1.9"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=24"
|
|
16
26
|
},
|
|
17
27
|
"createConfig": {
|
|
18
28
|
"templates": [
|
|
29
|
+
{
|
|
30
|
+
"name": "static",
|
|
31
|
+
"description": "Static Astro website on Cloudflare Workers static assets with the Vitops design system pre-wired",
|
|
32
|
+
"template": "./templates/static"
|
|
33
|
+
},
|
|
19
34
|
{
|
|
20
35
|
"name": "emdash",
|
|
21
36
|
"description": "EmDash CMS website on Cloudflare Workers (D1 + R2) with the Vitops design system pre-wired",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CLOUDFLARE_API_TOKEN=your_cloudflare_api_token
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Runs on every PR: typecheck + design-lint + build. deploy-dev.yml /
|
|
2
|
+
# deploy-prod.yml call the same reusable `site-ci.yml` themselves before they
|
|
3
|
+
# deploy, so this is what gives a PR the identical signal before it's even
|
|
4
|
+
# merged to `dev` — a broken build never reaches the dev worker.
|
|
5
|
+
name: CI
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
ci:
|
|
12
|
+
uses: getvitops/design-system/.github/workflows/site-ci.yml@v1
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
# `dev` is the integration branch — every push here refreshes the review site.
|
|
4
4
|
# Promote to production with the "Promote dev → main" workflow (promote.yml).
|
|
5
5
|
#
|
|
6
|
+
# Deploys via the vitops toolchain's reusable EmDash deploy workflow — see
|
|
7
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-deploy-emdash.yml
|
|
8
|
+
# for what it does. Pinned to @v1 so a fix there reaches this repo without a
|
|
9
|
+
# manual re-paste; bump the tag deliberately if you want to pick up a change.
|
|
10
|
+
#
|
|
6
11
|
# Required repo secrets:
|
|
7
12
|
# CLOUDFLARE_API_TOKEN — token with Workers + D1 + R2 edit on this account
|
|
8
13
|
# CLOUDFLARE_ACCOUNT_ID — the Cloudflare account id
|
|
@@ -14,28 +19,21 @@ on:
|
|
|
14
19
|
push:
|
|
15
20
|
branches: [dev]
|
|
16
21
|
|
|
17
|
-
permissions:
|
|
18
|
-
contents: read
|
|
19
|
-
|
|
20
22
|
concurrency:
|
|
21
23
|
group: deploy-dev
|
|
22
24
|
cancel-in-progress: true
|
|
23
25
|
|
|
24
26
|
jobs:
|
|
25
27
|
deploy:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
env:
|
|
39
|
-
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
40
|
-
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
41
|
-
DEV_D1_ID: ${{ secrets.DEV_D1_ID }}
|
|
28
|
+
uses: getvitops/design-system/.github/workflows/site-deploy-emdash.yml@v1
|
|
29
|
+
with:
|
|
30
|
+
environment: dev
|
|
31
|
+
is-dev: true
|
|
32
|
+
# Set this to your dev worker's URL (or dev.<domain>) once known, so a
|
|
33
|
+
# bad migration fails the deploy instead of surfacing to the first
|
|
34
|
+
# visitor — see the reusable workflow's docblock.
|
|
35
|
+
health-check-url: ''
|
|
36
|
+
secrets:
|
|
37
|
+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
38
|
+
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
39
|
+
DEV_D1_ID: ${{ secrets.DEV_D1_ID }}
|
|
@@ -1,36 +1,32 @@
|
|
|
1
1
|
# Deploys `main` to production.
|
|
2
2
|
# `main` should be branch-protected — it then only advances via the Promote
|
|
3
|
-
# workflow (promote.yml), so a push here always represents promoted code.
|
|
3
|
+
# workflow (promote.yml), so a push here always represents promoted code. The
|
|
4
|
+
# `production` GitHub Environment (set up by `scripts/init-github.mjs`) has
|
|
5
|
+
# required reviewers restricted to admins, so this PAUSES for approval before
|
|
6
|
+
# deploying.
|
|
4
7
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
8
|
+
# Deploys via the vitops toolchain's reusable EmDash deploy workflow — see
|
|
9
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-deploy-emdash.yml
|
|
10
|
+
#
|
|
11
|
+
# Required repo secrets: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID
|
|
7
12
|
name: Deploy prod
|
|
8
13
|
|
|
9
14
|
on:
|
|
10
15
|
push:
|
|
11
16
|
branches: [main]
|
|
12
17
|
|
|
13
|
-
permissions:
|
|
14
|
-
contents: read
|
|
15
|
-
|
|
16
18
|
concurrency:
|
|
17
19
|
group: deploy-prod
|
|
18
20
|
cancel-in-progress: false
|
|
19
21
|
|
|
20
22
|
jobs:
|
|
21
23
|
deploy:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
- run: pnpm install --frozen-lockfile
|
|
32
|
-
- name: Build + deploy prod worker
|
|
33
|
-
run: pnpm run deploy
|
|
34
|
-
env:
|
|
35
|
-
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
36
|
-
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
24
|
+
uses: getvitops/design-system/.github/workflows/site-deploy-emdash.yml@v1
|
|
25
|
+
with:
|
|
26
|
+
environment: production
|
|
27
|
+
is-dev: false
|
|
28
|
+
# Set this to your production URL once known.
|
|
29
|
+
health-check-url: ''
|
|
30
|
+
secrets:
|
|
31
|
+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
32
|
+
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
@@ -2,48 +2,20 @@
|
|
|
2
2
|
# Opens a PR from dev into the protected `main` branch and enables auto-merge;
|
|
3
3
|
# the merge triggers Deploy prod.
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# (b) set repo secret PROMOTE_TOKEN to a PAT / GitHub App token allowed to
|
|
9
|
-
# bypass protection, for hands-off promotion.
|
|
10
|
-
# The default GITHUB_TOKEN cannot approve its own PR, so with required reviews
|
|
11
|
-
# the PR waits for a human — which is usually what you want for a prod promotion.
|
|
5
|
+
# Deploys via the vitops toolchain's reusable promote workflow — see
|
|
6
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-promote.yml
|
|
7
|
+
# for the branch-protection / PROMOTE_TOKEN options.
|
|
12
8
|
#
|
|
13
|
-
# Schema/content promotion is deliberately NOT here — the content model lives
|
|
14
|
-
# the EmDash database, not git. Apply schema changes to prod via the admin
|
|
15
|
-
# the site's MCP server, additive changes before the code deploy that uses
|
|
9
|
+
# Schema/content promotion is deliberately NOT here — the content model lives
|
|
10
|
+
# in the EmDash database, not git. Apply schema changes to prod via the admin
|
|
11
|
+
# or the site's MCP server, additive changes before the code deploy that uses
|
|
16
12
|
# them, removals after the code that stops using them.
|
|
17
13
|
name: Promote dev → main
|
|
18
14
|
|
|
19
15
|
on:
|
|
20
16
|
workflow_dispatch:
|
|
21
17
|
|
|
22
|
-
permissions:
|
|
23
|
-
contents: write
|
|
24
|
-
pull-requests: write
|
|
25
|
-
|
|
26
18
|
jobs:
|
|
27
19
|
promote:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- uses: actions/checkout@v4
|
|
31
|
-
with:
|
|
32
|
-
fetch-depth: 0
|
|
33
|
-
- name: Open promotion PR and enable auto-merge
|
|
34
|
-
env:
|
|
35
|
-
GH_TOKEN: ${{ secrets.PROMOTE_TOKEN || github.token }}
|
|
36
|
-
run: |
|
|
37
|
-
set -euo pipefail
|
|
38
|
-
if gh pr view dev --base main --json number >/dev/null 2>&1; then
|
|
39
|
-
echo "Promotion PR already open; ensuring auto-merge is enabled."
|
|
40
|
-
else
|
|
41
|
-
# printf, not a multi-line string: an unindented continuation line
|
|
42
|
-
# would end this YAML block and break the whole workflow file.
|
|
43
|
-
gh pr create --base main --head dev \
|
|
44
|
-
--title "Promote dev → main" \
|
|
45
|
-
--body "$(printf '%s\n\n%s' \
|
|
46
|
-
"Automated code promotion from \`dev\`. Merging deploys to production." \
|
|
47
|
-
"Remember: schema/content changes live in the EmDash database, not git — promote them separately if this release changes the content model.")"
|
|
48
|
-
fi
|
|
49
|
-
gh pr merge dev --auto --merge
|
|
20
|
+
uses: getvitops/design-system/.github/workflows/site-promote.yml@v1
|
|
21
|
+
secrets: inherit
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
24
|
|
@@ -7,6 +7,10 @@ styled by the Vitops design system.
|
|
|
7
7
|
(colors, type, spacing, patterns, animations). Never edit
|
|
8
8
|
`src/styles/tailwind.css` — it is generated from the JSON by the
|
|
9
9
|
`vitops()` integration on every dev/build and is gitignored.
|
|
10
|
+
- `src/assets/placeholder/` holds neutral wireframe stand-ins (square,
|
|
11
|
+
portrait, landscape; SVG + PNG) for layout work before real imagery
|
|
12
|
+
exists. Delete the directory once real assets land — it's separate from
|
|
13
|
+
`src/assets/logo.svg`, the actual brand asset.
|
|
10
14
|
- Content lives in the EmDash database, not in the repo. Query it with
|
|
11
15
|
`getEmDashCollection` / `getEmDashEntry` from `emdash`; render Portable Text
|
|
12
16
|
with `<PortableText />` from `emdash/ui` (the Vitops blocks from
|
|
@@ -16,6 +16,10 @@ Scaffolded from `vp create @getvitops:emdash`.
|
|
|
16
16
|
- **`@getvitops/emdash`** — design-system Portable Text blocks in the editor
|
|
17
17
|
slash menu: image compare, copy snippet, banner, disclosure, carousel
|
|
18
18
|
|
|
19
|
+
`src/assets/placeholder/` ships neutral wireframe images for layout work
|
|
20
|
+
before real imagery exists — delete once real assets land (separate from
|
|
21
|
+
`src/assets/logo.svg`, the brand asset).
|
|
22
|
+
|
|
19
23
|
## Local development
|
|
20
24
|
|
|
21
25
|
```bash
|
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
// One-time GitHub bootstrap: creates a GitHub repo named after this project
|
|
2
|
-
// (package.json name), pushes `main` + `dev`,
|
|
3
|
-
//
|
|
4
|
-
// deploy-
|
|
2
|
+
// (package.json name), pushes `main` + `dev`, makes `dev` the default branch,
|
|
3
|
+
// and provisions the branch-protection + environment policy the deploy
|
|
4
|
+
// workflows assume (deploy-dev on push to dev, deploy-prod on push to main,
|
|
5
|
+
// promote.yml between them):
|
|
6
|
+
//
|
|
7
|
+
// - `main` requires a PR + the `ci` status check — it only advances via
|
|
8
|
+
// promote.yml, never a direct push.
|
|
9
|
+
// - the `production` GitHub Environment requires review from an admin
|
|
10
|
+
// collaborator before deploy-prod.yml is allowed to run — this is the
|
|
11
|
+
// "promoting to prod needs admin sign-off" gate.
|
|
12
|
+
// - `dev` is left UNPROTECTED on purpose — that's what lets an agent (or
|
|
13
|
+
// anyone with push access) commit and merge there directly for
|
|
14
|
+
// integration; only the promotion to `main` is gated.
|
|
5
15
|
//
|
|
6
16
|
// pnpm run init:github # private repo (default)
|
|
7
17
|
// pnpm run init:github -- --public
|
|
8
18
|
// pnpm run init:github -- --dry-run
|
|
9
19
|
//
|
|
10
|
-
// Idempotent: safe to re-run — existing git repo, commits, dev branch,
|
|
11
|
-
//
|
|
12
|
-
// (`gh auth login`).
|
|
20
|
+
// Idempotent: safe to re-run — existing git repo, commits, dev branch, origin
|
|
21
|
+
// remote, branch protection and environments are all left alone or updated
|
|
22
|
+
// in place. Requires the GitHub CLI (`gh`), logged in (`gh auth login`).
|
|
23
|
+
//
|
|
24
|
+
// NOTE: branch protection and environment required-reviewers are GitHub
|
|
25
|
+
// Pro/Team features on a PRIVATE repo. Each `gh api` call below prints the
|
|
26
|
+
// manual equivalent and continues rather than aborting when it 403s.
|
|
13
27
|
|
|
14
28
|
import { execSync, spawnSync } from 'node:child_process';
|
|
15
29
|
import { readFileSync } from 'node:fs';
|
|
@@ -48,6 +62,26 @@ function run(cmd) {
|
|
|
48
62
|
}
|
|
49
63
|
}
|
|
50
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Like `run`, but for `gh api` calls that provision an org/plan-gated
|
|
67
|
+
* feature (branch protection, environment reviewers). A 403 there means the
|
|
68
|
+
* repo's plan doesn't support it — not that the bootstrap failed — so this
|
|
69
|
+
* prints the manual equivalent and keeps going instead of exiting.
|
|
70
|
+
*/
|
|
71
|
+
function runPolicy(cmd, manualHint) {
|
|
72
|
+
if (dryRun) {
|
|
73
|
+
console.log(`[dry-run] ${cmd}`);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.log(`$ ${cmd}`);
|
|
77
|
+
const result = spawnSync(cmd, { shell: true, encoding: 'utf8' });
|
|
78
|
+
if (result.status === 0) return;
|
|
79
|
+
console.warn(
|
|
80
|
+
`\nWARNING: \`${cmd}\` failed (likely needs GitHub Pro/Team on a private repo).\n` +
|
|
81
|
+
`Set it up manually instead:\n ${manualHint}\n`,
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
51
85
|
// --- Preflight: gh installed and authenticated -------------------------------
|
|
52
86
|
if (check(['gh', '--version']).status !== 0) {
|
|
53
87
|
console.error('ERROR: the GitHub CLI (`gh`) is required. Install it from https://cli.github.com');
|
|
@@ -64,7 +98,7 @@ if (quiet('git rev-parse --is-inside-work-tree') === null) {
|
|
|
64
98
|
}
|
|
65
99
|
if (quiet('git rev-parse HEAD') === null) {
|
|
66
100
|
run('git add -A');
|
|
67
|
-
run('git commit -m "Initial commit (scaffolded from @getvitops/create
|
|
101
|
+
run('git commit -m "Initial commit (scaffolded from @getvitops/create)"');
|
|
68
102
|
}
|
|
69
103
|
|
|
70
104
|
// The workflows key off `main`; normalize whatever the initial branch is.
|
|
@@ -86,9 +120,58 @@ run('git push -u origin main dev');
|
|
|
86
120
|
run('gh repo edit --default-branch dev');
|
|
87
121
|
run('git checkout dev');
|
|
88
122
|
|
|
123
|
+
// --- Policy: protect main, gate production behind admin review --------------
|
|
124
|
+
const nwo = quiet('gh repo view --json nameWithOwner -q .nameWithOwner');
|
|
125
|
+
if (nwo) {
|
|
126
|
+
runPolicy(
|
|
127
|
+
`gh api -X PUT repos/${nwo}/branches/main/protection --input - <<'JSON'
|
|
128
|
+
{
|
|
129
|
+
"required_status_checks": { "strict": true, "contexts": ["ci"] },
|
|
130
|
+
"enforce_admins": false,
|
|
131
|
+
"required_pull_request_reviews": { "required_approving_review_count": 1 },
|
|
132
|
+
"restrictions": null,
|
|
133
|
+
"allow_force_pushes": false,
|
|
134
|
+
"allow_deletions": false
|
|
135
|
+
}
|
|
136
|
+
JSON`,
|
|
137
|
+
`Settings → Branches → protect 'main' (require a PR, 1 approval, the 'ci' ` +
|
|
138
|
+
`status check, no force-push/deletion).`,
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
const admins = quiet(
|
|
142
|
+
`gh api repos/${nwo}/collaborators?permission=admin -q '[.[].login]' 2>/dev/null`,
|
|
143
|
+
);
|
|
144
|
+
const reviewers = admins
|
|
145
|
+
? JSON.parse(admins).map((login) => ({ type: 'User', id_or_login: login }))
|
|
146
|
+
: [];
|
|
147
|
+
|
|
148
|
+
runPolicy(
|
|
149
|
+
`gh api -X PUT repos/${nwo}/environments/production --input - <<'JSON'
|
|
150
|
+
{
|
|
151
|
+
"reviewers": ${JSON.stringify(reviewers)},
|
|
152
|
+
"deployment_branch_policy": { "protected_branches": true, "custom_branch_policies": false }
|
|
153
|
+
}
|
|
154
|
+
JSON`,
|
|
155
|
+
`Settings → Environments → 'production' → require reviewers = your admins, ` +
|
|
156
|
+
`restrict deployment branches to 'main'. This is the prod-needs-admin-approval gate.`,
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
// `dev` gets an environment too (for the deploy-dev workflow's `environment:
|
|
160
|
+
// dev` reference), but deliberately no reviewers and no branch restriction —
|
|
161
|
+
// that's what keeps it open for direct pushes/merges.
|
|
162
|
+
runPolicy(
|
|
163
|
+
`gh api -X PUT repos/${nwo}/environments/dev --input - <<'JSON'
|
|
164
|
+
{ "reviewers": [] }
|
|
165
|
+
JSON`,
|
|
166
|
+
`Settings → Environments → create 'dev' with no required reviewers.`,
|
|
167
|
+
);
|
|
168
|
+
} else {
|
|
169
|
+
console.warn('WARNING: could not resolve the repo name-with-owner; skipping policy setup.');
|
|
170
|
+
}
|
|
171
|
+
|
|
89
172
|
// --- What's left (manual, needs your Cloudflare account) ---------------------
|
|
90
173
|
console.log(`
|
|
91
|
-
Repo ready: main (production) + dev (integration, default branch).
|
|
174
|
+
Repo ready: main (protected, production) + dev (integration, default branch).
|
|
92
175
|
NOTE: the first workflow runs will fail until the secrets below exist.
|
|
93
176
|
|
|
94
177
|
Next steps:
|
|
@@ -97,6 +180,7 @@ Next steps:
|
|
|
97
180
|
2. Secrets: gh secret set CLOUDFLARE_API_TOKEN
|
|
98
181
|
gh secret set CLOUDFLARE_ACCOUNT_ID
|
|
99
182
|
gh secret set DEV_D1_ID
|
|
100
|
-
3.
|
|
101
|
-
|
|
183
|
+
3. Verify policy: Settings → Branches (main protected?) and
|
|
184
|
+
Settings → Environments → production (reviewers set?) —
|
|
185
|
+
printed above if this ran on a plan that supports them.
|
|
102
186
|
`);
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400"><rect width="100%" height="100%" fill="#DDDDDD"/><path fill="#999999" d="M87.3 204.72h11.66v-12.54q0-1.77.24-3.92zm17.36 0h4.82v3.79q0 .53-.35.91-.34.39-.98.39h-3.49v9.35h-5.7v-9.35H82.79q-.66 0-1.16-.42-.51-.41-.64-1.02l-.69-3.31 18.16-24.25h6.2zm35.59-4.72q0 5.01-1.08 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.47 3.59-2.59 1.18-5.58 1.18-3 0-5.55-1.18-2.56-1.17-4.44-3.59-1.88-2.41-2.94-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.94-6.09t4.44-3.59q2.55-1.18 5.55-1.18 2.99 0 5.58 1.18 2.58 1.18 4.47 3.59 1.9 2.41 2.97 6.09 1.08 3.69 1.08 8.72m-6.76 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1 1.62-1.6 4.35t-.6 6.89.6 6.89 1.6 4.35q1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m37.5 0q0 5.01-1.08 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.47 3.59-2.59 1.18-5.58 1.18-3 0-5.55-1.18-2.56-1.17-4.44-3.59-1.88-2.41-2.94-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.94-6.09t4.44-3.59q2.55-1.18 5.55-1.18 2.99 0 5.58 1.18 2.58 1.18 4.47 3.59 1.9 2.41 2.97 6.09 1.08 3.69 1.08 8.72m-6.76 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1 1.62-1.6 4.35t-.6 6.89.6 6.89 1.6 4.35q1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m48.84 10.39-3.47 3.42-8.99-8.99-9.06 9.04-3.47-3.42 9.06-9.09-8.64-8.64 3.45-3.44 8.64 8.64 8.58-8.59 3.5 3.45-8.61 8.61zm22.95-5.67h11.66v-12.54q0-1.77.24-3.92zm17.35 0h4.83v3.79q0 .53-.35.91-.34.39-.98.39h-3.5v9.35h-5.69v-9.35h-16.17q-.66 0-1.16-.42-.51-.41-.64-1.02l-.69-3.31 18.15-24.25h6.2zm35.59-4.72q0 5.01-1.07 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.48 3.59-2.58 1.18-5.57 1.18-3 0-5.56-1.18-2.55-1.17-4.43-3.59-1.89-2.41-2.95-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.95-6.09 1.88-2.41 4.43-3.59 2.56-1.18 5.56-1.18 2.99 0 5.57 1.18 2.59 1.18 4.48 3.59 1.9 2.41 2.97 6.09 1.07 3.69 1.07 8.72m-6.75 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1.01 1.62-1.6 4.35-.6 2.73-.6 6.89t.6 6.89q.59 2.73 1.6 4.35 1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m37.49 0q0 5.01-1.07 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.48 3.59-2.58 1.18-5.57 1.18-3 0-5.56-1.18-2.55-1.17-4.43-3.59-1.89-2.41-2.95-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.95-6.09 1.88-2.41 4.43-3.59 2.56-1.18 5.56-1.18 2.99 0 5.57 1.18 2.59 1.18 4.48 3.59 1.9 2.41 2.97 6.09 1.07 3.69 1.07 8.72m-6.75 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1.01 1.62-1.6 4.35-.6 2.73-.6 6.89t.6 6.89q.59 2.73 1.6 4.35 1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89"/></svg>
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="600" viewBox="0 0 400 600"><rect width="100%" height="100%" fill="#DDDDDD"/><path fill="#999999" d="M87.3 304.72h11.66v-12.54q0-1.77.24-3.92zm17.36 0h4.82v3.79q0 .53-.35.91-.34.39-.98.39h-3.49v9.35h-5.7v-9.35H82.79q-.66 0-1.16-.42-.51-.41-.64-1.02l-.69-3.31 18.16-24.25h6.2zm35.59-4.72q0 5.01-1.08 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.47 3.59-2.59 1.18-5.58 1.18-3 0-5.55-1.18-2.56-1.17-4.44-3.59-1.88-2.41-2.94-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.94-6.09t4.44-3.59q2.55-1.18 5.55-1.18 2.99 0 5.58 1.18 2.58 1.18 4.47 3.59 1.9 2.41 2.97 6.09 1.08 3.69 1.08 8.72m-6.76 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1 1.62-1.6 4.35t-.6 6.89.6 6.89 1.6 4.35q1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m37.5 0q0 5.01-1.08 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.47 3.59-2.59 1.18-5.58 1.18-3 0-5.55-1.18-2.56-1.17-4.44-3.59-1.88-2.41-2.94-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.94-6.09t4.44-3.59q2.55-1.18 5.55-1.18 2.99 0 5.58 1.18 2.58 1.18 4.47 3.59 1.9 2.41 2.97 6.09 1.08 3.69 1.08 8.72m-6.76 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1 1.62-1.6 4.35t-.6 6.89.6 6.89 1.6 4.35q1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m48.84 10.39-3.47 3.42-8.99-8.99-9.06 9.04-3.47-3.42 9.06-9.09-8.64-8.64 3.45-3.44 8.64 8.64 8.58-8.59 3.5 3.45-8.61 8.61zm40.94-29.55-11.37 13.91-1.32 1.65q1.11-.56 2.4-.86 1.28-.31 2.76-.31 2.18 0 4.23.72 2.05.71 3.62 2.16 1.56 1.44 2.52 3.59.95 2.14.95 5 0 2.68-.98 5.03-.98 2.34-2.76 4.09-1.77 1.75-4.28 2.76-2.5 1-5.52 1-3.08 0-5.51-.98-2.44-.98-4.16-2.74-1.73-1.76-2.64-4.24-.92-2.48-.92-5.5 0-2.7 1.1-5.55t3.41-5.92l9.14-12.27q.48-.64 1.39-1.09.92-.45 2.11-.45zm-9.88 33.39q1.56 0 2.87-.53t2.25-1.48q.94-.96 1.47-2.24.53-1.29.53-2.8 0-1.64-.5-2.95t-1.43-2.23q-.93-.91-2.23-1.39-1.29-.48-2.86-.48-1.56 0-2.83.53-1.28.53-2.18 1.47t-1.4 2.23-.5 2.77q0 1.59.43 2.9.44 1.31 1.3 2.24t2.13 1.44q1.28.52 2.95.52M288.96 300q0 5.01-1.07 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.48 3.59-2.58 1.18-5.57 1.18-3 0-5.56-1.18-2.55-1.17-4.43-3.59-1.89-2.41-2.95-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.95-6.09 1.88-2.41 4.43-3.59 2.56-1.18 5.56-1.18 2.99 0 5.57 1.18 2.59 1.18 4.48 3.59 1.9 2.41 2.97 6.09 1.07 3.69 1.07 8.72m-6.75 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1.01 1.62-1.6 4.35-.6 2.73-.6 6.89t.6 6.89q.59 2.73 1.6 4.35 1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89m37.49 0q0 5.01-1.07 8.71-1.07 3.69-2.97 6.1-1.89 2.42-4.48 3.59-2.58 1.18-5.57 1.18-3 0-5.56-1.18-2.55-1.17-4.43-3.59-1.89-2.41-2.95-6.1-1.06-3.7-1.06-8.71 0-5.03 1.06-8.72 1.06-3.68 2.95-6.09 1.88-2.41 4.43-3.59 2.56-1.18 5.56-1.18 2.99 0 5.57 1.18 2.59 1.18 4.48 3.59 1.9 2.41 2.97 6.09 1.07 3.69 1.07 8.72m-6.75 0q0-4.16-.61-6.89t-1.63-4.35q-1.02-1.61-2.35-2.26-1.32-.65-2.75-.65-1.41 0-2.72.65t-2.32 2.26q-1.01 1.62-1.6 4.35-.6 2.73-.6 6.89t.6 6.89q.59 2.73 1.6 4.35 1.01 1.61 2.32 2.26t2.72.65q1.43 0 2.75-.65 1.33-.65 2.35-2.26 1.02-1.62 1.63-4.35t.61-6.89"/></svg>
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="400" viewBox="0 0 600 400"><rect width="100%" height="100%" fill="#DDDDDD"/><path fill="#999999" d="m155.52 171.08-17.16 21-2 2.48q1.68-.84 3.62-1.3t4.18-.46q3.28 0 6.38 1.08t5.46 3.26 3.8 5.42 1.44 7.56q0 4.04-1.48 7.58t-4.16 6.18-6.46 4.16-8.34 1.52q-4.64 0-8.32-1.48t-6.28-4.14-3.98-6.4-1.38-8.3q0-4.08 1.66-8.38t5.14-8.94l13.8-18.52q.72-.96 2.1-1.64t3.18-.68zm-14.92 50.4q2.36 0 4.34-.8t3.4-2.24 2.22-3.38.8-4.22q0-2.48-.76-4.46t-2.16-3.36-3.36-2.1-4.32-.72-4.28.8-3.28 2.22-2.12 3.36-.76 4.18q0 2.4.66 4.38t1.96 3.38 3.22 2.18 4.44.78M208.28 200q0 7.56-1.62 13.14t-4.48 9.22-6.76 5.42-8.42 1.78-8.38-1.78-6.7-5.42-4.44-9.22-1.6-13.14q0-7.6 1.6-13.16t4.44-9.2 6.7-5.42 8.38-1.78 8.42 1.78 6.76 5.42 4.48 9.2 1.62 13.16m-10.2 0q0-6.28-.92-10.4t-2.46-6.56-3.54-3.42-4.16-.98q-2.12 0-4.1.98t-3.5 3.42-2.42 6.56-.9 10.4.9 10.4 2.42 6.56 3.5 3.42 4.1.98q2.16 0 4.16-.98t3.54-3.42 2.46-6.56.92-10.4m56.6 0q0 7.56-1.62 13.14t-4.48 9.22-6.76 5.42-8.42 1.78-8.38-1.78-6.7-5.42-4.44-9.22-1.6-13.14q0-7.6 1.6-13.16t4.44-9.2 6.7-5.42 8.38-1.78 8.42 1.78 6.76 5.42 4.48 9.2 1.62 13.16m-10.2 0q0-6.28-.92-10.4t-2.46-6.56-3.54-3.42-4.16-.98q-2.12 0-4.1.98t-3.5 3.42-2.42 6.56-.9 10.4.9 10.4 2.42 6.56 3.5 3.42 4.1.98q2.16 0 4.16-.98t3.54-3.42 2.46-6.56.92-10.4m73.72 15.68-5.24 5.16-13.56-13.56-13.68 13.64-5.24-5.16 13.68-13.72L281.12 189l5.2-5.2 13.04 13.04 12.96-12.96 5.28 5.2-13 13zm34.64-8.56h17.6V188.2q0-2.68.36-5.92zm26.2 0h7.28v5.72q0 .8-.52 1.38t-1.48.58h-5.28v14.12h-8.6V214.8h-24.4q-1 0-1.76-.62t-.96-1.54l-1.04-5 27.4-36.6h9.36zm53.72-7.12q0 7.56-1.62 13.14t-4.48 9.22-6.76 5.42-8.42 1.78-8.38-1.78-6.7-5.42-4.44-9.22-1.6-13.14q0-7.6 1.6-13.16t4.44-9.2 6.7-5.42 8.38-1.78 8.42 1.78 6.76 5.42 4.48 9.2 1.62 13.16m-10.2 0q0-6.28-.92-10.4t-2.46-6.56-3.54-3.42-4.16-.98q-2.12 0-4.1.98t-3.5 3.42-2.42 6.56-.9 10.4.9 10.4 2.42 6.56 3.5 3.42 4.1.98q2.16 0 4.16-.98t3.54-3.42 2.46-6.56.92-10.4m56.6 0q0 7.56-1.62 13.14t-4.48 9.22-6.76 5.42-8.42 1.78-8.38-1.78-6.7-5.42-4.44-9.22-1.6-13.14q0-7.6 1.6-13.16t4.44-9.2 6.7-5.42 8.38-1.78 8.42 1.78 6.76 5.42 4.48 9.2 1.62 13.16m-10.2 0q0-6.28-.92-10.4t-2.46-6.56-3.54-3.42-4.16-.98q-2.12 0-4.1.98t-3.5 3.42-2.42 6.56-.9 10.4.9 10.4 2.42 6.56 3.5 3.42 4.1.98q2.16 0 4.16-.98t3.54-3.42 2.46-6.56.92-10.4"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CLOUDFLARE_API_TOKEN=your_cloudflare_api_token
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Runs on every PR: typecheck + design-lint + build. deploy-dev.yml /
|
|
2
|
+
# deploy-prod.yml call the same reusable `site-ci.yml` themselves before they
|
|
3
|
+
# deploy, so this is what gives a PR the identical signal before it's even
|
|
4
|
+
# merged to `dev` — a broken build never reaches the dev worker.
|
|
5
|
+
name: CI
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
ci:
|
|
12
|
+
uses: getvitops/design-system/.github/workflows/site-ci.yml@v1
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Deploys the `dev` branch to the isolated dev worker (<name>-dev, and
|
|
2
|
+
# dev.<domain> if a custom domain is configured in wrangler.jsonc).
|
|
3
|
+
# `dev` is the integration branch — every push here refreshes the review site.
|
|
4
|
+
# Promote to production with the "Promote dev → main" workflow (promote.yml).
|
|
5
|
+
#
|
|
6
|
+
# Deploys via the vitops toolchain's reusable static-site deploy workflow — see
|
|
7
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-deploy-static.yml
|
|
8
|
+
# Pinned to @v1 so a fix there reaches this repo without a manual re-paste;
|
|
9
|
+
# bump the tag deliberately if you want to pick up a change.
|
|
10
|
+
#
|
|
11
|
+
# Required repo secrets:
|
|
12
|
+
# CLOUDFLARE_API_TOKEN — token with Workers edit on this account
|
|
13
|
+
# CLOUDFLARE_ACCOUNT_ID — the Cloudflare account id
|
|
14
|
+
name: Deploy dev
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
push:
|
|
18
|
+
branches: [dev]
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: deploy-dev
|
|
22
|
+
cancel-in-progress: true
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
deploy:
|
|
26
|
+
uses: getvitops/design-system/.github/workflows/site-deploy-static.yml@v1
|
|
27
|
+
with:
|
|
28
|
+
environment: dev
|
|
29
|
+
worker-name-suffix: -dev
|
|
30
|
+
route-prefix: dev.
|
|
31
|
+
secrets:
|
|
32
|
+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
33
|
+
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Deploys `main` to production.
|
|
2
|
+
# `main` should be branch-protected — it then only advances via the Promote
|
|
3
|
+
# workflow (promote.yml), so a push here always represents promoted code. The
|
|
4
|
+
# `production` GitHub Environment (set up by `scripts/init-github.mjs`) has
|
|
5
|
+
# required reviewers restricted to admins, so this PAUSES for approval before
|
|
6
|
+
# deploying.
|
|
7
|
+
#
|
|
8
|
+
# Deploys via the vitops toolchain's reusable static-site deploy workflow — see
|
|
9
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-deploy-static.yml
|
|
10
|
+
#
|
|
11
|
+
# Required repo secrets: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID
|
|
12
|
+
name: Deploy prod
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
push:
|
|
16
|
+
branches: [main]
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: deploy-prod
|
|
20
|
+
cancel-in-progress: false
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
deploy:
|
|
24
|
+
uses: getvitops/design-system/.github/workflows/site-deploy-static.yml@v1
|
|
25
|
+
with:
|
|
26
|
+
environment: production
|
|
27
|
+
secrets:
|
|
28
|
+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
29
|
+
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Promote dev → main. Run manually after reviewing the dev site.
|
|
2
|
+
# Opens a PR from dev into the protected `main` branch and enables auto-merge;
|
|
3
|
+
# the merge triggers Deploy prod.
|
|
4
|
+
#
|
|
5
|
+
# Deploys via the vitops toolchain's reusable promote workflow — see
|
|
6
|
+
# https://github.com/getvitops/design-system/blob/main/.github/workflows/site-promote.yml
|
|
7
|
+
# for the branch-protection / PROMOTE_TOKEN options.
|
|
8
|
+
name: Promote dev → main
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
promote:
|
|
15
|
+
uses: getvitops/design-system/.github/workflows/site-promote.yml@v1
|
|
16
|
+
secrets: inherit
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
24
|