name: Tests on: push: branches: [ master ] pull_request: branches: - master types: [opened, synchronize] paths-ignore: - 'scripts/*.sh' - '**/*.md' workflow_dispatch: jobs: lint: name: 'Lint: NeoGo' uses: nspcc-dev/.github/.github/workflows/go-linter.yml@master lint_examples: name: 'Lint: examples (${{ matrix.contract }})' uses: nspcc-dev/.github/.github/workflows/go-linter.yml@master strategy: fail-fast: false matrix: contract: [ 'engine', 'events', 'iterator', 'nft-d', 'nft-nd', 'nft-nd-nns', 'oracle', 'runtime', 'storage', 'timer', 'token', 'zkp/cubic_circuit', 'zkp/xor_compat'] with: workdir: examples/${{ matrix.contract }} lint_scripts: name: 'Lint: scripts' uses: nspcc-dev/.github/.github/workflows/go-linter.yml@master with: workdir: scripts lint_interops: name: 'Lint: interop' uses: nspcc-dev/.github/.github/workflows/go-linter.yml@master with: workdir: pkg/interop gomodcheck: name: Check internal dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Check dependencies run: | ./scripts/check_deps.sh - name: Check go.mod is tidy run: | go mod tidy if [[ $(git diff --name-only go.* | grep '' -c) != 0 ]]; then echo "go mod tidy should be executed before the merge, following packages are unused or out of date:"; git diff go.*; exit 1; fi codegencheck: name: Check code generated with 'go generate' is up-to-date runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-go@v5 with: go-version-file: 'go.mod' - name: Install stringer run: go install golang.org/x/tools/cmd/stringer@latest - name: Run go generate run: go generate ./... - name: Check that autogenerated code is up-to-date run: | if [[ $(git diff --name-only | grep '' -c) != 0 ]]; then echo "Fresh version of autogenerated code should be committed for the following files:"; git diff --name-only; exit 1; fi codeql: name: CodeQL runs-on: ubuntu-latest strategy: fail-fast: false matrix: language: [ 'go' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - name: Checkout repository uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 test_cover: name: Coverage runs-on: ubuntu-22.04 env: CGO_ENABLED: 0 GOEXPERIMENT: nocoverageredesign steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: 'true' - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.23' cache: true - name: Write coverage profile run: DISABLE_NEOTEST_COVER=1 go test -timeout 15m -v ./... -coverprofile=./coverage.txt -covermode=atomic -coverpkg=./pkg...,./cli/... - name: Upload coverage results to Codecov uses: codecov/codecov-action@v4 with: fail_ci_if_error: true # if something is wrong on uploading codecov results, then this job will fail files: ./coverage.txt slug: nspcc-dev/neo-go token: ${{ secrets.CODECOV_TOKEN }} verbose: true tests: name: Run tests runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-22.04, windows-2022, macos-14] go_versions: [ '1.22', '1.23' ] exclude: # Only latest Go version for Windows and MacOS. - os: windows-2022 go_versions: '1.22' - os: macos-14 go_versions: '1.22' # Exclude latest Go version for Ubuntu as Coverage uses it. - os: ubuntu-22.04 go_versions: '1.23' fail-fast: false steps: - uses: actions/checkout@v4 with: fetch-depth: 0 submodules: 'true' - name: Set up Go uses: actions/setup-go@v5 with: go-version: '${{ matrix.go_versions }}' - name: Run tests run: go test -timeout 15m -v -race ./...