-
-
Notifications
You must be signed in to change notification settings - Fork 481
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gh-36442: CI: Refactor
build*.yml
through a new script `.ci/retrofi…
…t-worktree.sh` <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes #1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> <!-- Why is this change required? What problem does it solve? --> Removes some duplicated code, no changes in functionality. Also preparation for merging 3 workflows into one, as proposed in #36349 (comment) <!-- If this PR resolves an open issue, please link to it here. For example "Fixes #12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!-- Feel free to remove irrelevant items. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - #12345: short description why this is a dependency - #34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: #36442 Reported by: Matthias Köppe Reviewer(s): Kwankyu Lee
- Loading branch information
Showing
4 changed files
with
44 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#!/bin/sh | ||
if [ $# != 2 ]; then | ||
echo >&2 "usage: $0 WORKTREE_NAME WORKTREE_DIRECTORY" | ||
echo >&2 "Ensures that the current working directory is a git repository," | ||
echo >&2 "then makes WORKTREE_DIRECTORY a git worktree named WORKTREE_NAME." | ||
fi | ||
WORKTREE_NAME="$1" | ||
WORKTREE_DIRECTORY="$2" | ||
|
||
export GIT_AUTHOR_NAME="ci-sage workflow" | ||
export GIT_AUTHOR_EMAIL="[email protected]" | ||
export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" | ||
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" | ||
|
||
set -ex | ||
|
||
# If actions/checkout downloaded our source tree using the GitHub REST API | ||
# instead of with git (because do not have git installed in our image), | ||
# we first make the source tree a repo. | ||
if [ ! -d .git ]; then git init && git add -A && git commit --quiet -m "new"; fi | ||
|
||
# Tag this state of the source tree "new". This is what we want to build and test. | ||
git tag -f new | ||
|
||
# Our container image contains a source tree in $WORKTREE_DIRECTORY with a full build of Sage. | ||
# But $WORKTREE_DIRECTORY is not a git repository. | ||
# We make $WORKTREE_DIRECTORY a worktree whose index is at tag "new". | ||
# We then commit the current sources and set the tag "old". (This keeps all mtimes unchanged.) | ||
# Then we update worktree and index with "git reset --hard new". | ||
# (This keeps mtimes of unchanged files unchanged and mtimes of changed files newer than unchanged files.) | ||
# Finally we reset the index to "old". (This keeps all mtimes unchanged.) | ||
# The changed files now show up as uncommitted changes. | ||
# The final "git add -N" makes sure that files that were added in "new" do not show | ||
# as untracked files, which would be removed by "git clean -fx". | ||
git worktree add --detach $WORKTREE_NAME | ||
rm -rf $WORKTREE_DIRECTORY/.git && mv $WORKTREE_NAME/.git $WORKTREE_DIRECTORY/ | ||
rm -rf $WORKTREE_NAME && ln -s $WORKTREE_DIRECTORY $WORKTREE_NAME | ||
if [ ! -f $WORKTREE_NAME/.gitignore ]; then cp .gitignore $WORKTREE_NAME/; fi | ||
(cd $WORKTREE_NAME && git add -A && git commit --quiet --allow-empty -m "old" -a && git tag -f old && git reset --hard new && git reset --quiet old && git add -N . && git status) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -69,30 +69,8 @@ jobs: | |
id: worktree | ||
run: | | ||
set -ex | ||
git config --global user.email "[email protected]" | ||
git config --global user.name "Build & Test workflow" | ||
git config --global --add safe.directory $(pwd) | ||
# If actions/checkout downloaded our source tree using the GitHub REST API | ||
# instead of with git (because do not have git installed in our image), | ||
# we first make the source tree a repo. | ||
if [ ! -d .git ]; then git init && git add -A && git commit --quiet -m "new"; fi | ||
# Tag this state of the source tree "new". This is what we want to build and test. | ||
git tag -f new | ||
# Our container image contains a source tree in /sage with a full build of Sage. | ||
# But /sage is not a git repository. | ||
# We make /sage a worktree whose index is at tag "new". | ||
# We then commit the current sources and set the tag "old". (This keeps all mtimes unchanged.) | ||
# Then we update worktree and index with "git reset --hard new". | ||
# (This keeps mtimes of unchanged files unchanged and mtimes of changed files newer than unchanged files.) | ||
# Finally we reset the index to "old". (This keeps all mtimes unchanged.) | ||
# The changed files now show up as uncommitted changes. | ||
# The final "git add -N" makes sure that files that were added in "new" do not show | ||
# as untracked files, which would be removed by "git clean -fx". | ||
git worktree add --detach worktree-image | ||
rm -rf /sage/.git && mv worktree-image/.git /sage/ | ||
rm -rf worktree-image && ln -s /sage worktree-image | ||
if [ ! -f worktree-image/.gitignore ]; then cp .gitignore worktree-image/; fi | ||
(cd worktree-image && git add -A && git commit --quiet --allow-empty -m "old" -a && git tag -f old && git reset --hard new && git reset --quiet old && git add -N . && git status) | ||
.ci/retrofit-worktree.sh worktree-image /sage | ||
- name: Download upstream artifact | ||
uses: actions/download-artifact@v3 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -62,31 +62,10 @@ jobs: | |
- name: Add prebuilt tree as a worktree | ||
id: worktree | ||
run: | | ||
set -ex | ||
git config --global --add safe.directory $(pwd) | ||
git config --global user.email "[email protected]" | ||
git config --global user.name "Build & Test workflow" | ||
git config --global --add safe.directory $(pwd) | ||
# If actions/checkout downloaded our source tree using the GitHub REST API | ||
# instead of with git (because do not have git installed in our image), | ||
# we first make the source tree a repo. | ||
if [ ! -d .git ]; then git init && git add -A && git commit --quiet -m "new"; fi | ||
# Tag this state of the source tree "new". This is what we want to build and test. | ||
git tag -f new | ||
# Our container image contains a source tree in /sage with a full build of Sage. | ||
# But /sage is not a git repository. | ||
# We make /sage a worktree whose index is at tag "new". | ||
# We then commit the current sources and set the tag "old". (This keeps all mtimes unchanged.) | ||
# Then we update worktree and index with "git reset --hard new". | ||
# (This keeps mtimes of unchanged files unchanged and mtimes of changed files newer than unchanged files.) | ||
# Finally we reset the index to "old". (This keeps all mtimes unchanged.) | ||
# The changed files now show up as uncommitted changes. | ||
# The final "git add -N" makes sure that files that were added in "new" do not show | ||
# as untracked files, which would be removed by "git clean -fx". | ||
git worktree add --detach worktree-image | ||
rm -rf /sage/.git && mv worktree-image/.git /sage/ | ||
rm -rf worktree-image && ln -s /sage worktree-image | ||
if [ ! -f worktree-image/.gitignore ]; then cp .gitignore worktree-image/; fi | ||
(cd worktree-image && git add -A && git commit --quiet --allow-empty -m "old" -a && git tag -f old && git reset --hard new && git reset --quiet old && git add -N . && git status) | ||
.ci/retrofit-worktree.sh worktree-image /sage | ||
# Keep track of changes to built HTML | ||
new_version=$(cat src/VERSION.txt); (cd /sage/local/share/doc/sage/html/en && find . -name "*.html" | xargs sed -i '/class="sidebar-brand-text"/s/Sage [0-9a-z.]* /Sage '$new_version' /'; git init && (echo "*.svg binary"; echo "*.pdf binary") >> .gitattributes && (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore; git add -A && git commit --quiet -m "old") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -53,31 +53,10 @@ jobs: | |
- name: Add prebuilt tree as a worktree | ||
id: worktree | ||
run: | | ||
set -ex | ||
git config --global --add safe.directory $(pwd) | ||
git config --global user.email "[email protected]" | ||
git config --global user.name "Build & Test workflow" | ||
git config --global --add safe.directory $(pwd) | ||
# If actions/checkout downloaded our source tree using the GitHub REST API | ||
# instead of with git (because do not have git installed in our image), | ||
# we first make the source tree a repo. | ||
if [ ! -d .git ]; then git init && git add -A && git commit --quiet -m "new"; fi | ||
# Tag this state of the source tree "new". This is what we want to build and test. | ||
git tag -f new | ||
# Our container image contains a source tree in /sage with a full build of Sage. | ||
# But /sage is not a git repository. | ||
# We make /sage a worktree whose index is at tag "new". | ||
# We then commit the current sources and set the tag "old". (This keeps all mtimes unchanged.) | ||
# Then we update worktree and index with "git reset --hard new". | ||
# (This keeps mtimes of unchanged files unchanged and mtimes of changed files newer than unchanged files.) | ||
# Finally we reset the index to "old". (This keeps all mtimes unchanged.) | ||
# The changed files now show up as uncommitted changes. | ||
# The final "git add -N" makes sure that files that were added in "new" do not show | ||
# as untracked files, which would be removed by "git clean -fx". | ||
git worktree add --detach worktree-image | ||
rm -rf /sage/.git && mv worktree-image/.git /sage/ | ||
rm -rf worktree-image && ln -s /sage worktree-image | ||
if [ ! -f worktree-image/.gitignore ]; then cp .gitignore worktree-image/; fi | ||
(cd worktree-image && git add -A && git commit --quiet --allow-empty -m "old" -a && git tag -f old && git reset --hard new && git reset --quiet old && git add -N . && git status) | ||
.ci/retrofit-worktree.sh worktree-image /sage | ||
# Keep track of changes to built HTML | ||
new_version=$(cat src/VERSION.txt); (cd /sage/local/share/doc/sage/html/en && find . -name "*.html" | xargs sed -i '/class="sidebar-brand-text"/s/Sage [0-9a-z.]* /Sage '$new_version' /'; git init && (echo "*.svg binary"; echo "*.pdf binary") >> .gitattributes && (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore; git add -A && git commit --quiet -m "old") | ||
|