github action #121 #250
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI Build | |
on: | |
push: | |
branches: [main, dev] | |
pull_request: | |
branches: [main] | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
include: | |
- os: windows-latest | |
c_compiler: cl | |
cpp_compiler: cl | |
- os: ubuntu-latest | |
c_compiler: gcc | |
cpp_compiler: g++ | |
- os: macos-latest | |
c_compiler: clang | |
cpp_compiler: clang++ | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
### Ubuntu Dependencies | |
- name: Install dependencies (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y ninja-build \ | |
qt6-base-dev qt6-tools-dev qt6-tools-dev-tools \ | |
qt6-l10n-tools libgl1-mesa-dev libglu1-mesa-dev | |
echo "CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake/Qt6" >> $GITHUB_ENV | |
### macOS Dependencies | |
- name: Install dependencies (macOS) | |
if: matrix.os == 'macos-latest' | |
run: | | |
brew install ninja qt | |
echo "CMAKE_PREFIX_PATH=$(brew --prefix qt)" >> $GITHUB_ENV | |
### Windows Setup | |
- name: Install dependencies (Windows) | |
if: matrix.os == 'windows-latest' | |
shell: powershell | |
run: | | |
choco install visualstudio2022buildtools -y | |
choco install ninja -y | |
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y | |
choco install python3 -y | |
choco install gperf -y | |
choco install llvm -y | |
pip install html5lib | |
- name: Install bison manually if missing | |
if: matrix.os == 'windows-latest' | |
shell: powershell | |
run: | | |
$bisonPath = "C:\ProgramData\chocolatey\bin\bison.exe" | |
if (-not (Test-Path $bisonPath)) { | |
Write-Host "bison is not available via Chocolatey. Installing manually..." | |
$bisonUrl = "https://mirrors.kernel.org/gnu/bison/bison-3.8.2.zip" # Reliable mirror | |
$bisonDir = "C:\bison" | |
$bisonZip = "$bisonDir\bison.zip" | |
New-Item -ItemType Directory -Path $bisonDir -Force | |
# Retry logic for downloading the file | |
$maxRetries = 3 | |
$retryCount = 0 | |
$success = $false | |
while (-not $success -and $retryCount -lt $maxRetries) { | |
try { | |
$response = Invoke-WebRequest -Uri $bisonUrl -OutFile $bisonZip -UseBasicParsing | |
if ($response.Headers["Content-Type"] -notmatch "application/zip") { | |
throw "Downloaded file is not a ZIP archive" | |
} | |
$success = $true | |
} catch { | |
$retryCount++ | |
Write-Host "Download failed. Retrying ($retryCount/$maxRetries)..." | |
Start-Sleep -Seconds 5 | |
} | |
} | |
# Ensure the ZIP file exists and is valid | |
if (-not (Test-Path $bisonZip) -or (Get-Item $bisonZip).Length -lt 100000) { | |
Write-Host "Error: bison ZIP file is invalid or incomplete. Exiting." | |
exit 1 | |
} | |
# Extract the ZIP archive using 7-Zip | |
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe" | |
if (-not (Test-Path $sevenZipPath)) { | |
choco install 7zip -y | |
} | |
Start-Process -FilePath $sevenZipPath -ArgumentList "x `"$bisonZip`" -o`"$bisonDir`" -y" -NoNewWindow -Wait | |
# Ensure extraction succeeded | |
if (-not (Test-Path "$bisonDir\bin\bison.exe")) { | |
Write-Host "Error: bison could not be extracted. Exiting." | |
exit 1 | |
} | |
$env:PATH += ";$bisonDir\bin" | |
[System.Environment]::SetEnvironmentVariable("PATH", $env:PATH, [System.EnvironmentVariableTarget]::Process) | |
} else { | |
Write-Host "bison found at $bisonPath" | |
} | |
- name: Validate and Add Missing Tools to PATH (Windows) | |
if: matrix.os == 'windows-latest' | |
shell: powershell | |
run: | | |
$gperfPath = "C:\ProgramData\chocolatey\bin\gperf.exe" | |
$clangPath = "C:\Program Files\LLVM\bin\clang.exe" | |
if (-not (Test-Path $gperfPath)) { | |
Write-Host "gperf is not available. Reinstalling..." | |
choco install gperf -y | |
} else { | |
Write-Host "gperf found at $gperfPath" | |
} | |
if (-not (Test-Path $clangPath)) { | |
Write-Host "clang is not available. Check LLVM installation." | |
exit 1 | |
} else { | |
Write-Host "clang found at $clangPath" | |
} | |
# Add tools to PATH | |
$env:PATH += ";C:\ProgramData\chocolatey\bin;C:\Program Files\LLVM\bin" | |
[System.EnvironmentVariableTarget]::Process) | |
# Restore Qt Source Cache and Build Workflow Continues... | |
# <Unchanged from previous sections for Windows-specific Qt source and build steps> |