GitHub license compliance GA: test before blocking merges
GitHub’s 16 October release makes enterprise license policy a native merge-gate decision. The rollout needs an owner and a test repository.
Quick answer
GitHub announced open source license compliance as generally available on 16 October 2026 for eligible Enterprise Cloud repositories with Code Security. It adds enterprise license policy enforced through rulesets. Pilot dependency detection, policy ownership, exception handling and actual merge behavior before activating a broad gate. Evaluate mode still needs testing alongside existing branch protections.
On this page
GitHub’s open source license compliance feature became generally available on 16 October 2026 for GitHub Enterprise Cloud customers, including data-resident Enterprise Cloud, on repositories with Code Security enabled [1]. Treat adoption as a policy rollout: establish the permitted baseline and exception owner, then test the actual merge gate on a pilot repository before broad enforcement.
What changed with the general availability release?#
The release adds a central enterprise license policy enforced through repository-targeting rulesets. GitHub evaluates new or changed dependencies in pull requests and reports policy violations. The announcement also describes a predefined license-manager role, policy audit events and APIs for policy management and package checks [1]. This is an analysis of that dated release, checked on 18 October 2026; it is not a live status report.
The operational consequence is a new place where a dependency change can prevent a merge. A platform team may own the ruleset, while a separate policy owner decides which licenses are permitted and which exceptions are acceptable. Establish that division before enabling a blocking condition. If nobody can review the exception, the release still waits.
Eligibility matters. The documentation limits license compliance to Enterprise Cloud, including data-resident Enterprise Cloud, and requires a Code Security license for enforcement on a repository [2]. Do not infer Enterprise Server availability from the similar feature names or from an existing dependency-review workflow. Confirm the actual repository’s entitlement and dependency data before planning its rollout.
Is this the same gate as dependency-review-action?#
No. The dependency review action runs in a GitHub Actions workflow and can enforce checks there. Native license compliance adds enterprise policy and ruleset-based enforcement [5]. They may coexist, but their configuration, failure behavior and owners need to be recorded separately. A passing action run is not proof that an enterprise ruleset evaluated the intended policy.
| Question | Native license compliance | Dependency review action |
|---|---|---|
| Where is the policy applied? | Enterprise baseline, targeted through rulesets | Workflow inputs or a referenced action configuration |
| What activates merge blocking? | An applicable active license-compliance ruleset | The workflow check plus required-check configuration |
| What data needs scrutiny? | Detected direct and transitive dependency licenses | Dependency differences returned to the action |
| What must the rollout prove? | Effective policy, annotations, exceptions and merge outcome | Chosen action settings and its actual required-check behavior |
Do not copy the old workflow’s license settings and assume identical semantics. The action repository explicitly says an undetected license is reported without failing the action [4]. That is a concrete reason to test an unknown-license case instead of treating a green result as complete inventory coverage. This observation describes the action; it does not establish how every unknown case is handled by the new native feature.
GitHub’s native policy evaluation includes detected transitive dependencies [2]. “Detected” is the boundary to preserve. Build a pilot where you know which manifest and dependency relationship should be visible, then inspect the result. The gate can only evaluate the dependency information available to it; the rollout needs evidence that the relevant packages reached that stage.
A pilot repository needs a decision record#
Scenario: payments-api already has dependency review in its delivery workflow. The platform owner wants the new enterprise gate, but the team cannot assume that its current workflow and central policy describe the same permitted set. The following is our proposed editorial example of a rollout record. It is not a GitHub API payload, ruleset schema or tested tenant configuration.
# Illustrative team-owned record, not GitHub configuration.
repository: payments-api
rollout_stage: evaluate
policy_owner: open-source-policy-team
technical_owner: delivery-platform-team
baseline: approved-enterprise-policy-reference
exception_scope: repository-by-default
evidence_required:
- known_dependency_detected
- transitive_dependency_detected
- unapproved_license_annotated
- comment_resolution_interaction_observed
- approved_exception_scope_confirmed
- actual_merge_outcome_recorded
advance_to_active: falseThe baseline is a reference to a policy already approved by the organization’s responsible reviewers. This article does not select legally suitable licenses for that organization. The platform owner must confirm the configured baseline, show its scope and route exception requests to the agreed reviewer.
Start with a deliberately narrow repository target. GitHub’s setup guide describes a custom repository property that can identify inactive, evaluate and active rollout stages, together with rulesets targeting those values [3]. Use that property when it makes repository targeting easier to review. An explicit pilot repository list may be sufficient at first.
For payments-api, create an approved dependency change with a known expected result and a separate change expected to trigger the organization’s policy. Record the package identity, detected license expression, dependency relationship and exact policy reference. If the detected data disagrees with the fixture, stop the rollout and resolve the discrepancy rather than broadening exceptions to make the test pass.
Why can Evaluate mode still surprise a team?#
GitHub documents Evaluate mode as running license checks and annotating a pull request without the license ruleset itself blocking the merge. The same page adds a consequential qualification: a branch protection rule requiring comment resolution tracks those annotations, so Evaluate-generated alerts can still be subject to that protection [2]. Test the whole merge path, not only the enforcement status label.
In the payments-api pilot, preserve the existing protections and observe what happens when the noncompliant fixture produces an annotation. Does the pull request become mergeable, wait for comment resolution or fail another required check? Record which protection explains the outcome. Do not promise developers that evaluation is behaviorally invisible before that observation exists.
Rulesets layer with each other and with branch protection; their requirements aggregate rather than one rule automatically replacing the others [6]. An older workflow check, a repository rule and an organization rule may all affect the same pull request. The owner needs an inventory of applicable rules before interpreting a blocked merge as evidence that the new feature is working.
This interaction also changes the rollback question. If the pilot behaves unexpectedly, return the repository to its prior rollout targeting or enforcement state through the approved change process, then confirm the effective protections. Merely changing one status may leave another applicable requirement in place. Keep a copy of the previous configuration and a named technical owner in the decision record [3][6].
Who should approve an exception, and how broad should it be?#
GitHub routes policy exception requests to the enterprise license-manager role. Its setup guide describes package, license and package-pattern exceptions, with repository or enterprise scope [3]. These are materially different decisions. A narrow repository exception and an enterprise-wide permitted-license change should not be treated as interchangeable ways to clear an annotation.
Our recommendation for the pilot is to start with the smallest scope the approved decision needs, record the reason and review ownership, and verify which repositories the resulting exception affects. That recommendation is about operational containment. The policy owner must determine whether the underlying usage is acceptable; the delivery platform should not infer that answer from a release deadline.
Policy changes emit audit events, and the GA announcement adds policy-management and package-check API capabilities [1][3]. Keep the policy change evidence with the pilot record. Do not invent a REST request from those feature descriptions: read the specific endpoint’s permissions, request shape and response contract before automating it. A successful policy download alone would not prove that the merge gate evaluates the intended repository.
What evidence is enough to expand beyond the pilot?#
Require an observed outcome for a permitted dependency, a policy violation, a detected transitive dependency and an approved exception. Include a case with incomplete license information and a case exercising comment-resolution protection. The expected outcome for an unknown case must come from the organization’s policy and the feature’s observed behavior, not an assumption borrowed from the action.
- The repository is eligible and the expected dependency data is visible.
- The effective policy and its reviewers match the approved baseline.
- The pilot records actual annotation and merge outcomes under existing protections.
- Exception scope is verified, and the request path has an available owner.
- The prior rollout state can be restored and its effective behavior checked.
No GitHub enterprise tenant was configured or tested for this article. The record and pilot are proposed engineering methods grounded in the announcement and documentation. Availability, entitlement and UI wording should be checked again when a team performs its own rollout. This dated analysis does not claim a compliance result for any organization.
The new license gate addresses a different part of delivery governance from action provenance and token scope. Our GitHub Actions hardening guide covers those controls, while the cache investigation explains why a successful build shortcut is not the dependency contract itself. Keep those checks distinct when defining what a green delivery path proves.
Questions before activating the gate#
- Can any GitHub repository use this native feature?
- No. The GA announcement and documentation specify GitHub Enterprise Cloud, including data-resident Enterprise Cloud, and Code Security eligibility for the repository [1][2]. Verify the actual account and repository. An existing Actions workflow or dependency graph alone does not establish entitlement.
- Does Evaluate mode guarantee that merges cannot be affected?
- No. The license ruleset’s Evaluate mode annotates without itself blocking, but GitHub documents an interaction with branch protection requiring comment resolution [2]. Exercise the complete pull request path in the pilot and record which effective rule determines mergeability.
- Does a green dependency review action prove every license is known?
- No. The action repository says it reports undetected licenses without failing the action [4]. That behavior is a reason to include an incomplete-data fixture and inspect detection coverage. Do not assume the native enterprise gate handles every unknown case identically.
- Should an exception apply across the enterprise?
- Only if that is the scope the responsible policy owner intends. GitHub supports multiple exception types and repository or enterprise scope [3]. Our rollout recommendation is to use the narrowest approved scope and verify the effective policy before expanding it.