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.
- checksums.yaml +4 -4
- 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 +6 -0
- data/Gemfile +8 -7
- data/Gemfile.lock +92 -72
- data/README.md +43 -15
- 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 +65 -4
- 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/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/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 +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 +52 -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.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-
|
|
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,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:
|
|
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:
|
|
270
|
+
version: 1.3.1
|
|
233
271
|
requirements: []
|
|
234
|
-
rubygems_version: 3.
|
|
272
|
+
rubygems_version: 3.4.10
|
|
235
273
|
signing_key:
|
|
236
274
|
specification_version: 4
|
|
237
275
|
summary: Control Plane Flow
|