cpflow 4.2.0 → 5.0.0.rc.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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/update-changelog.md +367 -0
  3. data/.github/workflows/claude.yml +5 -0
  4. data/.overcommit.yml +43 -3
  5. data/.rubocop.yml +3 -3
  6. data/CHANGELOG.md +28 -4
  7. data/CONTRIBUTING.md +6 -0
  8. data/Gemfile +8 -7
  9. data/Gemfile.lock +92 -72
  10. data/README.md +43 -15
  11. data/cpflow.gemspec +5 -5
  12. data/docs/ai-github-flow-prompt.md +61 -0
  13. data/docs/ci-automation.md +335 -28
  14. data/docs/commands.md +65 -4
  15. data/docs/releasing.md +153 -0
  16. data/lib/command/ai_github_flow_prompt.rb +47 -0
  17. data/lib/command/base.rb +14 -0
  18. data/lib/command/cleanup_images.rb +1 -1
  19. data/lib/command/cleanup_stale_apps.rb +1 -1
  20. data/lib/command/copy_image_from_upstream.rb +14 -3
  21. data/lib/command/exists.rb +13 -2
  22. data/lib/command/generate.rb +153 -4
  23. data/lib/command/generate_github_actions.rb +170 -0
  24. data/lib/command/generator_helpers.rb +31 -0
  25. data/lib/command/github_flow_readiness.rb +37 -0
  26. data/lib/command/run.rb +1 -1
  27. data/lib/command/terraform/generate.rb +1 -0
  28. data/lib/command/version.rb +1 -0
  29. data/lib/constants/exit_code.rb +1 -0
  30. data/lib/core/controlplane.rb +9 -7
  31. data/lib/core/controlplane_api_direct.rb +3 -3
  32. data/lib/core/github_flow_readiness/checks.rb +143 -0
  33. data/lib/core/github_flow_readiness_service.rb +453 -0
  34. data/lib/core/repo_introspection.rb +118 -0
  35. data/lib/core/terraform_config/dsl.rb +1 -1
  36. data/lib/core/terraform_config/local_variable.rb +1 -1
  37. data/lib/cpflow/version.rb +1 -1
  38. data/lib/cpflow.rb +65 -3
  39. data/lib/generator_templates/Dockerfile +59 -3
  40. data/lib/generator_templates/controlplane.yml +27 -39
  41. data/lib/generator_templates/entrypoint.sh +1 -1
  42. data/lib/generator_templates/release_script.sh +23 -0
  43. data/lib/generator_templates/templates/app.yml +5 -8
  44. data/lib/generator_templates/templates/rails.yml +2 -11
  45. data/lib/generator_templates_sqlite/controlplane.yml +46 -0
  46. data/lib/generator_templates_sqlite/release_script.sh +25 -0
  47. data/lib/generator_templates_sqlite/templates/app.yml +15 -0
  48. data/lib/generator_templates_sqlite/templates/db.yml +6 -0
  49. data/lib/generator_templates_sqlite/templates/rails.yml +32 -0
  50. data/lib/generator_templates_sqlite/templates/storage.yml +6 -0
  51. data/lib/github_flow_templates/.github/actions/cpflow-build-docker-image/action.yml +131 -0
  52. data/lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/action.yml +24 -0
  53. data/lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/delete-app.sh +50 -0
  54. data/lib/github_flow_templates/.github/actions/cpflow-detect-release-phase/action.yml +62 -0
  55. data/lib/github_flow_templates/.github/actions/cpflow-setup-environment/action.yml +98 -0
  56. data/lib/github_flow_templates/.github/actions/cpflow-validate-config/action.yml +85 -0
  57. data/lib/github_flow_templates/.github/actions/cpflow-wait-for-health/action.yml +92 -0
  58. data/lib/github_flow_templates/.github/cpflow-help.md +47 -0
  59. data/lib/github_flow_templates/.github/workflows/cpflow-cleanup-stale-review-apps.yml +56 -0
  60. data/lib/github_flow_templates/.github/workflows/cpflow-delete-review-app.yml +142 -0
  61. data/lib/github_flow_templates/.github/workflows/cpflow-deploy-review-app.yml +445 -0
  62. data/lib/github_flow_templates/.github/workflows/cpflow-deploy-staging.yml +140 -0
  63. data/lib/github_flow_templates/.github/workflows/cpflow-help-command.yml +53 -0
  64. data/lib/github_flow_templates/.github/workflows/cpflow-promote-staging-to-production.yml +490 -0
  65. data/lib/github_flow_templates/.github/workflows/cpflow-review-app-help.yml +46 -0
  66. data/rakelib/create_release.rake +662 -37
  67. data/script/check_command_docs +4 -2
  68. data/script/check_cpln_links +25 -11
  69. data/script/precommit/check_command_docs +22 -0
  70. data/script/precommit/check_cpln_links +21 -0
  71. data/script/precommit/check_trailing_newlines +68 -0
  72. data/script/precommit/get_changed_files +49 -0
  73. data/script/precommit/ruby_autofix +52 -0
  74. data/script/precommit/ruby_lint +33 -0
  75. metadata +52 -14
