Files
Michael BiancoandGitHub 7ffd2ca139 docs: add changelog page and generation task (#671)
- Add changelog generation task to fetch releases from GitHub and format them for documentation
- Integrate changelog into reference navigation and upgrade script
- Update search highlight colors to purple matching active state

Generated-by: aiautocommit
2026-07-31 16:43:32 -06:00

141 lines
4.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Description: one-click command to check for a new mise version and create a PR to update core/mise/version.txt.
set -euo pipefail
repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"
# Check that we're on the main branch
current_branch="$(git branch --show-current)"
if [[ "$current_branch" != "main" ]]; then
echo "Error: must be on 'main' branch, currently on '$current_branch'" >&2
exit 1
fi
# Pull latest changes from the canonical railpack remote
canonical_repo="railwayapp/railpack"
canonical_url="https://github.com/$canonical_repo"
remote_name=$(git remote -v | grep "$canonical_repo" | head -n1 | awk '{print $1}')
if [[ -n "$remote_name" ]]; then
echo "Updating from remote: $remote_name ($canonical_url)"
git fetch "$remote_name" main
git pull "$remote_name" main
base_branch="$remote_name/main"
else
echo "Updating from URL: $canonical_url"
git fetch "$canonical_url" main
git pull "$canonical_url" main
base_branch="FETCH_HEAD"
fi
# Require clean working tree for tracked files
if [[ -n "$(git status --porcelain --untracked-files=no)" ]]; then
echo "Error: tracked files are dirty. Commit or stash first." >&2
exit 1
fi
# Tooling checks
if ! command -v gh >/dev/null 2>&1; then
echo "Error: gh CLI is required (brew install gh)." >&2
exit 1
fi
# Get latest mise tag via GitHub API
latest_tag="$(gh release view --repo jdx/mise --json tagName --jq .tagName)"
if [[ -z "$latest_tag" ]]; then
echo "Error: could not determine latest mise release tag" >&2
exit 1
fi
latest="${latest_tag#v}"
file="$repo_root/core/mise/version.txt"
if [[ ! -f "$file" ]]; then
echo "Error: $file not found" >&2
exit 1
fi
branch="chore/update-mise-$latest"
if git show-ref --verify --quiet "refs/heads/$branch"; then
echo "Local branch $branch already exists." >&2
exit 1
fi
git switch -c "$branch" "$base_branch"
# Write the new version to version.txt
printf "%s" "$latest" > "$file"
new="$(cat "$file")"
if [[ "$new" != "$latest" ]]; then
echo "Error: failed to update version in $file" >&2
exit 1
fi
# although there are other updates below that are NOT tied to mise, linking all maint work to a mise upgrade
# eliminates daily PRs which would be annoying and groups these changes with important updates (mise versions)
# which impact our users.
if git diff --quiet -- "$file"; then
echo "mise version already set to $latest. Nothing to do."
exit 0
fi
# `fix` scope because mise versions do impact the end-user functionality
git add -- "$file"
git commit -m "fix: update mise to $latest"
# Update snapshots before running any assertion tests — a new mise version
# will always produce different snapshots, so assertions must come after.
mise run test-update-snapshots
if ! git diff --cached --quiet; then
git commit -F "$(git rev-parse --git-dir)/COMMIT_EDITMSG"
fi
echo "Upgrading go and mise packages..."
mise run upgrade
if [[ -n "$(git status --porcelain go.mod go.sum)" ]]; then
git add go.mod go.sum docs/package.json mise.lock docs/bun.lock
git commit -m "chore: update go, mise, and bun packages"
fi
echo "Running autofix fixes..."
mise run fix
if [[ -n "$(git status --porcelain --untracked-files=no)" ]]; then
git add .
git commit -m "refactor: modernize code with go fix"
fi
echo "Running checks and linting..."
mise run check
if [[ -n "$(git status --porcelain --untracked-files=no)" ]]; then
git add .
git commit -m "style: fix formatting"
fi
echo "Updating test files..."
mise --cd examples/python-uv-latest-locked upgrade --local
if [[ -n "$(git status --porcelain --untracked-files=no)" ]]; then
git add examples/python-uv-latest-locked
git commit -m "test: update mise lock with latest version"
fi
echo "Updating docs changelog from GitHub releases..."
changelog_file="docs/src/content/docs/changelog.md"
if mise run docs-generate-changelog; then
if [[ -n "$(git status --porcelain -- "$changelog_file")" ]]; then
git add -- "$changelog_file"
git commit -m "docs: updated changelog"
fi
else
echo "Error: failed to generate docs changelog (continuing upgrade)" >&2
fi
# Push the branch (needed in CI and good practice locally)
git push -u origin "$branch"
gh pr create \
--repo "$canonical_repo" \
--title "chore: mise update $latest" \
--body "Update mise to $latest"