mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 07:50:19 +00:00
Updated the Windows build workflow to improve dependency installation and streamline the build process.
187 lines
7.4 KiB
YAML
187 lines
7.4 KiB
YAML
name: Windows Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
windows_build:
|
|
runs-on: windows-2019
|
|
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
attestations: write
|
|
artifact-metadata: write
|
|
|
|
strategy:
|
|
matrix:
|
|
platform: [x64, win32]
|
|
arch: [x64, x86]
|
|
exclude:
|
|
- platform: x64
|
|
arch: x86
|
|
- platform: win32
|
|
arch: x64
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.14.2'
|
|
architecture: ${{ matrix.arch }}
|
|
|
|
- name: Install Dependencies
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
New-Item -Name "deps" -ItemType "Directory" -Force | Out-Null
|
|
New-Item -Path "C:\gtk-build" -ItemType "Directory" -Force | Out-Null
|
|
|
|
Invoke-WebRequest http://files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe -OutFile deps\innosetup-unicode.exe
|
|
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
|
|
|
|
Invoke-WebRequest https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.17.0/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe
|
|
& deps\idpsetup.exe /VERYSILENT
|
|
|
|
# --- GTK stack from wingtk/gvsbuild (NO MSYS build here; use their prebuilt release) ---
|
|
$repo = "wingtk/gvsbuild"
|
|
$tag = (gh release view --repo $repo --json tagName -q .tagName)
|
|
Write-Host "Using $repo release: $tag"
|
|
|
|
$patterns = @()
|
|
if ("${{ matrix.platform }}" -eq "x64") {
|
|
$patterns = @("*x64*.zip", "*win64*.zip", "*x64*.7z", "*win64*.7z", "*gtk*.zip", "*gtk*.7z")
|
|
} else {
|
|
$patterns = @("*x86*.zip", "*win32*.zip", "*x86*.7z", "*win32*.7z", "*gtk*.zip", "*gtk*.7z")
|
|
}
|
|
|
|
$downloaded = $false
|
|
foreach ($p in $patterns) {
|
|
gh release download $tag --repo $repo --pattern $p --dir deps
|
|
if ($LASTEXITCODE -eq 0) { $downloaded = $true; break }
|
|
}
|
|
if (-not $downloaded) {
|
|
throw "Could not download a wingtk/gvsbuild GTK asset for platform=${{ matrix.platform }} arch=${{ matrix.arch }}"
|
|
}
|
|
|
|
$gtkPkg = Get-ChildItem deps -File | Where-Object { $_.Name -match '(?i)\.(zip|7z)$' } | Sort-Object Length -Descending | Select-Object -First 1
|
|
if (-not $gtkPkg) { throw "GTK package download succeeded but no archive found in deps/." }
|
|
Write-Host "Downloaded GTK package: $($gtkPkg.Name)"
|
|
|
|
$tmp = Join-Path $env:TEMP "wingtk-gtk-extract"
|
|
Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue
|
|
New-Item -Path $tmp -ItemType Directory -Force | Out-Null
|
|
|
|
if ($gtkPkg.Extension -ieq ".zip") {
|
|
Expand-Archive -Path $gtkPkg.FullName -DestinationPath $tmp -Force
|
|
} else {
|
|
& 7z.exe x $gtkPkg.FullName "-o$tmp" | Out-Null
|
|
}
|
|
|
|
# Find the extracted root (either directly contains bin/include/lib, or has a single child dir that does)
|
|
$root = $null
|
|
if (Test-Path (Join-Path $tmp "bin")) {
|
|
$root = Get-Item $tmp
|
|
} else {
|
|
$root = Get-ChildItem $tmp -Directory |
|
|
Where-Object { Test-Path (Join-Path $_.FullName "bin") } |
|
|
Select-Object -First 1
|
|
}
|
|
if (-not $root) {
|
|
$root = Get-ChildItem $tmp -Directory | Select-Object -First 1
|
|
}
|
|
if (-not $root) { throw "Failed to determine GTK extract root under $tmp" }
|
|
|
|
$target = "C:\gtk-build\gtk\${{ matrix.platform }}\Release"
|
|
New-Item -Path $target -ItemType Directory -Force | Out-Null
|
|
|
|
foreach ($d in @("bin","include","lib","share","etc")) {
|
|
$src = Join-Path $root.FullName $d
|
|
if (Test-Path $src) {
|
|
Copy-Item $src $target -Recurse -Force
|
|
}
|
|
}
|
|
|
|
# --- remaining deps still from ZoiteChat/gvsbuild (as requested) ---
|
|
Invoke-WebRequest https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.17.0/gendef-20111031.7z -OutFile deps\gendef.7z
|
|
& 7z.exe x deps\gendef.7z -oC:\gtk-build
|
|
|
|
Invoke-WebRequest https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.17.0/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z
|
|
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
|
|
|
|
Invoke-WebRequest https://github.com/ZoiteChat/gvsbuild/releases/download/zoitechat-2.17.0/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
|
|
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }}
|
|
|
|
# Resolve python root from setup-python
|
|
$pyRoot = $env:pythonLocation
|
|
if (-not $pyRoot) { $pyRoot = & python -c "import sys; print(sys.prefix)" }
|
|
|
|
# Create BOTH paths because the .vcxproj hard-codes python-3.14\...
|
|
foreach ($pyDir in @("C:\gtk-build\python-3.14.2", "C:\gtk-build\python-3.14")) {
|
|
New-Item -Path $pyDir -ItemType Directory -Force | Out-Null
|
|
$target = Join-Path $pyDir "${{ matrix.platform }}"
|
|
if (Test-Path $target) { Remove-Item $target -Recurse -Force }
|
|
New-Item -Path $pyDir -Name "${{ matrix.platform }}" -ItemType Junction -Value $pyRoot | Out-Null
|
|
}
|
|
|
|
python -m pip install --upgrade pip
|
|
python -m pip install cffi
|
|
|
|
- name: Build
|
|
run: |
|
|
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
|
|
|
|
set "PYTHON_DIR=C:\gtk-build\python-3.14.2\${{ matrix.platform }}"
|
|
if not exist "%PYTHON_DIR%\libs\python314.lib" (
|
|
echo Missing %PYTHON_DIR%\libs\python314.lib
|
|
dir "%PYTHON_DIR%\libs"
|
|
exit /b 1
|
|
)
|
|
|
|
set "LIB=%PYTHON_DIR%\libs;%LIB%"
|
|
set "INCLUDE=%PYTHON_DIR%\include;%INCLUDE%"
|
|
|
|
msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
|
|
shell: cmd
|
|
|
|
- name: Preparing Artifacts
|
|
run: |
|
|
move ..\zoitechat-build\${{ matrix.platform }}\ZoiteChat*.exe .\
|
|
move ..\zoitechat-build .\
|
|
shell: cmd
|
|
|
|
- name: Upload Installer
|
|
id: upload_installer
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Installer ${{ matrix.arch }}
|
|
path: ZoiteChat*.exe
|
|
|
|
- name: Attest Installer (Artifact Attestation)
|
|
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
|
uses: actions/attest-build-provenance@v3
|
|
with:
|
|
subject-name: Installer ${{ matrix.arch }}
|
|
subject-digest: sha256:${{ steps.upload_installer.outputs.artifact-digest }}
|
|
|
|
- name: Upload Build Files
|
|
id: upload_buildfiles
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Build Files ${{ matrix.arch }}
|
|
path: zoitechat-build
|
|
|
|
- name: Attest Build Files (Artifact Attestation)
|
|
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }}
|
|
uses: actions/attest-build-provenance@v3
|
|
with:
|
|
subject-name: Build Files ${{ matrix.arch }}
|
|
subject-digest: sha256:${{ steps.upload_buildfiles.outputs.artifact-digest }}
|