@@ -31,11 +31,17 @@ jobs:
3131 prepare :
3232 runs-on : ubuntu-latest
3333 outputs :
34+ should_release : ${{ steps.meta.outputs.should_release }}
3435 channel : ${{ steps.meta.outputs.channel }}
3536 version_tag : ${{ steps.meta.outputs.version_tag }}
3637 prerelease : ${{ steps.meta.outputs.prerelease }}
3738 release_name : ${{ steps.meta.outputs.release_name }}
3839 steps :
40+ - name : Checkout
41+ uses : actions/checkout@v4
42+ with :
43+ fetch-depth : 0
44+
3945 - name : Determine release metadata
4046 id : meta
4147 shell : bash
4753 input_channel="${{ github.event.inputs.channel || '' }}"
4854 input_tag="${{ github.event.inputs.version_tag || '' }}"
4955
56+ should_release="true"
5057 channel="edge"
5158 prerelease="true"
5259 version_tag=""
@@ -77,11 +84,20 @@ jobs:
7784 version_tag="edge-$(date -u +%Y%m%d)-${GITHUB_SHA:0:7}"
7885 fi
7986 else
87+ latest_edge_tag="$(git for-each-ref --sort=-creatordate --format='%(refname:strip=2)' refs/tags/edge-* | head -n1)"
88+ if [[ -n "$latest_edge_tag" ]]; then
89+ latest_edge_sha="$(git rev-list -n 1 "$latest_edge_tag")"
90+ if [[ "$latest_edge_sha" == "$GITHUB_SHA" ]]; then
91+ should_release="false"
92+ fi
93+ fi
94+
8095 channel="edge"
8196 prerelease="true"
8297 version_tag="edge-$(date -u +%Y%m%d)-${GITHUB_SHA:0:7}"
8398 fi
8499
100+ echo "should_release=$should_release" >> "$GITHUB_OUTPUT"
85101 echo "channel=$channel" >> "$GITHUB_OUTPUT"
86102 echo "version_tag=$version_tag" >> "$GITHUB_OUTPUT"
87103 echo "prerelease=$prerelease" >> "$GITHUB_OUTPUT"
93109 # -------------------------------------------------------------------
94110 build-go :
95111 needs : prepare
112+ if : needs.prepare.outputs.should_release == 'true'
96113 runs-on : ubuntu-latest
97114 strategy :
98115 fail-fast : false
@@ -248,6 +265,7 @@ jobs:
248265 # -------------------------------------------------------------------
249266 smoke-native :
250267 needs : [prepare, build-go]
268+ if : needs.prepare.outputs.should_release == 'true'
251269 strategy :
252270 fail-fast : false
253271 matrix :
@@ -288,6 +306,7 @@ jobs:
288306 # -------------------------------------------------------------------
289307 build-electron :
290308 needs : prepare
309+ if : needs.prepare.outputs.should_release == 'true'
291310 strategy :
292311 fail-fast : false
293312 matrix :
@@ -350,6 +369,7 @@ jobs:
350369 # -------------------------------------------------------------------
351370 release :
352371 needs : [prepare, build-go, smoke-native, build-electron]
372+ if : needs.prepare.outputs.should_release == 'true'
353373 runs-on : ubuntu-latest
354374 steps :
355375 - name : Checkout
@@ -403,13 +423,31 @@ jobs:
403423 subject-path : release_files/*
404424
405425 - name : Create GitHub Release
406- uses : softprops/action-gh-release@v2
407- with :
408- tag_name : ${{ needs.prepare.outputs.version_tag }}
409- name : ${{ needs.prepare.outputs.release_name }}
410- prerelease : ${{ needs.prepare.outputs.prerelease == 'true' }}
411- draft : false
412- generate_release_notes : true
413- files : release_files/*
426+ shell : bash
414427 env :
415428 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
429+ run : |
430+ set -euo pipefail
431+
432+ args=(
433+ release create
434+ "${{ needs.prepare.outputs.version_tag }}"
435+ --repo "${GITHUB_REPOSITORY}"
436+ --target "${GITHUB_SHA}"
437+ --title "${{ needs.prepare.outputs.release_name }}"
438+ --generate-notes
439+ )
440+
441+ if [[ "${{ needs.prepare.outputs.prerelease }}" == "true" ]]; then
442+ args+=(--prerelease)
443+ fi
444+
445+ shopt -s nullglob
446+ files=(release_files/*)
447+ if [[ ${#files[@]} -eq 0 ]]; then
448+ echo "No release files found"
449+ exit 1
450+ fi
451+ args+=("${files[@]}")
452+
453+ gh "${args[@]}"
0 commit comments