
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 :
package.jsoncompile, build, test, packageVoir Référence API pour les détails de l'API.
De plus, plusieurs composants projen et types de projets sont expliqués avec des exemples dans /docs (actuellement un travail en cours !).
projen adopte une approche "batteries incluses" et vise à proposer des dizaines de types de projets prêts à
l'emploi (nous ne faisons que commencer). Pensez à projen new react, projen new angular, projen new java-maven,
projen new awscdk-typescript, projen new cdk8s-python (rien dans projen n'est lié à javascript ou npm)...
L'ajout de nouveaux types de projets est aussi simple que de soumettre une pull request à ce dépôt et d'exporter une classe qui
étend projen.Project (ou l'un de ses dérivés). Projen découvre automatiquement les types de projets, donc votre
type sera immédiatement disponible dans projen new.
projen est fourni avec de nombreux types de projets prêts à l'emploi, mais il peut également fonctionner avec des types de projets et des composants définis dans des modules jsii externes (la raison pour laquelle nous avons besoin de jsii est que projen utilise les métadonnées jsii pour découvrir les types de projets et les options dans projen new).
Disons que nous avons un module dans npm appelé projen-vuejs qui inclut un seul type
de projet pour vue.js :```bash
$ npx projen new --from projen-vuejs
Si le module référencé inclut plusieurs types de projets, le type est requis.
Les commutateurs peuvent également être utilisés pour spécifier des valeurs initiales basées sur les API
du type de projet. Vous pouvez également utiliser toute syntaxe de paquet prise en charge par [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies) comme
`[email protected]`, `file:/path/to/local/folder`,
`[email protected]/awesome/projen-vuejs#1.2.3`, etc.```bash
$ npx projen new --from projen-vuejs@^2 vuejs-ts --description "my awesome vue project"
Sous le capot, projen new installera le module projen-vuejs depuis npm
(version 2.0.0 et supérieure), découvrira les types de projets qu'il contient et initialisera le
type de projet vuejs-ts. Il attribuera la valeur "my awesome vue project" au
champ description. Si vous examinez votre fichier .projenrc.js, vous verrez
que projen-vuejs est défini comme une dépendance de développement :```javascript
const { VueJsProject } = require('projen-vuejs');
const project = new VueJsProject({ name: 'my-vuejs-sample', description: "my awesome vue project", // ... devDeps: [ 'projen-vuejs' ] });
project.synth();
## Roadmap
Voir [Vision](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Contributions
Toutes les contributions sont les bienvenues ! Consultez notre [guide du
contributeur](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) et notre [code de conduite](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md).
Pour un démarrage rapide, consultez un environnement de développement :```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Merci à ces personnes formidables (clé emoji) :
Distribué sous la licence Apache-2.0.

![]() Josh Kellendonk 💻 |
![]() andrestone 💻 | ![]() Cristian Pallarés 💻 | ![]() Jonathan Goldwasser 💻 | ![]() Matthew Bonig 💻 | ![]() Pahud Hsieh 💻 | ![]() Adam Elmore 💻 | ![]() Ash 💻 |
![]() Jacob 💻 | ![]() Kraig Amador 💻 | ![]() Martin Muller 💻 | ![]() Tomasz Łakomy 💻 | ![]() john-tipper 💻 | ![]() Henry Sachs 💻 | ![]() Joseph Egan 💻 |
![]() Sebastian Korfmann 💻 | ![]() Bart Callant 💻 | ![]() Campion Fellin 💻 | ![]() Grady Barrett 💻 | ![]() Hassan Mahmud 💻 | ![]() Hassan Mahmud 💻 | ![]() Jake Pearson 💻 |
![]() Jeremy Jonas 💻 | ![]() Matt Martz 💻 | ![]() Max Körlinge 💻 | ![]() Neil Kuan 💻 | ![]() Rafal Wilinski 💻 | ![]() Romain Marcadier 💻 | ![]() Thomas Klinger 💻 |
![]() Tobias 💻 | ![]() flyingImer 💻 |