# Note that all fields that take a lint level have these possible values:
# * deny - An error will be produced and the check will fail
# * warn - A warning will be produced, but the check will not fail
# * allow - No warning or error will be produced, though in some cases a note
# will be

# This section is considered when running `cargo deny check bans`.
# More documentation about the 'bans' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
[bans]
# Lint level for when multiple versions of the same crate are detected
multiple-versions = "deny"

# Don't allow wildcard ("any version") dependencies
wildcards = "deny"
# Allow private and dev wildcard dependencies.
# Switch this to `false` when #6924 is implemented.
allow-wildcard-paths = true

# The graph highlighting used when creating dotgraphs for crates
# with multiple versions
# * lowest-version - The path to the lowest versioned duplicate is highlighted
# * simplest-path - The path to the version with the fewest edges is highlighted
# * all - Both lowest-version and simplest-path are used
highlight = "all"

# List of crates that are allowed. Use with care!
#allow = [
#]

# List of crates that can never become Zebra dependencies.
deny = [
    # Often has memory safety vulnerabilities.
    # Enabled by --all-features, use the `cargo hack` script in the deny.toml CI job instead.
    { name = "openssl" },
    { name = "openssl-sys" },
]

# We only use this for some `librustzcash` and `orchard` crates.
# If we add a crate here, duplicate dependencies of that crate are still shown.
#
# Certain crates/versions that will be skipped when doing duplicate detection.
skip = [
]

# Similarly to `skip` allows you to skip certain crates during duplicate
# detection. Unlike skip, it also includes the entire tree of transitive
# dependencies starting at the specified crate, up to a certain depth, which is
# by default infinite
skip-tree = [
    # wait for ordered-map to release a dependency fix
    { name = "ordered-map", version = "=0.4.2" },

    # wait for primitive-types to upgrade
    { name = "proc-macro-crate", version = "=0.1.5" },

    # wait for criterion to upgrade
    { name = "itertools", version = "=0.10.5" },

    # wait for h2 and tower to upgrade
    { name = "indexmap", version = "=1.9.3" },

    # wait for rocksdb to upgrade
    { name = "bindgen", version = "=0.65.1" },

    # wait for tracing and many other crates to upgrade
    # this duplicate dependency currently only exists in testing builds
    { name = "regex-syntax", version = "=0.6.29" },

    # wait for `parking_lot` crate inside `jsonrpc-http-server` to upgrade
    { name = "redox_syscall", version = "=0.2.16" },

    # wait for `color-eyre` to upgrade
    { name = "owo-colors", version = "=3.5.0" },

    # wait for `serde_with_macros` to upgrade `darling_core`
    { name = "strsim", version = "=0.10.0" },

    # ZF crates

    # wait for indexmap, toml_edit, serde_json, tower to upgrade
    { name = "hashbrown", version = "=0.12.3" },

    # wait for zcash_script to upgrade
    { name = "metrics", version = "=0.21.1" },

    # ECC crates

    # wait for hdwallet to upgrade
    { name = "ring", version = "=0.16.20" },

    # wait for the equihash/solver feature to merge
    # https://github.com/zcash/librustzcash/pull/1083
    # https://github.com/zcash/librustzcash/pull/1088
    { name = "equihash", version = "=0.2.0" },

    # zebra-utils dependencies

    # wait for structopt upgrade (or upgrade to clap 4)
    { name = "clap", version = "=2.34.0" },
    { name = "heck", version = "=0.3.3" },

    # wait for abscissa_core to upgrade
    {name = "tracing-log", version = "=0.1.4" },

    # wait for prost to upgrade
    {name = "itertools", version = "=0.11.0" },

    # Test-only dependencies

    # wait for tokio-test -> tokio-stream to upgrade
    { name = "tokio-util", version = "=0.6.10" },

    # wait for console-subscriber and tower to update hdrhistogram.
    # also wait for ron to update insta, and wait for tonic update.
    { name = "base64", version = "=0.13.1" },

    # wait for proptest's rusty-fork dependency to upgrade quick-error
    { name = "quick-error", version = "=1.2.3" },

    # wait for console-subscriber to update tonic.
    { name = "tonic", version = "=0.10.2" },
    { name = "tonic-build", version = "=0.10.2" },

    # Optional dependencies

    # upgrade abscissa (required dependency) and arti (optional dependency)
    { name = "semver", version = "=0.9.0" },

    # Elasticsearch dependencies

    # wait for elasticsearch to update base64, darling, rustc_version, serde_with
    { name = "elasticsearch", version = "=8.5.0-alpha.1" },
]

# This section is considered when running `cargo deny check sources`.
# More documentation about the 'sources' section can be found here:
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
[sources]
# Lint level for what to happen when a crate from a crate registry that is not
# in the allow list is encountered
unknown-registry = "deny"
# Lint level for what to happen when a crate from a git repository that is not
# in the allow list is encountered
unknown-git = "deny"
# List of URLs for allowed crate registries. Defaults to the crates.io index
# if not specified. If it is specified but empty, no registries are allowed.
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
# List of URLs for allowed Git repositories
allow-git = [
    # TODO: remove this after the equihash solver branch is merged and released.
    #
    # "cargo deny" will log a warning in builds without the internal-miner feature. That's ok.
    "https://github.com/ZcashFoundation/librustzcash.git"
]

[sources.allow-org]
github = [
]
