name: Tests on: pull_request: branches: - master types: [opened, synchronize] paths-ignore: - 'scripts/**' - '**/*.md' workflow_dispatch: env: GO111MODULE: "on" jobs: lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: golangci-lint uses: golangci/golangci-lint-action@v2 with: version: latest gomodcheck: name: Check internal dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Check dependencies run: | ./scripts/check_deps.sh test_cover: name: Coverage runs-on: ubuntu-20.04 env: CGO_ENABLED: 0 steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Sync VM submodule run: | git submodule sync git submodule update --init - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.18 - name: Restore Go modules from cache uses: actions/cache@v2 with: path: /home/runner/go/pkg/mod key: deps-${{ hashFiles('go.sum') }} - name: Update Go modules run: go mod download -json - name: Write coverage profile run: go test -v ./... -coverprofile=./coverage.txt -covermode=atomic -coverpkg=./pkg...,./cli/... - name: Upload coverage results to Codecov uses: codecov/codecov-action@v2 with: fail_ci_if_error: true # if something is wrong on uploading codecov results, then this job will fail files: ./coverage.txt verbose: true tests: name: Run tests runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-20.04, windows-2022, macos-12] go_versions: [ '1.16', '1.17', '1.18' ] exclude: # Only latest Go version for Windows and MacOS. - os: windows-2022 go_versions: '1.16' - os: windows-2022 go_versions: '1.17' - os: macos-12 go_versions: '1.16' - os: macos-12 go_versions: '1.17' # Exclude latest Go version for Ubuntu as Coverage uses it. - os: ubuntu-20.04 go_versions: '1.18' fail-fast: false steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v2 with: go-version: '${{ matrix.go_versions }}' - name: Restore Go modules from cache uses: actions/cache@v2 with: path: /home/runner/go/pkg/mod key: deps-${{ hashFiles('go.sum') }} - name: Update Go modules run: go mod download -json - name: Sync VM submodule run: | git submodule sync git submodule update --init - name: Run tests run: go test -v -race ./...