From 097c664ff733a475b7635a23ec118ae5bf33c85e Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 21 Sep 2021 17:42:38 +0200 Subject: [PATCH 1/2] CI: Add test workflow --- .github/workflows/test-go-task.yml | 102 +++++++++++++++++++++++++++++ .gitignore | 1 + Taskfile.yml | 38 +++++++++++ 3 files changed, 141 insertions(+) create mode 100644 .github/workflows/test-go-task.yml create mode 100644 Taskfile.yml diff --git a/.github/workflows/test-go-task.yml b/.github/workflows/test-go-task.yml new file mode 100644 index 00000000..4bbe067f --- /dev/null +++ b/.github/workflows/test-go-task.yml @@ -0,0 +1,102 @@ +# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/test-go-task.md +name: Test Go + +env: + # See: https://github.com/actions/setup-go/tree/v2#readme + GO_VERSION: "1.16" + +# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows +on: + create: + push: + paths: + - ".github/workflows/test-go-task.ya?ml" + - "codecov.ya?ml" + - "**/go.mod" + - "**/go.sum" + - "Taskfile.ya?ml" + - "**.go" + - "**/testdata/**" + pull_request: + paths: + - ".github/workflows/test-go-task.ya?ml" + - "codecov.ya?ml" + - "**/go.mod" + - "**/go.sum" + - "Taskfile.ya?ml" + - "**.go" + - "**/testdata/**" + workflow_dispatch: + repository_dispatch: + +jobs: + run-determination: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.determination.outputs.result }} + steps: + - name: Determine if the rest of the workflow should run + id: determination + run: | + RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x" + # The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead. + if [[ \ + "${{ github.event_name }}" != "create" || \ + "${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX \ + ]]; then + # Run the other jobs. + RESULT="true" + else + # There is no need to run the other jobs. + RESULT="false" + fi + + echo "::set-output name=result::$RESULT" + + test: + name: test (${{ matrix.module.path }} - ${{ matrix.operating-system }}) + needs: run-determination + if: needs.run-determination.outputs.result == 'true' + + strategy: + fail-fast: false + + matrix: + operating-system: + - ubuntu-latest + - windows-latest + - macos-latest + module: + # TODO: add paths of all Go modules here + - path: ./ + codecov-flags: unit + + runs-on: ${{ matrix.operating-system }} + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Install Task + uses: arduino/setup-task@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + version: 3.x + + - name: Run tests + env: + GO_MODULE_PATH: ${{ matrix.module.path }} + run: task go:test + + - name: Send unit tests coverage to Codecov + if: runner.os == 'Linux' + uses: codecov/codecov-action@v2 + with: + file: ${{ matrix.module.path }}coverage_unit.txt + flags: ${{ matrix.module.codecov-flags }} + fail_ci_if_error: ${{ github.repository == 'arduino/arduino-cloud-cli' }} diff --git a/.gitignore b/.gitignore index 9a932ddf..915bc056 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Compilation artifacts arduino-cloud-cli +arduino-cloud-cli.exe # Configuration file config.yaml diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 00000000..51f8662b --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,38 @@ +# See: https://taskfile.dev/#/usage +version: "3" + +vars: + # Path of the project's primary Go module: + DEFAULT_GO_MODULE_PATH: ./ + DEFAULT_GO_PACKAGES: + sh: | + echo $(cd {{default .DEFAULT_GO_MODULE_PATH .GO_MODULE_PATH}} && go list ./... | tr '\n' ' ' || echo '"ERROR: Unable to discover Go packages"') + # `-ldflags` flag to use for `go build` command + # TODO: define flag if required by the project, or leave empty if not needed. + LDFLAGS: + # `-ldflags` flag to use for `go test` command + # TODO: define flag if required by the project, or leave empty if not needed. + TEST_LDFLAGS: + +tasks: + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/go-task/Taskfile.yml + go:build: + desc: Build the Go code + dir: "{{.DEFAULT_GO_MODULE_PATH}}" + cmds: + - go build -v {{.LDFLAGS}} + + # Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/test-go-task/Taskfile.yml + go:test: + desc: Run unit tests + dir: "{{default .DEFAULT_GO_MODULE_PATH .GO_MODULE_PATH}}" + cmds: + - | + go test \ + -v \ + -short \ + -run '{{default ".*" .GO_TEST_REGEX}}' \ + {{default "-timeout 10m -coverpkg=./... -covermode=atomic" .GO_TEST_FLAGS}} \ + -coverprofile=coverage_unit.txt \ + {{.TEST_LDFLAGS}} \ + {{default .DEFAULT_GO_PACKAGES .GO_PACKAGES}} From e9365b18531763fd384859fc7776f3d25ceecfc2 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 21 Sep 2021 17:53:31 +0200 Subject: [PATCH 2/2] Disable code-coverage --- .github/workflows/test-go-task.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-go-task.yml b/.github/workflows/test-go-task.yml index 4bbe067f..1641b9ff 100644 --- a/.github/workflows/test-go-task.yml +++ b/.github/workflows/test-go-task.yml @@ -93,10 +93,10 @@ jobs: GO_MODULE_PATH: ${{ matrix.module.path }} run: task go:test - - name: Send unit tests coverage to Codecov - if: runner.os == 'Linux' - uses: codecov/codecov-action@v2 - with: - file: ${{ matrix.module.path }}coverage_unit.txt - flags: ${{ matrix.module.codecov-flags }} - fail_ci_if_error: ${{ github.repository == 'arduino/arduino-cloud-cli' }} + # - name: Send unit tests coverage to Codecov + # if: runner.os == 'Linux' + # uses: codecov/codecov-action@v2 + # with: + # file: ${{ matrix.module.path }}coverage_unit.txt + # flags: ${{ matrix.module.codecov-flags }} + # fail_ci_if_error: ${{ github.repository == 'arduino/arduino-cloud-cli' }}