自動化された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、ラヴァル大学の修士論文で公開済みのGitHub Actionsワークフロー脆弱性の再現を目的とした自動化ハーネスによって構築された使い捨てラボです。これは
projen/projenのコミット284d9162b9903c1828aa13ab56420c1183c49d40(2021-03-09)時点の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されており、そのライセンスファイルはこのスナップショットに変更なしで含まれています。上流プロジェクトは関与しておらず、標的にされることもありません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクション参照とランナーイメージは、2021-03-09時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力内の
pinning.mdを参照してください。質問や異議がある場合: [email protected]
複雑なプロジェクト構成をコードを通じて定義し、維持します。
#TemplatesAreEvil運動に参加しよう!
projenは、JavaScriptで書かれた型付けのしっかりした定義から、package.json、tsconfig.json、.gitignore、GitHub Workflows、eslint、jestなどのプロジェクト構成ファイルを合成します。
projenに関するこのトークをチェックしてください。
既存のテンプレーティング/スキャフォールディングツールとは異なり、projenは一度きりのジェネレーターではありません。合成されたファイルは手動で編集すべきではありません(実際、projenはそれを強制します)。プロジェクト設定を変更するには、ユーザーはリッチで強く型付けされたクラスを操作し、projenを実行してプロジェクト構成ファイルを更新します。
新しいプロジェクトを作成するには、次のコマンドを実行して指示に従ってください。```console $ mkdir my-project $ cd my-project $ git init $ npx projen new PROJECT-TYPE 🤖 Synthesizing project... ...
現在サポートされているプロジェクトタイプ(タイプを指定せずに `npx projen new` を実行すると一覧が表示されます):
<!-- <macro exec="node ./scripts/readme-projects.js"> -->
* [awscdk-app-ts](https://github.com/projen/projen/blob/master/API.md#projen-awscdktypescriptapp) - AWS CDKアプリ(TypeScript)。
* [awscdk-construct](https://github.com/projen/projen/blob/master/API.md#projen-awscdkconstructlibrary) - AWS CDKコンストラクトライブラリプロジェクト。
* [cdk8s-construct](https://github.com/projen/projen/blob/master/API.md#projen-constructlibrarycdk8s) - CDK8sコンストラクトライブラリプロジェクト。
* [java](https://github.com/projen/projen/blob/master/API.md#projen-java.javaproject) - Javaプロジェクト。
* [jsii](https://github.com/projen/projen/blob/master/API.md#projen-jsiiproject) - 多言語対応のjsiiライブラリプロジェクト。
* [nextjs](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjsproject) - TypeScriptを使用しないNext.jsプロジェクト。
* [nextjs-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.nextjstypescriptproject) - TypeScriptを使用するNext.jsプロジェクト。
* [node](https://github.com/projen/projen/blob/master/API.md#projen-nodeproject) - Node.jsプロジェクト。
* [project](https://github.com/projen/projen/blob/master/API.md#projen-project) - 基本プロジェクト。
* [python](https://github.com/projen/projen/blob/master/API.md#projen-python.pythonproject) - Pythonプロジェクト。
* [react](https://github.com/projen/projen/blob/master/API.md#projen-web.reactproject) - TypeScriptを使用しないReactプロジェクト。
* [react-ts](https://github.com/projen/projen/blob/master/API.md#projen-web.reacttypescriptproject) - TypeScriptを使用するReactプロジェクト。
* [typescript](https://github.com/projen/projen/blob/master/API.md#projen-typescriptproject) - TypeScriptプロジェクト。
* [typescript-app](https://github.com/projen/projen/blob/master/API.md#projen-typescriptappproject) - TypeScriptアプリ。
<!-- </macro> -->
> `npx projen new PROJECT-TYPE --help` を使用すると、ブートストラップ時にほとんどのプロジェクトオプションを指定できるコマンドラインスイッチの一覧が表示されます。
> 例:`npx projen new jsii --author-name "Jerry Berry"`。
`new` コマンドは、`jsii` プロジェクトの場合、次のような `.projenrc.js` ファイルを作成します:```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ビルドワークフローには「改ざん防止」チェックが 設定されており、ビルド中にファイルが更新されないことを保証します)。
例えば、jsii プロジェクトでPyPI公開を設定するには、次のように
python option を使用できます:```js
const project = new JsiiProject({
// ...
python: {
distName: "mydist",
module: "my_module",
}
});
実行:
```bash
python3 setup.py install
``````shell
npx projen
そして、package.json ファイルの jsii 設定に python セクションが含まれ、GitHub の release.yml ワークフローに PyPI 公開ステップが含まれていることに気づくでしょう。
これをシェルプロファイルに追加することをお勧めします。そうすれば、.projenrc.js を更新するたびに pj を実行するだけで済みます。```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.json の完全な合成compile、build、test、package などの標準的な npm スクリプトAPI の詳細については、API リファレンス を参照してください。
さらに、いくつかの projen コンポーネントとプロジェクトタイプが、/docs で例とともに説明されています(現在作業中です!)。
projen は「バッテリー同梱」アプローチを採用しており、すぐに使える数十種類のプロジェクトタイプを提供することを目指しています(まだ始まったばかりです)。projen new react、projen new angular、projen new java-maven、projen new awscdk-typescript、projen new cdk8s-python を考えてみてください(projen の何も javascript や npm に縛られていません)...
新しいプロジェクトタイプの追加は、このリポジトリにプルリクエストを送信し、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 はnpmからprojen-vuejsモジュール(バージョン2.0.0以上)をインストールし、その中のプロジェクトタイプを検出してvuejs-tsプロジェクトタイプをブートストラップします。descriptionフィールドには値"my awesome vue project"が割り当てられます。.projenrc.jsファイルを確認すると、projen-vuejsが開発依存関係として定義されているのがわかります。```javascript
const { VueJsProject } = require('projen-vuejs');
const project = new VueJsProject({ name: 'my-vuejs-sample', description: "my awesome vue project", // ... devDeps: [ 'projen-vuejs' ] });
project.synth();
## ロードマップ
[ビジョン](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
Thanks goes to these wonderful people (emoji key):
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 💻 |