mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
* build: drop unused elevate.exe from Windows build #8135 elevate.exe is bundled by electron-builder's NSIS target solely so electron-updater can apply privileged per-machine updates. We ship no in-app auto-updater (electron-updater is not a dependency; the autoUpdater block in electron/start-app.ts is commented out), so the binary is unused dead weight and a frequent AV false-positive. Set packElevateHelper: false to stop bundling it; safe because perMachine is not true. * fix(caldav-plugin): make recurring-occurrence edits/deletes safe and quiet #7492 Expanded RRULE occurrences all share one master .ics, so operating on a single occurrence hit the whole series: updateIssue rewrote the master (and the next poll pulled it onto every sibling), deleteIssue deleted the master (the entire series), and getById returned the master's DTSTART, collapsing every instance onto the first one's time. Plugin: - parseCompoundId surfaces occurrenceMs instead of discarding it - getById re-anchors start/end onto the requested occurrence (timed via toIcalUtcDateTime, all-day via toIcalDate matching ical.js local-midnight) - updateIssue/deleteIssue refuse occurrence writes with a marked error (isExpectedSyncSkip), so the series is never mutated Host two-way sync: - editing or deleting a task linked to one occurrence now stays silent (the user changed their task, not the calendar) and the local change still applies. Explicit agenda reschedule/delete keep surfacing the honest "can't change a single occurrence" message (no false success). Single non-recurring events are unaffected. Full per-occurrence editing (RECURRENCE-ID overrides + EXDATE) remains a follow-up; it needs an If-Match primitive and recurrence-value preservation.
222 lines
8 KiB
YAML
222 lines
8 KiB
YAML
appId: superProductivity
|
|
productName: Super Productivity
|
|
artifactName: ${name}-${arch}.${ext}
|
|
|
|
files:
|
|
- electron/**/*
|
|
- '!electron/**/*.ts'
|
|
- '!electron/**/*.js.map'
|
|
- .tmp/angular-dist/**/*
|
|
- 'embedded.provisionprofile'
|
|
# Exclude Nx binaries - they're build tools, not runtime dependencies
|
|
- '!**/@nx/nx-darwin-*/**'
|
|
- '!**/@nx/nx-linux-*/**'
|
|
- '!**/@nx/nx-win32-*/**'
|
|
# Capacitor (mobile shim) - never required from electron/ at runtime
|
|
- '!**/@capacitor/**'
|
|
- '!**/@capawesome/**'
|
|
- '!**/capacitor-plugin-safe-area/**'
|
|
# sharp + libvips native binaries - only used by tools/generate-*-icon.js
|
|
# during local dev; ~33 MB of unused weight in the asar otherwise
|
|
- '!**/sharp/**'
|
|
- '!**/@img/**'
|
|
# Nx LMDB cache and Rollup pulled in transitively by build tooling
|
|
- '!**/@lmdb/**'
|
|
- '!**/@rollup/**'
|
|
# Compiled into the Angular CSS bundle; the node_modules copy is unused
|
|
- '!**/@material-symbols/**'
|
|
# @noble/ciphers and hash-wasm are imported by the Angular bundle and
|
|
# inlined by the bundler (WASM is base64-embedded). The node_modules
|
|
# copies are dead weight at runtime.
|
|
- '!**/@noble/**'
|
|
- '!**/hash-wasm/**'
|
|
# uuidv7 is imported by src/ (Angular bundle inlines it); not used by electron/
|
|
- '!**/uuidv7/**'
|
|
#afterSign: ./tools/notarizeMacApp.js
|
|
|
|
directories:
|
|
output: './.tmp/app-builds'
|
|
|
|
# Post-pack hook that installs a shell wrapper for Linux builds to force
|
|
# --ozone-platform=x11 in Snap+Wayland sessions.
|
|
# See tools/afterPack.js + build/linux/snap-wrapper.sh and
|
|
# docs/research/snap-wayland-gpu-fix-research.md §18.
|
|
afterPack: ./tools/afterPack.js
|
|
|
|
win:
|
|
target:
|
|
- target: nsis
|
|
arch:
|
|
- arm64
|
|
- x64
|
|
- target: portable
|
|
arch:
|
|
- arm64
|
|
- x64
|
|
publish:
|
|
- github
|
|
nsis:
|
|
# Hardcoded to avoid spaces (SignPath converts spaces to dots). Also referenced in build.yml.
|
|
artifactName: Super-Productivity-Setup-${arch}.${ext}
|
|
# allow to install to custom location
|
|
oneClick: false
|
|
allowToChangeInstallationDirectory: true
|
|
# We ship no in-app auto-updater: electron-updater is not a dependency and the
|
|
# autoUpdater block in electron/start-app.ts is commented out. elevate.exe is
|
|
# only ever invoked by electron-updater to apply privileged (per-machine)
|
|
# updates, so electron-builder bundles it here as dead weight that AV engines
|
|
# frequently false-positive on. Drop it. Safe because perMachine is not true
|
|
# (with perMachine: true, packElevateHelper: false is ignored). See #8135.
|
|
packElevateHelper: false
|
|
portable:
|
|
artifactName: ${name}-${arch}.${ext}
|
|
appx:
|
|
applicationId: SuperProductivity
|
|
displayName: Super Productivity
|
|
publisherDisplayName: johannesjo
|
|
publisher: CN=___-___
|
|
identityName: ___johannesjo.SuperProductivity
|
|
|
|
linux:
|
|
# Fix for issue #5259: Set executable name without spaces for snap compatibility
|
|
executableName: superproductivity
|
|
category: Office;ProjectManagement
|
|
mimeTypes:
|
|
- x-scheme-handler/superproductivity
|
|
desktop:
|
|
entry:
|
|
StartupWMClass: superproductivity
|
|
target:
|
|
- AppImage
|
|
- deb
|
|
- snap
|
|
- rpm
|
|
publish:
|
|
- github
|
|
|
|
rpm:
|
|
# Fix for issue #5368: Prevent /usr/lib/.build-id/ collisions with other Electron apps
|
|
fpm: ['--rpm-rpmbuild-define=_build_id_links none']
|
|
# leads to Error: Please specify executable name as linux.executableName instead of linux.desktop.Exec
|
|
# desktop:
|
|
# Name: Super Productivity
|
|
# Comment: A todo list and time tracking app
|
|
# Exec: superProductivity
|
|
# Terminal: false
|
|
# Type: Application
|
|
# Icon: build/icon.png
|
|
# GenericName: ToDo List and Time Tracker
|
|
|
|
snap:
|
|
# We upload the .snap to the Snap Store ourselves via Canonical's snapcraft
|
|
# container in CI (build.yml). electron-builder's snap target has a
|
|
# hard-coded fallback to `snapStore` in `findSnapPublishConfig` (snap.js):
|
|
# if `snap.publish` is unset, it falls through `linux.publish`/`config.publish`
|
|
# to `{ provider: "snapStore" }`, then invokes `snapcraft` on the runner
|
|
# during upload — and we no longer install snapcraft there (it was an
|
|
# unreliable `sudo snap install`). Setting `snap.publish: github` overrides
|
|
# that fallback. The .snap also lands on the GitHub release as a side effect,
|
|
# which is harmless (and a useful manual-download fallback).
|
|
publish: github
|
|
grade: stable
|
|
allowNativeWayland: true
|
|
autoStart: true
|
|
base: core22
|
|
confinement: strict
|
|
environment:
|
|
# Fix for issue #4920: Isolate fontconfig cache to prevent GTK dialog rendering issues
|
|
# https://github.com/super-productivity/super-productivity/issues/4920
|
|
FC_CACHEDIR: $SNAP_USER_DATA/.cache/fontconfig
|
|
# Fix for issue #7298: tray icon renders as three dots on Ubuntu 24.04+ snap.
|
|
# Chromium's StatusIconLinuxDbus writes the tray PNG to TMPDIR and sends
|
|
# its path to gnome-shell via the SNI IconThemePath property. The default
|
|
# /tmp inside a strict snap is bind-mounted to
|
|
# /tmp/snap-private-tmp/snap.<name>/tmp with mode 0700 on the parent, so
|
|
# gnome-shell (outside the mount namespace) cannot stat the file and
|
|
# falls back to 'image-loading-symbolic' (three dots). $XDG_RUNTIME_DIR
|
|
# (= /run/user/$UID) is visible to both sides, so redirecting Chromium's
|
|
# temp writes there restores icon rendering. Matches Signal Desktop's
|
|
# snap and the official Electron snapcraft guide. electron-builder's
|
|
# SnapOptions docstring claims this as a default but snap.js no longer
|
|
# injects it (see node_modules/app-builder-lib/out/targets/snap.js).
|
|
TMPDIR: $XDG_RUNTIME_DIR
|
|
plugs:
|
|
- default # Includes: home, desktop, desktop-legacy, x11, wayland, etc.
|
|
- password-manager-service
|
|
- system-observe
|
|
- login-session-observe
|
|
# Fix for issue #6031: Add filesystem access for local file sync
|
|
# https://github.com/super-productivity/super-productivity/issues/6031
|
|
- removable-media # Allows sync to external drives/USB storage
|
|
# Override electron-builder's hardcoded gnome-3-28-1804 content snap (core20 era)
|
|
# with gnome-42-2204 (core22 era) for up-to-date Mesa drivers and GSettings schemas.
|
|
# The plug name must match the template key to replace it rather than duplicate it.
|
|
# The explicit `content` attribute tells snapd to match the gnome-42-2204 slot.
|
|
# Pattern from Tidal HiFi: https://github.com/Mastermindzh/tidal-hifi
|
|
# gnome-42-2204 has global auto-connect (granted June 2022).
|
|
# Ref: electron-builder#9452, electron-builder#8548 (closed, not planned)
|
|
- gnome-3-28-1804:
|
|
interface: content
|
|
content: gnome-42-2204
|
|
target: $SNAP/gnome-platform
|
|
default-provider: gnome-42-2204
|
|
|
|
flatpak:
|
|
runtimeVersion: '25.08'
|
|
finishArgs:
|
|
- --share=network
|
|
- --share=ipc
|
|
- --socket=x11
|
|
- --socket=wayland
|
|
- --socket=fallback-x11
|
|
- --socket=pulseaudio
|
|
- --device=dri
|
|
- --filesystem=home
|
|
- --talk-name=org.freedesktop.Notifications
|
|
- --talk-name=org.kde.StatusNotifierWatcher
|
|
- --talk-name=org.gnome.Mutter.IdleMonitor
|
|
- --talk-name=org.freedesktop.secrets
|
|
- --system-talk-name=org.freedesktop.login1
|
|
- --env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons
|
|
- --env=ELECTRON_TRASH=gio
|
|
|
|
mac:
|
|
appId: com.super-productivity.app
|
|
type: distribution
|
|
category: public.app-category.productivity
|
|
entitlements: build/entitlements.mac.plist
|
|
entitlementsInherit: build/entitlements.mac.plist
|
|
hardenedRuntime: true
|
|
gatekeeperAssess: false
|
|
provisioningProfile: embedded.provisionprofile
|
|
darkModeSupport: true
|
|
notarize: true
|
|
extendInfo:
|
|
ITSAppUsesNonExemptEncryption: false
|
|
publish:
|
|
- github
|
|
target:
|
|
# - zip
|
|
- target: dmg
|
|
arch:
|
|
- arm64
|
|
- x64
|
|
- universal
|
|
|
|
dmg:
|
|
sign: true
|
|
publish:
|
|
- github
|
|
|
|
pkg:
|
|
publish: never
|
|
# HERE: electron-builder.mas.yaml
|
|
#mas:
|
|
# type: distribution
|
|
# category: public.app-category.productivity
|
|
# entitlements: build/entitlements.mas.plist
|
|
# entitlementsInherit: build/entitlements.mas.inherit.plist
|
|
# provisioningProfile: prod.provisionprofile
|
|
# icon: build/icon.icns
|
|
# hardenedRuntime: true
|
|
# publish: never
|