AgentSkillsCN

electron-release

指导 Electron 应用的发布流程,包括构建、代码签名、公证,以及支持自动更新的 GitHub Release。适用于发布 Electron 应用、创建 DMG 安装包、设置自动更新,或排查公证问题时使用。

SKILL.md
--- frontmatter
name: electron-release
description: Guides Electron app release process including build, code signing, notarization, and GitHub Release with auto-update support. Use when releasing Electron apps, creating DMG installers, setting up auto-update, or troubleshooting notarization issues.

Electron Release Guide

Complete release workflow for Electron applications with auto-update support.

Supported Configurations

StackPlatformBuild TypeStatus
Vite + electron-buildermacOSLocal✅ Documented
Other configurations--📝 To be added

Quick Start (macOS + Vite + electron-builder)

bash
# 1. Build with notarization
APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac

# 2. Rename ZIPs (GitHub converts spaces to dots)
cp "dist/App Name-X.Y.Z-arm64-mac.zip" "dist/App-Name-X.Y.Z-arm64-mac.zip"
cp "dist/App Name-X.Y.Z-mac.zip" "dist/App-Name-X.Y.Z-mac.zip"

# 3. Create release with ALL files
gh release create vX.Y.Z \
  dist/latest-mac.yml \
  "dist/App-Name-X.Y.Z-arm64-mac.zip" \
  "dist/App-Name-X.Y.Z-mac.zip" \
  dist/app-name-X.Y.Z-arm64.dmg \
  dist/app-name-X.Y.Z-x64.dmg \
  --title "vX.Y.Z" --notes "Release notes..."

Complete Workflow

Phase 1: Pre-Release

  1. Update version in package.json
  2. Commit version bump:
    bash
    git add package.json
    git commit -m "chore(release): bump version to X.Y.Z"
    git push origin main
    

Phase 2: Build

  1. Build with notarization:

    bash
    APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac
    
    Env VarPurpose
    APPLE_KEYCHAIN_PROFILEKeychain profile for notarization
    Alternative: APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_IDDirect credentials
  2. Verify build output:

    bash
    ls -la dist/*.dmg dist/*.zip dist/*.yml
    

    Expected files:

    • latest-mac.yml - Auto-update metadata
    • App Name-X.Y.Z-arm64-mac.zip - ARM64 update payload
    • App Name-X.Y.Z-mac.zip - x64 update payload
    • app-name-X.Y.Z-arm64.dmg - ARM64 installer
    • app-name-X.Y.Z-x64.dmg - x64 installer

Phase 3: Prepare Release Assets

  1. Rename ZIP files (critical for auto-update):

    bash
    # GitHub converts spaces to dots, but latest-mac.yml expects hyphens
    cp "dist/App Name-X.Y.Z-arm64-mac.zip" "dist/App-Name-X.Y.Z-arm64-mac.zip"
    cp "dist/App Name-X.Y.Z-mac.zip" "dist/App-Name-X.Y.Z-mac.zip"
    
  2. Verify latest-mac.yml URLs match renamed files:

    bash
    cat dist/latest-mac.yml
    # Check that 'url:' entries match your renamed ZIP filenames
    

Phase 4: GitHub Release

  1. Create release with all required files:

    bash
    gh release create vX.Y.Z \
      dist/latest-mac.yml \
      "dist/App-Name-X.Y.Z-arm64-mac.zip" \
      "dist/App-Name-X.Y.Z-mac.zip" \
      dist/app-name-X.Y.Z-arm64.dmg \
      dist/app-name-X.Y.Z-x64.dmg \
      --title "vX.Y.Z" \
      --notes "$(cat <<'EOF'
    ## What's Changed
    - Feature 1
    - Bug fix 2
    EOF
    )"
    
  2. Verify release assets:

    bash
    gh release view vX.Y.Z --json assets --jq '.assets[].name'
    

Required Files for Auto-Update

FilePurposeMissing =
latest-mac.ymlVersion + SHA512 hashes"No updates available"
*-arm64-mac.zipARM64 update payloadDownload fails on M1/M2/M3
*-mac.zipx64 update payloadDownload fails on Intel
*.dmgManual downloadNo manual install option

Common Mistakes

MistakeSymptomFix
DMG only, no ZIPAuto-update silently failsUpload all ZIP files
Missing latest-mac.yml"No updates available"Upload latest-mac.yml
Wrong ZIP filenameDownload errorRename to match latest-mac.yml URLs
No notarization env varGatekeeper blocks appSet APPLE_KEYCHAIN_PROFILE
Spaces in filename404 on downloadRename: spaces → hyphens

Troubleshooting

"Download error" on auto-update

bash
# Check if filenames match
cat dist/latest-mac.yml | grep url:
gh release view vX.Y.Z --json assets --jq '.assets[].name'
# URLs in yml must exactly match asset names

"No updates available"

bash
# Verify latest-mac.yml is uploaded
gh release view vX.Y.Z --json assets --jq '.assets[].name' | grep yml

Gatekeeper blocks app

bash
# Rebuild with notarization
APPLE_KEYCHAIN_PROFILE=your-profile pnpm build:mac
# Check build log for "notarization successful"

electron-builder.yml Reference

yaml
mac:
  target:
    - target: dmg
      arch: [arm64, x64]
    - target: zip
      arch: [arm64, x64]
  notarize: true
  hardenedRuntime: true

publish:
  provider: github
  owner: your-org
  repo: your-repo

Success Criteria

  • Build completes with "notarization successful"
  • All 5 files uploaded to GitHub Release
  • ZIP filenames match latest-mac.yml URLs exactly
  • Test: older version detects update
  • Test: download and install succeeds