Skip to content

Commit 33d3e8d

Browse files
authored
ci: make cd idempotent (#33)
- make cd idempotent
1 parent 5a34177 commit 33d3e8d

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

.github/workflows/cd.yml

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,46 @@ jobs:
1515
name: versioning
1616
runs-on: ubuntu-latest
1717
outputs:
18-
new_release_version: ${{ steps.release.outputs.new_release_version }}
19-
new_release_published: ${{ steps.release.outputs.new_release_published }}
18+
new_release_version: ${{ steps.set-outputs.outputs.version }}
19+
new_release_published: ${{ steps.set-outputs.outputs.published }}
2020
steps:
2121
- name: Checkout
2222
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
2323
with:
2424
fetch-depth: 0
2525

26+
- name: Check existing release
27+
id: check-release
28+
run: |
29+
CURRENT_SHA=$(git rev-parse HEAD)
30+
EXISTING_TAG=$(git tag --points-at $CURRENT_SHA | grep '^v' | head -1)
31+
if [ -n "$EXISTING_TAG" ]; then
32+
echo "existing_tag=$EXISTING_TAG" >> $GITHUB_OUTPUT
33+
echo "existing_version=${EXISTING_TAG#v}" >> $GITHUB_OUTPUT
34+
echo "has_existing=true" >> $GITHUB_OUTPUT
35+
else
36+
echo "has_existing=false" >> $GITHUB_OUTPUT
37+
fi
38+
2639
- id: release
2740
name: Release
41+
if: steps.check-release.outputs.has_existing == 'false'
2842
uses: cycjimmy/semantic-release-action@16ca923e6ccbb50770c415a0ccd43709a8c5f7a4 # v4.2.2
2943
env:
3044
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3145

32-
- name: Use version output
33-
run: echo "Released version is ${{ steps.release.outputs.new_release_version }}"
46+
- name: Set outputs
47+
id: set-outputs
48+
run: |
49+
if [ "${{ steps.check-release.outputs.has_existing }}" == "true" ]; then
50+
echo "version=${{ steps.check-release.outputs.existing_version }}" >> $GITHUB_OUTPUT
51+
echo "published=true" >> $GITHUB_OUTPUT
52+
echo "Using existing release: ${{ steps.check-release.outputs.existing_version }}"
53+
else
54+
echo "version=${{ steps.release.outputs.new_release_version }}" >> $GITHUB_OUTPUT
55+
echo "published=${{ steps.release.outputs.new_release_published }}" >> $GITHUB_OUTPUT
56+
echo "New release: ${{ steps.release.outputs.new_release_version }}"
57+
fi
3458
3559
release-bin:
3660
name: release-bin-github-${{ matrix.name }}
@@ -126,4 +150,4 @@ jobs:
126150
sed -i "s/^version = \".*\"/version = \"${{ needs.versioning.outputs.new_release_version }}\"/" Cargo.toml
127151
128152
- name: Release to crates.io
129-
run: cargo publish --token ${{ secrets.CARGO_TOKEN }} --allow-dirty
153+
run: cargo publish --token ${{ secrets.CARGO_TOKEN }} --allow-dirty || true

0 commit comments

Comments
 (0)