@@ -1,3 +1,5 @@
1
- #!/bin/sh
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
2
4
  bundle exec rake update_command_docs
3
- git diff --exit-code || exit 1
5
+ git diff --exit-code -- docs/commands.md
@@ -1,31 +1,45 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ set -euo pipefail
4
+
3
5
  bad_links=("controlplane.com/shakacode" "https://docs.controlplane.com")
4
6
  proper_links=("shakacode.controlplane.com" "https://shakadocs.controlplane.com")
5
7
 
6
- bold=$(tput bold)
7
- normal=$(tput sgr0)
8
+ bold=$(tput bold 2>/dev/null || true)
9
+ normal=$(tput sgr0 2>/dev/null || true)
10
+
11
+ files=()
12
+ if [ "$#" -gt 0 ]; then
13
+ for file in "$@"; do
14
+ if [[ "$file" == *.md ]] && [ -f "$file" ]; then
15
+ files+=("$file")
16
+ fi
17
+ done
18
+ else
19
+ while IFS= read -r file; do
20
+ files+=("$file")
21
+ done < <(git ls-files -- '*.md' ':!:script/check_cpln_links')
22
+ fi
23
+
24
+ if [ "${#files[@]}" -eq 0 ]; then
25
+ echo "No markdown files to validate."
26
+ exit 0
27
+ fi
8
28
 
9
29
  exit_status=0
10
30
  accumulated_results=""
11
31
  seen_bad_links_indexes=()
12
32
 
