diff --git a/README.md b/README.md index cc797e2..6d2e5b6 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ $ mix deps.audit | `--format` | String | `"human"` | The format of the report to generate (`"json"` or `"human"`) | | `--ignore-advisory-ids` | String | `""` | Comma-separated list of advisory IDs to ignore | | `--ignore-package-names` | String | `""` | Comma-separated list of package names to ignore | +| `--ignore-file` | String | `""` | Path of the ignore file | ## Example diff --git a/lib/mix_audit/cli.ex b/lib/mix_audit/cli.ex index 4349a50..a525c65 100644 --- a/lib/mix_audit/cli.ex +++ b/lib/mix_audit/cli.ex @@ -5,6 +5,7 @@ defmodule MixAudit.CLI do switches: [ ignore_advisory_ids: :string, ignore_package_names: :string, + ignore_file: :string, version: :boolean, help: :boolean, format: :string, diff --git a/lib/mix_audit/cli/audit.ex b/lib/mix_audit/cli/audit.ex index aeaaf46..4d76ff5 100644 --- a/lib/mix_audit/cli/audit.ex +++ b/lib/mix_audit/cli/audit.ex @@ -33,12 +33,32 @@ defmodule MixAudit.CLI.Audit do end defp ignored_advisory_ids(opts) do + ignored_ids_from_cli = ignored_advisory_ids_from_cli(opts) + ignored_ids_from_file = ignored_advisory_ids_from_file(opts) + + Enum.uniq(ignored_ids_from_cli ++ ignored_ids_from_file) + end + + defp ignored_advisory_ids_from_cli(opts) do opts |> Keyword.get(:ignore_advisory_ids, "") |> String.split(",") |> Enum.map(&String.trim/1) end + def ignored_advisory_ids_from_file(opts) do + case Keyword.get(opts, :ignore_file) do + nil -> + [] + + ignore_file -> + ignore_file + |> File.read!() + |> String.split("\n") + |> Enum.reject(fn line -> String.starts_with?(line, "#") || String.trim(line) == "" end) + end + end + defp ignored_package_names(opts) do opts |> Keyword.get(:ignore_package_names, "") diff --git a/lib/mix_audit/cli/help.ex b/lib/mix_audit/cli/help.ex index 3df4059..53d9bed 100644 --- a/lib/mix_audit/cli/help.ex +++ b/lib/mix_audit/cli/help.ex @@ -9,6 +9,7 @@ defmodule MixAudit.CLI.Help do IO.puts("--format The format of the report to generate (human, json)") IO.puts("--ignore-advisory-ids A comma-separated list of advisory IDs to ignore") IO.puts("--ignore-package-names A comma-separated list of package names to ignore") + IO.puts("--ignore-file Path of the ignore file") IO.puts("") System.halt(0) end