1
0
Fork 0
nixfiles/pkgs/clerie-update-nixfiles/clerie-update-nixfiles.sh

85 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
xgit() {
git -c "user.name=Flake Update Bot" -c "user.email=flake-update-bot@clerie.de" -c "core.pager=cat" "$@"
}
xgit_merge_theirs() {
# base branch is the one currently checked out
# this is the branch we want to merge into the base branch
OTHER_BRANCH="$1"
# merge commit message
COMMIT_MESSAGE="$2"
# this branch gets used while merging
TEMP_BRANCH="tempbranch"
# create a merge commit between base branch and other branch, so it shows up correctly in git log
# we use `ours` so we make sure there are no merge conflicts
git merge -s ours "${OTHER_BRANCH}" -m "${COMMIT_MESSAGE}"
# save our newly created merge commit in a seperate branch
git branch "${TEMP_BRANCH}"
# export contents of other branch to current working directory
# this will change the last commit of our base branch too
git reset --hard "${OTHER_BRANCH}"
# return to our merge commit from the base branch
# but without touching the current working directory
git reset --soft "${TEMP_BRANCH}"
# Add the changes to our merge commit
git commit --amend --no-edit
# we are now on our base branch again
# so we can delete the temp branch
git branch -D "${TEMP_BRANCH}"
}
NOW="$(date --utc +%Y-%m-%d-%H-%M)"
xgit status || xgit clone gitea@git.clerie.de:clerie/nixfiles.git .
echo "[!] Download changes"
xgit fetch --all
echo "[!] Chechout remote master"
xgit checkout origin/master
UPDATE_BRANCH="updated-inputs-${NOW}"
echo "[!] Create branch ${UPDATE_BRANCH}"
xgit checkout -b "${UPDATE_BRANCH}"
echo "[!] Update nixpkgs"
nix flake lock --update-input nixpkgs
echo "[!] Commit changes"
xgit add flake.lock
xgit commit -m "Update nixpkgs ${NOW}" || true
xgit diff --name-status origin/updated-inputs "${UPDATE_BRANCH}"
echo "[!] biep"
if xgit diff --quiet origin/updated-inputs "${UPDATE_BRANCH}"
then
echo "[!] Nothing changed, removing branch"
xgit branch -D "${UPDATE_BRANCH}"
exit 0
fi
echo "[!] Publish ${UPDATE_BRANCH}"
xgit push --set-upstream origin "${UPDATE_BRANCH}"
echo "[!] Merge ${UPDATE_BRANCH} into updated-inputs"
xgit checkout updated-inputs
xgit_merge_theirs "${UPDATE_BRANCH}" "Update from ${UPDATE_BRANCH}"
echo "[!] Publish updated-inputs"
xgit push origin updated-inputs