13
33
  for ((idx = 0; idx < ${#bad_links[@]}; idx++)); do
14
- results=$(git grep \
15
- --recursive \
34
+ if results=$(git grep \
16
35
  --line-number \
17
36
  --fixed-strings \
18
37
  --break \
19
38
  --heading \
20
39
  --color=always -- \
21
40
  "${bad_links[idx]}" \
22
- ':!script/check_cpln_links' '*.md')
23
-
24
- # Line would become really unwieldly if everything was mushed into the
25
- # conditional, so let's ignore this check here.
26
- # shellcheck disable=SC2181
27
- if [ $? -eq 0 ]; then
28
- accumulated_results+="$results"
41
+ -- "${files[@]}"); then
42
+ accumulated_results+="$results"$'\n'
29
43
  seen_bad_links_indexes+=("$idx")
30
44
  exit_status=1
31
45
  fi
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ pattern='^(lib/command/.*\.rb|docs/commands\.md|script/update_command_docs|script/check_command_docs|script/precommit/check_command_docs|Rakefile)$'
7
+ relevant_files=()
8
+ changed_files_output="$(./script/precommit/get_changed_files "$context" "$pattern")" || {
9
+ echo "Error: failed to determine command-doc related files." >&2
10
+ exit 1
11
+ }
12
+ while IFS= read -r f; do
13
+ [ -n "$f" ] && relevant_files+=("$f")
14
+ done <<< "$changed_files_output"
15
+
16
+ if [ "${#relevant_files[@]}" -eq 0 ]; then
17
+ echo "No command-doc related files changed; skipping command docs check."
18
+ exit 0
19
+ fi
20
+
21
+ echo "Running command docs consistency check."
22
+ bundle exec rake check_command_docs
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ markdown_files=()
7
+ changed_files_output="$(./script/precommit/get_changed_files "$context" '\.md$')" || {
8
+ echo "Error: failed to determine changed markdown files." >&2
9
+ exit 1
10
+ }
11
+ while IFS= read -r f; do
12
+ [ -n "$f" ] && markdown_files+=("$f")
13
+ done <<< "$changed_files_output"
14
+
15
+ if [ "${#markdown_files[@]}" -eq 0 ]; then
16
+ echo "No markdown files changed; skipping Control Plane link check."
17
+ exit 0
18
+ fi
19
+
20
+ echo "Checking Control Plane links in changed markdown files."
21
+ ./script/check_cpln_links "${markdown_files[@]}"
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ files=()
7
+ changed_files_output="$(./script/precommit/get_changed_files "$context" '.*')" || {
8
+ echo "Error: failed to determine changed files." >&2
9
+ exit 1
10
+ }
11
+ while IFS= read -r f; do
12
+ [ -n "$f" ] && files+=("$f")
13
+ done <<< "$changed_files_output"
14
+
15
+ if [ "${#files[@]}" -eq 0 ]; then
16
+ echo "No files to check for trailing newlines."
17
+ exit 0
18
+ fi
19
+
20
+ # Identify files that need a trailing newline.
21
+ needs_fix=()
22
+ for file in "${files[@]}"; do
23
+ [ -f "$file" ] || continue
24
+
25
+ # Skip binary files based on staged content.
26
+ if ! git cat-file blob ":$file" 2>/dev/null | grep -Iq .; then
27
+ continue
28
+ fi
29
+
30
+ # Inspect staged content so partial staging is handled correctly.
31
+ staged_last_byte=""
32
+ if ! staged_last_byte="$(git cat-file blob ":$file" 2>/dev/null | tail -c 1)"; then
33
+ continue
34
+ fi
35
+
36
+ if [ -n "$staged_last_byte" ]; then
37
+ needs_fix+=("$file")
38
+ fi
39
+ done
40
+
41
+ if [ "${#needs_fix[@]}" -gt 0 ]; then
42
+ # Stash unstaged changes BEFORE modifying files so --keep-index preserves
43
+ # the working tree state and our modifications are not undone.
44
+ has_stash=false
45
+ if ! git diff --quiet -- "${needs_fix[@]}"; then
46
+ git stash push --keep-index --quiet -m "precommit: trailing newlines unstaged changes"
47
+ has_stash=true
48
+ fi
49
+
50
+ restore_stash() {
51
+ if [ "$has_stash" = true ]; then
52
+ if ! git stash pop; then
53
+ echo "Warning: Could not restore unstaged changes from stash. Run 'git stash pop' manually to recover." >&2
54
+ fi
55
+ fi
56
+ }
57
+
58
+ trap restore_stash EXIT
59
+
60
+ for file in "${needs_fix[@]}"; do
61
+ echo "Adding trailing newline: $file"
62
+ printf '\n' >> "$file"
63
+ done
64
+
65
+ git add -- "${needs_fix[@]}"
66
+ fi
67
+
68
+ echo "Trailing newline check complete."
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ pattern="${2:-.*}"
7
+ base_ref="${3:-origin/main}"
8
+
9
+ # Filter lines matching pattern. Exit 0 on no matches (grep exit 1),
10
+ # but propagate real errors (exit >= 2).
11
+ filter_matches() {
12
+ grep -E -- "$pattern" || {
13
+ local status=$?
14
+ if [ "$status" -eq 1 ]; then
15
+ return 0
16
+ fi
17
+ return "$status"
18
+ }
19
+ }
20
+
21
+ case "$context" in
22
+ staged)
23
+ git diff --cached --name-only --diff-filter=ACMR | filter_matches
24
+ ;;
25
+ all-changed)
26
+ (
27
+ git diff --cached --name-only --diff-filter=ACMR
28
+ git diff --name-only --diff-filter=ACMR
29
+ git ls-files --others --exclude-standard
30
+ ) | sort -u | filter_matches
31
+ ;;
32
+ branch)
33
+ if ! git rev-parse --verify --quiet "$base_ref" >/dev/null; then
34
+ fetch_hint="git fetch --all --prune"
35
+ if [[ "$base_ref" == */* ]]; then
36
+ remote="${base_ref%%/*}"
37
+ ref="${base_ref#*/}"
38
+ fetch_hint="git fetch ${remote} ${ref}"
39
+ fi
40
+ echo "Error: ${base_ref} not found. Run: ${fetch_hint}" >&2
41
+ exit 1
42
+ fi
43
+ git diff --name-only --diff-filter=ACMR "$base_ref"...HEAD | filter_matches
44
+ ;;
45
+ *)
46
+ echo "Usage: $0 {staged|all-changed|branch} [pattern] [base_ref]" >&2
47
+ exit 1
48
+ ;;
49
+ esac
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ files=()
7
+ changed_files_output="$(./script/precommit/get_changed_files "$context" '\.(rb|rake|ru)$')" || {
8
+ echo "Error: failed to determine changed Ruby files." >&2
9
+ exit 1
10
+ }
11
+ while IFS= read -r f; do
12
+ [ -n "$f" ] && files+=("$f")
13
+ done <<< "$changed_files_output"
14
+
15
+ if [ "${#files[@]}" -eq 0 ]; then
16
+ echo "No Ruby files to auto-fix."
17
+ exit 0
18
+ fi
19
+
20
+ echo "Running RuboCop auto-fix on changed Ruby files:"
21
+ printf " %s\n" "${files[@]}"
22
+
23
+ # Stash unstaged changes so auto-fix only touches what was staged.
24
+ # This preserves partial staging (git add -p).
25
+ has_stash=false
26
+ if ! git diff --quiet -- "${files[@]}"; then
27
+ git stash push --keep-index --quiet -m "precommit: ruby_autofix unstaged changes"
28
+ has_stash=true
29
+ fi
30
+
31
+ restore_stash() {
32
+ if [ "$has_stash" = true ]; then
33
+ if ! git stash pop; then
34
+ echo "Warning: Could not restore unstaged changes from stash. Run 'git stash pop' manually to recover." >&2
35
+ fi
36
+ fi
37
+ }
38
+
39
+ trap restore_stash EXIT
40
+
41
+ rubocop_exit=0
42
+ bundle exec rubocop -A --force-exclusion -- "${files[@]}" || rubocop_exit=$?
43
+
44
+ # Re-stage auto-corrected files regardless of rubocop exit code so fixable
45
+ # changes are not lost when non-fixable offenses still fail the hook.
46
+ git add -- "${files[@]}"
47
+
48
+ if [ "$rubocop_exit" -ne 0 ]; then
49
+ exit "$rubocop_exit"
50
+ fi
51
+
52
+ echo "Ruby auto-fix complete."
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ context="${1:-staged}"
6
+ files=()
7
+ changed_files_output="$(./script/precommit/get_changed_files "$context" '\.(rb|rake|ru)$')" || {
8
+ echo "Error: failed to determine changed Ruby files." >&2
9
+ exit 1
10
+ }
11
+ while IFS= read -r f; do
12
+ [ -n "$f" ] && files+=("$f")
13
+ done <<< "$changed_files_output"
14
+
15
+ if [ "${#files[@]}" -eq 0 ]; then
16
+ echo "No Ruby files to lint."
17
+ exit 0
18
+ fi
19
+
20
+ echo "Running RuboCop lint on changed Ruby files:"
21
+ printf " %s\n" "${files[@]}"
22
+
23
+ if ! bundle exec rubocop --force-exclusion --display-cop-names -- "${files[@]}"; then
24
+ echo ""
25
+ echo "RuboCop lint failed."
26
+ rubocop_autofix_hint=""
27
+ printf -v rubocop_autofix_hint "%q " "${files[@]}"
28
+ echo "Try: bundle exec rubocop -A --force-exclusion -- ${rubocop_autofix_hint% }"
29
+ echo "Skip hooks only if necessary: git commit --no-verify"
30
+ exit 1
31
+ fi
32
+
33
+ echo "Ruby lint complete."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.0.0.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2026-02-20 00:00:00.000000000 Z
12
+ date: 2026-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dotenv
@@ -17,56 +17,56 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 2.8.1
20
+ version: '3.1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 2.8.1
27
+ version: '3.1'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: jwt
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 2.8.1
34
+ version: '3.1'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 2.8.1
41
+ version: '3.1'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: psych
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 5.1.0
48
+ version: '5.2'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 5.1.0
55
+ version: '5.2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: thor
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 1.2.1
62
+ version: '1.4'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 1.2.1
69
+ version: '1.4'
70
70
  description: CLI for providing Heroku-like platform-as-a-service on Control Plane
