From 984535f006dd87c592fe40406c8b8eed83f77c73 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Tue, 15 Apr 2025 21:59:35 +0800 Subject: [PATCH] action: run tests on more platforms --- .github/workflows/test.yml | 113 +++++++++++++++++++++++++++++++++++ common/picker/picker_test.go | 8 ++- 2 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..def99d93 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,113 @@ +name: Test +on: + push: + paths-ignore: + - "docs/**" + - "README.md" + - ".github/ISSUE_TEMPLATE/**" + branches: + - Alpha + tags: + - "v*" + pull_request: + branches: + - Alpha + +jobs: + test: + strategy: + matrix: + os: + - 'ubuntu-latest' # amd64 linux + - 'windows-latest' # amd64 windows + - 'macos-latest' # arm64 macos + - 'ubuntu-24.04-arm' # arm64 linux + - 'macos-13' # amd64 macos + go-version: + - '1.24' + - '1.23' + - '1.22' + - '1.21' + - '1.20' + fail-fast: false + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + env: + CGO_ENABLED: 0 + GOTOOLCHAIN: local + steps: + - uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ matrix.go-version }} + + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + # this patch file only works on golang1.24.x + # that means after golang1.25 release it must be changed + # see: https://github.com/MetaCubeX/go/commits/release-branch.go1.24/ + # revert: + # 693def151adff1af707d82d28f55dba81ceb08e1: "crypto/rand,runtime: switch RtlGenRandom for ProcessPrng" + # 7c1157f9544922e96945196b47b95664b1e39108: "net: remove sysSocket fallback for Windows 7" + # 48042aa09c2f878c4faa576948b07fe625c4707a: "syscall: remove Windows 7 console handle workaround" + # a17d959debdb04cd550016a3501dd09d50cd62e7: "runtime: always use LoadLibraryEx to load system libraries" + - name: Revert Golang1.24 commit for Windows7/8 + if: ${{ runner.os == 'Windows' && matrix.go-version == '1.24' }} + run: | + cd $(go env GOROOT) + curl https://github.com/MetaCubeX/go/commit/2a406dc9f1ea7323d6ca9fccb2fe9ddebb6b1cc8.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/7b1fd7d39c6be0185fbe1d929578ab372ac5c632.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/979d6d8bab3823ff572ace26767fd2ce3cf351ae.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/ac3e93c061779dfefc0dd13a5b6e6f764a25621e.diff | patch --verbose -p 1 + + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + # this patch file only works on golang1.23.x + # that means after golang1.24 release it must be changed + # see: https://github.com/MetaCubeX/go/commits/release-branch.go1.23/ + # revert: + # 693def151adff1af707d82d28f55dba81ceb08e1: "crypto/rand,runtime: switch RtlGenRandom for ProcessPrng" + # 7c1157f9544922e96945196b47b95664b1e39108: "net: remove sysSocket fallback for Windows 7" + # 48042aa09c2f878c4faa576948b07fe625c4707a: "syscall: remove Windows 7 console handle workaround" + # a17d959debdb04cd550016a3501dd09d50cd62e7: "runtime: always use LoadLibraryEx to load system libraries" + - name: Revert Golang1.23 commit for Windows7/8 + if: ${{ runner.os == 'Windows' && matrix.go-version == '1.23' }} + run: | + cd $(go env GOROOT) + curl https://github.com/MetaCubeX/go/commit/9ac42137ef6730e8b7daca016ece831297a1d75b.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/21290de8a4c91408de7c2b5b68757b1e90af49dd.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/6a31d3fa8e47ddabc10bd97bff10d9a85f4cfb76.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/69e2eed6dd0f6d815ebf15797761c13f31213dd6.diff | patch --verbose -p 1 + + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + # this patch file only works on golang1.22.x + # that means after golang1.23 release it must be changed + # see: https://github.com/MetaCubeX/go/commits/release-branch.go1.22/ + # revert: + # 693def151adff1af707d82d28f55dba81ceb08e1: "crypto/rand,runtime: switch RtlGenRandom for ProcessPrng" + # 7c1157f9544922e96945196b47b95664b1e39108: "net: remove sysSocket fallback for Windows 7" + # 48042aa09c2f878c4faa576948b07fe625c4707a: "syscall: remove Windows 7 console handle workaround" + # a17d959debdb04cd550016a3501dd09d50cd62e7: "runtime: always use LoadLibraryEx to load system libraries" + - name: Revert Golang1.22 commit for Windows7/8 + if: ${{ runner.os == 'Windows' && matrix.go-version == '1.22' }} + run: | + cd $(go env GOROOT) + curl https://github.com/MetaCubeX/go/commit/9779155f18b6556a034f7bb79fb7fb2aad1e26a9.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/ef0606261340e608017860b423ffae5c1ce78239.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/7f83badcb925a7e743188041cb6e561fc9b5b642.diff | patch --verbose -p 1 + curl https://github.com/MetaCubeX/go/commit/83ff9782e024cb328b690cbf0da4e7848a327f4f.diff | patch --verbose -p 1 + + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + - name: Revert Golang1.21 commit for Windows7/8 + if: ${{ runner.os == 'Windows' && matrix.go-version == '1.21' }} + run: | + cd $(go env GOROOT) + curl https://github.com/golang/go/commit/9e43850a3298a9b8b1162ba0033d4c53f8637571.diff | patch --verbose -R -p 1 + + - name: Test + run: go test ./... -v -count=1 + + - name: Test with tag with_gvisor + run: go test ./... -v -count=1 -tags "with_gvisor" \ No newline at end of file diff --git a/common/picker/picker_test.go b/common/picker/picker_test.go index 4c1c9ebe..357c4001 100644 --- a/common/picker/picker_test.go +++ b/common/picker/picker_test.go @@ -22,9 +22,10 @@ func sleepAndSend[T any](ctx context.Context, delay int, input T) func() (T, err } func TestPicker_Basic(t *testing.T) { + t.Parallel() picker, ctx := WithContext[int](context.Background()) - picker.Go(sleepAndSend(ctx, 30, 2)) - picker.Go(sleepAndSend(ctx, 20, 1)) + picker.Go(sleepAndSend(ctx, 200, 2)) + picker.Go(sleepAndSend(ctx, 100, 1)) number := picker.Wait() assert.NotNil(t, number) @@ -32,8 +33,9 @@ func TestPicker_Basic(t *testing.T) { } func TestPicker_Timeout(t *testing.T) { + t.Parallel() picker, ctx := WithTimeout[int](context.Background(), time.Millisecond*5) - picker.Go(sleepAndSend(ctx, 20, 1)) + picker.Go(sleepAndSend(ctx, 100, 1)) number := picker.Wait() assert.Equal(t, number, lo.Empty[int]())