
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:
package.jsoncompile, build, test, packageSiehe API-Referenz für API-Details.
Darüber hinaus werden mehrere projen-Komponenten und Projekttypen mit Beispielen in /docs erläutert (derzeit in Arbeit!).
projen verfolgt einen „Batterien inklusive“-Ansatz und zielt darauf ab, Dutzende verschiedener Projekttypen
out of the box anzubieten (wir fangen gerade erst an). Denke an projen new react, projen new angular, projen new java-maven,
projen new awscdk-typescript, projen new cdk8s-python (nichts in projen ist an JavaScript oder npm gebunden)...
Das Hinzufügen neuer Projekttypen ist so einfach wie das Einreichen eines Pull Requests an dieses Repository und das Exportieren einer Klasse, die
projen.Project (oder eine seiner Ableitungen) erweitert. Projen entdeckt Projekttypen automatisch, sodass dein
Typ sofort in projen new verfügbar ist.
projen wird mit vielen Projekttypen out of the box gebündelt, kann aber auch mit Projekttypen und Komponenten arbeiten, die in externen jsii-Modulen definiert sind (der Grund, warum wir jsii benötigen, ist, dass projen die jsii-Metadaten verwendet, um Projekttypen & Optionen in projen new zu entdecken).
Angenommen, wir haben ein Modul in npm namens projen-vuejs, das einen einzelnen Projekttyp
für vue.js enthält:```bash
$ npx projen new --from projen-vuejs
Wenn das referenzierte Modul mehrere Projekttypen umfasst, ist der Typ erforderlich.
Switches können auch verwendet werden, um Anfangswerte basierend auf den APIs des Projekttyps
festzulegen. Sie können auch jede von [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies) unterstützte Paketsyntax verwenden, wie
`[email protected]`, `file:/path/to/local/folder`,
`[email protected]/awesome/projen-vuejs#1.2.3`, usw.```bash
$ npx projen new --from projen-vuejs@^2 vuejs-ts --description "my awesome vue project"
Unter der Haube installiert projen new das Modul projen-vuejs aus npm
(Version 2.0.0 und höher), entdeckt die Projekttypen darin und bootstrapt den
Projekttyp vuejs-ts. Es weist dem Feld description den Wert "my awesome vue project"
zu. Wenn du deine .projenrc.js-Datei untersuchst, wirst du sehen,
dass projen-vuejs als Dev-Abhängigkeit definiert ist:```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
Siehe [Vision](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Beiträge
Beiträge aller Art sind willkommen! Schauen Sie sich unseren [Leitfaden für
Mitwirkende](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) und unseren [Verhaltenskodex](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md) an.
Für einen schnellen Einstieg sehen Sie sich eine Entwicklungsumgebung an:```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Dank geht an diese wunderbaren Menschen (Emoji-Schlüssel):
Verteilt unter der Apache-2.0-Lizenz.

![]() 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 💻 |