1+ # This GitHub Workflow is designed to run automatically after the Release PR, which was created by the `Create Release PR` workflow, is closed.
2+ # This workflow has 2 jobs. One will run if the `Release PR` is successfully merged, indicating that a release should go out.
3+ # The other will run if the `Release PR` was closed and a release is not intended to go out.
4+ name : Sync 'dev' and 'master'
5+
6+ # The workflow will automatically be triggered when any PR is closed.
7+ on :
8+ pull_request :
9+ types : [closed]
10+
11+ permissions :
12+ contents : write
13+ id-token : write
14+
15+ jobs :
16+ # This job will check if the PR was successfully merged, it's source branch is `releases/next-release` and target branch is `dev`.
17+ # This indicates that the merged PR was the `Release PR`.
18+ # This job will synchronize `dev` and `master`, create a GitHub Release and delete the `releases/next-release` branch.
19+ sync-dev-and-master :
20+ name : Sync dev and master
21+ if : |
22+ github.event.pull_request.merged == true &&
23+ github.event.pull_request.head.ref == 'releases/next-release' &&
24+ github.event.pull_request.base.ref == 'dev'
25+ runs-on : ubuntu-latest
26+ steps :
27+ # Assume an AWS Role that provides access to the Access Token
28+ - name : Configure AWS Credentials
29+ uses : aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0
30+ with :
31+ role-to-assume : ${{ secrets.RELEASE_WORKFLOW_ACCESS_TOKEN_ROLE_ARN }}
32+ aws-region : us-west-2
33+ # Retrieve the Access Token from Secrets Manager
34+ - name : Retrieve secret from AWS Secrets Manager
35+ uses : aws-actions/aws-secretsmanager-get-secrets@fbd65ea98e018858715f591f03b251f02b2316cb # v2.0.8
36+ with :
37+ secret-ids : |
38+ AWS_SECRET, ${{ secrets.RELEASE_WORKFLOW_ACCESS_TOKEN_NAME }}
39+ parse-json-secrets : true
40+ # Checkout a full clone of the repo
41+ - name : Checkout code
42+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
43+ with :
44+ ref : dev
45+ fetch-depth : 0
46+ token : ${{ env.AWS_SECRET_TOKEN }}
47+ # Install .NET9 which is needed for AutoVer
48+ - name : Setup .NET 9.0
49+ uses : actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
50+ with :
51+ dotnet-version : 9.0.x
52+ # Install AutoVer which is needed to retrieve information about the current release.
53+ - name : Install AutoVer
54+ run : dotnet tool install --global AutoVer --version 0.0.25
55+ # Set up a git user to be able to run git commands later on
56+ - name : Setup Git User
57+ run : |
58+ git config --global user.email "github-aws-sdk-dotnet-automation@amazon.com"
59+ git config --global user.name "aws-sdk-dotnet-automation"
60+ # Retrieve the release name which is needed for the GitHub Release
61+ - name : Read Release Name
62+ id : read-release-name
63+ run : |
64+ version=$(autover changelog --release-name)
65+ echo "VERSION=$version" >> $GITHUB_OUTPUT
66+ # Retrieve the tag name which is needed for the GitHub Release
67+ - name : Read Tag Name
68+ id : read-tag-name
69+ run : |
70+ tag=$(autover changelog --tag-name)
71+ echo "TAG=$tag" >> $GITHUB_OUTPUT
72+ # Retrieve the changelog which is needed for the GitHub Release
73+ - name : Read Changelog
74+ id : read-changelog
75+ run : |
76+ changelog=$(autover changelog --output-to-console)
77+ echo "CHANGELOG<<EOF"$'\n'"$changelog"$'\n'EOF >> "$GITHUB_OUTPUT"
78+ # Merge dev into master in order to synchronize the 2 branches
79+ - name : Merge dev to master
80+ run : |
81+ git fetch origin
82+ git checkout master
83+ git merge dev
84+ git push origin master
85+ # Create the GitHub Release
86+ - name : Create GitHub Release
87+ env :
88+ GITHUB_TOKEN : ${{ env.AWS_SECRET_TOKEN }}
89+ run : |
90+ gh release create "${{ steps.read-tag-name.outputs.TAG }}" --title "${{ steps.read-release-name.outputs.VERSION }}" --notes "${{ steps.read-changelog.outputs.CHANGELOG }}"
91+ # Delete the `releases/next-release` branch
92+ - name : Clean up
93+ run : |
94+ git fetch origin
95+ if git ls-remote --exit-code --heads origin releases/next-release > /dev/null; then
96+ echo "Branch 'releases/next-release' exists on origin. Deleting..."
97+ git push origin --delete releases/next-release
98+ else
99+ echo "Branch 'releases/next-release' does not exist on origin, skipping deletion."
100+ fi
101+ # This job will check if the PR was closed, it's source branch is `releases/next-release` and target branch is `dev`.
102+ # This indicates that the closed PR was the `Release PR`.
103+ # This job will delete the tag created by AutoVer and the release branch.
104+ clean-up-closed-release :
105+ name : Clean up closed release
106+ if : |
107+ github.event.pull_request.merged == false &&
108+ github.event.pull_request.head.ref == 'releases/next-release' &&
109+ github.event.pull_request.base.ref == 'dev'
110+ runs-on : ubuntu-latest
111+ steps :
112+ # Checkout a full clone of the repo
113+ - name : Checkout code
114+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
115+ with :
116+ ref : releases/next-release
117+ fetch-depth : 0
118+ # Install .NET9 which is needed for AutoVer
119+ - name : Setup .NET 9.0
120+ uses : actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
121+ with :
122+ dotnet-version : 9.0.x
123+ # Install AutoVer which is needed to retrieve information about the current release.
124+ - name : Install AutoVer
125+ run : dotnet tool install --global AutoVer --version 0.0.25
126+ # Set up a git user to be able to run git commands later on
127+ - name : Setup Git User
128+ run : |
129+ git config --global user.email "github-aws-sdk-dotnet-automation@amazon.com"
130+ git config --global user.name "aws-sdk-dotnet-automation"
131+ # Retrieve the tag name to be deleted
132+ - name : Read Tag Name
133+ id : read-tag-name
134+ run : |
135+ tag=$(autover changelog --tag-name)
136+ echo "TAG=$tag" >> $GITHUB_OUTPUT
137+ # Delete the tag created by AutoVer and the release branch
138+ - name : Clean up
139+ run : |
140+ git fetch origin
141+ git push --delete origin ${{ steps.read-tag-name.outputs.TAG }}
142+ if git ls-remote --exit-code --heads origin releases/next-release > /dev/null; then
143+ echo "Branch 'releases/next-release' exists on origin. Deleting..."
144+ git push origin --delete releases/next-release
145+ else
146+ echo "Branch 'releases/next-release' does not exist on origin, skipping deletion."
147+ fi
0 commit comments