From d92a05200659efe765f8f8ddffa06527723ebcd6 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 08:50:55 -0500 Subject: [PATCH 1/8] CI: Run CI on more Julia versions --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30580b1..12e6736 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,9 +23,11 @@ jobs: fail-fast: false matrix: version: - - 'nightly' - - '1' - '1.9' + - '1.10' + - '1.11' + - '1.12' + - 'nightly' os: - ubuntu-latest - windows-latest From c488959507cbd5f0cb0eafdcb2d4c83968308297 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 09:12:57 -0500 Subject: [PATCH 2/8] CI: Remove Julia 1.9 from the CI matrix --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 12e6736..7dd85f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,6 @@ jobs: fail-fast: false matrix: version: - - '1.9' - '1.10' - '1.11' - '1.12' From ae517121d4724eddaeca0ca9dc9fe06efca3a9f4 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 09:33:54 -0500 Subject: [PATCH 3/8] CI: Run CI on both Intel macOS and Apple Silicon macOS, and set `arch` correctly on each --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7dd85f7..6bbf4ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,6 @@ concurrency: jobs: test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -30,26 +29,35 @@ jobs: os: - ubuntu-latest - windows-latest - arch: - - x64 - - x86 - include: - - os: macOS-latest - arch: aarch64 - version: '1' - - os: macOS-latest - arch: aarch64 - version: 'nightly' + - macos-15-intel # Intel + - macos-latest # Apple Silicon + julia-wordsize: + # The value here only affects the version of Julia binary that we download. + # It does not affect the architecture of the GitHub Runner (virtual machine) that + # we run on. + - '32' # 32-bit Julia. Only available on x86_64. Not available on aarch64. + - '64' # 64-bit Julia. exclude: - - os: windows-latest # Killing workers doesn't work on windows in 1.9 - version: '1.9' + # We don't have 32-bit builds of Julia for Intel macOS: + - os: macos-15-intel # Intel + julia-wordsize: '32' + # + # We don't have 32-bit builds of Julia for Apple Silicon macOS: + - os: macos-latest # Apple Silicon + julia-wordsize: '32' steps: - uses: actions/checkout@v6 - uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.version }} - arch: ${{ matrix.arch }} + # If `julia-wordsize` is 32, then we set `arch` to `x86`, because we know that + # 32-bit builds of Julia are only available for x86. + # + # If `julia-wordsize` is 64, then we set `arch` to `${{ runner.arch }}`, which + # GitHub will automatically expand to the correct value (`x86_64` or `aarch64`) + # based on the architecture of the underlying GitHub Runner (virtual machine). + arch: ${{ github.ref == '32' && 'x86' || runner.arch }} - uses: actions/cache@v5 env: cache-name: cache-artifacts From 5ff09315f003ed072886bdcbf68a208d82f8a8f9 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 09:53:17 -0500 Subject: [PATCH 4/8] CI: Disable interactive threads --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6bbf4ed..934b7dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 env: - JULIA_NUM_THREADS: 4,4 + JULIA_NUM_THREADS: 4,0 - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v5 with: From 5b6ccff83c562a46d370a5bdbabf43f125495321 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 09:53:57 -0500 Subject: [PATCH 5/8] Disable the interactive thread in Julia 1.9+ --- test/runtests.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/runtests.jl b/test/runtests.jl index 0e7441d..a693997 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -14,6 +14,12 @@ cmd = `$test_exename $test_exeflags` if Sys.isunix() # Run the SSH tests with a single thread because LibSSH.jl is not thread-safe sshtestfile = joinpath(@__DIR__, "sshmanager.jl") + if Base.VERSION >= v"1.9-" + # The x,y format for threadpools requires Julia 1.9 or above. + JULIA_NUM_THREADS = "1,0" + else + JULIA_NUM_THREADS = "1" + end run(addenv(`$cmd $sshtestfile`, "JULIA_NUM_THREADS" => "1")) else @warn "Skipping the SSH tests because this platform is not supported" From cc10e483b48d599cc9effe311fb3248e37c8c8ca Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 10:08:45 -0500 Subject: [PATCH 6/8] Only bother disabling the interactive thread on Julia 1.12+ The default interactive thread didn't exist in Julia 1.11 and earlier --- test/runtests.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index a693997..bbc8577 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -14,8 +14,10 @@ cmd = `$test_exename $test_exeflags` if Sys.isunix() # Run the SSH tests with a single thread because LibSSH.jl is not thread-safe sshtestfile = joinpath(@__DIR__, "sshmanager.jl") - if Base.VERSION >= v"1.9-" + if Base.VERSION >= v"1.12-" # The x,y format for threadpools requires Julia 1.9 or above. + # However, Julia didn't begin starting with 1 interactive thread by default until Julia 1.12 + # So we don't need to bother with this on Julia 1.11 and earlier JULIA_NUM_THREADS = "1,0" else JULIA_NUM_THREADS = "1" From 0a6d244b29202199449f8f5774d4cd2a6587f6e4 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 10:17:02 -0500 Subject: [PATCH 7/8] Only use `JULIA_NUM_THREADS=x,y` on Julia 1.12+ --- .github/workflows/ci.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 934b7dc..0c40643 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,9 +69,26 @@ jobs: ${{ runner.os }}-test-${{ matrix.os }} ${{ runner.os }}- - uses: julia-actions/julia-buildpkg@v1 + - name: Decide what the value of JULIA_NUM_THREADS should be + id: decide-numthreads-str + run: | + if Base.VERSION >= v"1.12-" + # The x,y format for threadpools requires Julia 1.9 or above. + # However, Julia didn't begin starting with 1 interactive thread by default until Julia 1.12 + # So we don't need to bother with this on Julia 1.11 and earlier + value = "1,0" + else + value = "1" + end + open(ENV["GITHUB_OUTPUT"], "a") do io + name = "numthreads" + line = "$(name)=$(value)" + println(io, line) + end + shell: julia --color=yes {0} - uses: julia-actions/julia-runtest@v1 env: - JULIA_NUM_THREADS: 4,0 + JULIA_NUM_THREADS: ${{ steps.decide-numthreads-str.outputs.numthreads }} - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v5 with: From 83c2eeacc8bf1ef99c4c4d9ee005eef3d350d749 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 22 Feb 2026 10:44:22 -0500 Subject: [PATCH 8/8] Exclude Windows on Julia 1.10, because killing workers doesn't work --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c40643..4360bca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,9 @@ jobs: - '32' # 32-bit Julia. Only available on x86_64. Not available on aarch64. - '64' # 64-bit Julia. exclude: + # Killing workers doesn't work on Windows in Julia 1.10: + - os: windows-latest + version: '1.10' # We don't have 32-bit builds of Julia for Intel macOS: - os: macos-15-intel # Intel julia-wordsize: '32'