-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (108 loc) · 3.79 KB
/
Copy pathrelease.yml
File metadata and controls
130 lines (108 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: Release LocalStack Python Client
on:
repository_dispatch:
types: [release-sdk]
workflow_dispatch:
inputs:
version:
description: The version of the OpenAPI spec to release the client for
required: true
env:
GIT_AUTHOR_NAME: localstack[bot]
GIT_AUTHOR_EMAIL: localstack-bot@users.noreply.github.com
GIT_COMMITTER_NAME: localstack[bot]
GIT_COMMITTER_EMAIL: localstack-bot@users.noreply.github.com
jobs:
test_python:
runs-on: ubuntu-latest
environment: pypi
permissions:
contents: write
id-token: write
env:
RELEASE_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.event.client_payload.version}}
steps:
- name: "Pull Image (localstack/localstack-pro:${{ env.RELEASE_VERSION }})"
run: docker pull "localstack/localstack-pro:${RELEASE_VERSION}"
- name: "Checkout"
uses: actions/checkout@v4
with:
# setuptools_scm requires git history to determine the version
fetch-depth: 0
- name: "Set up Python 3.13"
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: "Install uv"
uses: astral-sh/setup-uv@v8.2.0
- name: "Generate Code from Spec"
run: |
make clean-generated
./bin/generate.sh ${RELEASE_VERSION}
- name: "Commit Changed Code"
run: |
# Code automatically generated goes into the packages directory.
# As we generate code for the version to be released, we commit those changes.
if git status --porcelain packages/ | grep -q '^'; then
git add packages/
git commit -m "Generate code for ${RELEASE_VERSION}"
echo "Changes committed successfully"
else
echo "No changes detected after generating the code"
fi
- name: "Install Project"
run: make install-dev
- name: "Install lstk"
run: npm install -g @localstack/lstk
- name: "Configure lstk"
# The config pins the emulator image to the release version. It lives outside
# the workspace so the "Check Uncommitted Changes" step stays clean.
run: |
cat > "${RUNNER_TEMP}/lstk-config.toml" <<EOF
[[containers]]
type = "aws"
tag = "${RELEASE_VERSION}"
port = "4566"
EOF
echo "LSTK_CONFIG_FILE=${RUNNER_TEMP}/lstk-config.toml" >> "$GITHUB_ENV"
- name: "Start Localstack"
env:
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
LOCALSTACK_DEBUG: "1"
LOCALSTACK_DISABLE_EVENTS: "1"
run: lstk --config "${LSTK_CONFIG_FILE}" start --timeout 2m
- name: "Run Python Tests"
env:
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
run: make test
- name: "Stop Localstack"
if: success() || failure()
run: |
lstk --config "${LSTK_CONFIG_FILE}" logs
lstk --config "${LSTK_CONFIG_FILE}" stop
- name: "Check Uncommitted Changes"
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "Uncommitted changes detected."
git diff
exit 1
fi
- name: "Create the Release Commit and Tag"
run: |
git commit --allow-empty -m "Release: v${RELEASE_VERSION}"
git tag -a "v${RELEASE_VERSION}" -m "Release: v${RELEASE_VERSION}"
- name: "Push the release commit and tag"
run: git push --follow-tags
- name: "Publish Release to PyPi"
env:
UV_PUBLISH_TRUSTED_PUBLISHING: always
run: make publish
- name: "Create GitHub Release"
env:
GITHUB_TOKEN: ${{ secrets.LOCALSTACK_GITHUB_TOKEN }}
run: gh release create "v${RELEASE_VERSION}" --generate-notes
- name: "Show Git Modifications"
run: |
git log --oneline -n 4
git show HEAD~1
git show HEAD