Skip to content

Commit ae157f2

Browse files
authored
ci: add explicit workflow permissions (#220)
1 parent d80aaec commit ae157f2

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ jobs:
3333
check_event:
3434
name: Repo and event checks
3535
runs-on: ubuntu-latest
36+
permissions:
37+
contents: read
3638
outputs:
3739
valid_event: ${{ steps.check.outputs.valid_event }}
3840
steps:
@@ -62,6 +64,8 @@ jobs:
6264
runs-on: ubuntu-latest
6365
needs: check_event
6466
if: needs.check_event.outputs.valid_event == 'true'
67+
permissions:
68+
contents: read
6569
outputs:
6670
should_build: ${{ steps.check.outputs.should_build }}
6771
steps:
@@ -158,6 +162,9 @@ jobs:
158162
needs: [check_changes, check_event]
159163
if: needs.check_event.outputs.valid_event == 'true' && needs.check_changes.outputs.should_build == 'true'
160164
runs-on: ubuntu-latest
165+
permissions:
166+
contents: read
167+
actions: write
161168
steps:
162169
- uses: actions/checkout@v4
163170
with:
@@ -188,6 +195,9 @@ jobs:
188195
runs-on: ${{ matrix.os }}
189196
needs: [check_changes, check_event]
190197
if: needs.check_event.outputs.valid_event == 'true' && needs.check_changes.outputs.should_build == 'true'
198+
permissions:
199+
contents: read
200+
actions: write
191201
strategy:
192202
fail-fast: false
193203
matrix:

.github/workflows/publish.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ jobs:
1212
name: Build source distribution and wheels
1313
uses: ./.github/workflows/build.yml
1414
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, ${{ vars.RELEASE_PR_BRANCH || 'create-pull-request' }}) && github.repository == 'darvid/python-hyperscan'
15+
permissions:
16+
contents: read
17+
actions: write
1518
with:
1619
force_build: true
1720

@@ -40,14 +43,42 @@ jobs:
4043
- name: List artifacts
4144
run: ls -R dist/
4245

46+
- name: Check if release is needed
47+
id: release_check
48+
run: |
49+
# Check if HEAD already has a release version tag (prevents redundant releases)
50+
if git describe --exact-match --tags HEAD --match "v*" 2>/dev/null; then
51+
EXISTING_TAG=$(git describe --exact-match --tags HEAD --match "v*" 2>/dev/null)
52+
echo "HEAD already tagged with release version $EXISTING_TAG, no release needed"
53+
echo "should_release=false" >> $GITHUB_OUTPUT
54+
else
55+
# Check if there are commits since last release
56+
LATEST_TAG=$(git describe --tags --abbrev=0 --match "v*" 2>/dev/null || echo "")
57+
if [[ -n "$LATEST_TAG" ]]; then
58+
COMMITS_COUNT=$(git rev-list ${LATEST_TAG}..HEAD --count 2>/dev/null || echo "1")
59+
if [[ "$COMMITS_COUNT" -eq 0 ]]; then
60+
echo "No commits since last release $LATEST_TAG, no new content to release"
61+
echo "should_release=false" >> $GITHUB_OUTPUT
62+
else
63+
echo "Found $COMMITS_COUNT commits since $LATEST_TAG, proceeding with release"
64+
echo "should_release=true" >> $GITHUB_OUTPUT
65+
fi
66+
else
67+
echo "No previous release found, proceeding with initial release"
68+
echo "should_release=true" >> $GITHUB_OUTPUT
69+
fi
70+
fi
71+
4372
- name: Publish to GitHub Releases
73+
if: steps.release_check.outputs.should_release == 'true'
4474
uses: python-semantic-release/publish-action@v9.21.1
4575
with:
4676
inputs: ./dist
4777
github_token: ${{ secrets.GITHUB_TOKEN }}
4878
tag: latest
4979

5080
- name: Publish to PyPI
81+
if: steps.release_check.outputs.should_release == 'true'
5182
uses: pypa/gh-action-pypi-publish@release/v1
5283
with:
5384
skip-existing: true

0 commit comments

Comments
 (0)