
Laboratório autorizado de pesquisa em segurança reproduzindo CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): solicitação pwn do projen rebuild-bot via issue_comment
Artefacto de pesquisa automatizado — não é o projeto original.
Este repositório é um laboratório descartável criado por um harness automatizado para uma dissertação de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um snapshot verbatim de
projen/projenno commit284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), redistribuído sob a licença do próprio projeto, cujo ficheiro está incluído inalterado neste snapshot.O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade estudada aqui já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. Referências de ações e imagens de runners estão fixadas ao que resolviam em 2021-03-09; consulte
pinning.mdna saída do harness para todas as alterações feitas ao snapshot.Perguntas ou objeções: [email protected]
Defina e mantenha configurações complexas de projetos através de código.
JUNTE-SE AO MOVIMENTO #TemplatesAreEvil!
projen sintetiza ficheiros de configuração de projetos como package.json,
tsconfig.json, .gitignore, GitHub Workflows, eslint, jest, etc a partir de uma
definição bem tipada escrita em JavaScript.
Veja esta palestra sobre o projen.
Ao contrário das ferramentas existentes de templating/scaffolding, projen não é um gerador
de uso único. Os ficheiros sintetizados nunca devem ser editados manualmente (na verdade, o projen
impõe isso). Para modificar a configuração do seu projeto, os utilizadores interagem com classes
ricas e fortemente tipadas e executam projen para atualizar os seus ficheiros de configuração do projeto.
Para criar um novo projeto, execute o seguinte comando e siga as instruções:```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
Atualmente, os tipos de projeto suportados (use `npx projen new` sem um tipo para ver uma
lista):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - Aplicativo AWS CDK em TypeScript.
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - Projeto de biblioteca de construct AWS CDK.
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - Projeto de biblioteca de construct CDK8s.
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Projeto Java.
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - Projeto de biblioteca jsii multilíngue.
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - Projeto Next.js sem TypeScript.
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - Projeto Next.js com TypeScript.
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Projeto Node.js.
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - Projeto base.
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Projeto Python.
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - Projeto React sem TypeScript.
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - Projeto React com TypeScript.
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - Projeto TypeScript.
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - Aplicativo TypeScript.
<!-- </macro> -->
> Use `npx projen new PROJECT-TYPE --help` para ver uma lista de opções de linha de
> comando que permitem especificar a maioria das opções do projeto durante o bootstrapping.
> Por exemplo: `npx projen new jsii --author-name "Jerry Berry"`.
O comando `new` criará um arquivo `.projenrc.js` que se parece com isto para
projetos `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 o tipo de projeto com uma configuração mínima e, em seguida, chama
synth() para sintetizar os arquivos do projeto. Por padrão, o comando new também
executará este programa, o que resultará em um projeto totalmente funcional.
Depois que seu projeto for criado, você pode configurá-lo editando
.projenrc.js e executando novamente npx projen para sintetizar de novo.
Os arquivos gerados pelo projen são considerados um "detalhe de implementação" e o projen os protege contra edição manual (a maioria dos arquivos é marcada como somente leitura, e uma verificação "anti-adulteração" é configurada no fluxo de trabalho de build do CI para garantir que os arquivos não sejam atualizados durante o build).
Por exemplo, para configurar a publicação no PyPI em projetos jsii, você pode usar
opção python:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Executar:```shell
npx projen
E notará que o seu ficheiro package.json agora contém uma secção python na
configuração jsii e o workflow release.yml do GitHub inclui um passo de
publicação no PyPI.
Recomendamos que coloque isto no seu perfil de shell, para que possa simplesmente executar pj sempre
que atualizar o .projenrc.js:```bash
alias pj='npx projen'
Most projects support a `start` command which displays a menu of workflow
activities:```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
...
O comando build é o mesmo comando que é executado nos seus builds de CI. Ele
normalmente compila, faz lint, testa e empacota o seu módulo para distribuição.
Alguns exemplos de funcionalidades integradas aos tipos de projeto:
package.jsoncompile, build, test, packageConsulte a Referência da API para detalhes da API.
Além disso, vários componentes e tipos de projeto do projen são explicados com exemplos em /docs (atualmente um trabalho em andamento!).
projen adota uma abordagem "batteries included" e visa oferecer dezenas de tipos de projeto prontos para
uso (estamos apenas começando). Pense em projen new react, projen new angular, projen new java-maven,
projen new awscdk-typescript, projen new cdk8s-python (nada no projen está vinculado a javascript ou npm!)...
Adicionar novos tipos de projeto é tão simples quanto enviar um pull request para este repositório e exportar uma classe que
estende projen.Project (ou um de seus derivados). O Projen descobre automaticamente os tipos de projeto, então o seu
tipo estará imediatamente disponível em projen new.
projen vem com muitos tipos de projeto prontos para uso, mas também pode funcionar
com tipos de projeto e componentes definidos em módulos jsii externos (a razão pela qual
precisamos de jsii é porque o projen usa os metadados do jsii para descobrir tipos de projeto
e opções em projen new).
Digamos que temos um módulo no npm chamado projen-vuejs que inclui um único tipo
de projeto para vue.js:```bash
$ npx projen new --from projen-vuejs
Se o módulo referenciado incluir vários tipos de projeto, o tipo é obrigatório.
Os switches também podem ser usados para especificar valores iniciais com base nas
APIs do tipo de projeto. Você também pode usar qualquer sintaxe de pacote suportada pelo [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"
Por baixo dos panos, o projen new instalará o módulo projen-vuejs do npm
(versão 2.0.0 e superior), descobrirá os tipos de projeto nele e inicializará o
tipo de projeto vuejs-ts. Ele atribuirá o valor "my awesome vue project" ao
campo description. Se você examinar seu arquivo .projenrc.js, verá
que projen-vuejs está definido como uma dependência de desenvolvimento:```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
Consulte a [Visão](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Contribuições
Contribuições de todos os tipos são bem-vindas! Consulte o nosso [guia do
contribuidor](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) e o nosso [código de conduta](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md).
Para um início rápido, consulte um ambiente de desenvolvimento:```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Obrigado a estas pessoas maravilhosas (chave de emoji):
Distribuído sob a licença 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 💻 |