This commit is contained in:
120
scripts/generate_readme.sh
Normal file
120
scripts/generate_readme.sh
Normal file
@@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Generate README.md with download & run commands for .sh and .bat scripts
|
||||
# This file is intended to be run in CI and locally.
|
||||
|
||||
determine_repo_web_base() {
|
||||
local origin_url
|
||||
origin_url="$(git config --get remote.origin.url || true)"
|
||||
if [[ -z "${origin_url}" ]]; then
|
||||
echo "Error: could not determine git remote origin URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local web_base
|
||||
if [[ "${origin_url}" =~ ^https?:// ]]; then
|
||||
web_base="${origin_url%.git}"
|
||||
elif [[ "${origin_url}" =~ ^git@([^:]+):(.+)\.git$ ]]; then
|
||||
local host path
|
||||
host="${BASH_REMATCH[1]}"
|
||||
path="${BASH_REMATCH[2]}"
|
||||
web_base="https://${host}/${path}"
|
||||
else
|
||||
# Fallback: strip trailing .git if present
|
||||
web_base="${origin_url%.git}"
|
||||
fi
|
||||
|
||||
printf '%s' "${web_base}"
|
||||
}
|
||||
|
||||
determine_branch() {
|
||||
# Prefer BRANCH env, fall back to current branch, else main
|
||||
if [[ -n "${BRANCH:-}" ]]; then
|
||||
printf '%s' "${BRANCH}"
|
||||
return
|
||||
fi
|
||||
local branch
|
||||
branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)"
|
||||
if [[ -z "${branch}" || "${branch}" == "HEAD" ]]; then
|
||||
branch="main"
|
||||
fi
|
||||
printf '%s' "${branch}"
|
||||
}
|
||||
|
||||
list_files() {
|
||||
# List tracked files matching a glob, excluding scripts/generate_readme.sh
|
||||
local pattern="$1"
|
||||
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
# Use git to respect .gitignore and include only tracked files
|
||||
git ls-files "${pattern}" 2>/dev/null | grep -v '^scripts/generate_readme.sh$' || true
|
||||
else
|
||||
find . -type f -name "${pattern}" -not -path './scripts/generate_readme.sh' -print | sed 's|^\./||' || true
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
local web_base branch raw_base
|
||||
web_base="$(determine_repo_web_base)"
|
||||
branch="$(determine_branch)"
|
||||
raw_base="${web_base}/raw/branch/${branch}"
|
||||
|
||||
# Collect files
|
||||
mapfile -t sh_files < <(list_files '*.sh' | sort)
|
||||
mapfile -t bat_files < <(list_files '*.bat' | sort)
|
||||
|
||||
# Begin README content
|
||||
{
|
||||
echo "# tools"
|
||||
echo
|
||||
echo "Auto-generated README. Do not edit by hand."
|
||||
echo
|
||||
echo "This file is regenerated by \`scripts/generate_readme.sh\` on every push."
|
||||
echo
|
||||
if ((${#sh_files[@]} > 0)); then
|
||||
echo "## Shell (.sh)"
|
||||
echo
|
||||
echo "Run on Linux/macOS using curl:"
|
||||
echo
|
||||
for f in "${sh_files[@]}"; do
|
||||
local name url
|
||||
name="$(basename "${f}")"
|
||||
url="${raw_base}/${f}"
|
||||
echo "### ${name}"
|
||||
echo
|
||||
echo '```bash'
|
||||
echo "curl -fsSL -o ${name} \"${url}\" && chmod +x ${name} && ./\"${name}\""
|
||||
echo '```'
|
||||
echo
|
||||
done
|
||||
fi
|
||||
|
||||
if ((${#bat_files[@]} > 0)); then
|
||||
echo "## Windows (.bat)"
|
||||
echo
|
||||
echo "Run from PowerShell:"
|
||||
echo
|
||||
for f in "${bat_files[@]}"; do
|
||||
local name url
|
||||
name="$(basename "${f}")"
|
||||
url="${raw_base}/${f}"
|
||||
echo "### ${name}"
|
||||
echo
|
||||
echo '```powershell'
|
||||
echo '$dest = Join-Path $env:TEMP "'"${name}"'";'
|
||||
echo 'Invoke-WebRequest -Uri '"\"${url}\""' -OutFile $dest;'
|
||||
echo '& $dest'
|
||||
echo '```'
|
||||
echo
|
||||
done
|
||||
fi
|
||||
|
||||
echo "---"
|
||||
echo
|
||||
echo "Generated from repo: \`${web_base}\` on branch \`${branch}\`."
|
||||
} > README.md
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user