ci: auto-detect patch vs full, control asar upload accordingly
Build and Release / build-and-release (push) Successful in 8s
Build and Release / build-and-release (push) Successful in 8s
This commit is contained in:
@@ -75,7 +75,7 @@ jobs:
|
|||||||
CHANGED=$(git diff --name-only "$PREV_TAG"..HEAD)
|
CHANGED=$(git diff --name-only "$PREV_TAG"..HEAD)
|
||||||
echo "$CHANGED"
|
echo "$CHANGED"
|
||||||
|
|
||||||
# Files that require a full (installer) build
|
# Files that require a full (installer-only) release
|
||||||
FULL_TRIGGERS="electron-builder.yml|scripts/download-electron.js"
|
FULL_TRIGGERS="electron-builder.yml|scripts/download-electron.js"
|
||||||
|
|
||||||
if echo "$CHANGED" | grep -qE "^($FULL_TRIGGERS)$"; then
|
if echo "$CHANGED" | grep -qE "^($FULL_TRIGGERS)$"; then
|
||||||
@@ -105,9 +105,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '22'
|
||||||
|
|
||||||
# Full build needs wine + system deps for electron-builder
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'full'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
run: |
|
run: |
|
||||||
sudo dpkg --add-architecture i386
|
sudo dpkg --add-architecture i386
|
||||||
sudo apt-get update -qq
|
sudo apt-get update -qq
|
||||||
@@ -123,39 +122,29 @@ jobs:
|
|||||||
if: steps.version-check.outputs.SKIP == 'false'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
run: npm ci --legacy-peer-deps
|
run: npm ci --legacy-peer-deps
|
||||||
|
|
||||||
# ── Patch release: asar only ──
|
|
||||||
|
|
||||||
- name: Build asar
|
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'patch'
|
|
||||||
run: npm run build:asar
|
|
||||||
|
|
||||||
# ── Full release: installer + asar ──
|
|
||||||
|
|
||||||
- name: Build source
|
- name: Build source
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'full'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
run: npm run build
|
run: npm run build
|
||||||
|
|
||||||
- name: Build Windows distributables
|
- name: Build Windows distributables
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'full'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
env:
|
env:
|
||||||
WINEDEBUG: "-all"
|
WINEDEBUG: "-all"
|
||||||
run: npx electron-builder --win -c.electronDist=node_modules/electron/dist-win --publish never
|
run: npx electron-builder --win -c.electronDist=node_modules/electron/dist-win --publish never
|
||||||
|
|
||||||
- name: Build Linux distributables
|
- name: Build Linux distributables
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'full'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
run: npx electron-builder --linux -c.electronDist=node_modules/electron/dist-linux --publish never
|
run: npx electron-builder --linux -c.electronDist=node_modules/electron/dist-linux --publish never
|
||||||
|
|
||||||
- name: Build asar for full release
|
- name: Build asar for patch updates
|
||||||
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'full'
|
if: steps.version-check.outputs.SKIP == 'false' && steps.release-type.outputs.TYPE == 'patch'
|
||||||
run: npm run build:asar
|
run: npm run build:asar
|
||||||
|
|
||||||
- name: Report build sizes
|
- name: Report build sizes
|
||||||
if: steps.version-check.outputs.SKIP == 'false'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
run: |
|
run: |
|
||||||
echo "=== Release type: ${{ steps.release-type.outputs.TYPE }} ==="
|
echo "=== Release type: ${{ steps.release-type.outputs.TYPE }} ==="
|
||||||
if [ "${{ steps.release-type.outputs.TYPE }}" = "full" ]; then
|
|
||||||
ls -lh out/*.exe out/*.AppImage out/*.deb 2>/dev/null || true
|
ls -lh out/*.exe out/*.AppImage out/*.deb 2>/dev/null || true
|
||||||
fi
|
|
||||||
ls -lh out/asar/* 2>/dev/null || true
|
ls -lh out/asar/* 2>/dev/null || true
|
||||||
|
|
||||||
- name: Generate release notes
|
- name: Generate release notes
|
||||||
@@ -215,7 +204,8 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Upload asar + checksums (both patch and full releases)
|
# Upload asar + checksums (patch releases only — signals client to use fast path)
|
||||||
|
if [ "$RELEASE_TYPE" = "patch" ]; then
|
||||||
for file in out/asar/app.asar out/asar/checksums.sha256; do
|
for file in out/asar/app.asar out/asar/checksums.sha256; do
|
||||||
[ -f "$file" ] || continue
|
[ -f "$file" ] || continue
|
||||||
FILENAME=$(basename "$file")
|
FILENAME=$(basename "$file")
|
||||||
@@ -226,9 +216,11 @@ jobs:
|
|||||||
-F "attachment=@$file" \
|
-F "attachment=@$file" \
|
||||||
| jq -r '" -> \(.name) (\(.size) bytes)"'
|
| jq -r '" -> \(.name) (\(.size) bytes)"'
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
echo "Full release — skipping asar upload (forces installer update)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Upload installer artifacts (full release only)
|
# Upload installers (always — for new users and major updates)
|
||||||
if [ "$RELEASE_TYPE" = "full" ]; then
|
|
||||||
for file in out/*.exe out/*.AppImage out/*.deb; do
|
for file in out/*.exe out/*.AppImage out/*.deb; do
|
||||||
[ -f "$file" ] || continue
|
[ -f "$file" ] || continue
|
||||||
FILENAME=$(basename "$file")
|
FILENAME=$(basename "$file")
|
||||||
@@ -240,9 +232,8 @@ jobs:
|
|||||||
-F "attachment=@$file" \
|
-F "attachment=@$file" \
|
||||||
| jq -r '" -> \(.name) (\(.size) bytes)"'
|
| jq -r '" -> \(.name) (\(.size) bytes)"'
|
||||||
done
|
done
|
||||||
fi
|
|
||||||
|
|
||||||
echo "All assets uploaded (release type: $RELEASE_TYPE)"
|
echo "All assets uploaded"
|
||||||
|
|
||||||
- name: Prune old releases
|
- name: Prune old releases
|
||||||
if: steps.version-check.outputs.SKIP == 'false'
|
if: steps.version-check.outputs.SKIP == 'false'
|
||||||
|
|||||||
Reference in New Issue
Block a user