Skip to content

Commit 82dca15

Browse files
pyrochatclaude
andcommitted
CI : Release multi-OS du Simulateur-JS + cibles dmg/AppImage/portable
Workflow GitHub Actions (.github/workflows/build.yml) calque sur Navigateur-Smaky : un tag vX.Y.Z construit Windows/Linux/macOS et publie une Release telechargeable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 2f7bd78 commit 82dca15

2 files changed

Lines changed: 117 additions & 4 deletions

File tree

.github/workflows/build.yml

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Construit le Simulateur Smaky 6 pour macOS, Windows et Linux sur les runners
2+
# gratuits de GitHub, puis rassemble tous les fichiers dans une seule Release
3+
# publique téléchargeable sans compte GitHub.
4+
#
5+
# Pourquoi : produire les binaires des trois systèmes ne peut pas se faire depuis
6+
# une seule machine. GitHub fournit gratuitement des machines macOS, Windows et
7+
# Linux « dans le nuage » ; ce workflow les utilise toutes les trois.
8+
#
9+
# Le code du simulateur vit dans le sous-dossier Simulateur-JS/ de ce monorepo ;
10+
# toutes les étapes npm / electron-builder s'exécutent donc dans ce dossier.
11+
#
12+
# Déclenchement :
13+
# - manuel : onglet « Actions » -> « Build » -> « Run workflow »
14+
# (produit seulement des artefacts, visibles aux personnes connectées) ;
15+
# - sur tag : pousser un tag « vX.Y.Z » construit ET crée une Release publique
16+
# (téléchargeable SANS compte GitHub) avec tous les binaires.
17+
#
18+
# Note signature : aucun binaire n'est signé (pas de compte Apple/Microsoft). Au
19+
# premier lancement, le système affichera un avertissement ; voir le README pour
20+
# la marche à suivre.
21+
22+
name: Build (macOS, Windows, Linux)
23+
24+
on:
25+
workflow_dispatch:
26+
push:
27+
tags:
28+
- "v*"
29+
30+
permissions:
31+
contents: write # nécessaire pour créer une Release sur un tag
32+
33+
jobs:
34+
build:
35+
name: Construire (${{ matrix.label }})
36+
strategy:
37+
fail-fast: false # un échec sur un OS n'annule pas les autres
38+
matrix:
39+
include:
40+
- os: macos-latest
41+
label: macOS
42+
build: npx --no-install electron-builder --mac dmg --universal
43+
files: Simulateur-JS/dist/*.dmg
44+
- os: windows-latest
45+
label: Windows
46+
build: npx --no-install electron-builder --win
47+
files: Simulateur-JS/dist/*.exe
48+
- os: ubuntu-latest
49+
label: Linux
50+
build: npx --no-install electron-builder --linux
51+
files: |
52+
Simulateur-JS/dist/*.AppImage
53+
Simulateur-JS/dist/*.deb
54+
Simulateur-JS/dist/*.tar.gz
55+
runs-on: ${{ matrix.os }}
56+
steps:
57+
- name: Récupérer le code
58+
uses: actions/checkout@v4
59+
60+
- name: Installer Node.js
61+
uses: actions/setup-node@v4
62+
with:
63+
node-version: 20
64+
65+
- name: Installer les dépendances
66+
working-directory: Simulateur-JS
67+
run: npm ci
68+
69+
- name: Construire (${{ matrix.label }}, non signé)
70+
working-directory: Simulateur-JS
71+
env:
72+
# Pas de certificat : on désactive la découverte de signature pour
73+
# éviter que la construction n'échoue à chercher une identité.
74+
CSC_IDENTITY_AUTO_DISCOVERY: false
75+
run: ${{ matrix.build }}
76+
77+
- name: Publier les fichiers comme artefact du run
78+
uses: actions/upload-artifact@v4
79+
with:
80+
name: Simulateur-Smaky6-${{ matrix.label }}
81+
path: ${{ matrix.files }}
82+
if-no-files-found: error
83+
84+
# Rassemble les artefacts des trois OS dans une seule Release (sur tag uniquement).
85+
# Un job dédié, lancé après les builds, évite que trois jobs parallèles ne se
86+
# disputent la création de la même Release.
87+
release:
88+
name: Publier la Release
89+
needs: build
90+
if: startsWith(github.ref, 'refs/tags/')
91+
runs-on: ubuntu-latest
92+
steps:
93+
- name: Télécharger tous les artefacts
94+
uses: actions/download-artifact@v4
95+
with:
96+
path: artifacts
97+
98+
- name: Créer la Release et y attacher tous les binaires
99+
uses: softprops/action-gh-release@v2
100+
with:
101+
files: artifacts/**/*
102+
name: Simulateur Smaky 6 ${{ github.ref_name }}
103+
body: |
104+
Build automatique multi-plateformes du Simulateur Smaky 6 (non signé).
105+
106+
- **macOS** : `.dmg` (universel Intel + Apple Silicon)
107+
- **Windows** : installeur `.exe` + `.exe` portable
108+
- **Linux** : AppImage, `.deb`, `tar.gz`
109+
110+
Les binaires ne sont pas signés ; voir le README pour l'ouverture.

Simulateur-JS/package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
"build": {
1414
"appId": "ch.epsitec.smaky6sim",
1515
"productName": "Smaky 6 Simulator",
16+
"copyright": "© 2026 Epsitec SA, Pierre-Yves Rochat",
17+
"directories": { "output": "dist" },
1618
"files": [
1719
"index.html", "main.js", "preload.js",
1820
"rom18.js", "chargen_rom.js", "z80.js", "disasm.js", "smaky.js",
1921
"screenRenderer.js", "three.min.js", "OrbitControls.js", "three3d.js",
2022
"audio.js", "FLO?.JS", "HD?.JS"
2123
],
2224
"win": {
23-
"target": "nsis",
25+
"target": ["nsis", "portable"],
2426
"icon": "icon.ico"
2527
},
2628
"nsis": {
@@ -29,12 +31,13 @@
2931
"createDesktopShortcut": "always"
3032
},
3133
"linux": {
32-
"target": ["tar.gz"],
34+
"target": ["AppImage", "deb", "tar.gz"],
3335
"category": "Development",
34-
"icon": "icon.png"
36+
"icon": "icon.png",
37+
"maintainer": "Pierre-Yves Rochat <pyr@pyr.ch>"
3538
},
3639
"mac": {
37-
"target": ["zip"],
40+
"target": ["dmg"],
3841
"icon": "icon.png",
3942
"category": "public.app-category.developer-tools",
4043
"identity": null

0 commit comments

Comments
 (0)