# 发布流程

## 方法
* 私たちは  [semver](https://semver.org/) のバージョン管理スキームに従います。これは、メジャーバージョン:マイナーバージョン:パッチバージョンの形式を採用します。v

## 要求
* Git、node.js、NPMがシステムにインストールされている
* ライブラリをビルドし、リモートリポジトリにプッシュする権限がある
* リモートリポジトリに`NPM_TOKEN`キーが設定されている
* リモートリポジトリに`ACCESS_TOKEN`キーが設定されている

## 使用方法
```sh
$ git checkout main
$ npm version [major|minor|patch] # 选择适当的版本标签
$ git push origin main
$ git push origin v1.4.2 # 用刚刚创建的版本号替换此处的版本号
```
実際のリリース手順はすべてGithub Actions CIで実行されます。操作が完了したら、Githubでリリースをチェックし、必要に応じてリリースノートを修正することをお勧めします（例えば、すべての-contributor botのコミットを他のコミットと区別するなど）。

## セキュリティトークン
リリース手順を完全に実行するためには、以下のように2つ[リポジトリシークレット](https://docs.github.com/cn/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository)を設定する必要があります。

* `NPM_TOKEN`は(ここ)[https://docs.npmjs.com/creating-and-viewing-access-tokens]の手順に従って作成できます。これにより、読み取りおよび公開トークンを作成できます。トークンの所有者はNPMプロジェクトへのパブリッシュアクセス権を持っている必要があります。

* `ACCESS_TOKEN`は、`p5.js`、`p5.js-website`、および`p5.js-release`リポジトリにアクセスするための個人アクセストークンです。ここの手順に従ってトークンを生成し、スコープでは`public_repo`のみを選択します。操作は、組織固有のアカウント（つまり個人アカウントではない）を使用して行うことをお勧めし、そのアカウントの書き込みアクセス権を必要なリポジトリにのみ制限することをお勧めします。

## 実際に何が起こるか
Github Actions CIの("New p5.js release")[https://chat.openai.com/.github/workflows/release.yml]アクションは、`npm version ___`コマンドで作成されたv*.*.*形式のタグにマッチするとトリガーされます。

トリガーされると、以下の手順を実行します：

1. リポジトリをクローンし、node.jsをセットアップし、バージョン番号を抽出し、npmで依存関係をインストールし、npm testでテストを実行します。
2. Githubリリースにアップロードされるリリースファイルを作成します。
3. Github上でリリースを作成し、最新バージョンをNPMに公開します。
4. ウェブサイトファイルを更新
   1. ウェブサイトリポジトリをクローン
   2. `data.json`および`data.min.json`を適切な場所にコピー
   3. `p5.min.js`および`p5.sound.min.js`を適切な場所にコピー
   4. 最新バージョン番号で`data.yml`ファイルを更新
   5. `data.min.json`をもとに`en.json`ファイルを更新
   6. ウェブサイトリポジトリに変更をコミットし、プッシュ
5. Bowerファイルを更新
   1. Bowerリリースリポジトリをクローン
   2. すべてのライブラリファイルを適切な場所にコピー
   3. ウェブサイトリポジトリに変更をコミットし、プッシュ

原則として、可能な限り多くの手順を一か所で実行するように努めています。つまり、CI環境で実行します。リリース時にのみ実行する必要がある新しい手順がある場合は、CIワークフロー内で定義されるべきであり、ビルド構成の一部としてではありません。

## テスト
リリース手順はCI内で実行されるため、テストすることが少し難しいかもしれません。[act](https://github.com/nektos/act)を使用すると、開発プロセス中にローカルで手順の実行をテストできますが、作業フロー定義にいくつかの一時的な変更が必要になるため、正確な手順は時間とともに変更される可能性があります。

mocha Chromeテストを実行するために必要なすべてのシステム要件がインストールされていないため、テスト手順は実行されません。`apt`を使用して一部のシステム依存関係をインストールする前に、他の環境のセットアップが必要になるかもしれません。エラーメッセージに注意してください。それらはどのソフトウェアパッケージが不足しているかに関する情報を提供するはずです。

リモートリポジトリに不要な変更を誤ってプッシュすることを避けるため、リモートリポジトリに変更をプッシュする手順はコメントアウトする必要があります。