From 205266cb60b8b158d94c0c7bcaf44148ceb14b12 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 10 Feb 2022 15:31:43 +1100 Subject: [PATCH] go CI: Use common action and parallel jobs --- .github/actions/go-common/action.yml | 25 ++++++++++ .github/workflows/go.yml | 70 +++++++++++++++++++++------- 2 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 .github/actions/go-common/action.yml diff --git a/.github/actions/go-common/action.yml b/.github/actions/go-common/action.yml new file mode 100644 index 00000000..5dfb32b3 --- /dev/null +++ b/.github/actions/go-common/action.yml @@ -0,0 +1,25 @@ +name: 'Common Go' +description: 'Checks out, and handles Go setup and caching' +runs: + using: "composite" + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + # The OS defines the directories to use, then this is specific to go. The go version could + # affect the dependencies. The job can affect what is actually downloaded, and provides + # collision resistance. Finally, the hash of the go.sum files ensures a new cache is created + # when the dependencies change. Note if this were just a mod cache, we might do this based + # on time or something. + key: ${{ runner.os }}-go-${{ matrix.go-version }}-${{ github.job }}-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go-${{ matrix.go-version }}-${{ github.job }}- + ${{ runner.os }}-go-${{ matrix.go-version }}- + ${{ runner.os }}-go- + diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 6c9f912e..a7a39246 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -4,7 +4,7 @@ on: [push, pull_request] jobs: - build: + test: timeout-minutes: 30 runs-on: ubuntu-latest strategy: @@ -13,28 +13,64 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common + - run: go test -race -count 2 ./... - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: ${{ matrix.go-version }} - - - name: Test - run: go test -race -count 2 ./... - - - name: Test Benchmarks - run: go test -race -run @ -bench . -benchtime 2x ./... + test-benchmarks: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.17' ] + fail-fast: false + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common + - run: go test -race -run @ -bench . -benchtime 2x ./... - - name: Bench - run: go test -run @ -bench . ./... + bench: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.17' ] + fail-fast: false + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common + - run: go test -run @ -bench . ./... - - name: Test on 386 - run: GOARCH=386 go test ./... -bench . - continue-on-error: true + test-386: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.16', '1.17' ] + fail-fast: false + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common + - run: GOARCH=386 go test ./... + - run: GOARCH=386 go test ./... -run @ -bench . + build-wasm: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.16', '1.17' ] + fail-fast: false + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common - name: Some packages compile for WebAssembly - run: GOOS=js GOARCH=wasm go build . ./storage ./tracker/... + run: GOOS=js GOARCH=wasm go build -v . ./storage ./tracker/... + torrentfs: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.17' ] + fail-fast: false + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/go-common - name: Install godo run: | # Need master for cross-compiling fix -- 2.44.0