@codyswann/lisa 2.198.1 → 2.199.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/cdk/create-only/.github/workflows/deploy.yml +27 -3
- package/expo/create-only/.github/workflows/deploy.yml +27 -3
- package/nestjs/create-only/.github/workflows/deploy.yml +26 -3
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github-repo/SKILL.md +58 -3
- package/plugins/lisa/commands/lisa/setup/github-repo.md +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +6 -0
- package/plugins/lisa/skills/lisa-setup-github-repo/SKILL.md +59 -4
- package/plugins/lisa-agy/commands/lisa/setup/github-repo.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-github-repo/SKILL.md +59 -4
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/commands/lisa/setup/github-repo.md +1 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +6 -0
- package/plugins/lisa-copilot/skills/lisa-setup-github-repo/SKILL.md +59 -4
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/commands/lisa/setup/github-repo.md +1 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +6 -0
- package/plugins/lisa-cursor/skills/lisa-setup-github-repo/SKILL.md +59 -4
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/commands/lisa/setup/github-repo.md +1 -1
- package/plugins/src/base/rules/reference/config-resolution.md +6 -0
- package/plugins/src/base/skills/lisa-setup-github-repo/SKILL.md +59 -4
- package/scripts/lisa-github-environments.sh +256 -0
- package/scripts/lisa-github-repo-setup.sh +11 -4
- package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +30 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-setup-github-repo
|
|
3
|
-
description: "Apply Lisa's GitHub repository governance baseline to the current project's repo: repository settings (merge-only, auto-merge, delete-branch-on-merge, update-branch suggestions, wiki off, secret scanning where available), branch + tag rulesets from Lisa templates (base PR gate with CodeRabbit/GitGuardian/Quality Checks, prevent delete, protect tags, stack overlays),
|
|
4
|
-
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
3
|
+
description: "Apply Lisa's GitHub repository governance baseline to the current project's repo: repository settings (merge-only, auto-merge, delete-branch-on-merge, update-branch suggestions, wiki off, secret scanning where available), branch + tag rulesets from Lisa templates (base PR gate with CodeRabbit/GitGuardian/Quality Checks, prevent delete, protect tags, stack overlays), a write-access deploy key + DEPLOY_KEY secret so release workflows can push version bumps through the rulesets' DeployKey bypass, and optional deployment environments with human-approval gates (required reviewers) from the github.environments block in .lisa.config.json. Idempotent — re-running updates settings, rulesets, and environments in place and skips an already-configured deploy key."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Edit", "AskUserQuestion"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Setup GitHub Repository Governance
|
|
@@ -29,6 +29,28 @@ Apply the fleet-standard GitHub repository configuration to this project's repo.
|
|
|
29
29
|
- `prevent delete`, `protect tags` (`v*`), plus stack overlays (`cdk validation`, staging-only `playwright`)
|
|
30
30
|
- Repos without `.github/workflows/` get only app-based required checks — an Actions check that can never report would block every PR forever
|
|
31
31
|
3. **Deploy key** (`scripts/setup-deploy-key.sh --yes`) — write-access deploy key + `DEPLOY_KEY` secret, skipped when already configured. The `base` ruleset's `DeployKey: always` bypass is what lets CI version-bump pushes through protected branches.
|
|
32
|
+
4. **Deployment environments** (`scripts/lisa-github-environments.sh`) — entirely optional; only runs when `.lisa.config.json` declares environments:
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"github": {
|
|
36
|
+
"environments": {
|
|
37
|
+
"production": {
|
|
38
|
+
"branch": "main",
|
|
39
|
+
"require_approval": true,
|
|
40
|
+
"reviewers": ["some-user", "some-org/some-team"],
|
|
41
|
+
"prevent_self_review": false,
|
|
42
|
+
"wait_timer": 0
|
|
43
|
+
},
|
|
44
|
+
"staging": { "branch": "staging" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
- Environment names are friendly names (`production`), mapped to branches. Branch resolution order: explicit `branch` → `deploy.branches[<name>]` → the name itself.
|
|
50
|
+
- `require_approval: true` provisions **required reviewers** (usernames or `org/team-slug`, max 6) — GitHub pauses any workflow job bound to the environment until a listed reviewer approves it in the Actions UI. Reviewers are mandatory when `require_approval` is true; the script refuses a gate nobody can approve.
|
|
51
|
+
- Every declared environment also gets a **deployment branch policy** pinned to its branch, so only that branch can deploy to it.
|
|
52
|
+
- Provisioning matters: GitHub silently auto-creates an environment **without** protection rules the first time a workflow references it, so an unprovisioned approval gate gates on nothing.
|
|
53
|
+
- The stack `deploy.yml` templates read this same config at runtime and pass `require_approval`/`approval_environment` to `release.yml`, whose `release_approval` job is where the run pauses. Requires a public repo or a paid plan for private repos (the script skips gracefully otherwise).
|
|
32
54
|
|
|
33
55
|
## Workflow
|
|
34
56
|
|
|
@@ -56,7 +78,31 @@ bash "$LISA_SCRIPTS/lisa-github-repo-setup.sh" .
|
|
|
56
78
|
|
|
57
79
|
Requires `gh` authenticated with **admin** permission on the repo. A 403 on rulesets means the plan doesn't support them (private repo on a free personal plan) — settings and deploy key still apply; the script skips rulesets gracefully.
|
|
58
80
|
|
|
59
|
-
### Step 4 —
|
|
81
|
+
### Step 4 — Wire the approval gate into an existing deploy.yml (guided edit)
|
|
82
|
+
|
|
83
|
+
Only when `.lisa.config.json` has a `github.environments` entry with `require_approval: true` AND `.github/workflows/deploy.yml` exists but does not reference `approval_environment`:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
[ -f .github/workflows/deploy.yml ] \
|
|
87
|
+
&& jq -e '[.github.environments // {} | .[] | select(.require_approval == true)] | length > 0' .lisa.config.json > /dev/null 2>&1 \
|
|
88
|
+
&& ! grep -q 'approval_environment' .github/workflows/deploy.yml \
|
|
89
|
+
&& echo "deploy.yml needs approval wiring"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
A `grep` hit is only a first pass — before skipping the edit, read the `release` job's `with:` block and confirm it actually passes both `require_approval` and `approval_environment` from the `determine_environment` outputs (a commented-out or unrelated occurrence doesn't count as wired).
|
|
93
|
+
|
|
94
|
+
`deploy.yml` is create-only — the project owns it, so Lisa never patches it automatically. Show the user the two changes from the current stack template (`<stack>/create-only/.github/workflows/deploy.yml` in the Lisa repo) and offer to apply them via Edit:
|
|
95
|
+
|
|
96
|
+
1. In `determine_environment`, add a checkout step plus the `🚦 Resolve approval gate from .lisa.config.json` step, and expose the `approval_environment` / `require_approval` outputs.
|
|
97
|
+
2. In the `release` job's `with:` block, replace `require_approval: false` with:
|
|
98
|
+
```yaml
|
|
99
|
+
require_approval: ${{ needs.determine_environment.outputs.require_approval == 'true' }}
|
|
100
|
+
approval_environment: ${{ needs.determine_environment.outputs.approval_environment }}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Skip this step (and say why) if the project's deploy.yml doesn't call Lisa's `release.yml` (rails uses `release-rails.yml` and harper-fabric has no release call — approval gating for those stacks is not wired yet).
|
|
104
|
+
|
|
105
|
+
### Step 5 — Verify
|
|
60
106
|
|
|
61
107
|
```bash
|
|
62
108
|
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
|
|
@@ -64,4 +110,13 @@ gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
|
|
|
64
110
|
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/rulesets" --jq '[.[].name]'
|
|
65
111
|
```
|
|
66
112
|
|
|
67
|
-
|
|
113
|
+
When environments were configured, also confirm each one carries its protection rules and branch policy:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/environments" \
|
|
117
|
+
--jq '.environments[] | {name, protection_rules, deployment_branch_policy}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
For every environment declared in `github.environments`, treat a missing `deployment_branch_policy` — or, when `require_approval` is true, an empty `protection_rules` — as a failure: the environment exists but is unprotected, so an approval gate bound to it would block nothing.
|
|
121
|
+
|
|
122
|
+
Report the applied settings, ruleset names, and environments. If any step failed, surface the error — do not mark the setup complete.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Apply Lisa's GitHub repository governance baseline: merge-only settings with auto-merge and delete-branch-on-merge, branch + tag rulesets (CodeRabbit/GitGuardian/Quality Checks gates, prevent delete, protect tags),
|
|
2
|
+
description: "Apply Lisa's GitHub repository governance baseline: merge-only settings with auto-merge and delete-branch-on-merge, branch + tag rulesets (CodeRabbit/GitGuardian/Quality Checks gates, prevent delete, protect tags), a CI deploy key + DEPLOY_KEY secret, and optional deployment environments with human-approval gates from .lisa.config.json github.environments. Idempotent; per-repo overrides via .lisa.config.json github.settings."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: ""
|
|
5
5
|
---
|
|
@@ -279,6 +279,12 @@ Each vendor section is **conditionally required**: required only when that vendo
|
|
|
279
279
|
| `github.projects.v2.owner.slug` | GitHub Project coordination is enabled | Owner login for the shared ProjectV2. In v1 it MUST match the tracked repository namespace (`github.org`); cross-namespace coordination is rejected. |
|
|
280
280
|
| `github.projects.v2.number` | GitHub Project coordination is enabled | Human-facing ProjectV2 number from the GitHub UI / URL. Later utilities resolve the opaque node id from this owner + number pair. |
|
|
281
281
|
| `github.projects.v2.required` | no | Coordination strictness flag. Default `false` keeps Project membership best-effort; `true` makes Project membership failures block the write. Setup/doctor/runtime validation reads Project ownership + access and branches on this flag: best-effort failures warn, required-mode failures stop the write. |
|
|
282
|
+
| `github.environments` | no | Optional map of friendly environment name → deployment-environment declaration, provisioned by `/lisa:setup:github-repo` (`scripts/lisa-github-environments.sh`). Absent → no environments are touched. Each declared environment gets a deployment branch policy pinned to its branch. |
|
|
283
|
+
| `github.environments.<name>.branch` | no | Branch that deploys to this environment. Resolution order: this field → `deploy.branches[<name>]` → the environment name itself. |
|
|
284
|
+
| `github.environments.<name>.require_approval` | no | Default `false`. `true` provisions required reviewers on the environment and makes the stack `deploy.yml` templates pass `require_approval`/`approval_environment` to `release.yml`, pausing the run at the `release_approval` job until a reviewer approves. |
|
|
285
|
+
| `github.environments.<name>.reviewers` | `require_approval = true` | Array of GitHub usernames or `org/team-slug` entries (max 6) allowed to approve deployments. Mandatory with `require_approval` — an approval gate nobody can approve is refused at provision time. |
|
|
286
|
+
| `github.environments.<name>.prevent_self_review` | no | Default `false`. `true` stops the person who triggered the deployment from approving it themselves. |
|
|
287
|
+
| `github.environments.<name>.wait_timer` | no | Default `0`. Minutes to delay the deployment after approval. |
|
|
282
288
|
|
|
283
289
|
When `tracker = "github"` AND `source = "github"` (self-host), both reads and writes hit the same GitHub repo. Label namespaces are kept separate so the two flows don't collide — see "Self-host edge case" below.
|
|
284
290
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lisa-setup-github-repo
|
|
3
|
-
description: "Apply Lisa's GitHub repository governance baseline to the current project's repo: repository settings (merge-only, auto-merge, delete-branch-on-merge, update-branch suggestions, wiki off, secret scanning where available), branch + tag rulesets from Lisa templates (base PR gate with CodeRabbit/GitGuardian/Quality Checks, prevent delete, protect tags, stack overlays),
|
|
4
|
-
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
3
|
+
description: "Apply Lisa's GitHub repository governance baseline to the current project's repo: repository settings (merge-only, auto-merge, delete-branch-on-merge, update-branch suggestions, wiki off, secret scanning where available), branch + tag rulesets from Lisa templates (base PR gate with CodeRabbit/GitGuardian/Quality Checks, prevent delete, protect tags, stack overlays), a write-access deploy key + DEPLOY_KEY secret so release workflows can push version bumps through the rulesets' DeployKey bypass, and optional deployment environments with human-approval gates (required reviewers) from the github.environments block in .lisa.config.json. Idempotent — re-running updates settings, rulesets, and environments in place and skips an already-configured deploy key."
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Edit", "AskUserQuestion"]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Setup GitHub Repository Governance
|
|
@@ -29,6 +29,28 @@ Apply the fleet-standard GitHub repository configuration to this project's repo.
|
|
|
29
29
|
- `prevent delete`, `protect tags` (`v*`), plus stack overlays (`cdk validation`, staging-only `playwright`)
|
|
30
30
|
- Repos without `.github/workflows/` get only app-based required checks — an Actions check that can never report would block every PR forever
|
|
31
31
|
3. **Deploy key** (`scripts/setup-deploy-key.sh --yes`) — write-access deploy key + `DEPLOY_KEY` secret, skipped when already configured. The `base` ruleset's `DeployKey: always` bypass is what lets CI version-bump pushes through protected branches.
|
|
32
|
+
4. **Deployment environments** (`scripts/lisa-github-environments.sh`) — entirely optional; only runs when `.lisa.config.json` declares environments:
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"github": {
|
|
36
|
+
"environments": {
|
|
37
|
+
"production": {
|
|
38
|
+
"branch": "main",
|
|
39
|
+
"require_approval": true,
|
|
40
|
+
"reviewers": ["some-user", "some-org/some-team"],
|
|
41
|
+
"prevent_self_review": false,
|
|
42
|
+
"wait_timer": 0
|
|
43
|
+
},
|
|
44
|
+
"staging": { "branch": "staging" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
- Environment names are friendly names (`production`), mapped to branches. Branch resolution order: explicit `branch` → `deploy.branches[<name>]` → the name itself.
|
|
50
|
+
- `require_approval: true` provisions **required reviewers** (usernames or `org/team-slug`, max 6) — GitHub pauses any workflow job bound to the environment until a listed reviewer approves it in the Actions UI. Reviewers are mandatory when `require_approval` is true; the script refuses a gate nobody can approve.
|
|
51
|
+
- Every declared environment also gets a **deployment branch policy** pinned to its branch, so only that branch can deploy to it.
|
|
52
|
+
- Provisioning matters: GitHub silently auto-creates an environment **without** protection rules the first time a workflow references it, so an unprovisioned approval gate gates on nothing.
|
|
53
|
+
- The stack `deploy.yml` templates read this same config at runtime and pass `require_approval`/`approval_environment` to `release.yml`, whose `release_approval` job is where the run pauses. Requires a public repo or a paid plan for private repos (the script skips gracefully otherwise).
|
|
32
54
|
|
|
33
55
|
## Workflow
|
|
34
56
|
|
|
@@ -56,7 +78,31 @@ bash "$LISA_SCRIPTS/lisa-github-repo-setup.sh" .
|
|
|
56
78
|
|
|
57
79
|
Requires `gh` authenticated with **admin** permission on the repo. A 403 on rulesets means the plan doesn't support them (private repo on a free personal plan) — settings and deploy key still apply; the script skips rulesets gracefully.
|
|
58
80
|
|
|
59
|
-
### Step 4 —
|
|
81
|
+
### Step 4 — Wire the approval gate into an existing deploy.yml (guided edit)
|
|
82
|
+
|
|
83
|
+
Only when `.lisa.config.json` has a `github.environments` entry with `require_approval: true` AND `.github/workflows/deploy.yml` exists but does not reference `approval_environment`:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
[ -f .github/workflows/deploy.yml ] \
|
|
87
|
+
&& jq -e '[.github.environments // {} | .[] | select(.require_approval == true)] | length > 0' .lisa.config.json > /dev/null 2>&1 \
|
|
88
|
+
&& ! grep -q 'approval_environment' .github/workflows/deploy.yml \
|
|
89
|
+
&& echo "deploy.yml needs approval wiring"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
A `grep` hit is only a first pass — before skipping the edit, read the `release` job's `with:` block and confirm it actually passes both `require_approval` and `approval_environment` from the `determine_environment` outputs (a commented-out or unrelated occurrence doesn't count as wired).
|
|
93
|
+
|
|
94
|
+
`deploy.yml` is create-only — the project owns it, so Lisa never patches it automatically. Show the user the two changes from the current stack template (`<stack>/create-only/.github/workflows/deploy.yml` in the Lisa repo) and offer to apply them via Edit:
|
|
95
|
+
|
|
96
|
+
1. In `determine_environment`, add a checkout step plus the `🚦 Resolve approval gate from .lisa.config.json` step, and expose the `approval_environment` / `require_approval` outputs.
|
|
97
|
+
2. In the `release` job's `with:` block, replace `require_approval: false` with:
|
|
98
|
+
```yaml
|
|
99
|
+
require_approval: ${{ needs.determine_environment.outputs.require_approval == 'true' }}
|
|
100
|
+
approval_environment: ${{ needs.determine_environment.outputs.approval_environment }}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Skip this step (and say why) if the project's deploy.yml doesn't call Lisa's `release.yml` (rails uses `release-rails.yml` and harper-fabric has no release call — approval gating for those stacks is not wired yet).
|
|
104
|
+
|
|
105
|
+
### Step 5 — Verify
|
|
60
106
|
|
|
61
107
|
```bash
|
|
62
108
|
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
|
|
@@ -64,4 +110,13 @@ gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
|
|
|
64
110
|
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/rulesets" --jq '[.[].name]'
|
|
65
111
|
```
|
|
66
112
|
|
|
67
|
-
|
|
113
|
+
When environments were configured, also confirm each one carries its protection rules and branch policy:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/environments" \
|
|
117
|
+
--jq '.environments[] | {name, protection_rules, deployment_branch_policy}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
For every environment declared in `github.environments`, treat a missing `deployment_branch_policy` — or, when `require_approval` is true, an empty `protection_rules` — as a failure: the environment exists but is unprotected, so an approval gate bound to it would block nothing.
|
|
121
|
+
|
|
122
|
+
Report the applied settings, ruleset names, and environments. If any step failed, surface the error — do not mark the setup complete.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.199.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.199.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.199.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.199.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.199.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Apply Lisa's GitHub repository governance baseline: merge-only settings with auto-merge and delete-branch-on-merge, branch + tag rulesets (CodeRabbit/GitGuardian/Quality Checks gates, prevent delete, protect tags),
|
|
2
|
+
description: "Apply Lisa's GitHub repository governance baseline: merge-only settings with auto-merge and delete-branch-on-merge, branch + tag rulesets (CodeRabbit/GitGuardian/Quality Checks gates, prevent delete, protect tags), a CI deploy key + DEPLOY_KEY secret, and optional deployment environments with human-approval gates from .lisa.config.json github.environments. Idempotent; per-repo overrides via .lisa.config.json github.settings."
|
|
3
3
|
allowed-tools: ["Skill"]
|
|
4
4
|
argument-hint: ""
|
|
5
5
|
---
|
|
@@ -274,6 +274,12 @@ Each vendor section is **conditionally required**: required only when that vendo
|
|
|
274
274
|
| `github.projects.v2.owner.slug` | GitHub Project coordination is enabled | Owner login for the shared ProjectV2. In v1 it MUST match the tracked repository namespace (`github.org`); cross-namespace coordination is rejected. |
|
|
275
275
|
| `github.projects.v2.number` | GitHub Project coordination is enabled | Human-facing ProjectV2 number from the GitHub UI / URL. Later utilities resolve the opaque node id from this owner + number pair. |
|
|
276
276
|
| `github.projects.v2.required` | no | Coordination strictness flag. Default `false` keeps Project membership best-effort; `true` makes Project membership failures block the write. Setup/doctor/runtime validation reads Project ownership + access and branches on this flag: best-effort failures warn, required-mode failures stop the write. |
|
|
277
|
+
| `github.environments` | no | Optional map of friendly environment name → deployment-environment declaration, provisioned by `/lisa:setup:github-repo` (`scripts/lisa-github-environments.sh`). Absent → no environments are touched. Each declared environment gets a deployment branch policy pinned to its branch. |
|
|
278
|
+
| `github.environments.<name>.branch` | no | Branch that deploys to this environment. Resolution order: this field → `deploy.branches[<name>]` → the environment name itself. |
|
|
279
|
+
| `github.environments.<name>.require_approval` | no | Default `false`. `true` provisions required reviewers on the environment and makes the stack `deploy.yml` templates pass `require_approval`/`approval_environment` to `release.yml`, pausing the run at the `release_approval` job until a reviewer approves. |
|
|
280
|
+
| `github.environments.<name>.reviewers` | `require_approval = true` | Array of GitHub usernames or `org/team-slug` entries (max 6) allowed to approve deployments. Mandatory with `require_approval` — an approval gate nobody can approve is refused at provision time. |
|
|
281
|
+
| `github.environments.<name>.prevent_self_review` | no | Default `false`. `true` stops the person who triggered the deployment from approving it themselves. |
|
|
282
|
+
| `github.environments.<name>.wait_timer` | no | Default `0`. Minutes to delay the deployment after approval. |
|
|
277
283
|
|
|
278
284
|
When `tracker = "github"` AND `source = "github"` (self-host), both reads and writes hit the same GitHub repo. Label namespaces are kept separate so the two flows don't collide — see "Self-host edge case" below.
|
|
279
285
|
|