Skip to content

Commit

Permalink
contrib: add a wrapper to be able to check deploys use up-to-date git
Browse files Browse the repository at this point in the history
This is adapted from an internal project. It's a simple solution that
probably has wider applicability than just our little project.
  • Loading branch information
lf- committed Mar 5, 2024
1 parent c84ccd0 commit 92b1fdf
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
21 changes: 21 additions & 0 deletions contrib/colmena-wrapper.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileCopyrightText: 2024 Jade Lovelace
#
# A wrapper for colmena that prevents accidentally deploying changes without
# having pulled.
{ colmena, runCommandNoCC }:
runCommandNoCC "colmena-wrapper"
{
env = {
colmena = "${colmena}/bin/colmena";
remote_name = "origin";
upstream_branch = "main";
};
} ''
mkdir -p $out
ln -s ${colmena}/share $out/share
mkdir $out/bin
substituteAll ${./colmena-wrapper.sh.in} $out/bin/colmena
chmod +x $out/bin/colmena
''
31 changes: 31 additions & 0 deletions contrib/colmena-wrapper.sh.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileCopyrightText: 2024 Jade Lovelace

doChecks() {
# creates refs in the refs/prefetch/remotes/origin namespace
echo "Prefetching repo changes..." >&2
git fetch --quiet --prefetch --no-write-fetch-head @remote_name@

diffs=$(git rev-list --left-right --count HEAD...refs/prefetch/remotes/@remote_name@/@upstream_branch@)
only_in_local=$(echo "$diffs" | cut -f1)
only_in_main=$(echo "$diffs" | cut -f2)

if [[ $only_in_main -gt 0 && ! -v $FOOTGUN_ME_UWU ]]; then
echo >&2
echo "Attempting to deploy when @upstream_branch@ has $only_in_main commits not in your branch!" >&2
echo "This will probably revert someone's changes. Consider merging them." >&2
echo "If you really mean it, set the environment variable FOOTGUN_ME_UWU" >&2
exit 1
fi

if [[ $only_in_local -gt 0 ]]; then
echo "You have $only_in_local commits not yet pushed to @upstream_branch@. Reminder to push them after :)" >&2
fi
}

if [[ $1 == 'apply' ]]; then
doChecks
fi

exec @colmena@ "$@"

0 comments on commit 92b1fdf

Please sign in to comment.