The change we need has been released and propagated to nixos channels. Change-Id: Ib10a1d42d7ef6deaf5665a13b72ece345e83d7dc Reviewed-on: https://cl.tvl.fyi/c/depot/+/11457 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
		
			
				
	
	
		
			37 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# 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" ];
 | 
						|
    phase = "release";
 | 
						|
 | 
						|
    command = pkgs.writeShellScript "${sanitizeDerivationName filter}-push" ''
 | 
						|
      set -e
 | 
						|
      export PATH="${makeBinPath [ pkgs.git pkgs.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}'
 | 
						|
    '';
 | 
						|
  };
 | 
						|
}
 |