After the repositories and the mirror, the script now creates the local project: the directory, git on main, credential-free origin (and github) remotes, and the license history from Gitea. Then it adds the framework as a submodule over SSH, installs its skills and git hooks once (plan gate optional), and copies the AGENTS.md and artifact registry templates. Nothing is overwritten without a yes: an existing directory, core.hooksPath, AGENTS.md or docs/artifact-registry.md each ask first (default no). Without SSH the framework steps can only be skipped, after a yes. No commit is made in the new project. New optional config key FRAMEWORK_REPO. New library files git.sh, localproject.sh and framework.sh. Tests run real git against local bare repositories that stand in for Gitea and the framework, with a private git configuration (769 checks). The README is now the full guide. Task: MIL-003#1 Task: MIL-003#2 Task: MIL-003#3 Task: MIL-003#4 Task: MIL-003#5 Refs #15 Refs #16 Refs #17 Refs #18 Refs #19 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
58 lines
2.5 KiB
Bash
58 lines
2.5 KiB
Bash
# shellcheck shell=bash
|
|
# shellcheck disable=SC2004,SC2034,SC2154 # shared state and arrays are declared in constants.sh
|
|
# plan.sh - Printing what the script is about to do.
|
|
#
|
|
# Part of create-project.sh: sourced by it, never run on its own.
|
|
#
|
|
# Provides: local_plan_note, print_plan
|
|
|
|
# local_plan_note: what will happen to the project directory.
|
|
local_plan_note() {
|
|
local dir="${PROJECT[directory]}"
|
|
case "${STATE[local_dir]}" in
|
|
missing) printf 'create %s (new directory), git on %s, no commit' "$dir" "$DEFAULT_BRANCH" ;;
|
|
empty) printf 'use the existing empty directory %s (you will be asked)' "$dir" ;;
|
|
*) printf 'use the existing directory %s, which has files (you will be asked)' "$dir" ;;
|
|
esac
|
|
}
|
|
|
|
print_plan() {
|
|
local gitea_action github_action origin_note
|
|
say ""
|
|
say "Plan:"
|
|
if ((STATE[reuse_gitea])); then
|
|
gitea_action="reuse the existing repository (you will be asked to confirm)"
|
|
elif ((PROJECT[has_github])); then
|
|
gitea_action="create (${PROJECT[visibility]}) with the $AGPL_LICENSE_KEY license"
|
|
else
|
|
gitea_action="create (${PROJECT[visibility]}), empty"
|
|
fi
|
|
say "$(printf ' %-18s: %s %s' "Gitea repository" "$gitea_action" "$(repo_url gitea)")"
|
|
if ((PROJECT[has_github])); then
|
|
if ((STATE[reuse_github])); then
|
|
github_action="reuse the existing empty repository (you will be asked to confirm)"
|
|
else
|
|
github_action="create (${PROJECT[visibility]}), empty"
|
|
fi
|
|
say "$(printf ' %-18s: %s %s' "GitHub repository" "$github_action" "$(repo_url github)")"
|
|
say "$(printf ' %-18s: %s' "Push mirror" "Gitea -> GitHub every ${CONFIG[MIRROR_INTERVAL]}")"
|
|
else
|
|
say "$(printf ' %-18s: %s' "GitHub repository" "not used")"
|
|
say "$(printf ' %-18s: %s' "Push mirror" "not used")"
|
|
fi
|
|
if ((STATE[is_ssh_ok])); then
|
|
origin_note="SSH (the SSH test passed)"
|
|
else
|
|
origin_note="HTTPS (SSH test: ${STATE[ssh_note]})"
|
|
fi
|
|
say "$(printf ' %-18s: %s' "Local project" "$(local_plan_note)")"
|
|
say "$(printf ' %-18s: %s' "Local origin" "will use $origin_note")"
|
|
if ((STATE[is_ssh_ok])); then
|
|
say "$(printf ' %-18s: %s' "Framework" "add $(framework_url) as a submodule")"
|
|
say "$(printf ' %-18s: %s' "Skills and hooks" "install once; plan gate $(yes_no "${PROJECT[is_plan_gate_enabled]}")")"
|
|
say "$(printf ' %-18s: %s' "Templates" "AGENTS.md and docs/artifact-registry.md (you are asked before a file is replaced)")"
|
|
else
|
|
say "$(printf ' %-18s: %s' "Framework" "NOT possible without SSH to Gitea; you will be asked whether to go on without it")"
|
|
fi
|
|
}
|