From 6402e7f9ef82b6626aa25f0dd60a7429ea6ec0e4 Mon Sep 17 00:00:00 2001 From: kizahasi <21971954+kizahasi@users.noreply.github.com> Date: Wed, 13 Nov 2024 20:16:22 +0900 Subject: [PATCH] =?UTF-8?q?ci:=20Release=E3=83=96=E3=83=A9=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=81=ABPR=E3=81=8C=E4=BD=9C=E6=88=90=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AB=E3=82=BF=E3=82=B0?= =?UTF-8?q?=E3=81=AE=E5=80=99=E8=A3=9C=E5=90=8D=E3=82=92=E8=87=AA=E5=8B=95?= =?UTF-8?q?=E7=9A=84=E3=81=AB=E5=87=BA=E5=8A=9B=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release-pull-request.yml | 45 +++++++++++++++++-- apps/api-server/.gitignore | 1 + apps/api-server/package.json | 3 ++ apps/api-server/rollup.config.js | 2 + apps/api-server/src/run-generateGitTagsTxt.ts | 32 +++++++++++++ apps/api-server/tsconfig.json | 2 +- yarn.lock | 18 +++++++- 7 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 apps/api-server/src/run-generateGitTagsTxt.ts diff --git a/.github/workflows/release-pull-request.yml b/.github/workflows/release-pull-request.yml index bb66f8aca..eff7ecf13 100644 --- a/.github/workflows/release-pull-request.yml +++ b/.github/workflows/release-pull-request.yml @@ -6,6 +6,7 @@ on: - 'release' jobs: + # TODO: かつてはビルドされた JavaScript ファイルがリポジトリに含まれておりそのチェックにこのジョブが使われていたが、現在はそれらのファイルはリポジトリに含まれていないため、このジョブは削除したほうがよいかもしれない check-artifacts: name: Check artifacts @@ -25,12 +26,50 @@ jobs: - run: yarn - # 必要のない web-server のビルドも行われる。web-server のみを除外するとその除外処理でミスが生じる余地があるため、web-server も含めてまとめてビルドしている。 - - name: Generate dist - run: yarn build + - run: yarn build - name: Clean CRLF run: git config --local core.autocrlf input && git add . && git reset - name: Fail if not all the artifacts are OK uses: numtide/clean-git-action@v2 + + comment-git-tags: + name: Comment git tags + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Use Node 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + cache: yarn + + - run: yarn + + - run: yarn build + + - run: yarn run gen-git-tags + working-directory: ./apps/api-server + + - name: set git tags to GITHUB_ENV + run: | + tags_txt=$(cat ./apps/api-server/git-tags.txt) + echo "tags_txt<> $GITHUB_ENV + echo "$tags_txt" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + working-directory: ./apps/api-server + + - name: Add comment + run: gh issue comment "$PR_NUMBER" --body "$BODY" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + PR_NUMBER: ${{ github.event.number }} + BODY: > + リポジトリの管理者へ: PR をマージした後に Release ブランチにセットするタグの名前の候補は下のとおりです。`*` の部分は自分で変更してください。 + + ``` + ${{ env.tags_txt }} + ``` diff --git a/apps/api-server/.gitignore b/apps/api-server/.gitignore index 5a3f6aae3..c7d3a8d6a 100644 --- a/apps/api-server/.gitignore +++ b/apps/api-server/.gitignore @@ -1,5 +1,6 @@ /.env.local /bcrypt-hash.txt /flyio.Dockerfile +/git-tags.txt # テストを実行すると./__uploader_for_tests__ディレクトリに画像ファイルが生成される。もしアップローダーのテストが失敗するとこれらが残ることがあるため、除外している。 /__uploader_for_tests__ \ No newline at end of file diff --git a/apps/api-server/package.json b/apps/api-server/package.json index 1194e661a..bae3042e7 100644 --- a/apps/api-server/package.json +++ b/apps/api-server/package.json @@ -12,6 +12,7 @@ "dev": "node dist/index.js", "gen": "run-s gen:schema gen:codegen", "gen-flyio-dockerfile": "node dist/run-generateFlyioDockerfile.js", + "gen-git-tags": "node dist/run-generateGitTagsTxt.js", "gen:codegen": "graphql-codegen --config codegen.yml", "gen:schema": "node dist/run-buildSchemaSync.js", "lint": "eslint \"**/*.ts\" --cache", @@ -60,6 +61,7 @@ "check-disk-space": "^3.0.1", "class-validator": "^0.14.0", "color": "^4.0.1", + "dayjs": "^1.11.13", "dotenv": "^16.0.0", "dotenv-expand": "^8.0.0", "es-toolkit": "^1.25.2", @@ -104,6 +106,7 @@ "@graphql-codegen/typed-document-node": "5.0.11", "@graphql-codegen/typescript": "4.1.1", "@graphql-codegen/typescript-operations": "4.3.1", + "@rollup/plugin-json": "6.1.0", "@rollup/plugin-typescript": "11.1.6", "@types/jest": "29.5.14", "@types/node-fetch": "2.6.11", diff --git a/apps/api-server/rollup.config.js b/apps/api-server/rollup.config.js index 2e1ea2772..4316857ff 100644 --- a/apps/api-server/rollup.config.js +++ b/apps/api-server/rollup.config.js @@ -1,5 +1,6 @@ const typescript = require('@rollup/plugin-typescript'); const multiInput = require('rollup-plugin-multi-input'); +const json = require('@rollup/plugin-json'); const external = [ // https://rollupjs.org/guide/en/#importing-packagejson @@ -29,6 +30,7 @@ module.exports = [ declarationMap: false, sourceMap: true, }), + json(), ], external, }, diff --git a/apps/api-server/src/run-generateGitTagsTxt.ts b/apps/api-server/src/run-generateGitTagsTxt.ts new file mode 100644 index 000000000..8fd6fcf8f --- /dev/null +++ b/apps/api-server/src/run-generateGitTagsTxt.ts @@ -0,0 +1,32 @@ +import dayjs from 'dayjs'; +import timezone from 'dayjs/plugin/timezone'; +import utc from 'dayjs/plugin/utc'; +import fs from 'fs-extra'; +import WebPackageJson from '../../web-server/package.json'; +import { VERSION } from './VERSION'; + +// timezone プラグインを使う場合は utc プラグインも必要らしい - https://day.js.org/docs/en/timezone/timezone +dayjs.extend(utc); +dayjs.extend(timezone); + +const main = (): void => { + // API サーバーのバージョンは @flocon-trpg/api-server の TypeScript コードから取得する必要がある一方で、それ以外のバージョンは TypeScript コードを必要としない。そのため、これは API サーバー以外のタグ名も全て生成するスクリプトではあるが、@flocon-trpg/api-server 内に置いている。 + + const version = VERSION.toString(); + const apiServerTag = `api/v${version}`; + const webServerTag = `web/v${WebPackageJson.version}`; + + // GitHub Actions などで実行されることがあるため、明示的にタイムゾーンを指定している + const date = dayjs().tz('Asia/Tokyo').format('YY.M.D'); + + // * の部分は同じ日時に複数のタグがあるときに区別するのが目的の数値。この部分は自動的には生成できないので自分で手動で入力する + const mainTag = `v${date}.*`; + + const txt = `Main: ${mainTag} +Web Server: ${webServerTag} +API Server: ${apiServerTag}`; + + fs.writeFileSync('./git-tags.txt', txt); +}; + +main(); diff --git a/apps/api-server/tsconfig.json b/apps/api-server/tsconfig.json index cae2403cb..c5555a985 100644 --- a/apps/api-server/tsconfig.json +++ b/apps/api-server/tsconfig.json @@ -5,7 +5,7 @@ // Node 14 で推奨される設定を使用している // https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping#node-14 - "resolveJsonModule": false, + "resolveJsonModule": true, "target": "ES2020", "module": "ES2015", "sourceMap": true, diff --git a/yarn.lock b/yarn.lock index 760fc7438..64064f9ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4254,6 +4254,7 @@ __metadata: "@mikro-orm/mysql": "npm:^6.3.12" "@mikro-orm/postgresql": "npm:^6.3.12" "@mikro-orm/sqlite": "npm:^6.3.12" + "@rollup/plugin-json": "npm:6.1.0" "@rollup/plugin-typescript": "npm:11.1.6" "@types/bcrypt": "npm:^5.0.0" "@types/color": "npm:^3.0.2" @@ -4276,6 +4277,7 @@ __metadata: check-disk-space: "npm:^3.0.1" class-validator: "npm:^0.14.0" color: "npm:^4.0.1" + dayjs: "npm:^1.11.13" dotenv: "npm:^16.0.0" dotenv-expand: "npm:^8.0.0" es-toolkit: "npm:^1.25.2" @@ -6848,6 +6850,20 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-json@npm:6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10/cc018d20c80242a2b8b44fae61a968049cf31bb8406218187cc7cda35747616594e79452dd65722e7da6dd825b392e90d4599d43cd4461a02fefa2865945164e + languageName: node + linkType: hard + "@rollup/plugin-typescript@npm:11.1.6": version: 11.1.6 resolution: "@rollup/plugin-typescript@npm:11.1.6" @@ -12412,7 +12428,7 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.11.11, dayjs@npm:^1.11.7": +"dayjs@npm:^1.11.11, dayjs@npm:^1.11.13, dayjs@npm:^1.11.7": version: 1.11.13 resolution: "dayjs@npm:1.11.13" checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5