cpflow 4.1.1 → 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.
- checksums.yaml +4 -4
- data/.claude/commands/update-changelog.md +367 -0
- data/.github/workflows/claude-code-review.yml +44 -0
- data/.github/workflows/claude.yml +55 -0
- data/.gitignore +2 -0
- data/.overcommit.yml +43 -3
- data/.rubocop.yml +3 -3
- data/CHANGELOG.md +39 -3
- data/CONTRIBUTING.md +6 -0
- data/Gemfile +8 -7
- data/Gemfile.lock +93 -73
- data/README.md +53 -22
- data/cpflow.gemspec +5 -5
- data/docs/ai-github-flow-prompt.md +61 -0
- data/docs/ci-automation.md +335 -0
- data/docs/commands.md +70 -5
- data/docs/releasing.md +153 -0
- data/lib/command/ai_github_flow_prompt.rb +47 -0
- data/lib/command/base.rb +14 -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/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/ps_wait.rb +5 -1
- data/lib/command/run.rb +4 -21
- 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 +1 -1
- data/lib/core/controlplane.rb +13 -10
- data/lib/core/controlplane_api_direct.rb +25 -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 +66 -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 +47 -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 +53 -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 +46 -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 +56 -15
- /data/docs/{migrating.md → migrating-heroku-to-control-plane.md} +0 -0
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.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:
|
|
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:
|
|
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,7 +76,10 @@ 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"
|
|
81
|
+
- ".github/workflows/claude-code-review.yml"
|
|
82
|
+
- ".github/workflows/claude.yml"
|
|
80
83
|
- ".github/workflows/command_docs.yml"
|
|
81
84
|
- ".github/workflows/rspec-shared.yml"
|
|
82
85
|
- ".github/workflows/rspec-specific.yml"
|
|
@@ -97,14 +100,17 @@ files:
|
|
|
97
100
|
- bin/cpflow
|
|
98
101
|
- cpflow
|
|
99
102
|
- cpflow.gemspec
|
|
103
|
+
- docs/ai-github-flow-prompt.md
|
|
100
104
|
- docs/assets/grafana-alert.png
|
|
101
105
|
- docs/assets/memcached.png
|
|
102
106
|
- docs/assets/sidekiq-pre-stop-hook.png
|
|
107
|
+
- docs/ci-automation.md
|
|
103
108
|
- docs/commands.md
|
|
104
109
|
- docs/dns.md
|
|
105
|
-
- docs/migrating.md
|
|
110
|
+
- docs/migrating-heroku-to-control-plane.md
|
|
106
111
|
- docs/postgres.md
|
|
107
112
|
- docs/redis.md
|
|
113
|
+
- docs/releasing.md
|
|
108
114
|
- docs/secrets-and-env-values.md
|
|
109
115
|
- docs/terraform/details.md
|
|
110
116
|
- docs/terraform/example/.controlplane/controlplane.yml
|
|
@@ -116,6 +122,7 @@ files:
|
|
|
116
122
|
- docs/troubleshooting.md
|
|
117
123
|
- examples/circleci.yml
|
|
118
124
|
- examples/controlplane.yml
|
|
125
|
+
- lib/command/ai_github_flow_prompt.rb
|
|
119
126
|
- lib/command/apply_template.rb
|
|
120
127
|
- lib/command/base.rb
|
|
121
128
|
- lib/command/base_sub_command.rb
|
|
@@ -130,6 +137,9 @@ files:
|
|
|
130
137
|
- lib/command/env.rb
|
|
131
138
|
- lib/command/exists.rb
|
|
132
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
|
|
133
143
|
- lib/command/info.rb
|
|
134
144
|
- lib/command/latest_image.rb
|
|
135
145
|
- lib/command/logs.rb
|
|
@@ -159,8 +169,11 @@ files:
|
|
|
159
169
|
- lib/core/controlplane_api.rb
|
|
160
170
|
- lib/core/controlplane_api_direct.rb
|
|
161
171
|
- lib/core/doctor_service.rb
|
|
172
|
+
- lib/core/github_flow_readiness/checks.rb
|
|
173
|
+
- lib/core/github_flow_readiness_service.rb
|
|
162
174
|
- lib/core/helpers.rb
|
|
163
175
|
- lib/core/maintenance_mode.rb
|
|
176
|
+
- lib/core/repo_introspection.rb
|
|
164
177
|
- lib/core/shell.rb
|
|
165
178
|
- lib/core/template_parser.rb
|
|
166
179
|
- lib/core/terraform_config/agent.rb
|
|
@@ -186,9 +199,31 @@ files:
|
|
|
186
199
|
- lib/generator_templates/Dockerfile
|
|
187
200
|
- lib/generator_templates/controlplane.yml
|
|
188
201
|
- lib/generator_templates/entrypoint.sh
|
|
202
|
+
- lib/generator_templates/release_script.sh
|
|
189
203
|
- lib/generator_templates/templates/app.yml
|
|
190
204
|
- lib/generator_templates/templates/postgres.yml
|
|
191
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
|
|
192
227
|
- lib/patches/array.rb
|
|
193
228
|
- lib/patches/hash.rb
|
|
194
229
|
- lib/patches/string.rb
|
|
@@ -197,6 +232,12 @@ files:
|
|
|
197
232
|
- script/add_command
|
|
198
233
|
- script/check_command_docs
|
|
199
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
|
|
200
241
|
- script/rename_command
|
|
201
242
|
- script/update_command_docs
|
|
202
243
|
- templates/app.yml
|
|
@@ -221,14 +262,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
221
262
|
requirements:
|
|
222
263
|
- - ">="
|
|
223
264
|
- !ruby/object:Gem::Version
|
|
224
|
-
version:
|
|
265
|
+
version: 3.0.0
|
|
225
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
267
|
requirements:
|
|
227
|
-
- - "
|
|
268
|
+
- - ">"
|
|
228
269
|
- !ruby/object:Gem::Version
|
|
229
|
-
version:
|
|
270
|
+
version: 1.3.1
|
|
230
271
|
requirements: []
|
|
231
|
-
rubygems_version: 3.
|
|
272
|
+
rubygems_version: 3.4.10
|
|
232
273
|
signing_key:
|
|
233
274
|
specification_version: 4
|
|
234
275
|
summary: Control Plane Flow
|
|
File without changes
|