forked from kata-containers/kata-containers
-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds cargo-deny to scan for vulnerabilities and license issues regarding rust crates. GitHub Actions does not have an obvious way to loop over each of the Cargo.toml files. To avoid hardcoding it, I worked around the problem using a composite action that first generates the cargo-deny action by finding all Cargo.toml files before calling this new generated action in the master workflow. Uses recommended deny.toml from cargo-deny repo with the following modifications: ignore = ["RUSTSEC-2020-0071"] because chrono is dependent on the version of time with the vulnerability and there is no simple workaround multiple-versions = "allow" Because of the above error and other packages, there are instances where some crates require different versions of a crate. unknown-git = "allow" I don't see a particular issue with allowing crates from other repos. An alternative would be the manually set each repo we want in an allow-git list, but I see this as more of a nuisance that its worth. We could leave this as a warning (default), but to avoid clutter I'm going to allow it. If deny.toml needs to be edited in the future, here's the guide: https://embarkstudios.github.io/cargo-deny/index.html Fixes kata-containers#3359 Signed-off-by: Derek Lee <[email protected]>
- Loading branch information
Derek Lee
committed
Aug 30, 2022
1 parent
1b92a94
commit bed4aab
Showing
5 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
40 changes: 40 additions & 0 deletions
40
.github/cargo-deny-composite-action/cargo-deny-generator.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/bin/bash | ||
# | ||
# Copyright (c) 2022 Red Hat | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
script_dir=$(dirname "$(readlink -f "$0")") | ||
parent_dir=$(realpath "${script_dir}/../..") | ||
cidir="${parent_dir}/ci" | ||
source "${cidir}/lib.sh" | ||
|
||
cargo_deny_file="${script_dir}/action.yaml" | ||
|
||
cat cargo-deny-skeleton.yaml.in > "${cargo_deny_file}" | ||
|
||
changed_files_status=$(run_get_pr_changed_file_details) | ||
changed_files_status=$(echo "$changed_files_status" | grep "Cargo\.toml$" || true) | ||
changed_files=$(echo "$changed_files_status" | awk '{print $NF}' || true) | ||
|
||
if [ -z "$changed_files" ]; then | ||
cat >> "${cargo_deny_file}" << EOF | ||
- run: echo "No Cargo.toml files to check" | ||
shell: bash | ||
EOF | ||
fi | ||
|
||
for path in $changed_files | ||
do | ||
cat >> "${cargo_deny_file}" << EOF | ||
- name: ${path} | ||
continue-on-error: true | ||
shell: bash | ||
run: | | ||
pushd $(dirname ${path}) | ||
cargo deny check | ||
popd | ||
EOF | ||
done |
30 changes: 30 additions & 0 deletions
30
.github/cargo-deny-composite-action/cargo-deny-skeleton.yaml.in
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# | ||
# Copyright (c) 2022 Red Hat | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
name: 'Cargo Crates Check' | ||
description: 'Checks every Cargo.toml file using cargo-deny' | ||
|
||
env: | ||
CARGO_TERM_COLOR: always | ||
|
||
runs: | ||
using: "composite" | ||
steps: | ||
- name: Install Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: nightly | ||
override: true | ||
|
||
- name: Cache | ||
uses: Swatinem/rust-cache@v2 | ||
|
||
- name: Install Cargo deny | ||
shell: bash | ||
run: | | ||
which cargo | ||
cargo install --locked cargo-deny || true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
name: Cargo Crates Check Runner | ||
on: [pull_request] | ||
jobs: | ||
cargo-deny-runner: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout Code | ||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} | ||
uses: actions/checkout@v3 | ||
- name: Generate Action | ||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} | ||
run: bash cargo-deny-generator.sh | ||
working-directory: ./.github/cargo-deny-composite-action/ | ||
env: | ||
GOPATH: ${{ runner.workspace }}/kata-containers | ||
- name: Run Action | ||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} | ||
uses: ./.github/cargo-deny-composite-action |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
targets = [ | ||
{ triple = "x86_64-apple-darwin" }, | ||
{ triple = "x86_64-unknown-linux-gnu" }, | ||
{ triple = "x86_64-unknown-linux-musl" }, | ||
] | ||
|
||
[advisories] | ||
vulnerability = "deny" | ||
unsound = "deny" | ||
unmaintained = "deny" | ||
ignore = ["RUSTSEC-2020-0071"] | ||
|
||
[bans] | ||
multiple-versions = "allow" | ||
deny = [ | ||
{ name = "cmake" }, | ||
{ name = "openssl-sys" }, | ||
] | ||
|
||
[licenses] | ||
unlicensed = "deny" | ||
allow-osi-fsf-free = "neither" | ||
copyleft = "allow" | ||
# We want really high confidence when inferring licenses from text | ||
confidence-threshold = 0.93 | ||
allow = ["0BSD", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "CC0-1.0", "ISC", "MIT", "MPL-2.0"] | ||
private = { ignore = true} | ||
|
||
exceptions = [] | ||
|
||
[sources] | ||
unknown-registry = "allow" | ||
unknown-git = "allow" |