#!/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 checkout updated-inputs 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