chore: add ./script/rebase-stage0.sh (#3984)

heavily based on an script by Kim.
This commit is contained in:
Joachim Breitner 2024-05-02 14:26:25 +02:00 committed by GitHub
parent 4591747381
commit 74adb0961c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 53 additions and 5 deletions

View file

@ -84,10 +84,12 @@ gh workflow run update-stage0.yml
Leaving stage0 updates to the CI automation is preferable, but should you need Leaving stage0 updates to the CI automation is preferable, but should you need
to do it locally, you can use `make update-stage0-commit` in `build/release` to to do it locally, you can use `make update-stage0-commit` in `build/release` to
update `stage0` from `stage1` or `make -C stageN update-stage0-commit` to update `stage0` from `stage1` or `make -C stageN update-stage0-commit` to
update from another stage. update from another stage. This command will automatically stage the updated files
and introduce a commit,so make sure to commit your work before that.
This command will automatically stage the updated files and introduce a commit, If you rebased the branch (either onto a newer version of `master`, or fixing
so make sure to commit your work before that. up some commits prior to the stage0 update, recreate the stage0 update commits.
The script `script/rebase-stage0.sh` can be used for that.
The CI should prevent PRs with changes to stage0 (besides `stdlib_flags.h`) The CI should prevent PRs with changes to stage0 (besides `stdlib_flags.h`)
from entering `master` through the (squashing!) merge queue, and label such PRs from entering `master` through the (squashing!) merge queue, and label such PRs
@ -95,6 +97,7 @@ with the `changes-stage0` label. Such PRs should have a cleaned up history,
with separate stage0 update commits; then coordinate with the admins to merge with separate stage0 update commits; then coordinate with the admins to merge
your PR using rebase merge, bypassing the merge queue. your PR using rebase merge, bypassing the merge queue.
## Further Bootstrapping Complications ## Further Bootstrapping Complications
As written above, changes in meta code in the current stage usually will only As written above, changes in meta code in the current stage usually will only

View file

@ -180,7 +180,7 @@ rec {
update-stage0 = update-stage0 =
let cTree = symlinkJoin { name = "cs"; paths = [ Init.cTree Lean.cTree ]; }; in let cTree = symlinkJoin { name = "cs"; paths = [ Init.cTree Lean.cTree ]; }; in
writeShellScriptBin "update-stage0" '' writeShellScriptBin "update-stage0" ''
CSRCS=${cTree} CP_C_PARAMS="--dereference --no-preserve=all" ${src + "/script/update-stage0"} CSRCS=${cTree} CP_C_PARAMS="--dereference --no-preserve=all" ${src + "/script/lib/update-stage0"}
''; '';
update-stage0-commit = writeShellScriptBin "update-stage0-commit" '' update-stage0-commit = writeShellScriptBin "update-stage0-commit" ''
set -euo pipefail set -euo pipefail

2
script/lib/README.md Normal file
View file

@ -0,0 +1,2 @@
This directory contains various scripts that are *not* meant to be called
directly, but through other scripts or makefiles.

19
script/lib/rebase-editor.sh Executable file
View file

@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Script internal to `./script/rebase-stage0.sh`
# Determine OS type for sed in-place editing
SED_CMD=("sed" "-i")
if [[ "$OSTYPE" == "darwin"* ]]
then
# macOS requires an empty string argument with -i for in-place editing
SED_CMD=("sed" "-i" "")
fi
if [ "$STAGE0_WITH_NIX" = true ]
then
"${SED_CMD[@]}" '/chore: update stage0/ s,.*,x nix run .#update-stage0-commit,' "$1"
else
"${SED_CMD[@]}" '/chore: update stage0/ s,.*,x make -j32 -C build/release update-stage0 \&\& git commit -m "chore: update stage0",' "$1"
fi

24
script/rebase-stage0.sh Executable file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# This script rebases onto the given branch/commit, and updates
# all `chore: update stage0` commits along the way.
# Whether to use nix or make to update stage0
if [ "$1" = "-nix" ]
then
export STAGE0_WITH_NIX=true
shift
fi
# Check if an argument is provided
if [ "$#" -eq 0 ]; then
echo "Usage: $0 [-nix] <options to git rebase -i>"
exit 1
fi
REPO_ROOT=$(git rev-parse --show-toplevel)
# Run git rebase in interactive mode, but automatically edit the todo list
# using the defined GIT_SEQUENCE_EDITOR command
GIT_SEQUENCE_EDITOR="$REPO_ROOT/script/lib/rebase-editor.sh" git rebase -i "$@"

View file

@ -591,7 +591,7 @@ endif()
if(PREV_STAGE) if(PREV_STAGE)
add_custom_target(update-stage0 add_custom_target(update-stage0
COMMAND bash -c 'CSRCS=${CMAKE_BINARY_DIR}/lib/temp script/update-stage0' COMMAND bash -c 'CSRCS=${CMAKE_BINARY_DIR}/lib/temp script/lib/update-stage0'
DEPENDS make_stdlib DEPENDS make_stdlib
WORKING_DIRECTORY "${LEAN_SOURCE_DIR}/..") WORKING_DIRECTORY "${LEAN_SOURCE_DIR}/..")