-
Notifications
You must be signed in to change notification settings - Fork 0
127 lines (103 loc) · 3.73 KB
/
release.yml
File metadata and controls
127 lines (103 loc) · 3.73 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
name: Module Release
on:
push:
tags:
- "*@*"
jobs:
build-and-release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip"
- name: Extract Tag Info
id: extract
shell: bash
run: |
set -euo pipefail
TAG_NAME="${GITHUB_REF_NAME}"
MODULE_NAME="${TAG_NAME%@*}"
VERSION="${TAG_NAME##*@}"
if [[ "${MODULE_NAME}" == "${TAG_NAME}" || -z "${MODULE_NAME}" || -z "${VERSION}" ]]; then
echo "Invalid tag '${TAG_NAME}'. Expected format: <module>@<version>" >&2
exit 1
fi
echo "Processing module: ${MODULE_NAME}"
echo "Version: ${VERSION}"
echo "module=${MODULE_NAME}" >> "${GITHUB_OUTPUT}"
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
echo "full_tag=${TAG_NAME}" >> "${GITHUB_OUTPUT}"
- name: Install Build Dependencies
shell: bash
run: |
set -euo pipefail
python -m pip install --upgrade pip
pip install -r requirements.txt
if [[ -f ".build/requirements.txt" ]]; then
pip install -r .build/requirements.txt
fi
- name: Build Module
shell: bash
env:
MODULE_NAME: ${{ steps.extract.outputs.module }}
MODULE_VERSION: ${{ steps.extract.outputs.version }}
run: |
set -euo pipefail
BUILD_SCRIPT=".build/${MODULE_NAME}.build.py"
if [[ ! -f "${BUILD_SCRIPT}" ]]; then
echo "Build script not found: ${BUILD_SCRIPT}" >&2
exit 1
fi
python "${BUILD_SCRIPT}" --version "${MODULE_VERSION}"
- name: Zip Artifacts
shell: bash
env:
MODULE_NAME: ${{ steps.extract.outputs.module }}
MODULE_VERSION: ${{ steps.extract.outputs.version }}
run: |
set -euo pipefail
ZIP_NAME="${MODULE_NAME}-v${MODULE_VERSION}.zip"
if [[ ! -d "dist/${MODULE_NAME}" ]]; then
echo "Expected build output at dist/${MODULE_NAME}, but it was not produced." >&2
exit 1
fi
echo "Creating zip file: ${ZIP_NAME}"
cd dist
zip -r "../${ZIP_NAME}" "${MODULE_NAME}"
echo "ZIP_FILE=${ZIP_NAME}" >> "${GITHUB_ENV}"
- name: Create Version Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.extract.outputs.full_tag }}
name: ${{ steps.extract.outputs.module }} v${{ steps.extract.outputs.version }}
files: ${{ env.ZIP_FILE }}
overwrite_files: true
fail_on_unmatched_files: true
draft: false
prerelease: false
body: |
**Module:** `${{ steps.extract.outputs.module }}`
**Version:** `${{ steps.extract.outputs.version }}`
**Commit:** `${{ github.sha }}`
Built with `.build/${{ steps.extract.outputs.module }}.build.py`.
- name: Create Latest Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.extract.outputs.module }}-latest
name: ${{ steps.extract.outputs.module }} (Latest)
files: ${{ env.ZIP_FILE }}
overwrite_files: true
fail_on_unmatched_files: true
draft: false
prerelease: false
body: |
This release tracks the latest published artifact for `${{ steps.extract.outputs.module }}`.
- Source tag: `${{ steps.extract.outputs.full_tag }}`
- Commit: `${{ github.sha }}`