Repository navigation
129 lines (113 loc) · 3.87 KB
/
Copy pathrelease.yml
File metadata and controls
129 lines (113 loc) · 3.87 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
name: Build and Release
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.check_version.outputs.version }}
is_new_version: ${{ steps.check_version.outputs.is_new }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Install dependencies
run: uv sync --all-extras --dev
- name: Install Playwright browsers
run: uv run playwright install --with-deps chromium
- name: Run tests
run: uv run pytest
- name: Check version
id: check_version
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
VERSION=$(grep -m 1 '^version = ' pyproject.toml | cut -d '"' -f 2)
echo "Extracted version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
if [ -n "$(git ls-remote --tags origin "refs/tags/v$VERSION")" ]; then
echo "is_new=false" >> $GITHUB_OUTPUT
echo "Version $VERSION already exists (skipping release)"
# Update pyproject.toml to use a +latest local version identifier so it's explicitly different from PyPI
DEV_VERSION="${VERSION}+latest"
sed -i "s/^version = \"$VERSION\"/version = \"$DEV_VERSION\"/" pyproject.toml
echo "Using local version identifier: $DEV_VERSION"
else
echo "is_new=true" >> $GITHUB_OUTPUT
echo "Version $VERSION is new! (triggering release)"
fi
- name: Build package
run: uv build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: htag-dist
path: dist/*
release:
name: GitHub Release
needs: build
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.build.outputs.is_new_version == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: htag-dist
path: dist/
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ needs.build.outputs.version }}
name: "Release v${{ needs.build.outputs.version }}"
target_commitish: ${{ github.sha }}
files: dist/*
draft: false
prerelease: false
generate_release_notes: true
rolling-release:
name: Update Latest Build
needs: build
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: htag-dist
path: dist/
- name: Update Latest Release
uses: softprops/action-gh-release@v2
with:
tag_name: latest
name: "Latest Development Build"
body: "This is the latest build from the main branch. Use at your own risk."
files: dist/*.whl
make_latest: false
prerelease: true
release-pypi:
name: Publish to PyPI
needs: build
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.build.outputs.is_new_version == 'true'
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/htag
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: htag-dist
path: dist/
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1