cpflow 4.2.0 → 5.0.0.rc.1
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.
- checksums.yaml +4 -4
- data/.agents/workflows/address-review.md +216 -0
- data/.claude/commands/address-review.md +547 -0
- data/.claude/commands/update-changelog.md +367 -0
- data/.github/workflows/claude.yml +5 -0
- data/.overcommit.yml +43 -3
- data/.rubocop.yml +3 -3
- data/CHANGELOG.md +28 -4
- data/CONTRIBUTING.md +28 -0
- data/Gemfile +8 -7
- data/Gemfile.lock +92 -72
- data/README.md +55 -20
- data/cpflow.gemspec +5 -5
- data/docs/ai-github-flow-prompt.md +61 -0
- data/docs/ci-automation.md +335 -28
- data/docs/commands.md +67 -4
- data/docs/migrating-heroku-to-control-plane.md +12 -0
- data/docs/postgres.md +5 -0
- data/docs/redis.md +6 -0
- data/docs/releasing.md +153 -0
- data/lib/command/ai_github_flow_prompt.rb +47 -0
- data/lib/command/base.rb +25 -0
- data/lib/command/cleanup_images.rb +1 -1
- data/lib/command/cleanup_stale_apps.rb +1 -1
- data/lib/command/copy_image_from_upstream.rb +14 -3
- data/lib/command/deploy_image.rb +40 -9
- data/lib/command/exists.rb +13 -2
- data/lib/command/generate.rb +153 -4
- data/lib/command/generate_github_actions.rb +170 -0
- data/lib/command/generator_helpers.rb +31 -0
- data/lib/command/github_flow_readiness.rb +37 -0
- data/lib/command/promote_app_from_upstream.rb +13 -2
- data/lib/command/run.rb +1 -1
- data/lib/command/terraform/generate.rb +1 -0
- data/lib/command/version.rb +1 -0
- data/lib/constants/exit_code.rb +1 -0
- data/lib/core/config.rb +8 -0
- data/lib/core/controlplane.rb +9 -7
- data/lib/core/controlplane_api_direct.rb +3 -3
- data/lib/core/github_flow_readiness/checks.rb +143 -0
- data/lib/core/github_flow_readiness_service.rb +453 -0
- data/lib/core/repo_introspection.rb +118 -0
- data/lib/core/terraform_config/dsl.rb +1 -1
- data/lib/core/terraform_config/local_variable.rb +1 -1
- data/lib/cpflow/version.rb +1 -1
- data/lib/cpflow.rb +65 -3
- data/lib/generator_templates/Dockerfile +59 -3
- data/lib/generator_templates/controlplane.yml +27 -39
- data/lib/generator_templates/entrypoint.sh +1 -1
- data/lib/generator_templates/release_script.sh +23 -0
- data/lib/generator_templates/templates/app.yml +5 -8
- data/lib/generator_templates/templates/rails.yml +2 -11
- data/lib/generator_templates_sqlite/controlplane.yml +46 -0
- data/lib/generator_templates_sqlite/release_script.sh +25 -0
- data/lib/generator_templates_sqlite/templates/app.yml +15 -0
- data/lib/generator_templates_sqlite/templates/db.yml +6 -0
- data/lib/generator_templates_sqlite/templates/rails.yml +32 -0
- data/lib/generator_templates_sqlite/templates/storage.yml +6 -0
- data/lib/github_flow_templates/.github/actions/cpflow-build-docker-image/action.yml +131 -0
- data/lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/action.yml +24 -0
- data/lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/delete-app.sh +50 -0
- data/lib/github_flow_templates/.github/actions/cpflow-detect-release-phase/action.yml +62 -0
- data/lib/github_flow_templates/.github/actions/cpflow-setup-environment/action.yml +98 -0
- data/lib/github_flow_templates/.github/actions/cpflow-validate-config/action.yml +85 -0
- data/lib/github_flow_templates/.github/actions/cpflow-wait-for-health/action.yml +92 -0
- data/lib/github_flow_templates/.github/cpflow-help.md +73 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-cleanup-stale-review-apps.yml +56 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-delete-review-app.yml +142 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-deploy-review-app.yml +445 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-deploy-staging.yml +140 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-help-command.yml +58 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-promote-staging-to-production.yml +490 -0
- data/lib/github_flow_templates/.github/workflows/cpflow-review-app-help.yml +45 -0
- data/rakelib/create_release.rake +662 -37
- data/script/check_command_docs +4 -2
- data/script/check_cpln_links +25 -11
- data/script/precommit/check_command_docs +22 -0
- data/script/precommit/check_cpln_links +21 -0
- data/script/precommit/check_trailing_newlines +68 -0
- data/script/precommit/get_changed_files +49 -0
- data/script/precommit/ruby_autofix +52 -0
- data/script/precommit/ruby_lint +33 -0
- metadata +54 -14
data/script/check_command_docs
CHANGED
data/script/check_cpln_links
CHANGED
|
@@ -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
|
-
|
|
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
|
+
version: 5.0.0.rc.1
|
|
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-
|
|
12
|
+
date: 2026-05-12 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,9 @@ executables:
|
|
|
76
76
|
extensions: []
|
|
77
77
|
extra_rdoc_files: []
|
|
78
78
|
files:
|
|
79
|
+
- ".agents/workflows/address-review.md"
|
|
80
|
+
- ".claude/commands/address-review.md"
|
|
81
|
+
- ".claude/commands/update-changelog.md"
|
|
79
82
|
- ".github/workflows/check_cpln_links.yml"
|
|
80
83
|
- ".github/workflows/claude-code-review.yml"
|
|
81
84
|
- ".github/workflows/claude.yml"
|
|
@@ -99,6 +102,7 @@ files:
|
|
|
99
102
|
- bin/cpflow
|
|
100
103
|
- cpflow
|
|
101
104
|
- cpflow.gemspec
|
|
105
|
+
- docs/ai-github-flow-prompt.md
|
|
102
106
|
- docs/assets/grafana-alert.png
|
|
103
107
|
- docs/assets/memcached.png
|
|
104
108
|
- docs/assets/sidekiq-pre-stop-hook.png
|
|
@@ -108,6 +112,7 @@ files:
|
|
|
108
112
|
- docs/migrating-heroku-to-control-plane.md
|
|
109
113
|
- docs/postgres.md
|
|
110
114
|
- docs/redis.md
|
|
115
|
+
- docs/releasing.md
|
|
111
116
|
- docs/secrets-and-env-values.md
|
|
112
117
|
- docs/terraform/details.md
|
|
113
118
|
- docs/terraform/example/.controlplane/controlplane.yml
|
|
@@ -119,6 +124,7 @@ files:
|
|
|
119
124
|
- docs/troubleshooting.md
|
|
120
125
|
- examples/circleci.yml
|
|
121
126
|
- examples/controlplane.yml
|
|
127
|
+
- lib/command/ai_github_flow_prompt.rb
|
|
122
128
|
- lib/command/apply_template.rb
|
|
123
129
|
- lib/command/base.rb
|
|
124
130
|
- lib/command/base_sub_command.rb
|
|
@@ -133,6 +139,9 @@ files:
|
|
|
133
139
|
- lib/command/env.rb
|
|
134
140
|
- lib/command/exists.rb
|
|
135
141
|
- lib/command/generate.rb
|
|
142
|
+
- lib/command/generate_github_actions.rb
|
|
143
|
+
- lib/command/generator_helpers.rb
|
|
144
|
+
- lib/command/github_flow_readiness.rb
|
|
136
145
|
- lib/command/info.rb
|
|
137
146
|
- lib/command/latest_image.rb
|
|
138
147
|
- lib/command/logs.rb
|
|
@@ -162,8 +171,11 @@ files:
|
|
|
162
171
|
- lib/core/controlplane_api.rb
|
|
163
172
|
- lib/core/controlplane_api_direct.rb
|
|
164
173
|
- lib/core/doctor_service.rb
|
|
174
|
+
- lib/core/github_flow_readiness/checks.rb
|
|
175
|
+
- lib/core/github_flow_readiness_service.rb
|
|
165
176
|
- lib/core/helpers.rb
|
|
166
177
|
- lib/core/maintenance_mode.rb
|
|
178
|
+
- lib/core/repo_introspection.rb
|
|
167
179
|
- lib/core/shell.rb
|
|
168
180
|
- lib/core/template_parser.rb
|
|
169
181
|
- lib/core/terraform_config/agent.rb
|
|
@@ -189,9 +201,31 @@ files:
|
|
|
189
201
|
- lib/generator_templates/Dockerfile
|
|
190
202
|
- lib/generator_templates/controlplane.yml
|
|
191
203
|
- lib/generator_templates/entrypoint.sh
|
|
204
|
+
- lib/generator_templates/release_script.sh
|
|
192
205
|
- lib/generator_templates/templates/app.yml
|
|
193
206
|
- lib/generator_templates/templates/postgres.yml
|
|
194
207
|
- lib/generator_templates/templates/rails.yml
|
|
208
|
+
- lib/generator_templates_sqlite/controlplane.yml
|
|
209
|
+
- lib/generator_templates_sqlite/release_script.sh
|
|
210
|
+
- lib/generator_templates_sqlite/templates/app.yml
|
|
211
|
+
- lib/generator_templates_sqlite/templates/db.yml
|
|
212
|
+
- lib/generator_templates_sqlite/templates/rails.yml
|
|
213
|
+
- lib/generator_templates_sqlite/templates/storage.yml
|
|
214
|
+
- lib/github_flow_templates/.github/actions/cpflow-build-docker-image/action.yml
|
|
215
|
+
- lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/action.yml
|
|
216
|
+
- lib/github_flow_templates/.github/actions/cpflow-delete-control-plane-app/delete-app.sh
|
|
217
|
+
- lib/github_flow_templates/.github/actions/cpflow-detect-release-phase/action.yml
|
|
218
|
+
- lib/github_flow_templates/.github/actions/cpflow-setup-environment/action.yml
|
|
219
|
+
- lib/github_flow_templates/.github/actions/cpflow-validate-config/action.yml
|
|
220
|
+
- lib/github_flow_templates/.github/actions/cpflow-wait-for-health/action.yml
|
|
221
|
+
- lib/github_flow_templates/.github/cpflow-help.md
|
|
222
|
+
- lib/github_flow_templates/.github/workflows/cpflow-cleanup-stale-review-apps.yml
|
|
223
|
+
- lib/github_flow_templates/.github/workflows/cpflow-delete-review-app.yml
|
|
224
|
+
- lib/github_flow_templates/.github/workflows/cpflow-deploy-review-app.yml
|
|
225
|
+
- lib/github_flow_templates/.github/workflows/cpflow-deploy-staging.yml
|
|
226
|
+
- lib/github_flow_templates/.github/workflows/cpflow-help-command.yml
|
|
227
|
+
- lib/github_flow_templates/.github/workflows/cpflow-promote-staging-to-production.yml
|
|
228
|
+
- lib/github_flow_templates/.github/workflows/cpflow-review-app-help.yml
|
|
195
229
|
- lib/patches/array.rb
|
|
196
230
|
- lib/patches/hash.rb
|
|
197
231
|
- lib/patches/string.rb
|
|
@@ -200,6 +234,12 @@ files:
|
|
|
200
234
|
- script/add_command
|
|
201
235
|
- script/check_command_docs
|
|
202
236
|
- script/check_cpln_links
|
|
237
|
+
- script/precommit/check_command_docs
|
|
238
|
+
- script/precommit/check_cpln_links
|
|
239
|
+
- script/precommit/check_trailing_newlines
|
|
240
|
+
- script/precommit/get_changed_files
|
|
241
|
+
- script/precommit/ruby_autofix
|
|
242
|
+
- script/precommit/ruby_lint
|
|
203
243
|
- script/rename_command
|
|
204
244
|
- script/update_command_docs
|
|
205
245
|
- templates/app.yml
|
|
@@ -224,14 +264,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
224
264
|
requirements:
|
|
225
265
|
- - ">="
|
|
226
266
|
- !ruby/object:Gem::Version
|
|
227
|
-
version:
|
|
267
|
+
version: 3.0.0
|
|
228
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
269
|
requirements:
|
|
230
|
-
- - "
|
|
270
|
+
- - ">"
|
|
231
271
|
- !ruby/object:Gem::Version
|
|
232
|
-
version:
|
|
272
|
+
version: 1.3.1
|
|
233
273
|
requirements: []
|
|
234
|
-
rubygems_version: 3.
|
|
274
|
+
rubygems_version: 3.4.10
|
|
235
275
|
signing_key:
|
|
236
276
|
specification_version: 4
|
|
237
277
|
summary: Control Plane Flow
|