|
2 | 2 | title: Immutable releases |
3 | 3 | intro: 'Learn about immutable releases and how they can help you maintain the integrity of your software supply chain.' |
4 | 4 | versions: |
5 | | - feature: immutable-releases-preview |
| 5 | + fpt: '*' |
| 6 | + ghec: '*' |
6 | 7 | type: overview |
7 | 8 | topics: |
8 | 9 | - Code Security |
9 | 10 | - Vulnerabilities |
10 | 11 | - Dependencies |
11 | 12 | --- |
12 | 13 |
|
13 | | -{% data reusables.releases.immutable-releases-preview-note %} |
| 14 | +**Immutable releases** are releases where the assets and associated Git tag cannot be changed after publication. The use of this type of release increases security by blocking supply chain attacks. Attackers cannot: |
| 15 | +* Inject vulnerabilities or malware into current project releases. |
| 16 | +* Make changes to assets and tags that may break developer workflows. |
14 | 17 |
|
15 | | -**Immutable releases** are releases where the assets and associated Git tag cannot be changed after publication. They increase security by blocking: |
16 | | -* Supply chain attacks where attackers inject vulnerabilities or malware into current project releases |
17 | | -* Accidental changes to assets and tags that may break developer workflows |
| 18 | +## What immutable releases protect |
| 19 | + |
| 20 | +When you enable immutable releases, the following protections are enforced: |
| 21 | + |
| 22 | +* **Git tags cannot be moved or deleted**: Once an immutable release is published, its associated Git tag is locked to a specific commit and cannot be changed or removed. |
| 23 | +* **Release assets cannot be modified or deleted**: All files attached to the release (such as binaries and archives) are protected from modification or deletion. |
18 | 24 |
|
19 | 25 | Additionally, creating an immutable release automatically generates a **release attestation**, which is a cryptographically verifiable record of a release containing the release tag, commit SHA, and release assets. Consumers can use this attestation to make sure the releases and artifacts they are using exactly match the published {% data variables.product.github %} releases. |
20 | 26 |
|
| 27 | +> [!NOTE] |
| 28 | +> Immutable releases include protection against repository resurrection attacks. Even if you delete a repository and create a new one with the same name, you cannot reuse tags that were associated with immutable releases in the original repository. |
| 29 | +
|
21 | 30 | If a release is immutable, you will see "{% octicon "lock" aria-hidden="true" %} Immutable" below the title on the release page. |
22 | 31 |
|
| 32 | +## Best practices for publishing immutable releases |
| 33 | + |
| 34 | +We recommend you use the following workflow for publishing an immutable release. |
| 35 | + |
| 36 | +1. Create the release as a draft. |
| 37 | +1. Attach all associated assets to the draft release. |
| 38 | +1. Publish the draft release. |
| 39 | + |
| 40 | +This ensures that all assets are in place before the release becomes immutable, preventing the need to work around immutability restrictions. |
| 41 | + |
23 | 42 | ## Next steps |
24 | 43 |
|
25 | 44 | To learn how to enable immutable releases for your repository or organization, see [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/preventing-changes-to-your-releases). |
|
0 commit comments