Skip to content
Snippets Groups Projects
vulnerability-scan 1.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env sh
    
    
    set -xeo pipefail
    
    #
    # `morph build ...` output is like
    #
    #   Selected 2/2 hosts (name filter:-0, limits:-0):
    #             0: xx.xx.xx.xx (secrets: 1, health checks: 0)
    #             1: yy.yy.yy.yy (secrets: 2, health checks: 0)
    #
    #   /nix/store/d7spc457nnzh0rnv0f5lh1q2j435j1b9-morph
    #   nix result path:
    #   /nix/store/d7spc457nnzh0rnv0f5lh1q2j435j1b9-morph
    #
    # Get the last line so we can scan it.
    #
    
    OUTPUT=$1
    
    
    [ -e scan-target ] && rm -v scan-target
    
    nix-shell --run '
    
    if morph_result=$(morph build morph/grid/testing/grid.nix 2>&1); then
      object=$(echo "$morph_result" | tail -n 1)
      ln -s "$object" scan-target
    else
      echo "$morph_result"
    
    
      # exit status 0-3 reserved for vulnix result.
    
    # vulnix exits with an error status if there are vulnerabilities.  We told
    # GitLab to allow this by setting `allow_failure` to true in the GitLab CI
    
    # config.  vulnix exit status indicates what vulnix thinks happened.  If we
    # upgrade to a newer GitLab then we can make GitLab pipeline behavior vary
    # based on this.
    
    #
    # For now, allow 0 (no errors), 1 (only whitelisted errors), and 2
    # (non-whitelisted errors).  3 indicates unexpected error so we let that
    # propagate.
    set +e
    
    nix-shell -p vulnix --run 'vulnix --json ./scan-target/' | tee "$OUTPUT"
    
    vulnix_status=$?
    set -e
    
    echo "vulnix status: $vulnix_status"
    if [ $vulnix_status -eq 3 ]; then
        exit $vulnix_status
    else
        exit 0
    fi