name: Windows on: push: paths-ignore: - 'doc/**' - '**/man' - '**.md' - '**.rdoc' - '**/.document' pull_request: paths-ignore: - 'doc/**' - '**/man' - '**.md' - '**.rdoc' - '**/.document' merge_group: paths-ignore: - 'doc/**' - '**/man' - '**.md' - '**.rdoc' - '**/.document' concurrency: group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} permissions: contents: read jobs: make: strategy: matrix: include: - vs: 2022 vcvers: -vcvars_ver=14.2 fail-fast: false runs-on: windows-${{ matrix.vs }} if: ${{ !contains(github.event.head_commit.message, '[DOC]') && !contains(github.event.pull_request.labels.*.name, 'Documentation') }} name: VisualStudio ${{ matrix.vs }} env: GITPULLOPTIONS: --no-tags origin ${{github.ref}} PATCH: C:\msys64\usr\bin\patch.exe OS_VER: windows-${{ matrix.vs }} steps: - run: md build working-directory: - uses: msys2/setup-msys2@61f9e5e925871ba6c9e3e8da24ede83ea27fa91f # v2.27.0 id: setup-msys2 with: update: true install: bison patch - name: patch path shell: msys2 {0} run: echo PATCH=$(cygpath -wa $(command -v patch)) >> $GITHUB_ENV if: ${{ steps.setup-msys2.outcome == 'success' }} - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 with: path: C:\vcpkg\installed key: ${{ runner.os }}-vcpkg-installed-windows-${{ matrix.vs }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-vcpkg-installed-windows-${{ matrix.vs }}- ${{ runner.os }}-vcpkg-installed-windows- - name: Install libraries with vcpkg run: | iex "& {$(irm get.scoop.sh)} -RunAsAdmin" Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH scoop install cmake@3.31.6 vcpkg --triplet x64-windows install libffi libyaml openssl readline zlib shell: pwsh - name: git config run: | git config --global core.autocrlf false git config --global core.eol lf git config --global advice.detachedHead 0 git config --global init.defaultBranch garbage - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: path: src - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 with: path: src/.downloaded-cache key: downloaded-cache - name: setup env # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent. # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302 # msys2/setup-msys2 installs MSYS2 to D:/a/_temp/msys64/usr/bin run: | set Path=D:/a/_temp/msys64/usr/bin;%Path% if not "%VCVARS%" == "" goto :vcset set VCVARS="C:\Program Files (x86)\Microsoft Visual Studio\${{ matrix.vs }}\Enterprise\VC\Auxiliary\Build\vcvars64.bat" if not exist %VCVARS% set VCVARS="C:\Program Files\Microsoft Visual Studio\${{ matrix.vs }}\Enterprise\VC\Auxiliary\Build\vcvars64.bat" :vcset set | C:\msys64\usr\bin\sort > old.env call %VCVARS% ${{ matrix.vcvers || ''}} set TMP=%USERPROFILE%\AppData\Local\Temp set TEMP=%USERPROFILE%\AppData\Local\Temp set /a TEST_JOBS=(15 * %NUMBER_OF_PROCESSORS% / 10) > nul set | C:\msys64\usr\bin\sort > new.env C:\msys64\usr\bin\comm -13 old.env new.env >> %GITHUB_ENV% del *.env - name: compiler version run: cl - name: link libraries run: | for %%I in (C:\vcpkg\installed\x64-windows\bin\*.dll) do ( if not %%~nI == readline mklink %%~nxI %%I ) - name: Configure run: >- ../src/win32/configure.bat --disable-install-doc --with-opt-dir=C:/vcpkg/installed/x64-windows - run: nmake incs - run: nmake extract-extlibs - run: nmake env: YACC: bison.exe - run: nmake test timeout-minutes: 5 - run: nmake test-spec timeout-minutes: 10 - run: nmake test-all env: RUBY_TESTOPTS: -j${{env.TEST_JOBS}} --job-status=normal timeout-minutes: 60 - uses: ruby/action-slack@0bd85c72233cdbb6a0fe01d37aaeff1d21b5fce1 # v3.2.1 with: payload: | { "ci": "GitHub Actions", "env": "VS${{ matrix.vs }} / ${{ matrix.test_task || 'check' }}", "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", "commit": "${{ github.sha }}", "branch": "${{ github.ref_name }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot if: ${{ failure() && github.event_name == 'push' }} defaults: run: working-directory: build shell: cmd