io: reduce IO_CBUF_CAPA_MIN to 8KB to lower memory usage #770
This file contains hidden or 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: Windows | |
| on: | |
| push: | |
| paths-ignore: | |
| - 'doc/**' | |
| - '**/man/*' | |
| - '**.md' | |
| - '**.rdoc' | |
| - '**/.document' | |
| - '.*.yml' | |
| pull_request: | |
| # Do not use paths-ignore for required status checks | |
| # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks | |
| merge_group: | |
| 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: | |
| - os: 2022 | |
| test_task: check | |
| - os: 2022 | |
| test_task: test-bundled-gems | |
| - os: 2025-vs2026 | |
| test_task: check | |
| - os: 2025-vs2026 | |
| test_task: test-bundled-gems | |
| - os: 11-arm | |
| test_task: 'btest test-basic test-tool' # check and test-spec are broken yet. | |
| target: arm64 | |
| fail-fast: false | |
| runs-on: windows-${{ matrix.os }} | |
| if: >- | |
| ${{!(false | |
| || contains(github.event.head_commit.message, '[DOC]') | |
| || contains(github.event.pull_request.title, '[DOC]') | |
| || contains(github.event.pull_request.labels.*.name, 'Documentation') | |
| || (github.event.pull_request.user.login == 'dependabot[bot]' && !startsWith(github.head_ref, 'dependabot/vcpkg')) | |
| )}} | |
| name: Windows ${{ matrix.os }} (${{ matrix.test_task }}) | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| GITPULLOPTIONS: --no-tags origin ${{ github.ref }} | |
| VCPKG_DEFAULT_TRIPLET: ${{ matrix.target || 'x64' }}-windows | |
| FEED_URL: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json | |
| steps: | |
| - run: md build | |
| working-directory: | |
| - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 | |
| with: | |
| # windows-11-arm has only 3.4.1, 3.4.2, 3.4.3, head | |
| ruby-version: ${{ !endsWith(matrix.os, 'arm') && '3.1' || '3.4' }} | |
| bundler: none | |
| windows-toolchain: none | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| sparse-checkout-cone-mode: false | |
| sparse-checkout: /.github | |
| - uses: ./.github/actions/setup/directories | |
| with: | |
| srcdir: src | |
| builddir: build | |
| make-command: nmake | |
| clean: true | |
| bundled-gems-src-cache: ${{ matrix.test_task == 'test-bundled-gems' }} | |
| - name: Install tools with scoop | |
| run: | | |
| if ((vcpkg.exe help install) -match "manifest") { exit } | |
| Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser | |
| iwr -useb get.scoop.sh | iex | |
| Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH | |
| scoop install vcpkg | |
| shell: pwsh | |
| - name: Set up vcpkg binary cache | |
| shell: pwsh | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| FEED_OWNER: ${{ github.repository_owner }} | |
| # The GITHUB_TOKEN of pull_request events (forks, dependabot) is | |
| # read-only; packages are uploaded on push and merge_group only. | |
| FEED_MODE: ${{ github.event_name != 'pull_request' && 'readwrite' || 'read' }} | |
| run: | | |
| $nuget = (vcpkg fetch nuget) | Select-Object -Last 1 | |
| & $nuget sources add -Source $Env:FEED_URL -StorePasswordInClearText ` | |
| -Name GitHubPackages -UserName $Env:FEED_OWNER -Password $Env:GH_TOKEN | |
| & $nuget setapikey $Env:GH_TOKEN -Source $Env:FEED_URL | |
| "VCPKG_BINARY_SOURCES=clear;nuget,$Env:FEED_URL,$Env:FEED_MODE" >> $Env:GITHUB_ENV | |
| - name: Install libraries with vcpkg | |
| # The registry pinned by `builtin-baseline` can need a newer tool | |
| # than the vcpkg.exe shipped in the runner image, so re-bootstrap | |
| # it to the version the pulled registry asks for. | |
| run: | | |
| git -C "%VCPKG_INSTALLATION_ROOT%" pull --quiet | |
| call "%VCPKG_INSTALLATION_ROOT%\bootstrap-vcpkg.bat" | |
| vcpkg install | |
| working-directory: src | |
| - name: setup env | |
| # Available Ruby versions: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md#ruby | |
| # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent. | |
| # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302 | |
| run: | | |
| set > old.env | |
| call ..\src\win32\vssetup.cmd ^ | |
| -arch=${{ matrix.target || 'amd64' }} ^ | |
| ${{ matrix.vcvars && '-vcvars_ver=' || '' }}${{ matrix.vcvars }} | |
| nmake -f nul | |
| set TMP=%RUNNER_TEMP% | |
| set TEMP=%RUNNER_TEMP% | |
| set MAKEFLAGS=l | |
| set /a TEST_JOBS=(15 * %NUMBER_OF_PROCESSORS% / 10) > nul | |
| set RUBY_OPT_DIR=%GITHUB_WORKSPACE:\=/%/src/vcpkg_installed/%VCPKG_DEFAULT_TRIPLET% | |
| set > new.env | |
| - name: update env | |
| shell: pwsh | |
| run: | | |
| $old = (Get-Content old.env); $new = (Get-Content new.env) | |
| del *.env | |
| Compare-Object $old $new | | |
| Where-Object { $_.SideIndicator -eq '=>' } | | |
| Select-Object -ExpandProperty InputObject | | |
| Add-Content -Path $env:GITHUB_ENV | |
| - name: baseruby version | |
| run: ruby -v | |
| - name: compiler version | |
| run: cl | |
| - name: volume info | |
| run: Get-Volume | |
| shell: pwsh | |
| # TODO: We should use `../src` instead of `D:/a/ruby/ruby/src` | |
| - name: Configure | |
| run: >- | |
| ../src/win32/configure.bat --disable-install-doc | |
| --with-opt-dir=%RUBY_OPT_DIR% | |
| --with-gmp | |
| - run: nmake prepare-vcpkg | |
| - run: nmake incs | |
| - run: nmake extract-extlibs | |
| # On all other platforms, test-spec depending on extract-gems (in common.mk) is enough. | |
| # But not for this Visual Studio workflow. So here we extract gems before building. | |
| - run: nmake extract-gems | |
| # windows-11-arm runner cannot run `ruby tool/file2lastrev.rb --revision.h --output=revision.h` | |
| - name: make revision.h | |
| run: | | |
| win32\lastrev.bat | win32\ifchange.bat --timestamp=.revision.time revision.h - | |
| type revision.h | |
| working-directory: src | |
| - run: nmake | |
| - name: Set up Launchable | |
| uses: ./.github/actions/launchable/setup | |
| with: | |
| os: windows-${{ matrix.os }} | |
| launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }} | |
| builddir: build | |
| srcdir: src | |
| test-task: ${{ matrix.test_task || 'check' }} | |
| continue-on-error: true | |
| if: ${{ matrix.test_task != 'test-bundled-gems' }} | |
| timeout-minutes: 3 | |
| - run: nmake ${{ matrix.test_task || 'check' }} | |
| env: | |
| RUBY_TESTOPTS: -j${{ env.TEST_JOBS || 4 }} | |
| timeout-minutes: 70 | |
| - run: nmake binary-package | |
| if: ${{ matrix.test_task == 'check' }} | |
| timeout-minutes: 10 | |
| - name: Verify binary package | |
| shell: pwsh | |
| if: ${{ matrix.test_task == 'check' }} | |
| run: | | |
| $zip = Get-Item ruby-*-mswin*.zip | |
| $dest = Join-Path $env:RUNNER_TEMP "binpkg" | |
| if (Test-Path $dest) { Remove-Item -Recurse -Force $dest } | |
| New-Item -ItemType Directory $dest | Out-Null | |
| & "$env:SystemRoot\System32\tar.exe" -x -f $zip.FullName -C $dest | |
| if ((Get-ChildItem $dest).Count -ne 1) { throw "zip must contain a single root directory" } | |
| $root = (Get-ChildItem $dest)[0].FullName | |
| if (!(Test-Path "$root\bin\ruby.exe")) { throw "bin\ruby.exe not found" } | |
| if (Get-ChildItem "$root\bin" -Filter "vcruntime140*.dll") { throw "the VC runtime must not be bundled" } | |
| if (!(Get-ChildItem "$root\LICENSES" -ErrorAction SilentlyContinue)) { throw "LICENSES missing" } | |
| $env:PATH = "$env:SystemRoot\System32" | |
| & "$root\bin\ruby.exe" -v -ropenssl -rfiddle -rpsych -rzlib -e 'abort "configure_args has an absolute path: #{RbConfig::CONFIG[%q(configure_args)]}" if RbConfig::CONFIG[%q(configure_args)] =~ /\b[A-Za-z]:[\/\\]/; puts %q(binary package OK)' | |
| if ($LASTEXITCODE -ne 0) { throw "smoke test failed" } | |
| timeout-minutes: 5 | |
| - uses: ./.github/actions/slack | |
| with: | |
| label: Windows ${{ matrix.os }} / ${{ matrix.test_task || 'check' }} | |
| SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot | |
| if: ${{ failure() }} | |
| # Check that ruby can still be built with the older supported MSVC | |
| # toolsets. The runner images no longer preinstall VS 2017/2019, so | |
| # install the v141/v142 toolset into the preinstalled VS 2022 and | |
| # select it with -vcvars_ver. This only builds up to ruby.exe; | |
| # extensions and tests are not covered. | |
| make-old-toolset: | |
| strategy: | |
| matrix: | |
| include: | |
| - vs: 2017 | |
| toolset: '14.16' | |
| component: Microsoft.VisualStudio.Component.VC.v141.x86.x64 | |
| clver: '19.16' | |
| - vs: 2019 | |
| toolset: '14.29' | |
| component: Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | |
| clver: '19.29' | |
| fail-fast: false | |
| runs-on: windows-2022 | |
| if: >- | |
| ${{!(false | |
| || contains(github.event.head_commit.message, '[DOC]') | |
| || contains(github.event.pull_request.title, '[DOC]') | |
| || contains(github.event.pull_request.labels.*.name, 'Documentation') | |
| || github.event.pull_request.user.login == 'dependabot[bot]' | |
| )}} | |
| name: Windows 2022 (VS${{ matrix.vs }} toolset) | |
| env: | |
| GITPULLOPTIONS: --no-tags origin ${{ github.ref }} | |
| steps: | |
| - run: md build | |
| working-directory: | |
| - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0 | |
| with: | |
| ruby-version: '3.1' | |
| bundler: none | |
| windows-toolchain: none | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| sparse-checkout-cone-mode: false | |
| sparse-checkout: /.github | |
| - uses: ./.github/actions/setup/directories | |
| with: | |
| srcdir: src | |
| builddir: build | |
| make-command: nmake | |
| clean: true | |
| - name: Install MSVC v${{ matrix.toolset }} toolset | |
| shell: pwsh | |
| run: | | |
| $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" | |
| $installPath = & $vswhere -products '*' -latest -property installationPath | |
| $setup = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\setup.exe" | |
| $arguments = @('modify', '--installPath', "`"$installPath`"", | |
| '--add', '${{ matrix.component }}', | |
| '--quiet', '--norestart', '--nocache') | |
| $proc = Start-Process -FilePath $setup -ArgumentList $arguments -Wait -PassThru | |
| if ($proc.ExitCode -notin 0, 3010) { throw "VS installer exited with $($proc.ExitCode)" } | |
| timeout-minutes: 20 | |
| - name: setup env | |
| run: | | |
| set > old.env | |
| call ..\src\win32\vssetup.cmd -arch=amd64 -vcvars_ver=${{ matrix.toolset }} | |
| nmake -f nul | |
| set TMP=%RUNNER_TEMP% | |
| set TEMP=%RUNNER_TEMP% | |
| set MAKEFLAGS=l | |
| set > new.env | |
| - name: update env | |
| shell: pwsh | |
| run: | | |
| $old = (Get-Content old.env); $new = (Get-Content new.env) | |
| del *.env | |
| Compare-Object $old $new | | |
| Where-Object { $_.SideIndicator -eq '=>' } | | |
| Select-Object -ExpandProperty InputObject | | |
| Add-Content -Path $env:GITHUB_ENV | |
| - name: baseruby version | |
| run: ruby -v | |
| - name: compiler version | |
| run: cl 2>&1 | findstr /c:"Compiler Version ${{ matrix.clver }}" | |
| - name: Configure | |
| run: ../src/win32/configure.bat --disable-install-doc | |
| - run: nmake ruby | |
| timeout-minutes: 50 | |
| - name: ruby version | |
| run: .\ruby.exe -v --disable-gems -e "puts :ok" | |
| - uses: ./.github/actions/slack | |
| with: | |
| label: Windows 2022 / VS${{ matrix.vs }} toolset | |
| SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot | |
| if: ${{ failure() }} | |
| result: | |
| if: ${{ always() }} | |
| name: ${{ github.workflow }} result | |
| runs-on: windows-2025-vs2026 | |
| needs: [make, make-old-toolset] | |
| steps: | |
| - run: exit 1 | |
| working-directory: | |
| if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} | |
| defaults: | |
| run: | |
| working-directory: build | |
| shell: cmd |