@@ -20,22 +20,28 @@ from `master` until the fix is merged there.
2020
2121## Local Checks
2222
23- After regenerating the flow, run these checks from the repository root. When
24- testing an unreleased upstream ` control-plane-flow ` checkout, invoke that
25- checkout's ` bin/cpflow ` directly:
23+ After regenerating the flow, run these checks from the repository root. If
24+ ` cpflow ` is installed as a gem, use ` cpflow ` directly:
25+
26+ ``` sh
27+ bin/conductor-exec cpflow generate-github-actions --staging-branch master
28+ bin/test-cpflow-github-flow
29+ ```
30+
31+ When testing an unreleased upstream ` control-plane-flow ` checkout, replace
32+ ` cpflow ` with that checkout's ` bin/cpflow ` :
2633
2734``` sh
2835bin/conductor-exec ruby /path/to/control-plane-flow/bin/cpflow generate-github-actions --staging-branch master
29- bin/conductor-exec ruby /path/to/control-plane-flow/bin/cpflow github-flow-readiness
30- bin/conductor-exec ruby -e ' require "yaml"; Dir[".github/actions/**/action.yml", ".github/workflows/*.yml"].sort.each { |path| YAML.load_file(path, aliases: true); puts "parsed #{path}" }'
31- bin/conductor-exec ruby -e ' require "yaml"; bad=[]; Dir[".github/actions/**/action.yml"].sort.each { |path| doc=YAML.load_file(path, aliases: true); doc.fetch("inputs", {}).each { |name, spec| bad << "#{path}:#{name}" if spec["description"].to_s.include?("${{") } }; }; abort bad.join("\n") unless bad.empty?; puts "no action metadata descriptions contain GitHub expressions"'
32- actionlint -ignore ' SC2129' .github/workflows/cpflow-* .yml
36+ bin/test-cpflow-github-flow ruby /path/to/control-plane-flow/bin/cpflow
3337```
3438
3539Why the explicit description check exists: GitHub parses expression-like snippets
3640inside composite action metadata, including ` description: ` fields. Literal
3741examples such as ` ${{ vars.SOME_VALUE }} ` can fail action loading before any
38- shell step starts.
42+ shell step starts. The wrapper runs ` cpflow github-flow-readiness ` , parses the
43+ generated YAML, checks action input descriptions for literal GitHub expressions,
44+ and runs ` actionlint -ignore 'SC2129' .github/workflows/cpflow-*.yml ` .
3945
4046## PR Checks
4147
@@ -77,8 +83,10 @@ Use the generated app name from the workflow log:
7783APP_NAME: ${REVIEW_APP_PREFIX}-${PR_NUMBER}
7884```
7985
80- For this repo, verify the actual ` REVIEW_APP_PREFIX ` repository variable before
81- assuming the final app name.
86+ This is a template from the workflow output, not a literal command to evaluate
87+ unless those environment variables are already set. For this repo, verify the
88+ actual ` REVIEW_APP_PREFIX ` repository variable before assuming the final app
89+ name.
8290
8391## Troubleshooting Signals
8492
@@ -120,8 +128,8 @@ Create the first review app by commenting exactly:
120128
121129- Add a no-secret GitHub Actions smoke workflow that loads generated local
122130 composite actions from the PR branch and fails fast on action metadata parsing.
123- - Add a small repo script, for example ` bin/test-cpflow-github-flow ` , that wraps
124- the local YAML, metadata-description, readiness, and ` actionlint ` checks .
131+ - Extend ` bin/test-cpflow-github-flow ` as more local cpflow GitHub Actions
132+ checks become worth standardizing .
125133- Add an early token sanity step after ` Setup environment ` so invalid
126134 ` CPLN_TOKEN_STAGING ` and ` CPLN_TOKEN_PRODUCTION ` values fail with a named
127135 "validate Control Plane token" step instead of surfacing later during
0 commit comments