13
13
types : [closed]
14
14
branches :
15
15
- master
16
+ - v2
16
17
17
18
jobs :
18
19
create_release :
@@ -22,77 +23,77 @@ jobs:
22
23
steps :
23
24
- name : Get GitHub App token
24
25
id : get_token
25
- uses : actions/create-github-app-token@v1
26
+ uses : actions/create-github-app-token@c1a285145b9d317df6ced56c09f525b5c2b6f755 # v1.11.1
26
27
with :
27
28
app-id : ${{ secrets.PIPELINE_GITHUB_APP_ID }}
28
29
private-key : ${{ secrets.PIPELINE_GITHUB_APP_PRIVATE_KEY }}
29
30
30
- - name : Create release
31
- uses : actions/github-script@v6
32
- env :
33
- RELEASE_BRANCH : ${{ github.head_ref }}
31
+ - name : Checkout ${{ github.base_ref }}
32
+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
34
33
with :
35
- github-token : ${{ steps.get_token.outputs.token }}
36
- script : |
37
- const tagName = `v${process.env.RELEASE_BRANCH.split("/")[1]}`;
38
- await github.rest.git.createRef({
39
- owner: context.repo.owner,
40
- repo: context.repo.repo,
41
- ref: `refs/tags/${tagName}`,
42
- sha: context.payload.pull_request.merge_commit_sha,
43
- });
44
- await github.rest.repos.createRelease({
45
- owner: context.repo.owner,
46
- repo: context.repo.repo,
47
- generate_release_notes: true,
48
- tag_name: tagName,
49
- });
34
+ fetch-depth : 1
35
+ token : ${{ steps.get_token.outputs.token }}
36
+ ref : ${{ github.event.pull_request.base.ref }}
50
37
51
- - uses : actions/checkout@v3
38
+ - name : Checkout ${{ github.head_ref }}
39
+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
52
40
with :
53
- fetch-depth : 0
41
+ fetch-depth : 1
54
42
token : ${{ steps.get_token.outputs.token }}
43
+ ref : ${{ github.event.pull_request.head.ref }}
55
44
56
- - name : Setup Git
45
+ - name : Release packages
46
+ env :
47
+ HEAD_SHA : ${{ github.event.pull_request.head.sha }}
48
+ BASE_SHA : ${{ github.event.pull_request.base.sha }}
49
+ GH_TOKEN : ${{ steps.get_token.outputs.token }}
50
+ shell : bash
57
51
run : |
58
- git config user.name "${GIT_AUTHOR_NAME}"
59
- git config user.email "${GIT_AUTHOR_EMAIL}"
52
+ CHANGED_PACKAGE_JSON_FILES=$(git diff --name-only $BASE_SHA...$HEAD_SHA \
53
+ | grep -E 'package\.json$' \
54
+ | xargs dirname \
55
+ | sort \
56
+ | uniq)
60
57
61
- - name : Set up Node
62
- uses : actions/setup-node@v3
63
- with :
64
- node-version : 16
65
- cache : ' yarn'
58
+ declare -A versions
59
+ for package in $CHANGED_PACKAGE_JSON_FILES; do
60
+ base_version=$(git show $BASE_SHA:$package/package.json | jq -r .version)
61
+ head_version=$(git show $HEAD_SHA:$package/package.json | jq -r .version)
66
62
67
- - name : Bump version
68
- run : |
69
- git switch -c "${POST_RELEASE_BRANCH}"
70
- # TODO remove beta after 1.0.0 release
71
- npm version --no-git-tag-version --preid beta prerelease
72
- git commit -a -m "Bump version"
73
- git push -f --set-upstream origin "${POST_RELEASE_BRANCH}"
74
- env :
75
- POST_RELEASE_BRANCH : post-${{ github.head_ref }}
63
+ if [ "$base_version" != "$head_version" ]; then
64
+ versions[$package]=$head_version
65
+ fi
66
+ done
76
67
77
- - name : Create PR
78
- uses : actions/github-script@v6
79
- env :
80
- POST_RELEASE_BRANCH : post-${{ github.head_ref }}
81
- BASE : master
82
- with :
83
- github-token : ${{ steps.get_token.outputs.token }}
84
- script : |
85
- const { data: pr } = await github.rest.pulls.create({
86
- owner: context.repo.owner,
87
- repo: context.repo.repo,
88
- head: process.env.POST_RELEASE_BRANCH,
89
- base: process.env.BASE,
90
- title: "Post release",
91
- body: "Bump to dev version",
92
- });
93
- await github.rest.issues.addLabels({
94
- issue_number: pr.number,
95
- owner: context.repo.owner,
96
- repo: context.repo.repo,
97
- labels: ["changelog/no-changelog"],
98
- });
68
+ for package in "${!versions[@]}"; do
69
+ echo "Releasing $package at version ${versions[$package]}"
70
+
71
+ # Build the tag name
72
+ if [[ "$package" == "." ]]; then
73
+ # If the package is the root, use the version as the tag name
74
+ tag_name="v${versions[$package]}"
75
+ else
76
+ # If the package is not the root, use the package name and version as the tag name
77
+ tag_name="$package/${versions[$package]}"
78
+ fi
79
+
80
+ # Get the changelog entries since last release
81
+ # TODO: Implement this
82
+ # changelog_content=$(git diff $BASE_REF...$HEAD_REF -- $package/CHANGELOG.md | grep -A 1000 "^+##" | grep -v "^+++" | sed 's/^+//')
83
+
84
+ is_prerelease=$(echo $package | grep -q "beta" && echo true || echo false)
85
+ # Create the tag
86
+ gh api repos/{owner}/{repo}/git/refs \
87
+ -f ref="refs/tags/$tag_name" \
88
+ -f sha=$HEAD_SHA
89
+
90
+ # Create the release
91
+ gh api repos/{owner}/{repo}/releases --input - << EOF
92
+ {
93
+ "tag_name": "$tag_name",
94
+ "name": "$tag_name",
95
+ "body": "See $package/CHANGELOG.md for details",
96
+ "prerelease": $is_prerelease
97
+ }
98
+ EOF
99
+ done
0 commit comments