Skip to content

Commit 0c80605

Browse files
fix(release): map prerelease desktop builds to canary
Electrobun only supports dev, canary, and stable build environments, so beta and candidate release jobs were writing outputs under unexpected paths and uploader asset prefixes. Map prerelease builds to canary internally while preserving the public beta/candidate release contract. Co-Authored-By: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
1 parent b63568f commit 0c80605

2 files changed

Lines changed: 104 additions & 30 deletions

File tree

.github/workflows/release-desktop.yml

Lines changed: 98 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
outputs:
3131
version: ${{ steps.release_meta.outputs.version }}
3232
build_env: ${{ steps.release_meta.outputs.build_env }}
33+
electrobun_env: ${{ steps.release_meta.outputs.electrobun_env }}
3334
commit: ${{ steps.release_meta.outputs.commit }}
3435
steps:
3536
- name: Validate version format
@@ -52,14 +53,18 @@ jobs:
5253
run: |
5354
if echo "$VERSION" | grep -q -- '-beta\.'; then
5455
BUILD_ENV="beta"
56+
ELECTROBUN_ENV="canary"
5557
elif echo "$VERSION" | grep -q -- '-rc\.'; then
5658
BUILD_ENV="candidate"
59+
ELECTROBUN_ENV="canary"
5760
else
5861
BUILD_ENV="stable"
62+
ELECTROBUN_ENV="stable"
5963
fi
6064
6165
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
6266
echo "build_env=$BUILD_ENV" >> "$GITHUB_OUTPUT"
67+
echo "electrobun_env=$ELECTROBUN_ENV" >> "$GITHUB_OUTPUT"
6368
echo "commit=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
6469
6570
verify:
@@ -120,8 +125,8 @@ jobs:
120125
121126
- name: Build Electrobun app
122127
env:
123-
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
124-
run: bun run build -- --env="$BUILD_ENV"
128+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
129+
run: bun run build -- --env="$ELECTROBUN_ENV"
125130

126131
- name: Import code signing certificate
127132
env:
@@ -148,12 +153,12 @@ jobs:
148153
149154
- name: Sign and notarize macOS app
150155
env:
151-
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
156+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
152157
APPLE_ID: ${{ secrets.APPLE_ID }}
153158
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
154159
APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }}
155160
run: |
156-
BUILD_DIR="apps/desktop/build/${BUILD_ENV}-macos-arm64"
161+
BUILD_DIR="apps/desktop/build/${ELECTROBUN_ENV}-macos-arm64"
157162
if [ ! -d "$BUILD_DIR" ]; then
158163
echo "::error::Expected build output in $BUILD_DIR"
159164
find apps/desktop/build -maxdepth 2 -type d || true
@@ -204,8 +209,10 @@ jobs:
204209
env:
205210
VERSION: ${{ needs.release-meta.outputs.version }}
206211
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
212+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
207213
run: |
208214
PREFIX="${BUILD_ENV}-macos-arm64"
215+
SOURCE_PREFIX="${ELECTROBUN_ENV}-macos-arm64"
209216
USER_DMG="Klovi-${VERSION}-macos-arm64.dmg"
210217
STAGING_DIR=$(mktemp -d /tmp/klovi-dmg.XXXXXX)
211218
cp -R "$APP_DIR" "$STAGING_DIR/"
@@ -224,6 +231,27 @@ jobs:
224231
"$ZSTD_PATH" compress -i "$TARBALL_PATH" -o "apps/desktop/artifacts/${PREFIX}-Klovi.app.tar.zst" --threads max --no-timing
225232
rm -f "$TARBALL_PATH"
226233
234+
SOURCE_UPDATE_JSON="apps/desktop/artifacts/${SOURCE_PREFIX}-update.json"
235+
TARGET_UPDATE_JSON="apps/desktop/artifacts/${PREFIX}-update.json"
236+
if [ ! -f "$SOURCE_UPDATE_JSON" ]; then
237+
echo "::error::Expected updater metadata at $SOURCE_UPDATE_JSON"
238+
find apps/desktop/artifacts -maxdepth 1 -type f -print || true
239+
exit 1
240+
fi
241+
if [ "$SOURCE_UPDATE_JSON" != "$TARGET_UPDATE_JSON" ]; then
242+
cp "$SOURCE_UPDATE_JSON" "$TARGET_UPDATE_JSON"
243+
fi
244+
245+
for source_patch in apps/desktop/artifacts/${SOURCE_PREFIX}-*.patch; do
246+
[ -e "$source_patch" ] || continue
247+
source_name=$(basename "$source_patch")
248+
suffix="${source_name#${SOURCE_PREFIX}-}"
249+
target_patch="apps/desktop/artifacts/${PREFIX}-${suffix}"
250+
if [ "$source_patch" != "$target_patch" ]; then
251+
cp "$source_patch" "$target_patch"
252+
fi
253+
done
254+
227255
echo "USER_DMG=$USER_DMG" >> "$GITHUB_ENV"
228256
229257
- name: Upload macOS user-facing asset
@@ -302,21 +330,25 @@ jobs:
302330
303331
- name: Build Electrobun app
304332
env:
305-
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
306-
run: bun run build -- --env="$BUILD_ENV"
333+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
334+
run: bun run build -- --env="$ELECTROBUN_ENV"
307335

