Skip to content

Commit

Permalink
ci: ReleaseブランチにPRが作成されたときにタグの候補名を自動的に出力するようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
kizahasi committed Nov 14, 2024
1 parent 9471ed1 commit 6402e7f
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 5 deletions.
45 changes: 42 additions & 3 deletions .github/workflows/release-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- 'release'

jobs:
# TODO: かつてはビルドされた JavaScript ファイルがリポジトリに含まれておりそのチェックにこのジョブが使われていたが、現在はそれらのファイルはリポジトリに含まれていないため、このジョブは削除したほうがよいかもしれない
check-artifacts:
name: Check artifacts

Expand All @@ -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<<EOF" >> $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 }}
```
1 change: 1 addition & 0 deletions apps/api-server/.gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/.env.local
/bcrypt-hash.txt
/flyio.Dockerfile
/git-tags.txt
# テストを実行すると./__uploader_for_tests__ディレクトリに画像ファイルが生成される。もしアップローダーのテストが失敗するとこれらが残ることがあるため、除外している。
/__uploader_for_tests__
3 changes: 3 additions & 0 deletions apps/api-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions apps/api-server/rollup.config.js
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -29,6 +30,7 @@ module.exports = [
declarationMap: false,
sourceMap: true,
}),
json(),
],
external,
},
Expand Down
32 changes: 32 additions & 0 deletions apps/api-server/src/run-generateGitTagsTxt.ts
Original file line number Diff line number Diff line change
@@ -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();
2 changes: 1 addition & 1 deletion apps/api-server/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
18 changes: 17 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 6402e7f

Please sign in to comment.