71
71
  email:
72
72
  - justin@shakacode.com
@@ -76,6 +76,7 @@ executables:
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
+ - ".claude/commands/update-changelog.md"
79
80
  - ".github/workflows/check_cpln_links.yml"
80
81
  - ".github/workflows/claude-code-review.yml"
81
82
  - ".github/workflows/claude.yml"
@@ -99,6 +100,7 @@ files:
99
100
  - bin/cpflow
100
101
  - cpflow
101
102
  - cpflow.gemspec
103
+ - docs/ai-github-flow-prompt.md
102
104
  - docs/assets/grafana-alert.png
103
105
  - docs/assets/memcached.png
104
106
  - docs/assets/sidekiq-pre-stop-hook.png
@@ -108,6 +110,7 @@ files:
108
110
  - docs/migrating-heroku-to-control-plane.md
109
111
  - docs/postgres.md
110
112
  - docs/redis.md
113
+ - docs/releasing.md
111
114
  - docs/secrets-and-env-values.md
112
115
  - docs/terraform/details.md
113
116
  - docs/terraform/example/.controlplane/controlplane.yml
@@ -119,6 +122,7 @@ files:
119
122
  - docs/troubleshooting.md
120
123
  - examples/circleci.yml
121
124
  - examples/controlplane.yml
