@@ -4,11 +4,16 @@ permissions:
4
4
contents : write
5
5
pull-requests : write
6
6
7
+ env :
8
+ GIT_AUTHOR_EMAIL :
" [email protected] "
9
+ GIT_AUTHOR_NAME : " ci.datadog-api-spec"
10
+
7
11
on :
8
12
pull_request :
9
13
types : [closed]
10
14
branches :
11
15
- master
16
+ - v2
12
17
13
18
jobs :
14
19
create_release :
@@ -18,27 +23,70 @@ jobs:
18
23
steps :
19
24
- name : Get GitHub App token
20
25
id : get_token
21
- uses : actions/create-github-app-token@v1
26
+ uses : actions/create-github-app-token@c1a285145b9d317df6ced56c09f525b5c2b6f755 # v1.11.1
22
27
with :
23
28
app-id : ${{ secrets.PIPELINE_GITHUB_APP_ID }}
24
29
private-key : ${{ secrets.PIPELINE_GITHUB_APP_PRIVATE_KEY }}
25
- - name : Create release
26
- uses : actions/github-script@v6
27
- env :
28
- RELEASE_BRANCH : ${{ github.head_ref }}
30
+
31
+ - name : Checkout ${{ github.event.pull_request.base.ref }}
32
+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
29
33
with :
30
- github-token : ${{ steps.get_token.outputs.token }}
31
- script : |
32
- const tagName = process.env.RELEASE_BRANCH.split("/")[1];
33
- await github.rest.git.createRef({
34
- owner: context.repo.owner,
35
- repo: context.repo.repo,
36
- ref: `refs/tags/${tagName}`,
37
- sha: context.payload.pull_request.merge_commit_sha,
38
- });
39
- await github.rest.repos.createRelease({
40
- owner: context.repo.owner,
41
- repo: context.repo.repo,
42
- generate_release_notes: true,
43
- tag_name: tagName,
44
- });
34
+ token : ${{ steps.get_token.outputs.token }}
35
+ ref : ${{ github.event.pull_request.base.ref }}
36
+ fetch-depth : 0
37
+
38
+ - name : Release packages
39
+ env :
40
+ HEAD_SHA : ${{ github.event.pull_request.head.sha }}
41
+ BASE_SHA : ${{ github.event.pull_request.base.sha }}
42
+ GH_TOKEN : ${{ steps.get_token.outputs.token }}
43
+ shell : bash
44
+ run : |
45
+ CHANGED_VERSION_FILES=$(git diff --diff-filter=MACR --name-only $BASE_SHA...$HEAD_SHA \
46
+ | grep -E 'version\.py$' \
47
+ | xargs dirname | xargs dirname | xargs dirname \
48
+ | sort \
49
+ | uniq)
50
+
51
+ declare -A versions
52
+ for package in $CHANGED_VERSION_FILES; do
53
+ base_version=$(git show $BASE_SHA:$package/src/datadog_api_client/version.py | grep "__version__ = " | sed 's/.*"\(.*\)".*/\1/')
54
+ head_version=$(git show $HEAD_SHA:$package/src/datadog_api_client/version.py | grep "__version__ = " | sed 's/.*"\(.*\)".*/\1/')
55
+
56
+ if [ "$base_version" != "$head_version" ]; then
57
+ versions[$package]=$head_version
58
+ fi
59
+ done
60
+
61
+ for package in "${!versions[@]}"; do
62
+ echo "Releasing $package at version ${versions[$package]}"
63
+
64
+ # Build the tag name
65
+ if [[ "$package" == "." ]]; then
66
+ # If the package is the root, use the version as the tag name
67
+ tag_name="${versions[$package]}"
68
+ else
69
+ # If the package is not the root, use the package name and version as the tag name
70
+ tag_name="$package/${versions[$package]}"
71
+ fi
72
+
73
+ # Get the changelog entries since last release
74
+ # TODO: Implement this
75
+ # changelog_content=$(git diff $BASE_REF...$HEAD_REF -- $package/CHANGELOG.md | grep -A 1000 "^+##" | grep -v "^+++" | sed 's/^+//')
76
+
77
+ is_prerelease=$(echo $package | grep -q "beta" && echo true || echo false)
78
+ # Create the tag
79
+ gh api repos/{owner}/{repo}/git/refs \
80
+ -f ref="refs/tags/$tag_name" \
81
+ -f sha=$HEAD_SHA
82
+
83
+ # Create the release
84
+ gh api repos/{owner}/{repo}/releases --input - << EOF
85
+ {
86
+ "tag_name": "$tag_name",
87
+ "name": "$tag_name",
88
+ "body": "See $package/CHANGELOG.md for details",
89
+ "prerelease": $is_prerelease
90
+ }
91
+ EOF
92
+ done
0 commit comments