-
-
Notifications
You must be signed in to change notification settings - Fork 65
168 lines (160 loc) · 6.29 KB
/
release-with-dispatch.yml
File metadata and controls
168 lines (160 loc) · 6.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
name: "Release Manager [Dispatch]"
on:
workflow_dispatch:
inputs:
# Specify the type of the next release.
version_increment_type:
type: choice
description: 'VERSION INCREMENT TYPE'
default: 'patch'
required: false
options:
- 'major'
- 'minor'
- 'patch'
merge:
type: boolean
description: 'MERGE RELEASE BRANCH TO MAIN'
default: false
start-rc:
type: boolean
description: 'Start Release Candidate'
default: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: write
issues: write
pull-requests: write
jobs:
get-pr:
runs-on: ubuntu-latest
outputs:
pr_number: ${{ steps.get_pr.outputs.pr_number }}
steps:
- uses: actions/checkout@v6
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
- name: Get PRs
run: |
echo "pr_number=$(gh pr list --limit 1 --search "head:$GITHUB_REF_NAME base:$STABLE_BRANCH is:open" --json number --jq '.[] | .number')" >> $GITHUB_OUTPUT
id: get_pr
env:
STABLE_BRANCH: ${{ vars.STABLE_BRANCH }}
prepare-merge:
runs-on: ubuntu-latest
needs: get-pr
if: ${{ needs.get-pr.outputs.pr_number != '' && inputs.merge == true }}
outputs:
changes_template: ${{ steps.generate-template.outputs.template }}
steps:
- uses: actions/checkout@v4
- name: Read package.json
id: read-package
run: |
BASED_MISSKEY_VERSION=$(node -p "require('./package.json').basedMisskeyVersion")
echo "based_misskey_version=$BASED_MISSKEY_VERSION" >> $GITHUB_OUTPUT
CHANGELOG_ANCHOR=$(echo $BASED_MISSKEY_VERSION | sed 's/\.//g')
echo "changelog_anchor=$CHANGELOG_ANCHOR" >> $GITHUB_OUTPUT
- name: Generate changes template
id: generate-template
env:
BASED_VERSION: ${{ steps.read-package.outputs.based_misskey_version }}
CHANGELOG_ANCHOR: ${{ steps.read-package.outputs.changelog_anchor }}
run: |
{
echo 'template<<EOF'
echo "## Unreleased"
echo "**출시일**: unreleased"
echo "**기반 Misskey 버전**: ${BASED_VERSION}"
echo "Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#${CHANGELOG_ANCHOR}](CHANGELOG.md#${CHANGELOG_ANCHOR}) 문서를 참고하십시오."
echo ""
echo "### NOTE"
echo "-"
echo ""
echo "### General"
echo "-"
echo ""
echo "### Client"
echo "-"
echo ""
echo "### Server"
echo "-"
echo ""
echo 'EOF'
} >> $GITHUB_OUTPUT
merge:
uses: kokonect-link/release-manager-actions/.github/workflows/merge.yml@v2
needs: [get-pr, prepare-merge]
if: ${{ needs.get-pr.outputs.pr_number != '' && inputs.merge == true }}
with:
pr_number: ${{ needs.get-pr.outputs.pr_number }}
user: 'github-actions[bot]'
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
# Text to prepend to the changelog
# The first line must be `## Unreleased`
changes_template: ${{ needs.prepare-merge.outputs.changes_template }}
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
indent: ${{ vars.INDENT }}
secrets:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
create-prerelease:
uses: kokonect-link/release-manager-actions/.github/workflows/create-prerelease.yml@v2
needs: get-pr
if: ${{ needs.get-pr.outputs.pr_number != '' && inputs.merge != true }}
with:
pr_number: ${{ needs.get-pr.outputs.pr_number }}
user: 'github-actions[bot]'
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
indent: ${{ vars.INDENT }}
draft_prerelease_channel: alpha
ready_start_prerelease_channel: beta
prerelease_channel: ${{ inputs.start-rc && 'rc' || '' }}
reset_number_on_channel_change: true
secrets:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
create-target:
uses: kokonect-link/release-manager-actions/.github/workflows/create-target.yml@v2
needs: get-pr
if: ${{ needs.get-pr.outputs.pr_number == '' }}
with:
user: 'github-actions[bot]'
# The script for version increment.
# process.env.CURRENT_VERSION: The current version.
#
# Misskey calender versioning (yyyy.MM.patch) example
#version_increment_script: |
# const now = new Date();
# const year = now.toLocaleDateString('en-US', { year: 'numeric', timeZone: 'Asia/Tokyo' });
# const month = now.toLocaleDateString('en-US', { month: 'numeric', timeZone: 'Asia/Tokyo' });
# const [major, minor, _patch] = process.env.CURRENT_VERSION.split('.');
# const patch = Number(_patch.split('-')[0]);
# if (Number.isNaN(patch)) {
# console.error('Invalid patch version', year, month, process.env.CURRENT_VERSION, major, minor, _patch);
# throw new Error('Invalid patch version');
# }
# if (year !== major || month !== minor) {
# return `${year}.${month}.0`;
# } else {
# return `${major}.${minor}.${patch + 1}`;
# }
#Semver example
version_increment_script: |
const [major, minor, patch] = process.env.CURRENT_VERSION.split('.');
if ("${{ inputs.version_increment_type }}" === "major") {
return `${Number(major) + 1}.0.0`;
} else if ("${{ inputs.version_increment_type }}" === "minor") {
return `${major}.${Number(minor) + 1}.0`;
} else {
return `${major}.${minor}.${Number(patch) + 1}`;
}
package_jsons_to_rewrite: ${{ vars.PACKAGE_JSONS_TO_REWRITE }}
use_external_app_to_release: ${{ vars.USE_RELEASE_APP == 'true' }}
indent: ${{ vars.INDENT }}
stable_branch: ${{ vars.STABLE_BRANCH }}
draft_prerelease_channel: alpha
secrets:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}