chore: add ./script/rebase-stage0.sh (#3984)
heavily based on an script by Kim.
This commit is contained in:
parent
4591747381
commit
74adb0961c
7 changed files with 53 additions and 5 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
2
script/lib/README.md
Normal 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
19
script/lib/rebase-editor.sh
Executable 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
24
script/rebase-stage0.sh
Executable 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 "$@"
|
||||||
|
|
||||||
|
|
@ -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}/..")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue