
Laboratoire de recherche en sécurité autorisé reproduisant CVE-2021-21423 (GHSA-gg2g-m5wc-vccq) : requête pwn du rebuild-bot de projen via issue_comment
Artéfact de recherche automatisé — pas le projet en amont.
Ce dépôt est un laboratoire jetable construit par un harnais automatisé pour un mémoire de maîtrise à l'Université Laval sur la reproduction de vulnérabilités publiées dans les workflows GitHub Actions. Il s'agit d'un instantané verbatim de
projen/projenau commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), redistribué sous la licence propre de ce projet, dont le fichier est inclus inchangé dans cet instantané.Le projet en amont n'est pas impliqué, n'est jamais ciblé, et la vulnérabilité étudiée ici est déjà publique. Chaque secret et variable dans ce dépôt est une valeur factice générée aléatoirement — aucune information d'identification réelle n'est présente. Les références d'actions et les images d'exécuteurs sont épinglées à ce qu'elles résolvaient le 2021-03-09 ; voir
pinning.mddans la sortie du harnais pour chaque modification apportée à l'instantané.Questions ou objections : [email protected]
Définissez et maintenez une configuration de projet complexe via du code.
REJOIGNEZ LE MOUVEMENT #TemplatesAreEvil !
projen synthétise des fichiers de configuration de projet tels que package.json,
tsconfig.json, .gitignore, les workflows GitHub, eslint, jest, etc. à partir
d'une définition bien typée écrite en JavaScript.
Consultez cette présentation à propos de projen.
Contrairement aux outils de templating/scaffolding existants, projen n'est pas un
générateur ponctuel. Les fichiers synthétisés ne doivent jamais être modifiés
manuellement (en fait, projen l'impose). Pour modifier la configuration de votre
projet, les utilisateurs interagissent avec des classes riches et fortement typées
et exécutent projen pour mettre à jour leurs fichiers de configuration de projet.
Pour créer un nouveau projet, exécutez la commande suivante et suivez les instructions :```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Types de projets actuellement pris en charge (utilisez `npx projen new` sans type pour obtenir une
liste) :
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - Application AWS CDK en TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - Projet de bibliothèque de constructs AWS CDK.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - Projet de bibliothèque de constructs CDK8s.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Projet Java.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Projet de bibliothèque jsii multilingue.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Projet Next.js sans TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Projet Next.js avec TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Projet Node.js.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Projet de base.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Projet Python.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - Projet React sans TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - Projet React avec TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - Projet TypeScript.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - Application TypeScript.
<!-- </macro> -->
> Utilisez `npx projen new TYPE-DE-PROJET --help` pour afficher une liste des options de ligne de commande
> qui vous permettent de spécifier la plupart des options du projet lors du bootstrap.
> Par exemple : `npx projen new jsii --author-name "Jerry Berry"`.
La commande `new` créera un fichier `.projenrc.js` qui ressemble à ceci pour
les projets `jsii` :```js
const { JsiiProject } = require('projen');
const project = new JsiiProject({
authorAddress: "[email protected]",
authorName: "Elad Ben-Israel",
name: "foobar",
repository: "https://github.com/eladn/foobar.git",
});
project.synth();
Ce programme instancie le type de projet avec une configuration minimale, puis appelle
synth() pour synthétiser les fichiers du projet. Par défaut, la commande new
exécutera également ce programme, ce qui aboutira à un projet entièrement fonctionnel.
Une fois votre projet créé, vous pouvez le configurer en modifiant
.projenrc.js et en ré-exécutant npx projen pour synthétiser à nouveau.
Les fichiers générés par projen sont considérés comme un "détail d'implémentation" et projen les protège contre toute modification manuelle (la plupart des fichiers sont marqués en lecture seule, et une vérification "anti-altération" est configurée dans le workflow de build CI pour garantir que les fichiers ne sont pas mis à jour pendant le build).
Par exemple, pour configurer la publication PyPI dans les projets jsii, vous pouvez utiliser
l'option python :```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Lancer :
```bash
python3 setup.py install
``````shell
npx projen
Et vous remarquerez que votre fichier package.json contient désormais une section python dans
sa configuration jsii et que le workflow GitHub release.yml inclut une étape
de publication sur PyPI.
Nous recommandons de placer ceci dans votre profil shell, afin de pouvoir simplement exécuter pj à chaque
fois que vous mettez à jour .projenrc.js :```bash
alias pj='npx projen'
La plupart des projets prennent en charge une commande `start` qui affiche un menu des activités du workflow :```shell
$ yarn start
? Scripts: (Use arrow keys)
BUILD
❯ compile Only compile
watch Watch & compile in the background
build Full release build (test+compile)
TEST
test Run tests
test:watch Run jest in watch mode
eslint Runs eslint against the codebase
...
La commande build est la même commande qui est exécutée dans vos builds CI. Elle
compile, lint, teste et empaquette généralement votre module pour la distribution.
Quelques exemples de fonctionnalités intégrées aux types de projets :