Files
multica/apps/desktop/electron-builder.yml
Bohan Jiang 0314df3b8e docs(license): widen the branding condition to all UI code and add NOTICE (MUL-5558) (#6197)
* docs(license): widen the branding condition to all UI code and add NOTICE (MUL-5558)

The branding condition in 1b defined Multica's "frontend" as `apps/web/`
only, which left the code that actually renders the console brand outside
its own scope: the sidebar, invite and new-workspace brand surfaces live in
`packages/views/`, and the Electron and iOS clients mount the whole console
from `@multica/views` without touching `apps/web/`. A rebranded desktop
build could therefore satisfy the condition literally while removing every
Multica mark.

Replace the directory-enumerated "frontend" with a derivation-based
"Multica user interface" covering `apps/web/`, `apps/desktop/`,
`apps/mobile/`, `packages/views/` and `packages/ui/` across source, the
Docker "web" image, and compiled desktop/mobile binaries. Keep the
non-interface exemption so backend-only use stays governed by 1a rather
than by branding, and add 1c so that path still carries attribution.

Add a NOTICE file to give the attribution obligation somewhere to land:
the repository had none, and no per-file copyright headers, so Apache 2.0
section 4(c)/(d) had nothing to reproduce.

Move the "commercial license must be obtained" sentence into 1a, since it
describes only that condition and 1b/1c are cured by written authorization
and attribution respectively, not by purchase.

Co-authored-by: multica-agent <github@multica.ai>

* docs(license): separate the commercial license from the branding waiver (MUL-5558)

Conditions (a) and (b) were both cured by "explicitly authorized by
Multica in writing", so one authorization letter could be read as
releasing both — handing over commercial hosting rights when only a
rebranding permission was intended.

Name the two grants distinctly: (a) is cured only by a commercial license
obtained from the producer, (b) only by a written branding waiver. Add (d)
stating that neither implies the other and that neither can be inferred
from the producer's silence or from acceptance of contributions.

Co-authored-by: multica-agent <github@multica.ai>

* docs(license): name the published frontend image and cover relocated UI code (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* chore(docker): ship LICENSE and NOTICE in the published images (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* docs(readme): add bilingual License sections matching the updated conditions (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* docs(license): reposition as the self-contained, source-available Multica License (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* chore(release): align license metadata and ship NOTICE in release artifacts (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* docs(readme): describe Multica as source-available and add contribution terms (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* fix(landing): describe Multica as source-available instead of open source (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

* revert(license): keep the Dify-style open-source framing, scope widening only (MUL-5558)

Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: Bohan-J <bohan@devv.ai>
Co-authored-by: multica-agent <github@multica.ai>
2026-07-30 21:18:59 +08:00

135 lines
6.5 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
appId: ai.multica.desktop
productName: Multica
directories:
buildResources: build
files:
- "!**/.vscode/*"
- "!src/*"
- "!electron.vite.config.*"
- "!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}"
- "!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}"
# Never repack the electron-builder output directory into the app.
# Multi-arch release builds (scripts/package.mjs) run each target in the
# same apps/desktop dir with per-arch output at dist/<platform>-<arch>.
# electron-builder only auto-excludes the *current* target's output dir,
# so the earlier arch's dist/ (its full .app + DMG + ZIP) would otherwise
# be pulled into the next arch's app.asar. That inflated v0.4.3/v0.4.4's
# Intel (x64) DMG until the HFS volume was full and the real
# `Electron Framework/Versions/A/Electron Framework` binary was dropped,
# so Intel Macs crashed on launch with a dyld missing-library error
# (github.com/multica-ai/multica/issues/5595). Excluding all of dist/**
# fixes it regardless of build order; a pre-build clean alone does not,
# because the first arch writes into dist/ mid-run before the second is
# packaged.
- "!dist/**"
# Ship the license and attribution notices inside the packaged app, so the
# NOTICE obligations travel with the installer rather than only the git repo.
extraResources:
- from: ../../LICENSE
to: LICENSE
- from: ../../NOTICE
to: NOTICE
protocols:
- name: Multica
schemes:
- multica
asarUnpack:
- resources/**
mac:
entitlementsInherit: build/entitlements.mac.plist
target:
- dmg
- zip
# Hardcoded name avoids the `@multica/desktop-*` subdirectory that
# `${name}` produces for scoped package names.
# Naming scheme: multica-desktop-<version>-<platform>-<arch>.<ext>
# so the filename alone surfaces kind, version, platform, and CPU arch.
artifactName: multica-desktop-${version}-mac-${arch}.${ext}
# Notarize via notarytool. Requires APPLE_ID + APPLE_APP_SPECIFIC_PASSWORD
# + APPLE_TEAM_ID env vars at package time. Non-mac contributors are
# unaffected because `pnpm package` already requires the Developer ID
# signing cert — notarization is a strict superset.
notarize: true
dmg:
artifactName: multica-desktop-${version}-mac-${arch}.${ext}
linux:
# Override the Linux executable name to avoid leaking the scoped npm
# package name (`@multica/desktop`) into the installed binary, the
# `.desktop` file, and the hicolor icon filename. Without this override
# electron-builder defaults `executableName` to the package `name`,
# which after slash-stripping becomes `@multicadesktop` — producing
# `/usr/share/applications/@multicadesktop.desktop`,
# `Icon=@multicadesktop`, and
# `/usr/share/icons/hicolor/*/apps/@multicadesktop.png`. The leading `@`
# violates the freedesktop desktop-entry naming guidance, so GNOME /
# Ubuntu fail to associate the running window with the `.desktop` entry
# and fall back to the theme's default app icon (the Settings gear on
# Yaru).
#
# `multica-desktop` (not `multica`) so the deb/rpm/AppImage package never
# installs this Electron binary as `/usr/bin/multica`. The Go CLI is a
# separate artifact (see CLI_INSTALL.md) that agents and scripts expect
# to find at `multica` on PATH; when both packages are installed on the
# same box, a plain electron-builder default collides the two under one
# name. Whichever installs later — or wins the PATH lookup order — silently
# shadows the other. Hitting the Electron binary from a CLI call is the
# worst failure mode: it exits 0 with empty stdout (its own Chromium flags
# eat CLI args like `--output json`), which looks like a healthy CLI that
# returned nothing rather than "wrong binary" (github.com/multica-ai/multica/issues/5481).
# `StartupWMClass=Multica` (productName-derived) is unaffected by this
# rename — it comes from `app.getName()`, not `executableName`.
executableName: multica-desktop
# Pin StartupWMClass to the WM_CLASS Electron emits on X11. Electron
# derives WM_CLASS from `app.getName()`, which reads the *packaged*
# ASAR's `package.json` — `productName` if present, otherwise `name`.
# PR #2437 assumed electron-builder.yml's productName fed app.getName()
# directly; it does not. With our source package.json carrying only
# `name: "@multica/desktop"`, packaged Electron emitted
# `WM_CLASS=@multica/desktop`, which broke association with this entry
# and reproduced #2515 on Ubuntu 0.2.31. The fix lives in two places
# outside this file — `productName: "Multica"` on the source
# package.json (so the ASAR carries it) and `app.setName("Multica")`
# in the production branch of `src/main/index.ts` (belt-and-braces).
# Keep `StartupWMClass: Multica` pinned here so any future drift in
# those two anchors shows up as a diff against this declaration.
# Verification on a real Ubuntu install: `xprop WM_CLASS` on a running
# window prints `Multica` for both fields.
desktop:
entry:
StartupWMClass: Multica
# Point at pre-rendered hicolor sizes. electron-builder *can* generate
# 16/24/32/48/64/128/256/512 from a single build/icon.png, but the
# auto-generation silently shipped only the 1024×1024 source in our
# v0.2.31 .deb (#2515 reproduces this) — leaving GNOME's hicolor lookup
# with no usable size and falling back to the theme default. Shipping
# the sizes from source removes the toolchain dependency entirely.
icon: build/icons
target:
- AppImage
- deb
- rpm
artifactName: multica-desktop-${version}-linux-${arch}.${ext}
rpm:
# Disable RPM build-id symlinks. Electron apps embed the upstream Electron
# binary, whose GNU build-id is identical across every app shipping the same
# Electron version (Slack, VS Code, Discord, ...). Without this, our RPM
# would own /usr/lib/.build-id/<hash> paths and collide with any other
# Electron RPM already installed, breaking `dnf install` on Fedora/RHEL.
fpm:
- "--rpm-rpmbuild-define=_build_id_links none"
win:
target:
- nsis
artifactName: multica-desktop-${version}-windows-${arch}.${ext}
publish:
provider: github
owner: multica-ai
repo: multica
# Align with our CLI release flow which pre-creates a *published* GitHub
# Release via `gh release create`. The electron-builder default of
# `releaseType: draft` conflicts with `existingType=release` and causes
# uploads of the DMG/ZIP/blockmaps/latest-mac.yml to be silently skipped,
# which breaks electron-updater auto-update on installed clients.
releaseType: release
npmRebuild: false