308336
- name: Upload Linux user-facing and updater assets
309337
env:
310338
GH_TOKEN: ${{ github.token }}
311339
VERSION: ${{ needs.release-meta.outputs.version }}
312340
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
341+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
313342
ELECTROBUN_ARCH: ${{ matrix.electrobun_arch }}
314343
ARTIFACT_ARCH: ${{ matrix.artifact_arch }}
315344
run: |
316-
PREFIX="${BUILD_ENV}-linux-${ELECTROBUN_ARCH}"
317-
INSTALLER=$(find "apps/desktop/build/${PREFIX}" -maxdepth 1 -type f -name '*Setup*.tar.gz' | head -1)
345+
SOURCE_PREFIX="${ELECTROBUN_ENV}-linux-${ELECTROBUN_ARCH}"
346+
TARGET_PREFIX="${BUILD_ENV}-linux-${ELECTROBUN_ARCH}"
347+
SOURCE_BUILD_DIR="apps/desktop/build/${SOURCE_PREFIX}"
348+
349+
INSTALLER=$(find "$SOURCE_BUILD_DIR" -maxdepth 1 -type f -name '*Setup*.tar.gz' | head -1)
318350
if [ -z "$INSTALLER" ]; then
319-
echo "::error::Expected installer in apps/desktop/build/${PREFIX}"
351+
echo "::error::Expected installer in $SOURCE_BUILD_DIR"
320352
find apps/desktop/build -maxdepth 2 -type f -name '*.tar.gz' 2>/dev/null || true
321353
exit 1
322354
fi
@@ -325,22 +357,40 @@ jobs:
325357
cp "$INSTALLER" "$USER_ASSET"
326358
gh release upload "$VERSION" "$USER_ASSET" --clobber
327359
328-
FULL_BUNDLE=$(find apps/desktop/artifacts -maxdepth 1 -type f -name "${PREFIX}-*.tar.zst" ! -name "${PREFIX}-*Setup*.tar.zst" | head -1)
360+
FULL_BUNDLE=$(find apps/desktop/artifacts -maxdepth 1 -type f -name "${SOURCE_PREFIX}-*.tar.zst" ! -name "${SOURCE_PREFIX}-*Setup*.tar.zst" | head -1)
329361
if [ -z "$FULL_BUNDLE" ]; then
330-
echo "::error::Expected updater bundle for ${PREFIX}"
331-
find apps/desktop/artifacts -maxdepth 1 -type f -name "${PREFIX}-*" 2>/dev/null || true
362+
echo "::error::Expected updater bundle for ${SOURCE_PREFIX}"
363+
find apps/desktop/artifacts -maxdepth 1 -type f -name "${SOURCE_PREFIX}-*" 2>/dev/null || true
332364
exit 1
333365
fi
334366
335-
NORMALIZED_BUNDLE="apps/desktop/artifacts/${PREFIX}-Klovi.tar.zst"
367+
NORMALIZED_BUNDLE="apps/desktop/artifacts/${TARGET_PREFIX}-Klovi.tar.zst"
336368
if [ "$FULL_BUNDLE" != "$NORMALIZED_BUNDLE" ]; then
337369
cp "$FULL_BUNDLE" "$NORMALIZED_BUNDLE"
338370
fi
339371
gh release upload "$VERSION" "$NORMALIZED_BUNDLE" --clobber
340372
341-
for file in apps/desktop/artifacts/${PREFIX}-*.patch "apps/desktop/artifacts/${PREFIX}-update.json"; do
342-
[ -e "$file" ] || continue
343-
gh release upload "$VERSION" "$file" --clobber
373+
SOURCE_UPDATE_JSON="apps/desktop/artifacts/${SOURCE_PREFIX}-update.json"
374+
TARGET_UPDATE_JSON="apps/desktop/artifacts/${TARGET_PREFIX}-update.json"
375+
if [ ! -f "$SOURCE_UPDATE_JSON" ]; then
376+
echo "::error::Expected updater metadata at $SOURCE_UPDATE_JSON"
377+
find apps/desktop/artifacts -maxdepth 1 -type f -print || true
378+
exit 1
379+
fi
380+
if [ "$SOURCE_UPDATE_JSON" != "$TARGET_UPDATE_JSON" ]; then
381+
cp "$SOURCE_UPDATE_JSON" "$TARGET_UPDATE_JSON"
382+
fi
383+
gh release upload "$VERSION" "$TARGET_UPDATE_JSON" --clobber
384+
385+
for source_patch in apps/desktop/artifacts/${SOURCE_PREFIX}-*.patch; do
386+
[ -e "$source_patch" ] || continue
387+
source_name=$(basename "$source_patch")
388+
suffix="${source_name#${SOURCE_PREFIX}-}"
389+
target_patch="apps/desktop/artifacts/${TARGET_PREFIX}-${suffix}"
390+
if [ "$source_patch" != "$target_patch" ]; then
391+
cp "$source_patch" "$target_patch"
392+
fi
393+
gh release upload "$VERSION" "$target_patch" --clobber
344394
done
345395
346396
- name: Install nfpm
@@ -357,7 +407,7 @@ jobs:
357407
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
358408
ELECTROBUN_ARCH: ${{ matrix.electrobun_arch }}
359409
ARTIFACT_ARCH: ${{ matrix.artifact_arch }}
360-
BUILD_DIR: build/${{ needs.release-meta.outputs.build_env }}-linux-${{ matrix.electrobun_arch }}
410+
BUILD_DIR: build/${{ needs.release-meta.outputs.electrobun_env }}-linux-${{ matrix.electrobun_arch }}
361411
NFPM_ARCH: ${{ matrix.artifact_arch }}
362412
run: |
363413
if [ ! -d "$BUILD_DIR" ]; then
@@ -417,18 +467,20 @@ jobs:
417467
418468
- name: Build Electrobun app
419469
env:
420-
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
421-
run: bun run build -- --env="$BUILD_ENV"
470+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
471+
run: bun run build -- --env="$ELECTROBUN_ENV"
422472

423473
- name: Upload Windows user-facing and updater assets
424474
shell: bash
425475
env:
426476
GH_TOKEN: ${{ github.token }}
427477
VERSION: ${{ needs.release-meta.outputs.version }}
428478
BUILD_ENV: ${{ needs.release-meta.outputs.build_env }}
479+
ELECTROBUN_ENV: ${{ needs.release-meta.outputs.electrobun_env }}
429480
run: |
430-
PREFIX="${BUILD_ENV}-win-x64"
431-
BUILD_DIR="apps/desktop/build/${PREFIX}"
481+
SOURCE_PREFIX="${ELECTROBUN_ENV}-win-x64"
482+
TARGET_PREFIX="${BUILD_ENV}-win-x64"
483+
BUILD_DIR="apps/desktop/build/${SOURCE_PREFIX}"
432484
433485
INSTALLER=$(find "$BUILD_DIR" -maxdepth 1 -type f -name '*Setup*.exe' | head -1)
434486
if [ -z "$INSTALLER" ]; then
@@ -441,22 +493,40 @@ jobs:
441493
cp "$INSTALLER" "$USER_ASSET"
442494
gh release upload "$VERSION" "$USER_ASSET" --clobber
443495
444-
FULL_BUNDLE=$(find apps/desktop/artifacts -maxdepth 1 -type f -name "${PREFIX}-*.tar.zst" ! -name "${PREFIX}-*Setup*.tar.zst" | head -1)
496+
FULL_BUNDLE=$(find apps/desktop/artifacts -maxdepth 1 -type f -name "${SOURCE_PREFIX}-*.tar.zst" ! -name "${SOURCE_PREFIX}-*Setup*.tar.zst" | head -1)
445497
if [ -z "$FULL_BUNDLE" ]; then
446-
echo "::error::Expected updater bundle for ${PREFIX}"
447-
find apps/desktop/artifacts -maxdepth 1 -type f -name "${PREFIX}-*" 2>/dev/null || true
498+
echo "::error::Expected updater bundle for ${SOURCE_PREFIX}"
499+
find apps/desktop/artifacts -maxdepth 1 -type f -name "${SOURCE_PREFIX}-*" 2>/dev/null || true
448500
exit 1
449501
fi
450502
451-
NORMALIZED_BUNDLE="apps/desktop/artifacts/${PREFIX}-Klovi.tar.zst"
503+
NORMALIZED_BUNDLE="apps/desktop/artifacts/${TARGET_PREFIX}-Klovi.tar.zst"
452504
if [ "$FULL_BUNDLE" != "$NORMALIZED_BUNDLE" ]; then
453505
cp "$FULL_BUNDLE" "$NORMALIZED_BUNDLE"
454506
fi
455507
gh release upload "$VERSION" "$NORMALIZED_BUNDLE" --clobber
456508
457-
for file in apps/desktop/artifacts/${PREFIX}-*.patch "apps/desktop/artifacts/${PREFIX}-update.json"; do
458-
[ -e "$file" ] || continue
459-
gh release upload "$VERSION" "$file" --clobber
509+
SOURCE_UPDATE_JSON="apps/desktop/artifacts/${SOURCE_PREFIX}-update.json"
510+
TARGET_UPDATE_JSON="apps/desktop/artifacts/${TARGET_PREFIX}-update.json"
511+
if [ ! -f "$SOURCE_UPDATE_JSON" ]; then
512+
echo "::error::Expected updater metadata at $SOURCE_UPDATE_JSON"
513+
find apps/desktop/artifacts -maxdepth 1 -type f -print || true
514+
exit 1
515+
fi
516+
if [ "$SOURCE_UPDATE_JSON" != "$TARGET_UPDATE_JSON" ]; then
517+
cp "$SOURCE_UPDATE_JSON" "$TARGET_UPDATE_JSON"
518+
fi
519+
gh release upload "$VERSION" "$TARGET_UPDATE_JSON" --clobber
520+
521+
for source_patch in apps/desktop/artifacts/${SOURCE_PREFIX}-*.patch; do
522+
[ -e "$source_patch" ] || continue
523+
source_name=$(basename "$source_patch")
524+
suffix="${source_name#${SOURCE_PREFIX}-}"
525+
target_patch="apps/desktop/artifacts/${TARGET_PREFIX}-${suffix}"
526+
if [ "$source_patch" != "$target_patch" ]; then
527+
cp "$source_patch" "$target_patch"
528+
fi
529+
gh release upload "$VERSION" "$target_patch" --clobber
460530
done
461531
462532
update-cask:

scripts/build-release.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@ if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-(beta|rc)\.[0-9]+)?$ ]]; then
2626
fi
2727

2828
BUILD_ENV="stable"
29+
ELECTROBUN_ENV="stable"
2930
if [[ "$VERSION" == *-beta.* ]]; then
3031
BUILD_ENV="beta"
32+
ELECTROBUN_ENV="canary"
3133
elif [[ "$VERSION" == *-rc.* ]]; then
3234
BUILD_ENV="candidate"
35+
ELECTROBUN_ENV="canary"
3336
fi
3437

3538
# --- Load signing credentials ---
@@ -212,10 +215,10 @@ VERSION="$VERSION" COMMIT="$COMMIT" APP_PACKAGE_JSON="$APP_PACKAGE_JSON" bun -e
212215
# --- Build ---
213216
echo ""
214217
echo "Building $BUILD_ENV release..."
215-
bun run build -- --env="$BUILD_ENV"
218+
bun run build -- --env="$ELECTROBUN_ENV"
216219

217220
# --- Sign ---
218-
BUILD_DIR="apps/desktop/build/${BUILD_ENV}-macos-arm64"
221+
BUILD_DIR="apps/desktop/build/${ELECTROBUN_ENV}-macos-arm64"
219222
APP_BUNDLE_DIR=$(find "$BUILD_DIR" -maxdepth 1 -type d -name "*.app" | head -1)
220223

221224
if [[ -z "$APP_BUNDLE_DIR" ]]; then
@@ -280,4 +283,5 @@ echo "=== Build complete ==="
280283
echo " App: $APP_BUNDLE_DIR"
281284
echo " DMG: $DMG_NAME ($DMG_SIZE)"
282285
echo " Env: $BUILD_ENV"
286+
echo " Build: $ELECTROBUN_ENV"
283287
echo " Version: $VERSION"

0 commit comments

Comments
 (0)