mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-05-12 20:49:59 +02:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32733187b8 | ||
|
|
79542edd3b | ||
|
|
9e0ec69c61 | ||
|
|
2e0a1a55e3 | ||
|
|
308f2ea838 | ||
|
|
9a9a5446cf | ||
|
|
0f8d835a1b | ||
|
|
663336a7bc | ||
|
|
4fab90d5b9 | ||
|
|
f67df92f0e | ||
|
|
7e2c2cccf8 |
106
.github/workflows/test-vs2026.yml
vendored
Normal file
106
.github/workflows/test-vs2026.yml
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
name: Test Windows VS2026 migration
|
||||||
|
|
||||||
|
# Ce workflow vérifie que le build QElectroTech fonctionne sur l'image
|
||||||
|
# windows-2025-vs2026, avant la migration forcée du 8 juin 2026.
|
||||||
|
# Il peut être supprimé une fois la migration confirmée OK.
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch: # déclenchement manuel uniquement
|
||||||
|
schedule:
|
||||||
|
- cron: '0 4 * * 1' # chaque lundi à 4h00 UTC (optionnel)
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-vs2026:
|
||||||
|
name: Build on windows-2025-vs2026
|
||||||
|
runs-on: windows-2025-vs2026 # <-- image avec VS 2026
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install MSYS2 + dependencies
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: UCRT64
|
||||||
|
update: false
|
||||||
|
install: >-
|
||||||
|
mingw-w64-ucrt-x86_64-gcc
|
||||||
|
mingw-w64-ucrt-x86_64-cmake
|
||||||
|
mingw-w64-ucrt-x86_64-ninja
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-base
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-svg
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-tools
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-translations
|
||||||
|
mingw-w64-ucrt-x86_64-sqlite3
|
||||||
|
mingw-w64-ucrt-x86_64-pkgconf
|
||||||
|
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
||||||
|
mingw-w64-ucrt-x86_64-kwidgetsaddons-qt5
|
||||||
|
mingw-w64-ucrt-x86_64-kcoreaddons-qt5
|
||||||
|
mingw-w64-ucrt-x86_64-nsis
|
||||||
|
mingw-w64-ucrt-x86_64-ccache
|
||||||
|
mingw-w64-ucrt-x86_64-7zip
|
||||||
|
git
|
||||||
|
|
||||||
|
- name: Force Qt5 (remove Qt6 interference)
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
rm -rf /ucrt64/lib/cmake/Qt6 || true
|
||||||
|
pacman -R --noconfirm mingw-w64-ucrt-x86_64-qt6-tools 2>/dev/null || true
|
||||||
|
|
||||||
|
- name: Cache ccache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: C:\Users\runneradmin\AppData\Local\ccache
|
||||||
|
key: ccache-vs2026-${{ runner.os }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
ccache-vs2026-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Configure (CMake)
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DQt5_DIR=/ucrt64/lib/cmake/Qt5 \
|
||||||
|
-DQT_VERSION_MAJOR=5 \
|
||||||
|
-DCMAKE_DISABLE_FIND_PACKAGE_Qt6=ON \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||||
|
-DCMAKE_CXX_FLAGS="-DQET_EXPORT_PROJECT_DB"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
cmake --build build --parallel $(nproc)
|
||||||
|
|
||||||
|
- name: Verify executable
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
EXE=$(find build -name "qelectrotech.exe" | head -1)
|
||||||
|
if [ -z "$EXE" ]; then
|
||||||
|
echo "ERROR: qelectrotech.exe introuvable après le build"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
SIZE=$(stat -c%s "$EXE")
|
||||||
|
echo "Executable trouvé : $EXE ($SIZE octets)"
|
||||||
|
if [ "$SIZE" -lt 100000 ]; then
|
||||||
|
echo "ERROR: exe trop petit ($SIZE octets), build probablement incomplet"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "BUILD VS2026 : OK ✓"
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
if: always()
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
echo "=== Résumé de compatibilité VS2026 ==="
|
||||||
|
gcc --version
|
||||||
|
cmake --version
|
||||||
|
ninja --version
|
||||||
|
echo "Image runner : windows-2025-vs2026"
|
||||||
|
echo "Date du test : $(date -u)"
|
||||||
54
.github/workflows/windows-build.yml
vendored
54
.github/workflows/windows-build.yml
vendored
@@ -316,11 +316,30 @@ jobs:
|
|||||||
nsis_root/files/bin/
|
nsis_root/files/bin/
|
||||||
if-no-files-found: warn
|
if-no-files-found: warn
|
||||||
|
|
||||||
|
- name: Zip portable (readytouse)
|
||||||
|
id: zip_portable
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
$version = "${{ steps.qet_version.outputs.base_version }}"
|
||||||
|
$head = "${{ steps.qet_version.outputs.head }}"
|
||||||
|
$zipName = "qelectrotech-${version}+git${head}-x86-win64-readytouse.zip"
|
||||||
|
$src = "$env:GITHUB_WORKSPACE\nsis_root\files"
|
||||||
|
$dst = "$env:GITHUB_WORKSPACE\dist\$zipName"
|
||||||
|
$7z = "C:\Program Files\7-Zip\7z.exe"
|
||||||
|
|
||||||
|
New-Item -ItemType Directory -Force -Path "$env:GITHUB_WORKSPACE\dist" | Out-Null
|
||||||
|
& $7z a -tzip -mx=5 -mmt=on $dst "$src\*"
|
||||||
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||||
|
|
||||||
|
$sizeMB = [math]::Round((Get-Item $dst).Length / 1MB, 1)
|
||||||
|
Write-Output "ZIP created: $zipName ($sizeMB MB)"
|
||||||
|
"zip_name=$zipName" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||||
|
|
||||||
- name: Upload portable (files/ without installer)
|
- name: Upload portable (files/ without installer)
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
||||||
path: nsis_root/files/
|
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
||||||
retention-days: 14
|
retention-days: 14
|
||||||
|
|
||||||
- name: Upload NSIS installer
|
- name: Upload NSIS installer
|
||||||
@@ -330,6 +349,13 @@ jobs:
|
|||||||
path: dist/Installer_*.exe
|
path: dist/Installer_*.exe
|
||||||
retention-days: 14
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Upload portable (nom fixe pour le workflow MSI)
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: qelectrotech-windows-portable
|
||||||
|
path: nsis_root/files/
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Job 2 : Publie une release nightly + page GitHub Pages
|
# Job 2 : Publie une release nightly + page GitHub Pages
|
||||||
# Ne tourne que sur push master (pas sur les PRs)
|
# Ne tourne que sur push master (pas sur les PRs)
|
||||||
@@ -354,6 +380,13 @@ jobs:
|
|||||||
name: qelectrotech-windows-installer
|
name: qelectrotech-windows-installer
|
||||||
path: downloaded/installer/
|
path: downloaded/installer/
|
||||||
|
|
||||||
|
- name: Download portable artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: qelectrotech-*-readytouse
|
||||||
|
path: downloaded/portable/
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Update nightly release
|
- name: Update nightly release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
@@ -368,11 +401,13 @@ jobs:
|
|||||||
| **Run** | https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} |
|
| **Run** | https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} |
|
||||||
| **Date** | ${{ github.event.head_commit.timestamp }} |
|
| **Date** | ${{ github.event.head_commit.timestamp }} |
|
||||||
|
|
||||||
> ⚠️ This release is overwritten on every push to `master`.
|
> ⚠️ This is a development version; it introduces new features you want, but may cause bugs that have not yet been identified yet.
|
||||||
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
||||||
prerelease: true
|
prerelease: true
|
||||||
make_latest: false
|
make_latest: false
|
||||||
files: downloaded/installer/*.exe
|
files: |
|
||||||
|
downloaded/installer/*.exe
|
||||||
|
downloaded/portable/*.zip
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Generate download page (index.html)
|
- name: Generate download page (index.html)
|
||||||
@@ -384,6 +419,8 @@ jobs:
|
|||||||
RUN_URL="https://github.com/$REPO/actions/runs/${{ github.run_id }}"
|
RUN_URL="https://github.com/$REPO/actions/runs/${{ github.run_id }}"
|
||||||
EXE_NAME=$(ls downloaded/installer/*.exe | xargs -I{} basename {})
|
EXE_NAME=$(ls downloaded/installer/*.exe | xargs -I{} basename {})
|
||||||
INSTALLER_URL="https://github.com/$REPO/releases/download/nightly/$EXE_NAME"
|
INSTALLER_URL="https://github.com/$REPO/releases/download/nightly/$EXE_NAME"
|
||||||
|
ZIP_NAME=$(ls downloaded/portable/*.zip | xargs -I{} basename {})
|
||||||
|
PORTABLE_URL="https://github.com/$REPO/releases/download/nightly/$ZIP_NAME"
|
||||||
|
|
||||||
mkdir -p gh-pages
|
mkdir -p gh-pages
|
||||||
cat > gh-pages/index.html << HTMLEOF
|
cat > gh-pages/index.html << HTMLEOF
|
||||||
@@ -509,8 +546,8 @@ jobs:
|
|||||||
<span class="badge">nightly</span>
|
<span class="badge">nightly</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="warning">
|
<div class="warning">
|
||||||
⚠️ These builds are generated automatically on every commit to <code>master</code>
|
⚠️ This is a development version; it introduces new features you want,
|
||||||
and may be unstable or incomplete.
|
but may cause bugs that have not yet been identified yet in <code>master</code>.
|
||||||
For production use, download a
|
For production use, download a
|
||||||
<a href="https://github.com/$REPO/releases">stable release</a>.
|
<a href="https://github.com/$REPO/releases">stable release</a>.
|
||||||
</div>
|
</div>
|
||||||
@@ -526,6 +563,13 @@ jobs:
|
|||||||
<small>.exe — recommended, includes all dependencies</small>
|
<small>.exe — recommended, includes all dependencies</small>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
<a class="btn btn-secondary" href="$PORTABLE_URL">
|
||||||
|
<span class="btn-icon">📦</span>
|
||||||
|
<span class="btn-text">
|
||||||
|
Windows Portable
|
||||||
|
<small>.zip — no installation required, extract and run the file "Lancer QET.bat"</small>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
<a class="btn btn-secondary" href="https://github.com/$REPO/releases/tag/nightly">
|
<a class="btn btn-secondary" href="https://github.com/$REPO/releases/tag/nightly">
|
||||||
<span class="btn-icon">📦</span>
|
<span class="btn-icon">📦</span>
|
||||||
<span class="btn-text">
|
<span class="btn-text">
|
||||||
|
|||||||
216
.github/workflows/windows-msi.yml
vendored
Normal file
216
.github/workflows/windows-msi.yml
vendored
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
name: Windows MSI (WiX v4)
|
||||||
|
|
||||||
|
# Ce workflow génère un installeur MSI pour QElectroTech.
|
||||||
|
# Il s'appuie sur l'artifact produit par le job build-windows
|
||||||
|
# (workflow windows-build.yml) et ne recompile pas le projet.
|
||||||
|
#
|
||||||
|
# Déclenchement :
|
||||||
|
# - Automatiquement après un run réussi de windows-build.yml
|
||||||
|
# - Manuellement (workflow_dispatch) pour tester
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["Windows build"] # doit correspondre exactement au "name:" de windows-build.yml
|
||||||
|
types: [completed]
|
||||||
|
branches: [master]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
run_id:
|
||||||
|
description: "Run ID de windows-build.yml (laisse vide pour le dernier)"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-msi:
|
||||||
|
name: Build MSI with WiX v4
|
||||||
|
runs-on: windows-latest
|
||||||
|
# Ne tourne que si le build principal a réussi (ignoré en workflow_dispatch)
|
||||||
|
if: >
|
||||||
|
github.event_name == 'workflow_dispatch' ||
|
||||||
|
github.event.workflow_run.conclusion == 'success'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 1. Checkout (pour récupérer QElectroTech.wxs)
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 2. Télécharger l'artifact du build principal
|
||||||
|
# L'artifact "qelectrotech-windows-installer-files" doit contenir
|
||||||
|
# le dossier nsis_root/files/ (portable build).
|
||||||
|
# Adapter le nom si nécessaire.
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Download build artifact (portable files)
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: qelectrotech-windows-portable # nom de l'artifact dans windows-build.yml
|
||||||
|
path: artifact\files
|
||||||
|
# Si déclenchement manuel avec run_id précisé :
|
||||||
|
run-id: ${{ github.event.inputs.run_id || github.event.workflow_run.id }}
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 3. Lire la version depuis l'artifact ou le dépôt
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Extract version
|
||||||
|
id: version
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
# Lire la version dans CMakeLists.txt
|
||||||
|
$cmake = Get-Content CMakeLists.txt -Raw
|
||||||
|
if ($cmake -match 'project\s*\([^)]*VERSION\s+([\d]+\.[\d]+\.[\d]+)') {
|
||||||
|
$ver = $Matches[1]
|
||||||
|
} else {
|
||||||
|
$ver = "0.0.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Version numérique MSI (4 chiffres obligatoire)
|
||||||
|
$verMsi = "$ver.0"
|
||||||
|
|
||||||
|
# Version lisible avec git short SHA
|
||||||
|
$sha = git rev-parse --short HEAD 2>$null
|
||||||
|
if (-not $sha) { $sha = "unknown" }
|
||||||
|
$verDisplay = "$ver+git$sha"
|
||||||
|
|
||||||
|
echo "VERSION_MSI=$verMsi" >> $env:GITHUB_OUTPUT
|
||||||
|
echo "VERSION_DISPLAY=$verDisplay" >> $env:GITHUB_OUTPUT
|
||||||
|
Write-Host "Version MSI : $verMsi"
|
||||||
|
Write-Host "Version display : $verDisplay"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 4. Installer WiX v4 via dotnet tool
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Install WiX v4
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
dotnet tool install --global wix --version 4.*
|
||||||
|
# Ajouter le chemin tools au PATH pour la session
|
||||||
|
$toolsPath = [System.IO.Path]::Combine($env:USERPROFILE, '.dotnet', 'tools')
|
||||||
|
echo $toolsPath >> $env:GITHUB_PATH
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 5. Installer l'extension WixUI (interface graphique MSI)
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Install WiX UI extension
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
wix extension add WixToolset.UI.wixext/4.*
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 6. Copier QElectroTech.wxs depuis build-aux/windows/
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Prepare WXS file
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
# Le fichier .wxs est versionné dans le dépôt
|
||||||
|
$wxs = "build-aux\windows\QElectroTech.wxs"
|
||||||
|
if (-not (Test-Path $wxs)) {
|
||||||
|
Write-Error "Fichier WXS introuvable : $wxs"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
Copy-Item $wxs -Destination "QElectroTech.wxs"
|
||||||
|
Write-Host "WXS prêt."
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 7. Vérifier la structure de l'artifact
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Check artifact structure
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Write-Host "=== Contenu de artifact\files ==="
|
||||||
|
Get-ChildItem -Path "artifact\files" -Recurse -Depth 2 |
|
||||||
|
Select-Object FullName | Format-Table -AutoSize
|
||||||
|
|
||||||
|
$exe = Get-ChildItem -Path "artifact\files" -Filter "qelectrotech.exe" -Recurse | Select-Object -First 1
|
||||||
|
if (-not $exe) {
|
||||||
|
Write-Error "qelectrotech.exe introuvable dans l'artifact"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
Write-Host "Executable : $($exe.FullName) ($([math]::Round($exe.Length/1MB,1)) MB)"
|
||||||
|
|
||||||
|
# Identifier le dossier bin/ contenant l'exe
|
||||||
|
$binDir = $exe.Directory.FullName
|
||||||
|
echo "BIN_DIR=$binDir" >> $env:GITHUB_ENV
|
||||||
|
|
||||||
|
# FilesDir = parent de bin/ (équivalent de nsis_root\files\)
|
||||||
|
$filesDir = Split-Path $binDir -Parent
|
||||||
|
echo "FILES_DIR=$filesDir" >> $env:GITHUB_ENV
|
||||||
|
Write-Host "FILES_DIR : $filesDir"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 8. Construire le MSI avec wix build
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Build MSI
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
$version = "${{ steps.version.outputs.VERSION_MSI }}"
|
||||||
|
$verDisplay = "${{ steps.version.outputs.VERSION_DISPLAY }}"
|
||||||
|
$filesDir = $env:FILES_DIR
|
||||||
|
$outputName = "QElectroTech-${verDisplay}_x86_64-win64.msi"
|
||||||
|
|
||||||
|
Write-Host "=== wix build ==="
|
||||||
|
Write-Host " Version : $version"
|
||||||
|
Write-Host " FilesDir : $filesDir"
|
||||||
|
Write-Host " Output : $outputName"
|
||||||
|
|
||||||
|
wix build QElectroTech.wxs `
|
||||||
|
-arch x64 `
|
||||||
|
-d "Version=$version" `
|
||||||
|
-d "ProductVersion=$verDisplay" `
|
||||||
|
-d "FilesDir=$filesDir" `
|
||||||
|
-ext WixToolset.UI.wixext `
|
||||||
|
-o "dist\$outputName"
|
||||||
|
|
||||||
|
if (-not (Test-Path "dist\$outputName")) {
|
||||||
|
Write-Error "MSI non généré : dist\$outputName"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$size = [math]::Round((Get-Item "dist\$outputName").Length / 1MB, 1)
|
||||||
|
Write-Host "MSI généré : dist\$outputName ($size MB)"
|
||||||
|
echo "MSI_NAME=$outputName" >> $env:GITHUB_ENV
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 9. Upload de l'artifact MSI
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Upload MSI artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: qelectrotech-windows-msi
|
||||||
|
path: dist\*.msi
|
||||||
|
retention-days: 14
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 10. (Optionnel) Attacher le MSI à la release nightly
|
||||||
|
# Décommenter si tu veux le MSI dans les releases GitHub
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# - name: Upload MSI to nightly release
|
||||||
|
# uses: softprops/action-gh-release@v2
|
||||||
|
# if: github.ref == 'refs/heads/master'
|
||||||
|
# with:
|
||||||
|
# tag_name: nightly
|
||||||
|
# files: dist/*.msi
|
||||||
|
# env:
|
||||||
|
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# 11. Résumé
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
- name: Summary
|
||||||
|
if: always()
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Write-Host "=== Résumé build MSI ==="
|
||||||
|
Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}"
|
||||||
|
Write-Host "Image runner : ${{ runner.os }} / ${{ runner.arch }}"
|
||||||
|
if (Test-Path "dist\$env:MSI_NAME") {
|
||||||
|
$size = [math]::Round((Get-Item "dist\$env:MSI_NAME").Length / 1MB, 1)
|
||||||
|
Write-Host "MSI : $env:MSI_NAME ($size MB) ✓"
|
||||||
|
} else {
|
||||||
|
Write-Host "MSI : ÉCHEC ✗"
|
||||||
|
}
|
||||||
183
build-aux/windows/QElectroTech.wxs
Normal file
183
build-aux/windows/QElectroTech.wxs
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
QElectroTech.wxs — WiX v4 installer definition
|
||||||
|
Génère un MSI x64 pour QElectroTech (build MSYS2/UCRT64).
|
||||||
|
|
||||||
|
Variables passées depuis la ligne de commande wix build :
|
||||||
|
-d FilesDir=<chemin absolu vers nsis_root\files>
|
||||||
|
-d Version=<version numérique ex. 0.100.1.0>
|
||||||
|
-d ProductVersion=<version lisible ex. 0.100.1+git8754>
|
||||||
|
-->
|
||||||
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||||
|
|
||||||
|
<Package
|
||||||
|
Name="QElectroTech"
|
||||||
|
Manufacturer="QElectroTech Team"
|
||||||
|
Version="!(bind.Variable.Version)"
|
||||||
|
UpgradeCode="A1B2C3D4-E5F6-7890-ABCD-EF1234567890"
|
||||||
|
Language="1033"
|
||||||
|
Codepage="1252"
|
||||||
|
InstallerVersion="500"
|
||||||
|
Scope="perMachine">
|
||||||
|
|
||||||
|
<!-- Permet la mise à jour en place (désinstalle l'ancienne version automatiquement) -->
|
||||||
|
<MajorUpgrade
|
||||||
|
DowngradeErrorMessage="Une version plus récente de QElectroTech est déjà installée."
|
||||||
|
Schedule="afterInstallInitialize" />
|
||||||
|
|
||||||
|
<!-- Répertoire d'installation par défaut -->
|
||||||
|
<StandardDirectory Id="ProgramFiles64Folder">
|
||||||
|
<Directory Id="INSTALLDIR" Name="QElectroTech" />
|
||||||
|
</StandardDirectory>
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Composants : exe principal
|
||||||
|
============================================================ -->
|
||||||
|
<ComponentGroup Id="CG_Exe" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_MainExe" Guid="B1C2D3E4-F5A6-7890-BCDE-F12345678901">
|
||||||
|
<File Id="qelectrotech_exe"
|
||||||
|
Source="!(bind.Variable.FilesDir)\bin\qelectrotech.exe"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C_LauncherBat" Guid="C2D3E4F5-A6B7-8901-CDEF-123456789012">
|
||||||
|
<File Id="lancer_qet_bat"
|
||||||
|
Source="!(bind.Variable.FilesDir)\..\Lancer QET.bat"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Composants : DLLs (bin\)
|
||||||
|
============================================================ -->
|
||||||
|
<ComponentGroup Id="CG_Dlls" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Dlls" Guid="D3E4F5A6-B7C8-9012-DEF0-234567890123">
|
||||||
|
<!-- Harvest automatique de tout bin\ sauf l'exe principal -->
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\bin\**"
|
||||||
|
Exclude="!(bind.Variable.FilesDir)\bin\qelectrotech.exe" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Composants : données applicatives
|
||||||
|
============================================================ -->
|
||||||
|
<ComponentGroup Id="CG_Elements" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Elements" Guid="E4F5A6B7-C8D9-0123-EF01-345678901234">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\elements\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Lang" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Lang" Guid="F5A6B7C8-D9E0-1234-F012-456789012345">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\lang\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Titleblocks" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Titleblocks" Guid="A6B7C8D9-E0F1-2345-0123-567890123456">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\titleblocks\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Examples" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Examples" Guid="B7C8D9E0-F1A2-3456-1234-678901234567">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\examples\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Fonts" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Fonts" Guid="C8D9E0F1-A2B3-4567-2345-789012345678">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\fonts\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Icons" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_Icons" Guid="D9E0F1A2-B3C4-5678-3456-890123456789">
|
||||||
|
<Files Include="!(bind.Variable.FilesDir)\ico\**" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<ComponentGroup Id="CG_Misc" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_License" Guid="E0F1A2B3-C4D5-6789-4567-901234567890">
|
||||||
|
<File Id="LICENSE"
|
||||||
|
Source="!(bind.Variable.FilesDir)\LICENSE"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Raccourcis bureau + menu démarrer
|
||||||
|
============================================================ -->
|
||||||
|
<ComponentGroup Id="CG_Shortcuts" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_ShortcutDesktop" Guid="F1A2B3C4-D5E6-7890-5678-012345678901">
|
||||||
|
<Shortcut Id="DesktopShortcut"
|
||||||
|
Directory="DesktopFolder"
|
||||||
|
Name="QElectroTech"
|
||||||
|
Target="[INSTALLDIR]Lancer QET.bat"
|
||||||
|
Icon="qet.ico"
|
||||||
|
WorkingDirectory="INSTALLDIR" />
|
||||||
|
<RegistryValue Root="HKCU"
|
||||||
|
Key="Software\QElectroTech"
|
||||||
|
Name="DesktopShortcut"
|
||||||
|
Type="integer" Value="1"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
<Component Id="C_ShortcutStartMenu" Guid="A2B3C4D5-E6F7-8901-6789-123456789012">
|
||||||
|
<Shortcut Id="StartMenuShortcut"
|
||||||
|
Directory="ProgramMenuFolder"
|
||||||
|
Name="QElectroTech"
|
||||||
|
Target="[INSTALLDIR]Lancer QET.bat"
|
||||||
|
Icon="qet.ico"
|
||||||
|
WorkingDirectory="INSTALLDIR" />
|
||||||
|
<RegistryValue Root="HKCU"
|
||||||
|
Key="Software\QElectroTech"
|
||||||
|
Name="StartMenuShortcut"
|
||||||
|
Type="integer" Value="1"
|
||||||
|
KeyPath="yes" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<!-- Association fichier .qet -->
|
||||||
|
<ComponentGroup Id="CG_FileAssoc" Directory="INSTALLDIR">
|
||||||
|
<Component Id="C_FileAssoc" Guid="B3C4D5E6-F7A8-9012-7890-234567890123">
|
||||||
|
<RegistryValue Root="HKCR" Key=".qet" Type="string" Value="QElectroTech.Document" KeyPath="yes" />
|
||||||
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document" Type="string" Value="QElectroTech Project" />
|
||||||
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document\DefaultIcon" Type="string"
|
||||||
|
Value="[INSTALLDIR]ico\qelectrotech.ico" />
|
||||||
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document\shell\open\command" Type="string"
|
||||||
|
Value=""[INSTALLDIR]bin\qelectrotech.exe" "%1"" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Icône (pour les raccourcis)
|
||||||
|
============================================================ -->
|
||||||
|
<Icon Id="qet.ico" SourceFile="!(bind.Variable.FilesDir)\ico\qelectrotech.ico" />
|
||||||
|
|
||||||
|
<!-- ============================================================
|
||||||
|
Feature principale (tout inclus)
|
||||||
|
============================================================ -->
|
||||||
|
<Feature Id="ProductFeature" Title="QElectroTech" Level="1">
|
||||||
|
<ComponentGroupRef Id="CG_Exe" />
|
||||||
|
<ComponentGroupRef Id="CG_Dlls" />
|
||||||
|
<ComponentGroupRef Id="CG_Elements" />
|
||||||
|
<ComponentGroupRef Id="CG_Lang" />
|
||||||
|
<ComponentGroupRef Id="CG_Titleblocks" />
|
||||||
|
<ComponentGroupRef Id="CG_Examples" />
|
||||||
|
<ComponentGroupRef Id="CG_Fonts" />
|
||||||
|
<ComponentGroupRef Id="CG_Icons" />
|
||||||
|
<ComponentGroupRef Id="CG_Misc" />
|
||||||
|
<ComponentGroupRef Id="CG_Shortcuts" />
|
||||||
|
<ComponentGroupRef Id="CG_FileAssoc" />
|
||||||
|
</Feature>
|
||||||
|
|
||||||
|
<!-- UI standard Windows Installer -->
|
||||||
|
<UIRef Id="WixUI_Minimal" />
|
||||||
|
|
||||||
|
<!-- Propriétés affichées dans Programmes et fonctionnalités -->
|
||||||
|
<Property Id="ARPPRODUCTICON" Value="qet.ico" />
|
||||||
|
<Property Id="ARPHELPLINK" Value="https://qelectrotech.org" />
|
||||||
|
<Property Id="ARPURLINFOABOUT" Value="https://qelectrotech.org" />
|
||||||
|
<Property Id="ARPCOMMENTS" Value="Logiciel libre de schémas électriques" />
|
||||||
|
|
||||||
|
</Package>
|
||||||
|
</Wix>
|
||||||
2
elements
2
elements
Submodule elements updated: 73c0dfb4bf...d4b76b45c2
Reference in New Issue
Block a user