
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: