Skip to content

Commit f5f22e4

Browse files
ahpookmchammer01
andauthored
Dependency graph and supply chain security updates for March 2025 (#54954)
Co-authored-by: mc <[email protected]>
1 parent b99d0cf commit f5f22e4

8 files changed

+68
-61
lines changed

Diff for: content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-supply-chain-security.md

+8-7
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ The supply chain features on {% data variables.product.github %} are:
3939
* **{% data variables.product.prodname_dependabot_security_updates %}**
4040
* **{% data variables.product.prodname_dependabot_version_updates %}**
4141

42-
The dependency graph is central to supply chain security. The dependency graph identifies all upstream dependencies and public downstream dependents of a repository or package. You can see your repository’s dependencies and some of their properties, like vulnerability information, on the dependency graph for the repository.
42+
The dependency graph is central to supply chain security. The dependency graph identifies all upstream dependencies and public downstream dependents of a repository or package. Your repository’s dependency graph tracks and displays its dependencies and some of their properties, like vulnerability information.
4343

4444
Other supply chain features on {% data variables.product.prodname_dotcom %} rely on the information provided by the dependency graph.
4545

@@ -53,20 +53,21 @@ For best practice guides on end-to-end supply chain security including the prote
5353

5454
## Feature overview
5555

56-
### What is the dependency graph
56+
### What is the dependency graph?
5757

5858
To generate the dependency graph, {% data variables.product.company_short %} looks at a repository’s explicit dependencies declared in the manifest and lockfiles. When enabled, the dependency graph automatically parses all known package manifest files in the repository, and uses this to construct a graph with known dependency names and versions.
5959

6060
* The dependency graph includes information on your _direct_ dependencies and _transitive_ dependencies.
6161
* The dependency graph is automatically updated when you push a commit to {% data variables.product.company_short %} that changes or adds a supported manifest or lock file to the default branch, and when anyone pushes a change to the repository of one of your dependencies.
62+
* The dependency graph can also include information you provide as your project is building using {% data variables.product.prodname_actions %}. Some package ecosystems pull in most of their transitive dependencies at build time, so submitting dependency information as the build is happening provides a more complete view of the supply chain.
6263
* You can see the dependency graph by opening the repository's main page on {% data variables.product.github %}, and navigating to the **Insights** tab.
6364
* {% data reusables.dependency-graph.sbom-export %}
6465

6566
{% data reusables.dependency-submission.dependency-submission-link %}
6667

6768
For more information about the dependency graph, see [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph).
6869

69-
### What is dependency review
70+
### What is dependency review?
7071

7172
Dependency review helps reviewers and contributors understand dependency changes and their security impact in every pull request.
7273

@@ -75,9 +76,9 @@ Dependency review helps reviewers and contributors understand dependency changes
7576

7677
For more information about dependency review, see [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review).
7778

78-
### What is Dependabot
79+
### What is Dependabot?
7980

80-
{% data variables.product.prodname_dependabot %} keeps your dependencies up to date by informing you of any security vulnerabilities in your dependencies, and automatically opens pull requests to upgrade your dependencies to the next available secure version when a {% data variables.product.prodname_dependabot %} alert is triggered, or to the latest version when a release is published.
81+
{% data variables.product.prodname_dependabot %} keeps your dependencies up to date by informing you of any security vulnerabilities in your dependencies and automatically opening pull requests to upgrade your dependencies. {% data variables.product.prodname_dependabot %} pull requests will target the next available secure version when a {% data variables.product.prodname_dependabot %} alert is triggered, or to the latest version when a release is published.
8182

8283
The term "{% data variables.product.prodname_dependabot %}" encompasses the following features:
8384
* {% data variables.product.prodname_dependabot_alerts %}: Displayed notification on the **Security** tab for the repository, and in the repository's dependency graph. The alert includes a link to the affected file in the project, and information about a fixed version.
@@ -103,7 +104,7 @@ For more information, see [AUTOTITLE](/code-security/dependabot/working-with-dep
103104

104105
{% data reusables.dependabot.dependabot-actions-support %} For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates).
105106

106-
#### What are Dependabot alerts
107+
#### What are Dependabot alerts?
107108

108109
{% data variables.product.prodname_dependabot_alerts %} highlight repositories affected by a newly discovered vulnerability based on the dependency graph and the {% data variables.product.prodname_advisory_database %}, which contains advisories for known vulnerabilities.
109110

@@ -116,7 +117,7 @@ For more information, see [AUTOTITLE](/code-security/dependabot/working-with-dep
116117

117118
For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-alerts/about-dependabot-alerts).
118119

119-
#### What are Dependabot updates
120+
#### What are Dependabot updates?
120121

121122
There are two types of {% data variables.product.prodname_dependabot_updates %}: {% data variables.product.prodname_dependabot %} _security_ updates and _version_ updates. {% data variables.product.prodname_dependabot %} generates automatic pull requests to update your dependencies in both cases, but there are several differences.
122123

Diff for: content/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ topics:
1919
> [!NOTE]
2020
> Automatic dependency submission is currently only supported for Maven.
2121
22-
Dependency graph analyzes the manifest and lock files in a repository, in order to help users understand the dependencies that the repository depends on. However, in some ecosystems, the resolution of transitive dependencies occurs at build-time and {% data variables.product.company_short %} isn't able to automatically discover all dependencies based on the contents of the repository alone.
22+
Dependency graph analyzes the manifest and lock files in a repository, in order to help users understand the upstream packages that their software project depends on. However, in some ecosystems, the resolution of transitive dependencies occurs at build-time and {% data variables.product.company_short %} isn't able to automatically discover all dependencies based on the contents of the repository alone.
2323

24-
When you enable automatic dependency submission for a repository, {% data variables.product.company_short %} automatically identifies the transitive dependencies in the repository and will submit these dependencies to {% data variables.product.company_short %} using the {% data variables.dependency-submission-api.name %}. You can then report on these dependencies using the dependency graph.
24+
When you enable automatic dependency submission for a repository, {% data variables.product.company_short %} automatically identifies the transitive dependencies in the repository and will submit these dependencies to {% data variables.product.company_short %} using the {% data variables.dependency-submission-api.name %}. You can then explore these dependencies using the dependency graph. {% data variables.product.prodname_dependabot %} will notify you about security updates for these dependencies by generating {% data variables.product.prodname_dependabot_alerts %} .
2525

2626
Using automatic dependency submission counts toward your {% data variables.product.prodname_actions %} minutes. For more information, see [AUTOTITLE](/billing/managing-billing-for-github-actions/about-billing-for-github-actions).
2727

@@ -83,6 +83,8 @@ Automatic dependency submission is currently only supported for Maven. The featu
8383

8484
Automatic dependency submission makes a best effort to cache package downloads between runs using the [Cache](https://github.com/marketplace/actions/cache) action to speed up workflows. For self-hosted runners, you may want to manage this cache within your own infrastructure. To do this, you can disable the built-in caching by setting an environment variable of `GH_DEPENDENCY_SUBMISSION_SKIP_CACHE` to `true`. For more information, see [AUTOTITLE](/actions/learn-github-actions/variables).
8585

86+
If your repository's dependencies seem inaccurate, check that the timestamp of the last dependency graph build matches the last change to your `pom.xml` file. The timestamp is visible on the table of alerts in the repository's {% data variables.product.prodname_dependabot_alerts %} tab. Pushing a commit which updates `pom.xml` will trigger a new run of the Dependency Tree Submission action and force a rebuild of that repository's dependency graph.
87+
8688
## Further reading
8789

8890
* [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-supply-chain-security)

Diff for: content/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository.md

+4-14
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ The dependency graph shows the dependencies{% ifversion fpt or ghec %} and depen
2929
{% data reusables.repositories.navigate-to-repo %}
3030
{% data reusables.repositories.accessing-repository-graphs %}
3131
{% data reusables.repositories.click-dependency-graph %}
32-
1. Optionally, use the search bar to find a specific dependency or set of dependencies.
33-
34-
>[!NOTE] The search bar only searches based on the package name.
32+
1. Optionally, use the search bar to find a specific dependency or set of dependencies. You can use the keywords `ecosystem:` to show only packages of a certain type, or `relationship:` to show only direct or transitive dependencies (if the ecosystem supports transitivity). Plain words in search bar will only match package names.
3533

3634
{% ifversion fpt or ghec %}
3735

@@ -50,14 +48,14 @@ Enterprise owners can configure the dependency graph at an enterprise level. For
5048
### Dependencies view
5149

5250
{% ifversion fpt or ghec %}
53-
For each dependency, you can see its ecosystem, the manifest file in which it was found, and the license (where detected).
51+
For each dependency, you can see its ecosystem, the manifest file in which it was found, and its license (where detected).
5452

5553
* Dependencies for private repositories, private packages, or unrecognized files are shown in plain text.
5654
* If the package manager for the dependency is in a public repository, you can hover on the dependency name to display a pop-up with the associated repository information.
5755
* You can sort and filter dependencies by typing filters as `key:value` pairs into the search bar.
5856

5957
* Use `ecosystem: <ecosystem-name>` to display dependencies for the selected ecosystem.{% ifversion transitive-dependency-labeling-npm %}
60-
* **For npm only.** Use `relationship:` to filter the list by relationship status. Possible values are `direct`, `transitive`, and `inconclusive`. Alternatively, you can click the relationship label adjacent to a dependency name to only show dependencies of the same relationship status.{% endif %}
58+
* Use `relationship:` to filter the list by relationship status. Possible values are `direct`, `transitive`, and `inconclusive`. Alternatively, you can click the relationship label adjacent to a dependency name to only show dependencies of the same relationship status. This filter is only available for ecosystems with transitive dependency support. See [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/dependency-graph-supported-package-ecosystems) for more information.{% endif %}
6159

6260
{% endif %}
6361

@@ -109,17 +107,9 @@ The "Used by" section represents a single package from the repository. If you ha
109107

110108
{% endif %}
111109

112-
## Troubleshooting the dependency graph
113-
114-
If your dependency graph is empty, there may be a problem with the file containing your dependencies. Check the file to ensure that it's correctly formatted for the file type.
115-
116-
{% ifversion fpt or ghec %}
117-
If the file is correctly formatted, then check its size. The dependency graph ignores individual manifest and lock files that are over 1.5 Mb, unless you are a {% data variables.product.prodname_enterprise %} user. It processes up to 150 manifest or lock files per repository by default, so you can split dependencies into smaller files in subdirectories of the repository.{% endif %}
118-
119-
If a manifest or lock file is not processed, its dependencies are omitted from the dependency graph and they can't be checked for insecure dependencies.
120-
121110
## Further reading
122111

112+
* [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph)
123113
* [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph)
124114
* [AUTOTITLE](/code-security/dependabot/dependabot-alerts/viewing-and-updating-dependabot-alerts){% ifversion ghec %}
125115
* [AUTOTITLE](/organizations/collaborating-with-groups-in-organizations/viewing-insights-for-dependencies-in-your-organization){% endif %}{% ifversion fpt or ghec %}

Diff for: content/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph.md

+28-16
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,40 @@ However, you can use the {% data variables.dependency-submission-api.name %} to
4040

4141
## Are there limits which affect the dependency graph data?
4242

43-
Yes, the dependency graph has one category of limits:
43+
Yes, the dependency graph has limits on the size, number, and location of manifest files that it will process.
4444

45-
1. **Processing limits**
45+
The processing limits affect the dependency graph displayed within {% data variables.product.prodname_dotcom %} and also prevent {% data variables.product.prodname_dependabot_alerts %} being created.
4646

47-
These affect the dependency graph displayed within {% data variables.product.prodname_dotcom %} and also prevent {% data variables.product.prodname_dependabot_alerts %} being created.
47+
Manifests over 10 MB in size are ignored and will not generate {% data variables.product.prodname_dependabot_alerts %}.
4848

49-
Manifests over 0.5 MB in size are only processed for enterprise accounts. For other accounts, manifests over 0.5 MB are ignored and will not create {% data variables.product.prodname_dependabot_alerts %}.
49+
By default, {% data variables.product.github %} will not process more than {% ifversion fpt or ghec %}150{% else %}600{% endif %} manifests per repository. {% data variables.product.prodname_dependabot %} doesn't generate {% data variables.product.prodname_dependabot_alerts %} for manifests beyond this limit, and {% data variables.product.prodname_dependabot_alerts %} may behave unpredictably if this limit is exceeded.
5050

51-
By default, {% data variables.product.prodname_dotcom %} will not process more than {% ifversion fpt or ghec %}150{% else %}600{% endif %} manifests per repository. {% data variables.product.prodname_dependabot_alerts %} are not created for manifests beyond this limit, and {% data variables.product.prodname_dependabot_alerts %} may behave unpredictably if this limit is exceeded.
51+
Manifest files stored in directories with names that are typically used for vendored dependencies will not be processed. A directory whose name matches the following regular expressions is considered a vendored dependencies directory:
52+
<!-- markdownlint-disable MD011 -->
53+
* <code>(3rd|[Tt]hird)[-_]?[Pp]arty/</code>
54+
* <code>(^|/)vendors?/</code>
55+
* <code>(^|/)[Ee]xtern(als?)?/</code>
56+
* <code>(^|/)[Vv]+endor/</code>
57+
<!-- markdownlint-enable MD011 -->
5258

53-
Manifest files stored in directories with names that are typically used for vendored dependencies will not be processed. A directory whose name matches the following regular expressions is considered a vendored dependencies directory:
54-
<!-- markdownlint-disable MD011 -->
55-
* <code>(3rd|[Tt]hird)[-_]?[Pp]arty/</code>
56-
* <code>(^|/)vendors?/</code>
57-
* <code>(^|/)[Ee]xtern(als?)?/</code>
58-
* <code>(^|/)[Vv]+endor/</code>
59-
<!-- markdownlint-enable MD011 -->
59+
Examples:
60+
* third-party/dependencies/dependency1
61+
* vendors/dependency1
62+
* /externals/vendor1/dependency1
6063

61-
Examples:
62-
* third-party/dependencies/dependency1
63-
* vendors/dependency1
64-
* /externals/vendor1/dependency1
64+
## My dependencies don't look right, what can I do?
65+
66+
If the table of dependencies for your project doesn't accurately represent your repository's manifests, you can trigger a rebuild of its dependency graph.
67+
68+
From the repository's {% data variables.product.prodname_dependabot_alerts %} tab, click {% octicon "gear" aria-label="settings" %} at the top of the alert list. Select **Refresh {% data variables.product.prodname_dependabot_alerts %}** from the dropdown menu. This will enqueue a background task to process the repository's manifests, detect any new or changed dependencies, and update the alerts.
69+
70+
>[!NOTE] You need to have permission to manage security alerts in order to refresh a repository's dependency graph. See [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts) for information on configuring this access. To further reduce the potential for abuse, the **Refresh {% data variables.product.prodname_dependabot_alerts %}** option can only be triggered once an hour per repository.
71+
72+
Clicking **Refresh {% data variables.product.prodname_dependabot_alerts %}** will only scan manifest files. If your dependency graph also includes build-time dependency information submitted using the {% data variables.dependency-submission-api.name %}, rerunning the Action or external process which generates and submits the dependency information will also trigger a rebuild of the repository's dependency graph. For more information about the {% data variables.dependency-submission-api.name %}, see [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api).
73+
74+
If you are using automatic dependency submission for Maven, pushing a commit that updates the repository's `pom.xml` will trigger the automatic submission action to run.
75+
76+
In all cases, the timestamp at the top of the list of alerts indicates the last time the dependency graph was built.
6577

6678
## Further reading
6779

Diff for: data/reusables/dependabot/dependabot-alerts-filters.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ You can sort and filter {% data variables.product.prodname_dependabot_alerts %}
1010
| `manifest` | Displays alerts for the selected manifest | Use `manifest:webwolf/pom.xml` to show alerts on the pom.xml file of the webwolf application |
1111
| `package` | Displays alerts for the selected package | Use `package:django` to show alerts for django |
1212
| {% ifversion transitive-dependency-labeling-npm %} |
13-
| `relationship` | Displays alerts of the selected relationship status<br>Note that this filter is only available for npm. | Use `relationship:direct` to show alerts for direct dependencies (marked with the `Direct` label). |
13+
| `relationship` | Displays alerts of the selected relationship status<br>Note that this filter is only available for ecosystems with transitive support. | Use `relationship:direct` to show alerts for direct dependencies (marked with the `Direct` label). |
1414
| {% endif %} |
1515
| `resolution` | Displays alerts of the selected resolution status | Use `resolution:no-bandwidth` to show alerts previously parked due to lack of resources or time to fix them |
1616
| `repo` | Displays alerts based on the repository they relate to</br>Note that this filter is only available for security overview. For more information, see [AUTOTITLE](/code-security/security-overview/about-security-overview) | Use `repo:octocat-repo` to show alerts in the repository called `octocat-repo` |

0 commit comments

Comments
 (0)