-
Notifications
You must be signed in to change notification settings - Fork 6
99 lines (87 loc) · 3.59 KB
/
release.yml
File metadata and controls
99 lines (87 loc) · 3.59 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
---
# yamllint disable rule:truthy rule:line-length
name: New Release
on:
release:
types:
- published
jobs:
prepare-environment:
uses: ./.github/workflows/define-versions.yml
check_release:
runs-on: ubuntu-22.04
needs: prepare-environment
outputs:
is_prerelease: ${{ steps.release.outputs.is_prerelease }}
is_devrelease: ${{ steps.release.outputs.is_devrelease }}
version: ${{ steps.release.outputs.version }}
major_minor_version: ${{ steps.release.outputs.major_minor_version }}
latest_tag: ${{ steps.release.outputs.latest_tag }}
steps:
- name: "Check out repository code"
uses: "actions/checkout@v6"
with:
submodules: true
- name: "Set up Python"
uses: "actions/setup-python@v6"
with:
python-version: "3.12"
- name: Install UV
uses: astral-sh/setup-uv@v7
with:
version: "${{ needs.prepare-environment.outputs.UV_VERSION }}"
- name: Install dependencies
run: uv sync --all-groups --all-extras
- name: Check prerelease type
id: release
run: |
VERSION=$(uv version --short)
echo is_prerelease=$(uv run python -c "from packaging.version import Version; print(int(Version('$VERSION').is_prerelease))") >> "$GITHUB_OUTPUT"
echo is_devrelease=$(uv run python -c "from packaging.version import Version; print(int(Version('$VERSION').is_devrelease))") >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo major_minor_version=$(uv run python -c "from packaging.version import Version; v = Version('$VERSION'); print(f'{v.major}.{v.minor}')") >> "$GITHUB_OUTPUT"
echo latest_tag=$(curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ github.token }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository }}/releases/latest \
| jq -r '.tag_name') >> "$GITHUB_OUTPUT"
- name: Check tag version
run: |
EXPECTED_TAG="v${{ steps.release.outputs.version }}"
if [ "${{ github.event.release.tag_name }}" != "$EXPECTED_TAG" ]; then
echo "Tag version does not match python project version"
echo "Expected: $EXPECTED_TAG"
echo "Got: ${{ github.event.release.tag_name }}"
exit 1
fi
- name: Check prerelease and project version
if: github.event.release.prerelease == true && steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
run: |
echo "Cannot pre-release a non pre-release or non dev-release version (${{ steps.release.outputs.version }})"
exit 1
- name: Check release and project version
if: github.event.release.prerelease == false && (steps.release.outputs.is_prerelease == 1 || steps.release.outputs.is_devrelease == 1)
run: |
echo "Cannot release a pre-release or dev-release version (${{ steps.release.outputs.version }})"
exit 1
publish-pypi:
needs: check_release
uses: ./.github/workflows/publish-pypi.yml
secrets: inherit
with:
publish: true
update-submodule:
needs: check_release
uses: ./.github/workflows/update-submodule.yml
secrets: inherit
with:
version: ${{ github.ref_name }}
repository-dispatch:
needs:
- check_release
- publish-pypi
uses: ./.github/workflows/repository-dispatch.yml
secrets: inherit
with:
version: ${{ needs.check_release.outputs.version }}