Skip to main content

Build & Release

How to build FitFileViewer for distribution.

Development Build​

Quick Build​

# Build for current platform
npm run build

Development Package​

# Create unpacked build (faster, for testing)
npm run package

Production Build​

Single Platform​

# Windows
npm run build -- --win

# macOS
npm run build -- --mac

# Linux
npm run build -- --linux

All Platforms​

# Build for all platforms
npm run build-all

Build Configuration​

electron-builder.json​

{
"appId": "com.example.fitfileviewer",
"productName": "Fit File Viewer",
"files": [
"**/*",
"!tests/**"
],
"win": {
"target": ["nsis", "portable", "msi"],
"icon": "icons/favicon.ico"
},
"mac": {
"target": ["dmg", "pkg"],
"icon": "icons/favicon.icns"
},
"linux": {
"target": ["AppImage", "deb", "rpm"],
"icon": "icons/favicon.png"
}
}

package.json Build Settings​

{
"build": {
"appId": "com.example.fitfileviewer",
"artifactName": "Fit-File-Viewer-${platform}-${arch}-${version}.${ext}",
"publish": [{
"provider": "github",
"owner": "Nick2bad4u",
"repo": "FitFileViewer"
}]
}
}

Output Formats​

Windows​

FormatDescription
NSISStandard installer
MSIWindows Installer
PortableNo installation
SquirrelAuto-updating

macOS​

FormatDescription
DMGDisk image
PKGInstaller package
ZIPArchive

Linux​

FormatDescription
AppImageUniversal format
DEBDebian/Ubuntu
RPMFedora/RHEL
SnapSnap package

CI/CD Pipeline​

Builds are automated via GitHub Actions:

# .github/workflows/Build.yml
name: Build
on:
push:
branches: [main]
release:
types: [published]

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm install
- run: npm run build

Release Process​

1. Update Version​

# Update version in package.json
npm version patch # or minor, major

2. Update Changelog​

npm run changelog

3. Create Release​

# Push tag
git push --tags

# GitHub Actions builds and publishes

4. Verify Release​

Check GitHub Releases for:

  • All platform builds
  • Checksums
  • Release notes

Code Signing​

Windows​

Requires certificate:

{
"win": {
"certificateFile": "cert.pfx",
"certificatePassword": "${CSC_KEY_PASSWORD}"
}
}

macOS​

Requires Apple Developer ID:

{
"mac": {
"hardenedRuntime": true,
"gatekeeperAssess": true
}
}

Troubleshooting Builds​

Common Issues​

Build fails on Windows:

# Clear cache
npm cache clean --force
rm -rf node_modules
npm install

macOS signing fails:

  • Verify certificate in Keychain
  • Check code signing identity

Linux missing dependencies:

# Install build tools
sudo apt-get install build-essential

Related: Development Setup