@@ -4,11 +4,16 @@ permissions:
44 contents : write
55 pull-requests : write
66
7+ env :
8+ GIT_AUTHOR_EMAIL : " packages@datadoghq.com"
9+ GIT_AUTHOR_NAME : " ci.datadog-api-spec"
10+
711on :
812 pull_request :
913 types : [closed]
1014 branches :
1115 - master
16+ - v2
1217
1318jobs :
1419 create_release :
@@ -18,27 +23,70 @@ jobs:
1823 steps :
1924 - name : Get GitHub App token
2025 id : get_token
21- uses : actions/create-github-app-token@v1
26+ uses : actions/create-github-app-token@c1a285145b9d317df6ced56c09f525b5c2b6f755 # v1.11.1
2227 with :
2328 app-id : ${{ secrets.PIPELINE_GITHUB_APP_ID }}
2429 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
2933 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