125
+ - lib/command/ai_github_flow_prompt.rb
122
126
  - lib/command/apply_template.rb
123
127
  - lib/command/base.rb
124
128
  - lib/command/base_sub_command.rb
@@ -133,6 +137,9 @@ files:
133
137
  - lib/command/env.rb
134
138
  - lib/command/exists.rb
135
139
  - lib/command/generate.rb
140
+ - lib/command/generate_github_actions.rb
141
+ - lib/command/generator_helpers.rb
142
+ - lib/command/github_flow_readiness.rb
136
143
  - lib/command/info.rb
137
144
  - lib/command/latest_image.rb
138
145
  - lib/command/logs.rb
@@ -162,8 +169,11 @@ files:
162
169
  - lib/core/controlplane_api.rb
163
170
  - lib/core/controlplane_api_direct.rb
164
171
  - lib/core/doctor_service.rb
172
+ - lib/core/github_flow_readiness/checks.rb
173
+ - lib/core/github_flow_readiness_service.rb
165
174
  - lib/core/helpers.rb
166
175
  - lib/core/maintenance_mode.rb
176
+ - lib/core/repo_introspection.rb
167
177
  - lib/core/shell.rb
168
178
  - lib/core/template_parser.rb
169
179
  - lib/core/terraform_config/agent.rb
