You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'll start with an opinion: a license deny list is a bad idea. A company using one would put copyleft licenses like GPL-2.0 in there, potentially missing other copyleft licenses like CC-BY-SA-4.0 or maybe they would forget to also add GPL-3.0. Additionally, it's easy to miss commercial licenses like Elastic which could be a problem for some users. This is even more an issue now that ClearlyDefined includes more license identifiers than ever before. A deny list provides very limited risk reduction.
Up until recently, DRA did not provide the tools necessary to remediate failures. The most important remediation is the ability to say "I've reviewed this package and it's fine", and DRA could do that, but only if the license was a valid license expression. Recent DRA releases check if a package is on the allow-dependencies-licenses list first, so it can pass even if there's an invalid license.
We should deprecate the deny list option in a 4.x release in preparation for an eventual 5.x release that removes it. It would be interesting to see if we have feedback that comes out in favor of deny lists and provides some justification as to why our product should support it.
Acceptance Criteria
The README lists deny-licenses as deprecated
The summary output from the action includes a very visible warning that deny-licenses is deprecated
I use the deny-licenses option (at least right now as part of a POC - subject to change! 😁) and would be impacted if it was removed
While an "allow list" is theoretically superior, there's a few real world challenges at play:
Some legal departments have a deny list, rather than an allow list.
Likelihood is a component of risk (impact * likelihood). A rare license used by a few components with low usage is inherently lower risk. The cost of a strict allow list (and inherent developer productivity loss) might outweigh the low risk of a rare license.
Some component ecosystems are massive - NPM in particular. It's not uncommon to have hundreds of thousands or even millions of dependencies. Ensuring a 'flawlessly accurate' allow list is a massive undertaking that could be a barrier to entry. Deny lists would help them get something in place, even if it's not perfect.
The documentation should describe the pros/cons of each approach so that users are fully aware of the tradeoffs and risk inherent in either approach.
Something that I'd find personally helpful is for both lists to allow wildcards, or at least "starts with" matches. For example, adding something like AGPL-* would be far more efficient (and lower risk) than listing each one individually and then being caught off guard when a new version or variant is added.
Another helpful feature would be to allow specific packages - for example, a custom license for a commercial package isn't a problem if it's been reviewed by a corporate procurement team.
Reacted by Igor Dubinskiy, Chris Romp, Philip Lowman, Tim Becker, chainchad, Dan Hardej, Adrian Schneider, Christian Reinecke, Evan Jones, Jack S and 1 more
Another helpful feature would be to allow specific packages
I'd say that this is not just helpful, but required. My view is this:
Start with an allow list
If a package has a license that isn't on that list, review it and then take one of the three actions below:
Allow the package
Allow the license
Don't use the package (switch to an alternative)
A license allow list absolutely doesn't work without the ability to allow a package. DRA does support that with the allow-dependencies-licenses option.
DRA is only checking changes to dependencies, so it's not too big a barrier to take one of the 3 actions above if a package fails the test.
I do acknowledge that a deny list does give some risk reduction, but it is likely to give a false sense of security around license compliance.
I just wanted to voice my own opinion that I'm personally in favor of keeping a deny-licenses list. I've been trying to migrate a mid sized monorepo from using snyk.io for dependency scanning to using this dependency-review-action, including license scanning. The repo has over 3,000 transitive NPM packages with various licenses.
It's just been using Snyk's default license policy, which would block PRs if a dependency with any of a handful of 6 copyleft licenses got added, which I was planning to configure in a deny list on this action.
If I had to configure it using allow-licenses instead, I'd try copying the entire list of allowed licenses from the Snyk policy, which is nearly 500, and seems much tougher to manage.
This is what the CI job would look like with deny-licenses:
It seems much easier to manage a smaller list of denied licenses, rather than trying to maintain a list of all allowed licenses.
But in either case, I seem to be running into a bug where the action is treating NPM package licenses as Null, and not able to determine whether they should be allowed or blocked. It seems related to #923 and #939
I hope the bug will get fixed soon, but I'm currently trying non-latest versions of the action in the meantime, to see if I have any better luck with them.
Cheers!
Reacted by Igor Dubinskiy, Philip Lowman, Nat Welch, Tim Becker, chainchad, Christian Schneider, Jack S, Avish Jha, Dzenan Softic and Ondřej Súkup
@dylanlan thanks for that feedback, it's super helpful. i completely agree that enumerating that allow list is pretty onerous. It's maybe not quite as bad as having them all as a comma-separated list inline, because you can use with: config-file to pull in a list of the identifiers from a separate file (docs).
Q: Of the 3k dependencies in the monorepo you're checking, how many different licenses are there?
thinking out loud here: would you find it useful to have pre-made lists to include that follow the scancode licensedb categories, so you don't have to enumerate all the permissive licenses, you could just say
@ahpook Interesting idea. I really like the idea of using categories. Sadly, it wouldn't work out of the box in our case.
Our partners and clients have extremely strict requirements around specific licenses - they supply them as a list to us and state "never use these, for any reason, at any time". In that situation, an allow list is never going to work as a sole solution - it violates our clients' contractual requirements. We're dealing with real world contracts, lawyers, and fun stuff like that. There's no flexibility and its non-negotiable for us.
I'm not sure whether its on our list, but I'll use the example of agpl-3.0 and gpl-3.0. Both have copyleft as their scancode license categories. For web-hosted software, they are significantly different. There's a large list of compile-time tools that are gpl-1.0 licensed that are npm installed and act as part of a package.json but only get 'used', never act as part of a deployed application. That makes blocking all copyleft difficult for modern applications, given the lack of context. The situations where there is an obligation to open source an entire web application are the super scary ones for legal teams, but they're not well categorized today.
Reacted by Igor Dubinskiy, Eric Sorenson and Nat Welch
We use a deny-license list for a bulk list of licenses that will never be approved. Everything else is handled on a case by case basis. It saves us work. My company would be affected.
I am also adding a feedback in favor of deny lists, at least until a better solution is implemented.
We started with the "allow list" because it is indeed what makes the most sense "good-practice" wise; however in reality other factors come at play.
We switched to "deny list" at first because even Microsoft packages do not always correctly set up their license type and we encounter unknown types of licenses starting with "LicenseRef" and joined licenses (eg. Apache-2.0 AND MIT AND BSD-2-Clause AND CC-BY-4.0 AND BSD-3-Clause) which need to be specified for every combination or the review fails.
It is very very cumbersome.
Furthermore, hen handling several ecosystems across several repositories it is very hard to incrementally grow the allow list. There is too many stakeholders and not enough bandwidth to track every blocking packages.
We switched to "deny list" at first because even Microsoft packages do not always correctly set up their license type and we encounter unknown types of licenses starting with "LicenseRef" and joined licenses (eg. Apache-2.0 AND MIT AND BSD-2-Clause AND CC-BY-4.0 AND BSD-3-Clause) which need to be specified for every combination or the review fails.
It is very very cumbersome.
Fair point, thank you for the feedback @lucas-morel-shift! Note that this specific issue is fixed as of DRA 4.7.1. Now you can just list the licenses you want to permit, and it will correctly AND them together for compound license expressions (or permit if any of an OR expression's licenses are listed). See #927 for details.
I'd also be in favor of keeping support for a deny-licenses with this GitHub action. There are a lot of OSS licenses, and many companies and organizations do not make the time and bandwidth to review them and maintain an explicit allow list. For this reason, I think it makes sense for the action to continue to support a deny list.
Scancode Categories would work for us. We have the same problem, the npm license world is so dumb and there are so many licenses, a deny list was the only way we were able to make sense of it all.
Just my two cents on this… but an allow list is great when you only want specific licenses used. A deny list is great when you don’t want specific licenses used. Both have their pros and cons, removing one hinders the overall usefulness. But like any setting or feature in any program it’s up to the end user to use it and use it properly.
I came across this randomly searching and right off the bat saw the deny list setting and in my head said “yea that’s what I want to use”. Now is it perfect? No. But it’s better than looking through thousands of different licenses.
It’s my opinion both should remain. Just document them better. But they should also both support wildcards.
In theory only a allow-list is better. In practice there are so many packages with missing or incorrect license information that you want to tackle the process from both sides. For my organizations we use all features (allow and deny licenses and allow and deny packages) to correct for missing and incorrect licenses information and to correct for incorrect handling of SPDX identifier by this Action. The path forward I see is to amend dependency information before running this Action. GitHub does not provide such a feature.
I think GitHub Advanced Security will even less appealing when the deny-licenses is removed because it pushes users to a compliance process outside of GitHub, removing the need for this Action.
I'm coming in with what is potentially the most complicated use case of them all so far. The legal team at my company uses a green light, yellow light, red light system.
🟢 = License is not a problem, no additional review needed
🟡 = Use needs to be reviewed and approved on a case-by-case basis
🔴 = Not approved, stay away
Does this list cover every license enumerated in something like the SPDX license catalogue? No, but it covers the most common ones. The obscure ones should ideally be reviewed as encountered and added to the list.
What would be nice for me is if the action had an allow list, a deny list, a warning list that could still pass the PR check, and a separate warning that the license is unreviewed, and should be added to some sort of list before proceeding. This last feature could be something like a "strict mode" that flags licenses not accounted for anywhere. Going with nothing but an allow list is going to cause an enormous amount of friction with developers when a quadruple-nested dependency with a yellow-light license, or one that is unreviewed, causes their PR checks to fail.
👋 This issue has been marked as stale because it has been open with no activity for 180 days. You can: comment on the issue or remove the stale label to hold stalebot off for a while, add the Keep label to hold stale off permanently, or do nothing. If you do nothing, this issue will be closed eventually by the stalebot. Please see CONTRIBUTING.md for more policy details.
👋 This issue has been closed by stalebot because it has been open with no activity for over 180 days. Please see CONTRIBUTING.md for more policy details.
Activity
ebickle commentedon Jun 25, 2025
I use the
deny-licensesoption (at least right now as part of a POC - subject to change! 😁) and would be impacted if it was removedWhile an "allow list" is theoretically superior, there's a few real world challenges at play:
The documentation should describe the pros/cons of each approach so that users are fully aware of the tradeoffs and risk inherent in either approach.
Something that I'd find personally helpful is for both lists to allow wildcards, or at least "starts with" matches. For example, adding something like
AGPL-*would be far more efficient (and lower risk) than listing each one individually and then being caught off guard when a new version or variant is added.Another helpful feature would be to allow specific packages - for example, a custom license for a commercial package isn't a problem if it's been reviewed by a corporate procurement team.
dangoor commentedon Jul 9, 2025
@ebickle Thanks for the feedback!
I'd say that this is not just helpful, but required. My view is this:
A license allow list absolutely doesn't work without the ability to allow a package. DRA does support that with the
allow-dependencies-licensesoption.DRA is only checking changes to dependencies, so it's not too big a barrier to take one of the 3 actions above if a package fails the test.
I do acknowledge that a deny list does give some risk reduction, but it is likely to give a false sense of security around license compliance.
dylanlan commentedon Jul 18, 2025
Hello!
I just wanted to voice my own opinion that I'm personally in favor of keeping a
deny-licenseslist. I've been trying to migrate a mid sized monorepo from using snyk.io for dependency scanning to using this dependency-review-action, including license scanning. The repo has over 3,000 transitive NPM packages with various licenses.It's just been using Snyk's default license policy, which would block PRs if a dependency with any of a handful of 6 copyleft licenses got added, which I was planning to configure in a deny list on this action.
If I had to configure it using
allow-licensesinstead, I'd try copying the entire list of allowed licenses from the Snyk policy, which is nearly 500, and seems much tougher to manage.This is what the CI job would look like with
deny-licenses:And this is what it'd look like with
allow-licensescopied from the Snyk configuration:It seems much easier to manage a smaller list of denied licenses, rather than trying to maintain a list of all allowed licenses.
But in either case, I seem to be running into a bug where the action is treating NPM package licenses as
Null, and not able to determine whether they should be allowed or blocked. It seems related to #923 and #939I hope the bug will get fixed soon, but I'm currently trying non-latest versions of the action in the meantime, to see if I have any better luck with them.
Cheers!
ahpook commentedon Aug 14, 2025
@dylanlan thanks for that feedback, it's super helpful. i completely agree that enumerating that allow list is pretty onerous. It's maybe not quite as bad as having them all as a comma-separated list inline, because you can use
with: config-fileto pull in a list of the identifiers from a separate file (docs).Q: Of the 3k dependencies in the monorepo you're checking, how many different licenses are there?
ahpook commentedon Aug 15, 2025
thinking out loud here: would you find it useful to have pre-made lists to include that follow the scancode licensedb categories, so you don't have to enumerate all the permissive licenses, you could just say
(syntax very much TBD, obviously)
ebickle commentedon Aug 16, 2025
@ahpook Interesting idea. I really like the idea of using categories. Sadly, it wouldn't work out of the box in our case.
Our partners and clients have extremely strict requirements around specific licenses - they supply them as a list to us and state "never use these, for any reason, at any time". In that situation, an allow list is never going to work as a sole solution - it violates our clients' contractual requirements. We're dealing with real world contracts, lawyers, and fun stuff like that. There's no flexibility and its non-negotiable for us.
I'm not sure whether its on our list, but I'll use the example of
agpl-3.0andgpl-3.0. Both havecopyleftas their scancode license categories. For web-hosted software, they are significantly different. There's a large list of compile-time tools that aregpl-1.0licensed that arenpm installed and act as part of apackage.jsonbut only get 'used', never act as part of a deployed application. That makes blocking all copyleft difficult for modern applications, given the lack of context. The situations where there is an obligation to open source an entire web application are the super scary ones for legal teams, but they're not well categorized today.recurly-bearley commentedon Aug 25, 2025
We use a deny-license list for a bulk list of licenses that will never be approved. Everything else is handled on a case by case basis. It saves us work. My company would be affected.
lucas-morel-shift commentedon Aug 26, 2025
I am also adding a feedback in favor of deny lists, at least until a better solution is implemented.
We started with the "allow list" because it is indeed what makes the most sense "good-practice" wise; however in reality other factors come at play.
We switched to "deny list" at first because even Microsoft packages do not always correctly set up their license type and we encounter unknown types of licenses starting with "LicenseRef" and joined licenses (eg. Apache-2.0 AND MIT AND BSD-2-Clause AND CC-BY-4.0 AND BSD-3-Clause) which need to be specified for every combination or the review fails.
It is very very cumbersome.
Furthermore, hen handling several ecosystems across several repositories it is very hard to incrementally grow the allow list. There is too many stakeholders and not enough bandwidth to track every blocking packages.
ahpook commentedon Aug 26, 2025
Fair point, thank you for the feedback @lucas-morel-shift! Note that this specific issue is fixed as of DRA 4.7.1. Now you can just list the licenses you want to permit, and it will correctly
ANDthem together for compound license expressions (or permit if any of anORexpression's licenses are listed). See #927 for details.PhilipAtCisco commentedon Aug 29, 2025
I'd also be in favor of keeping support for a deny-licenses with this GitHub action. There are a lot of OSS licenses, and many companies and organizations do not make the time and bandwidth to review them and maintain an explicit allow list. For this reason, I think it makes sense for the action to continue to support a deny list.
icco commentedon Sep 3, 2025
Scancode Categories would work for us. We have the same problem, the npm license world is so dumb and there are so many licenses, a deny list was the only way we were able to make sense of it all.
Shinrai commentedon Sep 4, 2025
Just my two cents on this… but an allow list is great when you only want specific licenses used. A deny list is great when you don’t want specific licenses used. Both have their pros and cons, removing one hinders the overall usefulness. But like any setting or feature in any program it’s up to the end user to use it and use it properly.
I came across this randomly searching and right off the bat saw the deny list setting and in my head said “yea that’s what I want to use”. Now is it perfect? No. But it’s better than looking through thousands of different licenses.
It’s my opinion both should remain. Just document them better. But they should also both support wildcards.
nicorikken commentedon Oct 7, 2025
In theory only a allow-list is better. In practice there are so many packages with missing or incorrect license information that you want to tackle the process from both sides. For my organizations we use all features (allow and deny licenses and allow and deny packages) to correct for missing and incorrect licenses information and to correct for incorrect handling of SPDX identifier by this Action. The path forward I see is to amend dependency information before running this Action. GitHub does not provide such a feature.
I think GitHub Advanced Security will even less appealing when the deny-licenses is removed because it pushes users to a compliance process outside of GitHub, removing the need for this Action.
fix(deps): resolve packaging conflict and remove safety
fix(deps): resolve packaging conflict and remove safety (#18)
ci: replace deprecated deny-licenses with allow-licenses
Update customizing-your-dependency-review-action-configuration.md
ci: replace deprecated deny-licenses with allow-licenses
AlexWilson-GIS commentedon Feb 14, 2026
I'm coming in with what is potentially the most complicated use case of them all so far. The legal team at my company uses a green light, yellow light, red light system.
🟢 = License is not a problem, no additional review needed
🟡 = Use needs to be reviewed and approved on a case-by-case basis
🔴 = Not approved, stay away
Does this list cover every license enumerated in something like the SPDX license catalogue? No, but it covers the most common ones. The obscure ones should ideally be reviewed as encountered and added to the list.
What would be nice for me is if the action had an allow list, a deny list, a warning list that could still pass the PR check, and a separate warning that the license is unreviewed, and should be added to some sort of list before proceeding. This last feature could be something like a "strict mode" that flags licenses not accounted for anywhere. Going with nothing but an allow list is going to cause an enormous amount of friction with developers when a quadruple-nested dependency with a yellow-light license, or one that is unreviewed, causes their PR checks to fail.
chore(ci): remove deprecated deny-licenses option from dependency-review
Ugba908
github-actions commentedon Aug 14, 2026
👋 This issue has been marked as stale because it has been open with no activity for 180 days. You can: comment on the issue or remove the stale label to hold stalebot off for a while, add the
Keeplabel to hold stale off permanently, or do nothing. If you do nothing, this issue will be closed eventually by the stalebot. Please see CONTRIBUTING.md for more policy details.fix(security): switch dependency-review to allow-licenses
chore(security): configure Dependabot and dependency review (#186)
github-actions commentedon Aug 30, 2026
👋 This issue has been closed by stalebot because it has been open with no activity for over 180 days. Please see CONTRIBUTING.md for more policy details.