
Laboratorio de investigación de seguridad autorizado que reproduce CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): solicitud pwn del projen rebuild-bot a través de issue_comment
Artefacto de investigación automatizado — no es el proyecto original.
Este repositorio es un laboratorio desechable construido por un sistema automatizado para una tesis de maestría en la Université Laval sobre la reproducción de vulnerabilidades publicadas en flujos de trabajo de GitHub Actions. Es una instantánea verbatim de
projen/projenen el commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), redistribuida bajo la licencia de ese proyecto, cuyo archivo se incluye sin cambios en esta instantánea.El proyecto original no está involucrado, nunca es el objetivo, y la vulnerabilidad estudiada aquí ya es pública. Cada secreto y variable en este repositorio es un valor ficticio generado aleatoriamente — no hay ninguna credencial real presente. Las referencias a acciones e imágenes de ejecutores están fijadas a lo que resolvieron el 2021-03-09; consulta
pinning.mden la salida del sistema para cada cambio realizado en la instantánea.Preguntas u objeciones: [email protected]
Define y mantén configuraciones de proyectos complejas mediante código.
¡ÚNETE AL MOVIMIENTO #TemplatesAreEvil!
projen sintetiza archivos de configuración de proyectos como package.json,
tsconfig.json, .gitignore, flujos de trabajo de GitHub, eslint, jest, etc. a partir de una
definición bien tipada escrita en JavaScript.
Consulta esta charla sobre projen.
A diferencia de las herramientas existentes de plantillas/scaffolding, projen no es un
generador de una sola vez. Los archivos sintetizados nunca deben editarse manualmente (de hecho, projen
lo impone). Para modificar la configuración de tu proyecto, los usuarios interactúan con clases
ricas y fuertemente tipadas y ejecutan projen para actualizar sus archivos de configuración del proyecto.
Para crear un nuevo proyecto, ejecuta el siguiente comando y sigue las instrucciones:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Actualmente, los tipos de proyecto compatibles son (usa `npx projen new` sin un tipo para ver una lista):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - Aplicación AWS CDK en TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - Proyecto de biblioteca de constructos AWS CDK.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - Proyecto de biblioteca de constructos CDK8s.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Proyecto Java.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Proyecto de biblioteca jsii multilingüe.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Proyecto Next.js sin TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Proyecto Next.js con TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Proyecto Node.js.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Proyecto base.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Proyecto Python.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - Proyecto React sin TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - Proyecto React con TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - Proyecto TypeScript.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - Aplicación TypeScript.
<!-- </macro> -->
> Usa `npx projen new PROJECT-TYPE --help` para ver una lista de opciones de
> línea de comandos que te permiten especificar la mayoría de las opciones del proyecto durante el arranque.
> Por ejemplo: `npx projen new jsii --author-name "Jerry Berry"`.
El comando `new` creará un archivo `.projenrc.js` que se ve así para
proyectos `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();
Este programa instancia el tipo de proyecto con una configuración mínima y luego llama
a synth() para sintetizar los archivos del proyecto. De forma predeterminada, el comando new
también ejecutará este programa, lo que dará como resultado un proyecto completamente funcional.
Una vez que se crea tu proyecto, puedes configurarlo editando
.projenrc.js y volviendo a ejecutar npx projen para sintetizarlo nuevamente.
Los archivos generados por projen se consideran un "detalle de implementación" y projen los protege de ser editados manualmente (la mayoría de los archivos están marcados como de solo lectura, y se configura una verificación "anti manipulación" en el flujo de trabajo de compilación de CI para garantizar que los archivos no se actualicen durante la compilación).
Por ejemplo, para configurar la publicación en PyPI en proyectos jsii, puedes usar
opción python:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Ejecuta:```shell
npx projen
Y notarás que tu archivo package.json ahora contiene una sección python en su configuración jsii, y el flujo de trabajo release.yml de GitHub incluye un paso de publicación en PyPI.
Recomendamos poner esto en tu perfil de shell, para que puedas simplemente ejecutar pj cada vez que actualices .projenrc.js:```bash
alias pj='npx projen'
La mayoría de los proyectos admiten un comando `start` que muestra un menú de actividades del flujo de trabajo:```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
...
El comando build es el mismo comando que se ejecuta en tus builds de CI. Normalmente compila, ejecuta linters, ejecuta pruebas y empaqueta tu módulo para su distribución.
Algunos ejemplos de características integradas en los tipos de proyecto:
package.jsoncompile, build, test, packageConsulta la Referencia de API para obtener detalles de la API.
Además, varios componentes de projen y tipos de proyecto se explican con ejemplos en /docs (¡actualmente un trabajo en progreso!).
projen adopta un enfoque de "baterías incluidas" y tiene como objetivo ofrecer docenas de tipos de proyecto listos para usar (apenas estamos comenzando). Piensa en projen new react, projen new angular, projen new java-maven, projen new awscdk-typescript, projen new cdk8s-python (nada en projen está vinculado a javascript o npm)...
Agregar nuevos tipos de proyecto es tan simple como enviar un pull request a este repositorio y exportar una clase que extienda projen.Project (o uno de sus derivados). Projen descubre automáticamente los tipos de proyecto, por lo que tu tipo estará disponible de inmediato en projen new.
projen viene incluido con muchos tipos de proyecto listos para usar, pero también puede funcionar con tipos de proyecto y componentes definidos en módulos jsii externos (la razón por la que necesitamos jsii es porque projen usa los metadatos de jsii para descubrir tipos de proyecto y opciones en projen new).
Digamos que tenemos un módulo en npm llamado projen-vuejs que incluye un único tipo de proyecto para vue.js:```bash
$ npx projen new --from projen-vuejs
Si el módulo referenciado incluye múltiples tipos de proyecto, el tipo es obligatorio.
Los interruptores también se pueden usar para especificar valores iniciales según las
APIs del tipo de proyecto. También puedes usar cualquier sintaxis de paquete compatible con [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies), como
`[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"
Bajo el capó, projen new instalará el módulo projen-vuejs desde npm
(versión 2.0.0 y superior), descubrirá los tipos de proyecto que contiene e inicializará el
tipo de proyecto vuejs-ts. Asignará el valor "my awesome vue project" al
campo description. Si examinas tu archivo .projenrc.js, verás
que projen-vuejs está definido como una dependencia de desarrollo:```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
Consulta [Vision](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Contribuciones
¡Todo tipo de contribuciones son bienvenidas! Consulta nuestra [guía para
contribuidores](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) y nuestro [código de conducta](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md).
Para un inicio rápido, revisa un entorno de desarrollo:```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Gracias a estas maravillosas personas (clave de emoji):
Distribuido bajo la licencia 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 💻 |