@@ -189,9 +199,31 @@ files:
189
199
  - lib/generator_templates/Dockerfile
190
200
  - lib/generator_templates/controlplane.yml
191
201
  - lib/generator_templates/entrypoint.sh
202
+ - lib/generator_templates/release_script.sh
192
203
  - lib/generator_templates/templates/app.yml
193
204
  - lib/generator_templates/templates/postgres.yml
194
205
  - lib/generator_templates/templates/rails.yml
206
+ - lib/generator_templates_sqlite/controlplane.yml
207
+ - lib/generator_templates_sqlite/release_script.sh
208
+ - lib/generator_templates_sqlite/templates/app.yml
209
+ - lib/generator_templates_sqlite/templates/db.yml
210
+ - lib/generator_templates_sqlite/templates/rails.yml
211
+ - lib/generator_templates_sqlite/templates/storage.yml
212
+ - lib/github_flow_templates/.github/actions/cpflow-build-docker-image/action.yml
213
+ - lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/action.yml
214
+ - lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/delete-app.sh
215
+ - lib/github_flow_templates/.github/actions/cpflow-detect-release-phase/action.yml
216
+ - lib/github_flow_templates/.github/actions/cpflow-setup-environment/action.yml
217
+ - lib/github_flow_templates/.github/actions/cpflow-validate-config/action.yml
218
+ - lib/github_flow_templates/.github/actions/cpflow-wait-for-health/action.yml
219
+ - lib/github_flow_templates/.github/cpflow-help.md
220
+ - lib/github_flow_templates/.github/workflows/cpflow-cleanup-stale-review-apps.yml
221
+ - lib/github_flow_templates/.github/workflows/cpflow-delete-review-app.yml
222
+ - lib/github_flow_templates/.github/workflows/cpflow-deploy-review-app.yml
223
+ - lib/github_flow_templates/.github/workflows/cpflow-deploy-staging.yml
224
+ - lib/github_flow_templates/.github/workflows/cpflow-help-command.yml
225
+ - lib/github_flow_templates/.github/workflows/cpflow-promote-staging-to-production.yml
226
+ - lib/github_flow_templates/.github/workflows/cpflow-review-app-help.yml
195
227
  - lib/patches/array.rb
196
228
  - lib/patches/hash.rb
197
229
  - lib/patches/string.rb
@@ -200,6 +232,12 @@ files:
200
232
  - script/add_command
201
233
  - script/check_command_docs
202
234
  - script/check_cpln_links
235
+ - script/precommit/check_command_docs
236
+ - script/precommit/check_cpln_links
237
+ - script/precommit/check_trailing_newlines
238
+ - script/precommit/get_changed_files
239
+ - script/precommit/ruby_autofix
240
+ - script/precommit/ruby_lint
203
241
  - script/rename_command
204
242
  - script/update_command_docs
205
243
  - templates/app.yml
@@ -224,14 +262,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
262
  requirements:
225
263
  - - ">="
226
264
  - !ruby/object:Gem::Version
227
- version: 2.7.0
265
+ version: 3.0.0
228
266
  required_rubygems_version: !ruby/object:Gem::Requirement
229
267
  requirements:
230
- - - ">="
268
+ - - ">"
231
269
  - !ruby/object:Gem::Version
232
- version: '0'
270
+ version: 1.3.1
233
271
  requirements: []
234
- rubygems_version: 3.5.11
272
+ rubygems_version: 3.4.10
235
273
  signing_key:
236
274
  specification_version: 4
237
275
  summary: Control Plane Flow