I think what might be going on with b/231 is that the annotations somehow started conflicting because they don't have contexts set. Lets try setting a context and see if it changs anything ... Change-Id: I62ed57f9e24f08e4e7215f05d35cfa769e2e2c24 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7640 Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { depot, pkgs, lib, ... }:
 | |
| 
 | |
| let
 | |
| 
 | |
|   bins =
 | |
|     depot.nix.getBins pkgs.cargo-audit [ "cargo-audit" ]
 | |
|     // depot.nix.getBins pkgs.jq [ "jq" ]
 | |
|     // depot.nix.getBins pkgs.findutils [ "find" ]
 | |
|     // depot.nix.getBins pkgs.gnused [ "sed" ]
 | |
|   ;
 | |
| 
 | |
|   our-crates = lib.filter (v: v ? outPath)
 | |
|     (builtins.attrValues depot.third_party.rust-crates);
 | |
| 
 | |
|   our-crates-lock-file = pkgs.writeText "our-crates-Cargo.lock"
 | |
|     (lib.concatMapStrings
 | |
|       (crate: ''
 | |
|         [[package]]
 | |
|         name = "${crate.crateName}"
 | |
|         version = "${crate.version}"
 | |
|         source = "registry+https://github.com/rust-lang/crates.io-index"
 | |
| 
 | |
|       '')
 | |
|       our-crates);
 | |
| 
 | |
|   lock-file-report = pkgs.writers.writeBash "lock-file-report" ''
 | |
|     set -u
 | |
| 
 | |
|     if test "$#" -lt 2; then
 | |
|       echo "Usage: $0 IDENTIFIER LOCKFILE [CHECKLIST [MAINTAINERS]]" >&2
 | |
|       echo 2>&1
 | |
|       echo "  IDENTIFIER  Unique string describing the lock file" >&2
 | |
|       echo "  LOCKFILE    Path to Cargo.lock file" >&2
 | |
|       echo "  CHECKLIST   Whether to use GHFM checklists in the output (true or false)" >&2
 | |
|       echo "  MAINTAINERS List of @names to cc in case of advisories" >&2
 | |
|       exit 100
 | |
|     fi
 | |
| 
 | |
|     "${bins.cargo-audit}" audit --json --no-fetch \
 | |
|       --db "${depot.third_party.rustsec-advisory-db}" \
 | |
|       --file "$2" \
 | |
|     | "${bins.jq}" --raw-output --join-output \
 | |
|       --from-file "${./format-audit-result.jq}" \
 | |
|       --arg maintainers "''${4:-}" \
 | |
|       --argjson checklist "''${3:-false}" \
 | |
|       --arg attr "$1"
 | |
| 
 | |
|     exit "''${PIPESTATUS[0]}" # inherit exit code from cargo-audit
 | |
|   '';
 | |
| 
 | |
|   tree-lock-file-report = pkgs.writers.writeBash "tree-lock-file-report" ''
 | |
|     set -euo pipefail
 | |
|     status=0
 | |
| 
 | |
|     root="''${1:-.}"
 | |
| 
 | |
|     # Find prints the found lockfiles as <DEPOT ROOT>\t<LOCKFILE DIR>\t<LOCKFILE PATH>\0
 | |
|     while IFS=$'\t' read -r -d $'\0' entryPoint dir lockFile; do
 | |
|       label="$(printf '%s' "$dir" | "${bins.sed}" "s|^$entryPoint|/|")"
 | |
|       "${lock-file-report}" "$label" "$lockFile" || status=1
 | |
|     done < <("${bins.find}" "$root" -type f -name Cargo.lock -printf '%H\t%h\t%p\0' )
 | |
| 
 | |
|     exit $status
 | |
|   '';
 | |
| 
 | |
|   depot-rust-crates-advisory-report = pkgs.writers.writeBash "depot-advisory-report" ''
 | |
|     set -eu
 | |
|     status=0
 | |
| 
 | |
|     "${lock-file-report}" "//third_party/rust-crates" "${our-crates-lock-file}" || status=1
 | |
|     "${tree-lock-file-report}" || status=1
 | |
| 
 | |
|     exit $status
 | |
|   '';
 | |
| 
 | |
|   buildkiteReportStep =
 | |
|     { command
 | |
|     , context ? null
 | |
|     , style ? "warning"
 | |
|     }:
 | |
|     let
 | |
|       commandName = depot.nix.utils.storePathName (builtins.head command);
 | |
|     in
 | |
| 
 | |
|     pkgs.writers.writeBash "buildkite-report-${commandName}" ''
 | |
|       set -uo pipefail
 | |
| 
 | |
|       report="$(${lib.escapeShellArgs command})"
 | |
| 
 | |
|       if test $? -ne 0; then
 | |
|          printf "%s" "$report" | \
 | |
|          buildkite-agent annotate ${
 | |
|            lib.escapeShellArgs ([
 | |
|              "--style"
 | |
|              style
 | |
|            ] ++ lib.optionals (context != null) [
 | |
|              "--context"
 | |
|              context
 | |
|            ])
 | |
|          }
 | |
|       fi
 | |
|     '';
 | |
| 
 | |
| in
 | |
| depot.nix.readTree.drvTargets {
 | |
|   inherit
 | |
|     lock-file-report
 | |
|     ;
 | |
| 
 | |
|   tree-lock-file-report = tree-lock-file-report // {
 | |
|     meta.ci.extraSteps.run = {
 | |
|       label = "Check all crates used in depot for advisories";
 | |
|       alwaysRun = true;
 | |
|       command = buildkiteReportStep {
 | |
|         command = [ depot-rust-crates-advisory-report ];
 | |
|         style = "warning";
 | |
|         context = "depot-crate-advisories";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |