name: Windows on: workflow_call: inputs: profile: required: false default: "release" type: string unit-tests: required: false default: false type: boolean upload: required: false default: false type: boolean github-release-id: required: false type: string workflow_dispatch: inputs: profile: required: false default: "release" options: ["release", "debug", "production"] type: choice unit-tests: required: false default: false type: boolean upload: required: false default: false type: boolean env: RUST_BACKTRACE: 1 SHELL: /bin/bash CCACHE: "ccache" CARGO_TARGET_DIR: C:\\a\\servo\\servo\\target # clang_sys will search msys path before Program Files\LLVM # so we need to override this behaviour until we update clang-sys # https://github.com/KyleMayes/clang-sys/issues/150 LIBCLANG_PATH: C:\\Program Files\\LLVM\\bin jobs: build: name: Windows Build runs-on: windows-2022 steps: - uses: actions/checkout@v4 if: github.event_name != 'pull_request_target' # This is necessary to checkout the pull request if this run was triggered via a # `pull_request_target` event. - uses: actions/checkout@v4 if: github.event_name == 'pull_request_target' with: ref: refs/pull/${{ github.event.number }}/head fetch-depth: 2 - name: ccache uses: hendrikmuhs/ccache-action@v1.2 - name: Install taplo uses: baptiste0928/cargo-install@v3 with: crate: taplo-cli locked: true - name: Install wixtoolset run: | choco install wixtoolset echo "C:\\Program Files (x86)\\WiX Toolset v3.11\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - uses: actions/setup-python@v5 with: python-version: '3.10' - name: Bootstrap run: | python -m pip install --upgrade pip python mach fetch python mach bootstrap-gstreamer cargo install --path support/crown # For some reason WiX isn't currently on the GitHub runner path. This is a # temporary workaround until that is fixed. - name: Add WiX to Path run: | "$env:WIX\bin" >> $env:GITHUB_PATH - name: Build (${{ inputs.profile }}) run: | python mach build --${{ inputs.profile }} cp C:\a\servo\servo\target\cargo-timings C:\a\servo\servo\target\cargo-timings-windows -Recurse - name: Copy resources run: cp D:\a\servo\servo\resources C:\a\servo\servo -Recurse - name: Smoketest run: python mach smoketest --angle --${{ inputs.profile }} - name: Unit tests if: ${{ inputs.unit-tests }} uses: nick-fields/retry@v3 with: timeout_minutes: 30 max_attempts: 3 # https://github.com/servo/servo/issues/30683 command: python mach test-unit --${{ inputs.profile }} -- -- --test-threads=1 - name: Archive build timing uses: actions/upload-artifact@v4 with: name: cargo-timings-windows # Using a wildcard here ensures that the archive includes the path. path: C:\\a\\servo\\servo\\target\\cargo-timings-* - name: Build mach package run: python mach package --${{ inputs.profile }} - name: Upload artifact for mach package uses: actions/upload-artifact@v4 with: name: win # These files are available # MSI Installer: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Installer.msi # Bundle: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.exe # Zip: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.zip path: C:\\a\\servo\\servo\\target\\${{ inputs.profile }}\\msi\\Servo.exe - name: Upload nightly if: ${{ inputs.upload }} run: | python mach upload-nightly windows-msvc --secret-from-environment ` --github-release-id ${{ inputs.github-release-id }} env: S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }} NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds