name: Test Coverage on: pull_request: push: paths: - "**.go" branches: - master - release/** jobs: split-test-files: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.4.0 - name: Create a file with all the pkgs run: go list ./... > pkgs.txt - name: Split pkgs into 4 files run: split -d -n l/4 pkgs.txt pkgs.txt.part. # cache multiple - uses: actions/upload-artifact@v2 with: name: "${{ github.sha }}-00" path: ./pkgs.txt.part.00 - uses: actions/upload-artifact@v2 with: name: "${{ github.sha }}-01" path: ./pkgs.txt.part.01 - uses: actions/upload-artifact@v2 with: name: "${{ github.sha }}-02" path: ./pkgs.txt.part.02 - uses: actions/upload-artifact@v2 with: name: "${{ github.sha }}-03" path: ./pkgs.txt.part.03 build-linux: name: Build runs-on: ubuntu-latest strategy: fail-fast: false matrix: goarch: ["arm", "amd64"] timeout-minutes: 5 steps: - uses: actions/setup-go@v2 with: go-version: "1.17" - uses: actions/checkout@v2.4.0 - uses: technote-space/get-diff-action@v5 with: PATTERNS: | **/**.go "!test/" go.mod go.sum - name: install run: GOOS=linux GOARCH=${{ matrix.goarch }} make build if: "env.GIT_DIFF != ''" tests: runs-on: ubuntu-latest needs: split-test-files strategy: fail-fast: false matrix: part: ["00", "01", "02", "03"] steps: - uses: actions/setup-go@v2 with: go-version: "1.17" - uses: actions/checkout@v2.4.0 - uses: technote-space/get-diff-action@v5 with: PATTERNS: | **/**.go "!test/" go.mod go.sum - uses: actions/download-artifact@v2 with: name: "${{ github.sha }}-${{ matrix.part }}" if: env.GIT_DIFF - name: Set up Go uses: actions/setup-go@v2 with: go-version: "1.17" - name: test & coverage report creation run: | cat pkgs.txt.part.${{ matrix.part }} | xargs go test -mod=readonly -timeout 15m -race -coverprofile=${{ matrix.part }}profile.out if: env.GIT_DIFF - uses: actions/upload-artifact@v2 with: name: "${{ github.sha }}-${{ matrix.part }}-coverage" path: ./${{ matrix.part }}profile.out upload-coverage-report: runs-on: ubuntu-latest needs: tests steps: - uses: actions/checkout@v2.4.0 - uses: technote-space/get-diff-action@v5 with: PATTERNS: | **/**.go "!test/" go.mod go.sum - uses: actions/download-artifact@v2 with: name: "${{ github.sha }}-00-coverage" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: name: "${{ github.sha }}-01-coverage" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: name: "${{ github.sha }}-02-coverage" if: env.GIT_DIFF - uses: actions/download-artifact@v2 with: name: "${{ github.sha }}-03-coverage" if: env.GIT_DIFF - run: | cat ./*profile.out | grep -v "mode: set" >> coverage.txt if: env.GIT_DIFF - uses: codecov/codecov-action@v2.1.0 with: file: ./coverage.txt if: env.GIT_DIFF