
Авторизованная исследовательская лаборатория безопасности, воспроизводящая CVE-2021-21423 (GHSA-gg2g-m5wc-vccq): pwn-запрос rebuild-bot в projen через issue_comment
Автоматизированный исследовательский артефакт — не вышестоящий проект.
Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это дословный снимок
projen/projenна коммите284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09), перераспределённый под собственной лицензией этого проекта, файл которой включён без изменений в этот снимок.Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которым они соответствовали на 2021-03-09; см.
pinning.mdв выводе системы для каждого изменения, внесённого в снимок.Вопросы или возражения: [email protected]
Определяйте и поддерживайте сложную конфигурацию проектов с помощью кода.
ПРИСОЕДИНЯЙТЕСЬ К ДВИЖЕНИЮ #TemplatesAreEvil!
projen синтезирует файлы конфигурации проекта, такие как package.json,
tsconfig.json, .gitignore, рабочие процессы GitHub, eslint, jest и т. д., из
хорошо типизированного определения, написанного на JavaScript.
Посмотрите этот доклад о projen.
В отличие от существующих инструментов шаблонизации/скаффолдинга, projen — это не разовый
генератор. Синтезированные файлы никогда не следует редактировать вручную (на самом деле projen
это обеспечивает). Чтобы изменить настройку проекта, пользователи взаимодействуют с богатыми
строго типизированными классами и выполняют projen для обновления файлов конфигурации проекта.
Чтобы создать новый проект, выполните следующую команду и следуйте инструкциям:```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();
Эта программа создаёт экземпляр типа проекта с минимальной настройкой, а затем вызывает
synth() для синтеза файлов проекта. По умолчанию команда new также
выполняет эту программу, что приводит к полностью рабочему проекту.
После создания проекта вы можете настроить его, отредактировав
.projenrc.js и повторно запустив npx projen для повторного синтеза.
Файлы, сгенерированные projen, считаются «деталью реализации», и projen защищает их от ручного редактирования (большинство файлов помечены как доступные только для чтения, а в CI-сборке настроена проверка «анти-взлома» для обеспечения того, чтобы файлы не обновлялись во время сборки).
Например, чтобы настроить публикацию в PyPI для проектов jsii, вы можете использовать
python option:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
Запуск:```shell
npx projen
И вы заметите, что ваш файл package.json теперь содержит раздел python в
его конфигурации jsii, а рабочий процесс GitHub release.yml включает шаг
публикации в PyPI.
Мы рекомендуем добавить это в ваш профиль оболочки, чтобы вы могли просто запускать pj каждый
раз, когда обновляете .projenrc.js:```bash
alias pj='npx projen'
Большинство проектов поддерживают команду `start`, которая отображает меню действий рабочего процесса:```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
...
Команда build — это та же команда, которая выполняется в ваших CI-сборках. Она
обычно компилирует, проверяет линтером, запускает тесты и упаковывает ваш модуль для распространения.
Вот несколько примеров функций, встроенных в типы проектов:
package.jsoncompile, build, test, packageПодробности об API см. в Справочнике по API.
Кроме того, несколько компонентов projen и типов проектов объясняются с примерами в /docs (сейчас в процессе разработки!).
projen использует подход "batteries included" и стремится предлагать десятки различных типов проектов
из коробки (мы только начинаем). Представьте projen new react, projen new angular, projen new java-maven,
projen new awscdk-typescript, projen new cdk8s-python (ничто в projen не привязано к javascript или npm!)...
Добавление новых типов проектов так же просто, как отправка pull request в этот репозиторий и экспорт класса,
который расширяет projen.Project (или один из его производных). Projen автоматически обнаруживает типы проектов, поэтому
ваш тип будет немедленно доступен в projen new.
projen поставляется со множеством типов проектов из коробки, но также может работать
с типами проектов и компонентами, определёнными во внешних jsii-модулях (причина,
по которой нам нужен jsii, заключается в том, что projen использует jsii-метаданные для обнаружения типов проектов
и опций в projen new).
Допустим, у нас есть модуль в npm под названием projen-vuejs, который включает один тип
проекта для vue.js:```bash
$ npx projen new --from projen-vuejs
Если указанный модуль включает несколько типов проектов, тип является обязательным.
Переключатели также можно использовать для указания начальных значений на основе API
типа проекта. Вы также можете использовать любой синтаксис пакетов, поддерживаемый [yarn
add](https://classic.yarnpkg.com/en/docs/cli/add#toc-adding-dependencies), например
`[email protected]`, `file:/path/to/local/folder`,
`[email protected]/awesome/projen-vuejs#1.2.3` и т. д.```bash
$ npx projen new --from projen-vuejs@^2 vuejs-ts --description "my awesome vue project"
Под капотом projen new установит модуль projen-vuejs из npm
(версии 2.0.0 и выше), обнаружит типы проектов в нём и инициализирует
тип проекта vuejs-ts. Он присвоит значение "my awesome vue project"
полю description. Если вы посмотрите на свой файл .projenrc.js, вы увидите,
что projen-vuejs определён как dev-зависимость:```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
См. [Vision](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/VISION.md).
## Вклад
Приветствуются любые виды вклада! Ознакомьтесь с нашим [руководством для
участников](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CONTRIBUTING.md) и нашим [кодексом поведения](https://github.com/pvharmo2/gha-lab-b9842b12c0/blob/HEAD/CODE_OF_CONDUCT.md).
Для быстрого старта ознакомьтесь с окружением разработки:```bash
$ git clone [email protected]:projen/projen
$ cd projen
$ yarn
$ yarn watch # compile in the background
Спасибо этим замечательным людям (ключ эмодзи):
Распространяется под лицензией 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 💻 |