From 92b1fdff901fa8e18f7c69abadabc83a4f5b2c3f Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Mon, 4 Mar 2024 15:52:05 -0800 Subject: [PATCH] contrib: add a wrapper to be able to check deploys use up-to-date git This is adapted from an internal project. It's a simple solution that probably has wider applicability than just our little project. --- contrib/colmena-wrapper.nix | 21 +++++++++++++++++++++ contrib/colmena-wrapper.sh.in | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 contrib/colmena-wrapper.nix create mode 100755 contrib/colmena-wrapper.sh.in diff --git a/contrib/colmena-wrapper.nix b/contrib/colmena-wrapper.nix new file mode 100644 index 0000000..ceec62a --- /dev/null +++ b/contrib/colmena-wrapper.nix @@ -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 +'' diff --git a/contrib/colmena-wrapper.sh.in b/contrib/colmena-wrapper.sh.in new file mode 100755 index 0000000..5e27339 --- /dev/null +++ b/contrib/colmena-wrapper.sh.in @@ -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@ "$@"