
Autorisiertes Sicherheitsforschungslabor, das CVE-2021-21423 (GHSA-gg2g-m5wc-vccq) reproduziert: projen rebuild-bot pwn request über issue_comment
Automatisiertes Forschungsobjekt – nicht das Upstream-Projekt.
Dieses Repository ist ein Wegwerf-Labor, das von einer automatisierten Testumgebung für eine Masterarbeit an der Université Laval zur Reproduktion veröffentlichter GitHub-Actions- Workflow-Schwachstellen erstellt wurde. Es ist eine wörtliche Momentaufnahme von
projen/projenbeim Commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), weiterverbreitet unter der eigenen Lizenz dieses Projekts, deren Datei unverändert in dieser Momentaufnahme enthalten ist.Das Upstream-Projekt ist nicht beteiligt, wird niemals angegriffen, und die hier untersuchte Schwachstelle ist bereits öffentlich bekannt. Jedes Secret und jede Variable in diesem Repository ist ein zufällig generierter Dummy-Wert – es sind keine echten Anmeldedaten vorhanden. Aktionsreferenzen und Runner-Images sind auf das fixiert, was sie am 2021-03-09 aufgelöst haben; siehe
pinning.mdin der Testumgebungs-Ausgabe für jede an der Momentaufnahme vorgenommene Änderung.Fragen oder Einwände: [email protected]
Definieren und pflegen Sie komplexe Projektkonfigurationen über Code.
SCHLIESSEN SIE SICH DER #TemplatesAreEvil-BEWEGUNG AN!
projen synthetisiert Projektkonfigurationsdateien wie package.json,
tsconfig.json, .gitignore, GitHub-Workflows, eslint, jest usw. aus einer
gut typisierten Definition, die in JavaScript geschrieben ist.
Sehen Sie sich diesen Vortrag über projen an.
Im Gegensatz zu bestehenden Templating-/Scaffolding-Werkzeugen ist projen kein einmaliger
Generator. Synthetisierte Dateien sollten niemals manuell bearbeitet werden (projen
erzwingt dies sogar). Um Ihr Projektsetup zu ändern, interagieren Benutzer mit reichhaltigen,
stark typisierten Klassen und führen projen aus, um ihre Projektkonfigurationsdateien zu aktualisieren.
Um ein neues Projekt zu erstellen, führen Sie den folgenden Befehl aus und folgen Sie den Anweisungen:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Currently supported project types (use `npx projen new` without a type for a
list):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - AWS CDK app in TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - AWS CDK construct library project.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - CDK8s construct library project.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Java project.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Multi-language jsii library project.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Next.js project without TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Next.js project with TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Node.js project.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Base project.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Python project.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - React project without TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - React project with TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - TypeScript project.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - TypeScript app.
<!-- </macro> -->
> Use `npx projen new PROJECT-TYPE --help` to view a list of command line
> switches that allows you to specify most project options during bootstrapping.
> For example: `npx projen new jsii --author-name "Jerry Berry"`.
The `new` command will create a `.projenrc.js` file which looks like this for
`jsii` projects:```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();
Dieses Programm instanziiert den Projekttyp mit minimaler Einrichtung und ruft dann
synth() auf, um die Projektdateien zu synthetisieren. Standardmäßig führt der Befehl new
ebenfalls dieses Programm aus, was zu einem vollständig funktionsfähigen Projekt führt.
Sobald Ihr Projekt erstellt ist, können Sie es konfigurieren, indem Sie
.projenrc.js bearbeiten und npx projen erneut ausführen, um es erneut zu synthetisieren.
Die von projen generierten Dateien gelten als "Implementierungsdetail", und projen schützt sie vor manueller Bearbeitung (die meisten Dateien sind als schreibgeschützt markiert, und im CI-Build-Workflow ist eine "Anti-Manipulations"-Prüfung konfiguriert, um sicherzustellen, dass Dateien während des Builds nicht aktualisiert werden).
Um beispielsweise die PyPI-Veröffentlichung in jsii-Projekten einzurichten, können Sie die
python option verwenden:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Run:```shell
npx projen
Und du wirst feststellen, dass deine package.json-Datei jetzt einen python-Abschnitt in
ihrer jsii-Konfiguration enthält und der GitHub-release.yml-Workflow einen PyPI-
Veröffentlichungsschritt enthält.
Wir empfehlen, dies in dein Shell-Profil aufzunehmen, damit du einfach pj ausführen kannst, wann immer
du .projenrc.js aktualisierst:```bash
alias pj='npx projen'
Die meisten Projekte unterstützen einen `start`-Befehl, der ein Menü mit Workflow-Aktivitäten anzeigt:```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
...
Der Befehl build ist derselbe Befehl, der in deinen CI-Builds ausgeführt wird. Er
kompiliert, lintet, testet und verpackt dein Modul typischerweise für die Verteilung.
Einige Beispiele für Funktionen, die in Projekttypen integriert sind: