Skip to content

Commit 24dd6cb

Browse files
authored
fix(release): skip empty nightlies and harden publish flow (KafClaw#38)
1 parent 436db29 commit 24dd6cb

6 files changed

Lines changed: 61 additions & 15 deletions

File tree

.github/workflows/release.yml

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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
@@ -47,6 +53,7 @@ jobs:
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"
@@ -93,6 +109,7 @@ jobs:
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[@]}"

docs/operations-admin/release.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ title: Release Process
1010
KafClaw uses semantic versioning (`MAJOR.MINOR.PATCH`). The version is defined in `internal/cli/root.go` and can be overridden at build time:
1111

1212
```bash
13-
go build -ldflags "-X github.com/kamir/kafclaw/internal/cli.version=2.6.0" ./cmd/kafclaw
13+
go build -ldflags "-X github.com/KafClaw/KafClaw/internal/cli.version=0.1.0" ./cmd/kafclaw
1414
```
1515

1616
## Make Targets
@@ -33,8 +33,9 @@ Release commits are created from the repository root (all staged changes include
3333

3434
## GitHub Actions
3535

36-
- Workflow: `.github/workflows/release-go.yml`
37-
- Trigger: tag push `v*` or manual `workflow_dispatch`
36+
- Workflow: `.github/workflows/release.yml`
37+
- Trigger: tag push `v*`, scheduled edge releases, or manual `workflow_dispatch`
38+
- Scheduled edge releases are skipped when `main` has not moved since the most recent `edge-*` tag
3839
- Build matrix: `ubuntu-latest`, `macos-latest`, `windows-latest`
3940
- Artifacts attached to GitHub Release via `softprops/action-gh-release@v2`
4041

electron/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

electron/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kafclaw-desktop",
3-
"version": "2.7.0",
3+
"version": "0.1.0",
44
"description": "KafClaw Desktop - AI Assistant with three operation modes",
55
"main": "dist/main/index.js",
66
"scripts": {

internal/cli/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
var (
99
// version can be overridden at build time via:
1010
// go build -ldflags "-X github.com/KafClaw/KafClaw/internal/cli.version=1.2.3"
11-
version = "2.7.0"
11+
version = "0.1.0"
1212
logo = "\n" +
1313
" _ __ __ ____ _\n" +
1414
" | |/ / __ _ / _|/ ___| | __ ___ __\n" +

scripts/release.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ if [[ -f "$ELECTRON_PKG" ]]; then
6262
echo "Electron version synced to $NEXT"
6363
fi
6464

65+
ELECTRON_LOCK="${ROOT_DIR}/electron/package-lock.json"
66+
if [[ -f "$ELECTRON_LOCK" ]]; then
67+
sedi -E "0,/\"version\": \"[0-9]+\.[0-9]+\.[0-9]+\"/s//\"version\": \"$NEXT\"/" "$ELECTRON_LOCK"
68+
sedi -E "0,/\"version\": \"[0-9]+\.[0-9]+\.[0-9]+\"/s//\"version\": \"$NEXT\"/" "$ELECTRON_LOCK"
69+
echo "Electron lockfile version synced to $NEXT"
70+
fi
71+
6572
git -C "$GIT_ROOT" add -A
6673
git commit -m "Release v$NEXT"
6774
git tag "v$NEXT"

0 commit comments

Comments
 (0)