Skip to content

Commit e8e536b

Browse files
hg-anssihg-anssi
authored andcommitted
Cargo.lock requirement
1 parent 62442b0 commit e8e536b

File tree

2 files changed

+77
-15
lines changed

2 files changed

+77
-15
lines changed

src/en/devenv.md

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,45 @@ It has a fundamental role in most Rust development:
103103
- It’s also a front-end to run complementary tools such as those that are
104104
described below, in the form of sub-commands.
105105

106-
> **Warning**
106+
Cargo enables automatic dependencies resolution before compilation
107+
by checking their checksums.
108+
File `Cargo.lock` contains all dependencies checksums which are compared to
109+
the one downloaded.
110+
If a difference is detected, compilation fails:
111+
112+
```
113+
error: checksum for `sha256 v1.6.0` changed between lock files
114+
115+
this could be indicative of a few possible errors:
116+
117+
* the lock file is corrupt
118+
* a replacement source in use (e.g., a mirror) returned a different checksum
119+
* the source itself may be corrupt in one way or another
120+
121+
unable to verify that `sha256 v1.6.0` is the same as when the lockfile was generated
122+
```
123+
124+
When the `Cargo.lock` file is missing, it is generated on first build and records the
125+
dependencies' checksums, adhering to a TOFU (*Trust On First Use*) policy.
126+
This file can also be created manually with `cargo generate-lockfile`. If it already exists,
127+
the file is overwritten with the latest available version of every crate.
128+
129+
> **Rule {{#check DENV-CARGO-LOCK | Track Cargo.lock in version control system}}**
107130
>
108-
> Like `rustup`, `cargo` does perform all downloads over HTTPS, but does not
109-
> validate the registry index. Ongoing discussions occur on how to best protect
110-
> and verify crates. For now, the security relies on the good security of the
111-
> website [crates.io] and the GitHub hosted repository containing the
112-
> registry index. In some cases, it may be preferable to opt for an alternative
113-
> installation method for dependencies.
131+
> `Cargo.lock` files must be tracked by version control system.
132+
133+
<div class="warning">
134+
135+
**Warning**
136+
137+
Ongoing discussions occur on how to best protect
138+
and verify crates *on their first download* (according TOFU rule).
139+
For now, the security of the first download relies on the good security of the
140+
website [crates.io] and the GitHub hosted repository containing the
141+
registry index. In some cases, it may be preferable to opt for an alternative
142+
installation method for dependencies.
143+
144+
</div>
114145

115146
Cargo proposes many different commands and options to adapt the build process to
116147
your project needs, mainly through the manifest file `Cargo.toml`. For a

src/fr/devenv.md

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,46 @@ permet notamment de :
114114
- lancer des outils complémentaires tels que ceux décrits ci-après, sous la
115115
forme de sous-commandes.
116116

117-
> **Attention**
117+
Cargo permet la récupération automatique des dépendances avant compilation.
118+
L'utilitaire permet de vérifier l'intégrité des dépendances après téléchargement.
119+
Il utilise pour cela un fichier `Cargo.lock` qui, s'il est présent au moment de la compilation,
120+
contraint les sommes de contrôle des dépendances. En cas de différence entre
121+
les sources téléchargées et le fichier `Cargo.lock`, un erreur apparaît.
122+
123+
```
124+
error: checksum for `sha256 v1.6.0` changed between lock files
125+
126+
this could be indicative of a few possible errors:
127+
128+
* the lock file is corrupt
129+
* a replacement source in use (e.g., a mirror) returned a different checksum
130+
* the source itself may be corrupt in one way or another
131+
132+
unable to verify that `sha256 v1.6.0` is the same as when the lockfile was generated
133+
```
134+
135+
En cas d'absence du fichier `Cargo.lock`, il est créé automatiquement à la première compilation en suivant les
136+
sommes de contrôle des sources téléchargées (selon le principe TOFU : *Trust On First Use*).
137+
Ce fichier peut également être créé manuellement avec `cargo generate-lockfile`, et s'il
138+
est déjà présent, un nouveau fichier est créé avec les dernières versions compatibles de chaque crate.
139+
140+
> **Règle {{#check DENV-CARGO-LOCK | Mise en dépôt du fichier Cargo.lock}}**
118141
>
119-
> Tout comme `rustup`, `cargo` effectue tous les téléchargements en HTTPS, mais
120-
> ne valide pas l'index du registre. Des discussions sont en cours pour
121-
> déterminer le meilleur moyen de protéger et de valider les *crates*. Pour le
122-
> moment, la sécurité de `cargo` repose sur la bonne sécurité du site web
123-
> [crates.io] ainsi que celle du dépôt, hébergé sur GitHub, contenant l'index du
124-
> registre de *crates*. Pour les cas les plus sensibles, il peut être préférable
125-
> d'opter pour une méthode d'installation alternative pour les dépendances.
142+
> Le fichier `Cargo.lock` doit être versionné avec le code source du programme Rust.
143+
144+
<div class="warning">
145+
146+
**Attention**
147+
148+
Des discussions sont en cours pour
149+
déterminer le meilleur moyen de protéger et de valider les *crates* lors de leur ajout au projet
150+
(les téléchargements suivants sont vérifié par le fichier `Cargo.lock`). Pour le
151+
moment, la sécurité des premiers téléchargements de `cargo` repose sur la bonne sécurité du site web
152+
[crates.io] ainsi que celle du dépôt, hébergé sur GitHub, contenant l'index du
153+
registre de *crates*. Pour les cas les plus sensibles, il peut être préférable
154+
d'opter pour une méthode d'installation alternative pour les dépendances.
155+
156+
</div>
126157

127158
Cargo propose différentes commandes et options pour adapter le processus de
128159
compilation aux besoins de chaque projet, principalement au travers du fichier

0 commit comments

Comments
 (0)