name: Build IfcOpenShell Windows on: workflow_dispatch: jobs: build_ifcopenshell: strategy: fail-fast: false matrix: include: - arch: x64 runs_on: windows-2022 deps_dir: _deps-vs2022-x64-installed vcvars: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"' build_branch: windows-x64 zip_suffix: win64 - arch: ARM64 runs_on: windows-11-arm deps_dir: _deps-vs2022-ARM64-installed vcvars: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsarm64.bat"' build_branch: windows-arm64 zip_suffix: win-arm64 runs-on: ${{ matrix.runs_on }} steps: - name: Checkout Repository uses: actions/checkout@v7 with: submodules: recursive - name: Checkout Build Repository uses: actions/checkout@v7 with: repository: IfcOpenShell/build-outputs path: ${{ matrix.deps_dir }} ref: ${{ matrix.build_branch }} lfs: true token: ${{ secrets.BUILD_REPO_TOKEN }} - name: Install Dependencies run: | choco install -y sed 7zip.install awscli - name: Unpack Dependencies run: | cd ${{ matrix.deps_dir }} Get-ChildItem -Path . -Filter 'cache-*.zip' | ForEach-Object { Write-Host "Extracting $($_.Name)" 7z x -bso0 -bsp0 $_.FullName if ($LASTEXITCODE -ne 0) { throw "Failed to extract $($_.Name) with 7z exit code $LASTEXITCODE." } } - name: ccache uses: hendrikmuhs/ccache-action@v1.2.23 with: key: win-${{ matrix.arch }} # Windows ccache needs ~1GB # and with default 500MB some cache gets deleted, leading to misses. max-size: 5000MB - name: Set up Python for connector build uses: actions/setup-python@v6 with: python-version: '3.12' # Build the Autodesk connector before the C++ build: build-all-win.py # bundles it next to BonsaiViewer.exe while archiving the executables. # bonsaiviewer-autodesk is a Rust connector; packaging/build.py runs # `cargo build --release` and stages the binary + connector.json into # dist/autodesk/. - name: Build Autodesk connector working-directory: src/bonsaiviewer-autodesk run: python packaging/build.py - name: Run Build Script And Pack .zip Archives shell: cmd env: TARGET_ARCH: ${{ matrix.arch }} # lets the Python script know which arch to target (optional override) run: | call ${{ matrix.vcvars }} cd win python build-all-win.py - name: Pack Dependencies run: | cd ${{ matrix.deps_dir }} Get-ChildItem -Path . -Directory | ForEach-Object { $cacheFile = "cache-$($_.Name).zip" echo $cacheFile if (!(Test-Path $cacheFile)) { 7z a $cacheFile $_.FullName } } - name: Commit and Push Changes to Build Repository run: | cd ${{ matrix.deps_dir }} git config user.name "IfcOpenBot" git config user.email "ifcopenbot@ifcopenshell.org" git checkout -B ${{ matrix.build_branch }} git add *.zip git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit" git push --set-upstream origin ${{ matrix.build_branch }} || echo "Push failed" - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Upload .zip Archives to S3 env: AWS_DEBUG: 1 AWS_RETRY_MODE: standard AWS_MAX_ATTEMPTS: 3 run: | dir "$env:USERPROFILE\output" foreach ($zip in Get-ChildItem -Path "$env:USERPROFILE\output" -Filter *.zip) { aws s3 cp "$($zip.FullName)" s3://ifcopenshell-builds/ --debug Start-Sleep -Seconds 5 }