Publication
Configurez Nucleus pour publier vos installateurs signés et leurs métadonnées d'auto-update sur GitHub Releases, S3 ou un host HTTP générique.
Dans ce tutoriel, vous allez configurer un backend de publication pour que vos installateurs signés et
leurs métadonnées d'auto-update arrivent au même endroit — GitHub Releases, un bucket S3 ou
n'importe quel host HTTP. Vous choisirez un canal et un type de release, vous contrôlerez le moment où
la publication s'exécute, et vous verrez ce que chaque store desktop attend pour une soumission. La
configuration vit dans le même DSL nucleus { } que le reste de votre build.
Avant de commencer
- Des installateurs fonctionnels pour vos plateformes cibles. Voir
Configuration pour le réglage de
targetFormats(...). - Des builds signés pour les plateformes que vous distribuez. Voir signature de code.
- Une cible d'hébergement : un dépôt GitHub, un bucket S3 ou un serveur HTTP que vous contrôlez.
Configurer un backend de publication
Ajoutez un bloc publish { } dans nativeDistributions { } et activez un backend. Le bloc génère
seulement la configuration et le YAML d'update ; l'upload lui-même s'exécute en CI.
nucleus {
application {
nativeDistributions {
publish {
github {
enabled = true
owner = "myorg"
repo = "myapp"
token = System.getenv("GITHUB_TOKEN")
channel = ReleaseChannel.Latest
releaseType = ReleaseType.Release
}
}
}
}
}Une release se retrouve avec les installateurs et leur YAML d'auto-update côte à côte :
v1.0.0 (Release)
├── MyApp-1.0.0-macos-arm64.dmg
├── MyApp-1.0.0-macos-universal.dmg
├── MyApp-1.0.0-windows-amd64.exe
├── MyApp-1.0.0-windows.msixbundle
├── MyApp-1.0.0-linux-amd64.deb
├── MyApp-1.0.0-linux-amd64.AppImage
├── latest-mac.yml
├── latest.yml
└── latest-linux.ymlLe token a besoin de la permission contents: write. Sur GitHub Actions, mettez
permissions: contents: write sur le job.
Utilisez un bucket S3, éventuellement derrière un CDN, pour de la distribution auto-hébergée :
publish {
s3 {
enabled = true
bucket = "my-updates-bucket"
region = "us-east-1"
path = "releases/myapp"
acl = "public-read"
}
}Fournissez AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY et AWS_REGION dans l'environnement.
N'importe quel host statique convient — Nginx, Caddy, Cloudflare R2, ou S3 en accès public. Le plugin génère les métadonnées YAML pour votre URL de base ; vous uploadez les fichiers vous-même :
publish {
generic {
enabled = true
url = "https://updates.example.com/releases/"
channel = ReleaseChannel.Latest
useMultipleRangeRequest = true
}
}useMultipleRangeRequest active les téléchargements différentiels et ne fonctionne que si votre
serveur honore les requêtes HTTP Range.
Choisir un canal et un type de release
Le canal sélectionne le fichier YAML que lit l'auto-updater, ainsi que le pattern de tag associé :
| Canal | YAML | Pattern de tag |
|---|---|---|
ReleaseChannel.Latest | latest-*.yml | v1.0.0 |
ReleaseChannel.Beta | beta-*.yml | v1.0.0-beta.1 |
ReleaseChannel.Alpha | alpha-*.yml | v1.0.0-alpha.1 |
Pour GitHub Releases, le type de release contrôle la visibilité :
| Type | Comportement |
|---|---|
ReleaseType.Release | Public sur la page des releases |
ReleaseType.Draft | Masqué jusqu'à publication manuelle |
ReleaseType.Prerelease | Marqué comme pré-release |
Définir le mode de publication
publishMode décide du moment où la publication s'exécute. Sa valeur par défaut est
PublishMode.Never :
publish {
publishMode = PublishMode.Auto
// github { ... }
}PublishMode.Never— ne publie pas. Les métadonnéeslatest-*.ymlsont tout de même générées localement pour chaque format à jour.PublishMode.Auto— publie quand le build part d'un tag git.PublishMode.Always— publie à chaque build, avec ou sans tag.
Le bloc publish { } écrit les paramètres publisher d'electron-builder ; il n'uploade rien par
lui-même. L'upload réel s'exécute dans votre workflow CI (gh release create pour GitHub,
aws s3 cp pour S3, votre propre étape de copie pour le générique). Voir la
CI de release pour le chemin standard.
Soumettre à un store desktop
La distribution en store passe par le portail de chaque éditeur plutôt que par le bloc
publish { }. Construisez le format store, puis uploadez l'artefact :
- Mac App Store — soumettez le PKG via Transporter ou
xcrun altool. Les provisioning profiles (sandboxing) et la catégorie du store (appCategory) sont fixés au build. Apple review le build ; les builds App Store ne sont pas notarisés. - Microsoft Store — uploadez le
.msixbundlesur Partner Center. L'identité doit correspondre à la réservation (identityName,publisher = CN=<GUID>,publisherDisplayName). Voir cibles Windows. - Snapcraft — lancez
snapcraft uploaddepuis la CI. Le Snap Store accepte les confinementsstrictetclassic;classicexige une approbation. Définissez le grade aveclinux.snap { grade = SnapGrade.Stable }. - Flathub — soumettez une pull request de manifest au
dépôt Flathub. Votre bloc
flatpakproduit le bundle ; Flathub build à partir des sources via votre manifest. - GitHub Releases / téléchargement direct — le chemin par défaut. Combinez-le avec l'auto-update pour les apps auto-distribuées.
Référence
publish { publishMode = … }publish.github { enabled, owner, repo, token, channel, releaseType }publish.s3 { enabled, bucket, region, path, acl }publish.generic { enabled, url, channel, useMultipleRangeRequest }enum class PublishMode { Never, Auto, Always }enum class ReleaseChannel { Latest, Beta, Alpha }enum class ReleaseType { Release, Draft, Prerelease }
Voir la référence Gradle DSL pour la surface complète.
Et ensuite
- Auto-update — comment le YAML publié pilote les mises à jour in-app.
- CI de release — le workflow qui build, signe et uploade.
- Signature de code — signez vos builds avant de les publier.