feat(tools/releases): Add release helper for mirroring to Github
This adds an extra step definition which can push the result of running a josh filter on the repository to Github. Change-Id: I1f93ae78e1bf452fbd1b21ce943a60acc85c944f Reviewed-on: https://cl.tvl.fyi/c/depot/+/5666 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
parent
6a17cf232d
commit
74c422d0a0
1 changed files with 37 additions and 0 deletions
37
tools/releases/default.nix
Normal file
37
tools/releases/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
# Definitions for simple release mechanisms from depot.
|
||||
{ depot, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib.strings) makeBinPath sanitizeDerivationName;
|
||||
in
|
||||
{
|
||||
# Use a josh filter to push a certain subset of canon to another git
|
||||
# repository.
|
||||
#
|
||||
# This expects, of course, that the remote repository has granted
|
||||
# push access to the CI SSH key.
|
||||
filteredGitPush = { filter, remote, ref ? "refs/heads/canon" }: {
|
||||
label = ":git: push '${filter}' to external git repository";
|
||||
branches = [ "refs/heads/canon" ];
|
||||
postBuild = true;
|
||||
|
||||
command = pkgs.writeShellScript "${sanitizeDerivationName filter}-push" ''
|
||||
set -e
|
||||
export PATH="${makeBinPath [ pkgs.git depot.third_party.josh ]}:$PATH"
|
||||
|
||||
echo 'Filtering depot through ${filter}'
|
||||
josh-filter '${filter}'
|
||||
|
||||
echo 'Fetching remote to check if a push is needed'
|
||||
git fetch '${remote}' '${ref}'
|
||||
|
||||
if git merge-base --is-ancestor FILTERED_HEAD FETCH_HEAD; then
|
||||
echo 'Commit already present, nothing to push.'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo 'Pushing filtered repository to ${remote}:${ref}'
|
||||
git push '${remote}' 'FILTERED_HEAD:${ref}'
|
||||
'';
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue