1
+ name : Release LocalStack Python Client
2
+
3
+ on :
4
+ repository_dispatch :
5
+ types : [release-sdk]
6
+ workflow_dispatch :
7
+ inputs :
8
+ version :
9
+ description : The version of the OpenAPI spec to release the client for
10
+ required : true
11
+
12
+ env :
13
+ git_user_name : localstack[bot]
14
+ git_user_email : localstack-bot@users.noreply.github.com
15
+
16
+ jobs :
17
+
18
+ test_python :
19
+ runs-on : ubuntu-latest
20
+ env :
21
+ release : ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.event.client_payload.version}}
22
+
23
+ steps :
24
+ - name : " Pull image"
25
+ run : |
26
+ docker pull localstack/localstack-pro:${{ env.release }}
27
+
28
+ - name : " Checkout"
29
+ uses : actions/checkout@v4
30
+ with :
31
+ # setuptools_scm requires git history to determine the version
32
+ fetch-depth : 0
33
+
34
+ - name : " Set up Python 3.11"
35
+ uses : actions/setup-python@v5
36
+ with :
37
+ python-version : " 3.11"
38
+
39
+ - name : " Install uv"
40
+ uses : astral-sh/setup-uv@v3
41
+
42
+ - name : " Generate code from spec"
43
+ run : |
44
+ make clean-generated
45
+ ./bin/generate.sh ${{ env.release }}
46
+
47
+ - name : " Prepare git config"
48
+ run : |
49
+ git config user.name ${{ env.git_user_name }}
50
+ git config user.email ${{ env.git_user_email }}
51
+
52
+ - name : " Commit changed code"
53
+ run : |
54
+ # Code automatically generated goes into the packages directory.
55
+ # As we generate code for the version to be released, we commit those changes.
56
+ if git status --porcelain packages/ | grep -q '^'; then
57
+ git add packages/
58
+ git commit -m "Generate code for ${{ env.release }}"
59
+
60
+ echo "Changes committed successfully"
61
+ else
62
+ echo "No changes detected after generating the code"
63
+ fi
64
+
65
+ - name : " Install project"
66
+ run : |
67
+ make install-dev
68
+
69
+ - name : " Install LocalStack"
70
+ run : |
71
+ pip install localstack==${{ env.release }}
72
+
73
+ - name : " Start Localstack"
74
+ env :
75
+ LOCALSTACK_AUTH_TOKEN : ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
76
+ run : |
77
+ source .venv/bin/activate
78
+ DEBUG=1 DISABLE_EVENTS="1" IMAGE_NAME="localstack/localstack-pro:${{ env.release }}" localstack start -d
79
+ localstack wait -t 120 || (python -m localstack.cli.main logs && false)
80
+
81
+ - name : " Run Python Tests"
82
+ env :
83
+ LOCALSTACK_AUTH_TOKEN : ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
84
+ run : |
85
+ make test
86
+
87
+ - name : " Stop Localstack"
88
+ if : success() || failure()
89
+ run : |
90
+ source .venv/bin/activate
91
+ localstack logs
92
+ localstack stop
93
+
94
+ - name : " Install release helper"
95
+ run : |
96
+ curl -o bin/release-helper.sh -L https://api.github.com/repos/localstack/localstack/contents/bin/release-helper.sh -H 'Accept: application/vnd.github.v3.raw'
97
+ chmod +x bin/release-helper.sh
98
+
99
+ - name : " Create the release commit and tag"
100
+ run : |
101
+ bin/release-helper.sh git-commit-release ${{ env.release }}
102
+
103
+ - name : " Publish release to pypi"
104
+ run : |
105
+ make install publish
106
+ with :
107
+ UV_PUBLISH_TOKEN : ${{ secrets.UV_PUBLISH_TOKEN }}
108
+
109
+ - name : " Push the release commit and tag"
110
+ run : |
111
+ git push --follow-tags
112
+
113
+ - name : " Create GitHub release"
114
+ env :
115
+ GITHUB_TOKEN : ${{ secrets.LOCALSTACK_GITHUB_TOKEN }}
116
+ run : gh release create "${{ env.release }}" --generate-notes --draft
117
+
118
+ - name : " Commit and push next development version"
119
+ run : |
120
+ bin/release-helper.sh git-commit-increment
121
+ git push
122
+
123
+ - name : " Publish development version to pypi"
124
+ run : |
125
+ make install publish
126
+ with :
127
+ UV_PUBLISH_TOKEN : ${{ secrets.UV_PUBLISH_TOKEN }}
128
+
129
+ - name : " Show git modifications"
130
+ run : |
131
+ git log --oneline -n 4
132
+ git show HEAD~1
133
+ git show HEAD
0 commit comments