From 2f91dcd1110d8032c6776d5e9724f8e8c4569ea8 Mon Sep 17 00:00:00 2001 From: Beforerr Date: Fri, 25 Sep 2026 13:07:37 -0600 Subject: [PATCH] ci: speed up Test workflow - Windows: use the runner's preinstalled R instead of setup-r, which reinstalled R plus Ghostscript (~30s on the slowest job). - Run the self-contained Julia tests (warm session, Revise, world age, atexit) with t.Parallel; they overlap only each other, after the serial busy/interrupt tests finish. - Bump actions/checkout to v7, julia-actions/cache to v3. Claude-Session: https://claude.ai/code/session_01WaXpaZH42vRSyuuvDQ9hFk --- .github/workflows/test.yml | 11 +++++++---- go/julia_integration_test.go | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 699f477..2ccdce9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,16 +13,19 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - uses: actions/setup-go@v5 with: go-version: stable cache-dependency-path: go.sum - uses: julia-actions/setup-julia@v2 - - uses: julia-actions/cache@v2 + - uses: julia-actions/cache@v3 - uses: r-lib/actions/setup-r@v2 - with: - rtools-version: none + if: runner.os != 'Windows' + # windows-latest ships R; setup-r would reinstall it plus Ghostscript (~30s). + - if: runner.os == 'Windows' + shell: bash + run: cygpath -w "$(ls -d /c/Program\ Files/R/R-*/bin | tail -1)" >> "$GITHUB_PATH" - run: julia -e 'using Pkg; Pkg.add("Revise")' - shell: bash run: go test -C go -v -coverprofile=coverage.out -covermode=atomic diff --git a/go/julia_integration_test.go b/go/julia_integration_test.go index c8192a0..398267d 100644 --- a/go/julia_integration_test.go +++ b/go/julia_integration_test.go @@ -50,6 +50,7 @@ type streamChunk struct { } func TestJuliaWarmSession(t *testing.T) { + t.Parallel() socketPath := sharedDaemon(t) cwd := sharedJuliaCwd(t) @@ -321,6 +322,7 @@ func TestClientDisconnectInterruptsEval(t *testing.T) { } func TestRevisePicksUpPackageChanges(t *testing.T) { + t.Parallel() socketPath := sharedDaemon(t) pkgDir := sessionCwd(t) @@ -360,6 +362,7 @@ func TestRevisePicksUpPackageChanges(t *testing.T) { // frame; showing a result whose method was just defined (an @enum's namemap) must not // throw "method too new". Guards the Base.invokelatest wrap in runtime.jl. func TestJuliaWorldAgeDisplay(t *testing.T) { + t.Parallel() socketPath := sharedDaemon(t) pkgDir := sessionCwd(t) @@ -380,6 +383,7 @@ func TestJuliaWorldAgeDisplay(t *testing.T) { // hooks (flush buffers, finalizers) rather than SIGKILL the process. The hook // writes a marker file; its presence proves the process exited cleanly. func TestKillRunsAtexitHooks(t *testing.T) { + t.Parallel() cwd, err := os.Getwd() require.NoError(t, err) sess := newSession("julia", newSentinel(), nil, nil)