From 4269f55c1b14536679341dc8300c47f3815aa303 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 May 2024 11:19:50 -0400 Subject: [PATCH] #146 inherit from sz-sdk-go and sz-sdk-go-core --- .github/linters/.golangci.yml | 47 +++++++++++++++++++ .github/linters/.jscpd.json | 5 ++ .../dependabot-approve-and-merge.yaml | 7 +-- .github/workflows/go-test-darwin.yaml | 17 +++++-- .github/workflows/go-test-linux.yaml | 13 ++++- .github/workflows/go-test-windows.yaml | 17 ++++++- .github/workflows/gofmt.yaml | 12 ----- .github/workflows/golangci-lint.yaml | 36 ++++++++++++++ .github/workflows/gosec.yaml | 27 ----------- .github/workflows/lint-workflows.yaml | 2 +- .github/workflows/make-go-github-file.yaml | 2 +- Makefile | 29 +++++++++++- makefiles/darwin.mk | 15 ++++-- makefiles/linux.mk | 16 +++++-- makefiles/windows.mk | 11 ++++- 15 files changed, 198 insertions(+), 58 deletions(-) create mode 100644 .github/linters/.golangci.yml create mode 100644 .github/linters/.jscpd.json delete mode 100644 .github/workflows/gofmt.yaml create mode 100644 .github/workflows/golangci-lint.yaml delete mode 100644 .github/workflows/gosec.yaml diff --git a/.github/linters/.golangci.yml b/.github/linters/.golangci.yml new file mode 100644 index 0000000..0d13689 --- /dev/null +++ b/.github/linters/.golangci.yml @@ -0,0 +1,47 @@ +run: + modules-download-mode: readonly + show-stats: true + +output: + print-linter-name: false + sort-results: true + +linters: + enable: + # List generated from: https://golangci-lint.run/usage/linters/ + # We are enabling all defaults as well as any bug/security related + - asasalint + - asciicheck + - bidichk + - bodyclose + - contextcheck + - durationcheck + - errcheck + - errchkjson + - errorlint + - exhaustive + - exportloopref + - gocheckcompilerdirectives + - gochecksumtype + - gocritic + - gofmt + - gosec + - gosimple + - gosmopolitan + - govet + - ineffassign + - loggercheck + - makezero + - musttag + - nilerr + - noctx + - protogetter + - reassign + - revive + - rowserrcheck + - spancheck + - sqlclosecheck + - staticcheck + - testifylint + - unused + - zerologlint diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json new file mode 100644 index 0000000..3a60fa8 --- /dev/null +++ b/.github/linters/.jscpd.json @@ -0,0 +1,5 @@ +{ + "ignore": [ + "**/*.go,**/go-test*.yaml" + ] +} \ No newline at end of file diff --git a/.github/workflows/dependabot-approve-and-merge.yaml b/.github/workflows/dependabot-approve-and-merge.yaml index 15a5bf9..f86f170 100644 --- a/.github/workflows/dependabot-approve-and-merge.yaml +++ b/.github/workflows/dependabot-approve-and-merge.yaml @@ -4,11 +4,12 @@ on: pull_request: branches: [main] +permissions: + contents: write + pull-requests: write + jobs: dependabot-approve-and-merge: - permissions: - contents: write - pull-requests: write secrets: SENZING_GITHUB_CODEOWNER_PR_RW_TOKEN: ${{ secrets.SENZING_GITHUB_CODEOWNER_PR_RW_TOKEN }} uses: senzing-factory/build-resources/.github/workflows/dependabot-approve-and-merge.yaml@v1 diff --git a/.github/workflows/go-test-darwin.yaml b/.github/workflows/go-test-darwin.yaml index d0f4ef4..e713207 100644 --- a/.github/workflows/go-test-darwin.yaml +++ b/.github/workflows/go-test-darwin.yaml @@ -1,6 +1,6 @@ name: go test darwin -on: [push] +on: [pull_request, workflow_dispatch] env: DYLD_LIBRARY_PATH: /opt/senzing/g2/lib:/opt/senzing/g2/lib/macos @@ -16,7 +16,7 @@ jobs: strategy: matrix: go: ["1.21"] - os: [macos-latest] + os: [macos-13] steps: - name: checkout repository @@ -30,4 +30,15 @@ jobs: go-version: ${{ matrix.go }} - name: run go test - run: go test -v -p 1 ./... + run: go test -v -p 1 ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./... + + - name: Store coverage file + uses: actions/upload-artifact@v4 + with: + name: cover.out + path: ./cover.out + + coverage: + name: coverage + needs: go-test-darwin + uses: senzing-factory/build-resources/.github/workflows/go-coverage.yaml@v2 diff --git a/.github/workflows/go-test-linux.yaml b/.github/workflows/go-test-linux.yaml index 7d702e8..38ee1b7 100644 --- a/.github/workflows/go-test-linux.yaml +++ b/.github/workflows/go-test-linux.yaml @@ -26,4 +26,15 @@ jobs: go-version: ${{ matrix.go }} - name: run go test - run: go test -v -p 1 ./... + run: go test -v -p 1 ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./... + + - name: Store coverage file + uses: actions/upload-artifact@v4 + with: + name: cover.out + path: ./cover.out + + coverage: + name: coverage + needs: go-test-linux + uses: senzing-factory/build-resources/.github/workflows/go-coverage.yaml@main diff --git a/.github/workflows/go-test-windows.yaml b/.github/workflows/go-test-windows.yaml index 593fdc1..a3fb015 100644 --- a/.github/workflows/go-test-windows.yaml +++ b/.github/workflows/go-test-windows.yaml @@ -1,6 +1,6 @@ name: go test windows -on: [push] +on: [pull_request, workflow_dispatch] permissions: contents: read @@ -26,4 +26,17 @@ jobs: go-version: ${{ matrix.go }} - name: run go test - run: go test -v -p 1 ./... + run: | + go test -v -p 1 ./... -coverprofile=cover.out -covermode=atomic -coverpkg=./... + cp cover cover.out + + - name: Store coverage file + uses: actions/upload-artifact@v4 + with: + name: cover.out + path: cover.out + + coverage: + name: coverage + needs: go-test-windows + uses: senzing-factory/build-resources/.github/workflows/go-coverage.yaml@main diff --git a/.github/workflows/gofmt.yaml b/.github/workflows/gofmt.yaml deleted file mode 100644 index 122d306..0000000 --- a/.github/workflows/gofmt.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: gofmt - -on: - pull_request: - branches: [main] - -permissions: - contents: read - -jobs: - gofmt: - uses: senzing-factory/build-resources/.github/workflows/gofmt.yaml@v1 diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml new file mode 100644 index 0000000..bffb573 --- /dev/null +++ b/.github/workflows/golangci-lint.yaml @@ -0,0 +1,36 @@ +name: golangci-lint + +on: + push: + branches-ignore: [main] + pull_request: + branches: [main] + +permissions: + # Required: allow read access to the content for analysis. + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + pull-requests: read + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + + steps: + - name: checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: setup go + uses: actions/setup-go@v5 + with: + go-version: 1.21 + + - name: golangci-lint + uses: golangci/golangci-lint-action@v6 + with: + args: --config=${{ github.workspace }}/.github/linters/.golangci.yml + only-new-issues: false + version: latest diff --git a/.github/workflows/gosec.yaml b/.github/workflows/gosec.yaml deleted file mode 100644 index a71c492..0000000 --- a/.github/workflows/gosec.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: gosec - -on: - push: - branches: - - main - pull_request: - branches: - - main - -permissions: - contents: read - -jobs: - gosec: - runs-on: ubuntu-latest - env: - GO111MODULE: on - - steps: - - name: checkout repository - uses: actions/checkout@v4 - - - name: run Gosec Security Scanner - uses: securego/gosec@v2.20.0 - with: - args: ./... diff --git a/.github/workflows/lint-workflows.yaml b/.github/workflows/lint-workflows.yaml index 1bcd936..c471330 100644 --- a/.github/workflows/lint-workflows.yaml +++ b/.github/workflows/lint-workflows.yaml @@ -14,4 +14,4 @@ permissions: jobs: lint-workflows: - uses: senzing-factory/build-resources/.github/workflows/lint-workflows.yaml@v1 + uses: senzing-factory/build-resources/.github/workflows/lint-workflows.yaml@v2 diff --git a/.github/workflows/make-go-github-file.yaml b/.github/workflows/make-go-github-file.yaml index 25e57ff..6aadd14 100644 --- a/.github/workflows/make-go-github-file.yaml +++ b/.github/workflows/make-go-github-file.yaml @@ -15,4 +15,4 @@ jobs: SENZING_GITHUB_ACTOR: ${{ secrets.SENZING_GITHUB_ACTOR }} SENZING_GITHUB_GPG_PASSPHRASE: ${{ secrets.SENZING_GITHUB_GPG_PASSPHRASE }} SENZING_GITHUB_GPG_PRIVATE_KEY: ${{ secrets.SENZING_GITHUB_GPG_PRIVATE_KEY }} - uses: senzing-factory/build-resources/.github/workflows/make-go-github-file.yaml@v1 + uses: senzing-factory/build-resources/.github/workflows/make-go-github-file.yaml@v2 diff --git a/Makefile b/Makefile index 980d2fe..4f50a02 100644 --- a/Makefile +++ b/Makefile @@ -33,9 +33,10 @@ GO_ARCH = $(word 2, $(GO_OSARCH)) # Conditional assignment. ('?=') # Can be overridden with "export" -# Example: "export LD_LIBRARY_PATH=/path/to/my/senzing/g2/lib" +# Example: "export LD_LIBRARY_PATH=/path/to/my/senzing-garage/g2/lib" LD_LIBRARY_PATH ?= /opt/senzing/g2/lib +GOBIN ?= $(shell go env GOPATH)/bin # Export environment variables. @@ -118,6 +119,32 @@ docker-build: .PHONY: test test: test-osarch-specific +# ----------------------------------------------------------------------------- +# Coverage +# ----------------------------------------------------------------------------- + +.PHONY: install-go-test-coverage +install-go-test-coverage: + go install github.com/vladopajic/go-test-coverage/v2@latest + + +.PHONY: coverage +coverage: coverage-osarch-specific + + +.PHONY: check-coverage +check-coverage: install-go-test-coverage + go test ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./... + ${GOBIN}/go-test-coverage --config=./.testcoverage.yml + +# ----------------------------------------------------------------------------- +# Lint +# ----------------------------------------------------------------------------- + +.PHONY: run-golangci-lint +run-golangci-lint: + golangci-lint run --config=.github/linters/.golangci.yml + # ----------------------------------------------------------------------------- # Run # ----------------------------------------------------------------------------- diff --git a/makefiles/darwin.mk b/makefiles/darwin.mk index 6cfec99..3f58814 100644 --- a/makefiles/darwin.mk +++ b/makefiles/darwin.mk @@ -16,10 +16,19 @@ DYLD_LIBRARY_PATH := $(LD_LIBRARY_PATH) .PHONY: clean-osarch-specific clean-osarch-specific: - @docker rm --force $(DOCKER_CONTAINER_NAME) 2> /dev/null || true + @docker rm --force $(DOCKER_CONTAINER_NAME) 2> /dev/null || true @docker rmi --force $(DOCKER_IMAGE_NAME) $(DOCKER_BUILD_IMAGE_NAME) 2> /dev/null || true - @rm -rf $(TARGET_DIRECTORY) || true - @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + @rm -f $(MAKEFILE_DIRECTORY)/coverage.html || true + @rm -f $(MAKEFILE_DIRECTORY)/coverage.out || true + @rm -fr $(TARGET_DIRECTORY) || true + + +.PHONY: coverage-osarch-specific +coverage-osarch-specific: + @go test -v -coverprofile=coverage.out -p 1 ./... + @go tool cover -html="coverage.out" -o coverage.html + @open file://$(MAKEFILE_DIRECTORY)/coverage.html .PHONY: hello-world-osarch-specific diff --git a/makefiles/linux.mk b/makefiles/linux.mk index ef93b2d..3dd2ce3 100644 --- a/makefiles/linux.mk +++ b/makefiles/linux.mk @@ -11,10 +11,20 @@ .PHONY: clean-osarch-specific clean-osarch-specific: - @docker rm --force $(DOCKER_CONTAINER_NAME) 2> /dev/null || true + @docker rm --force $(DOCKER_CONTAINER_NAME) 2> /dev/null || true @docker rmi --force $(DOCKER_IMAGE_NAME) $(DOCKER_BUILD_IMAGE_NAME) 2> /dev/null || true - @rm -rf $(TARGET_DIRECTORY) || true - @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + @rm -f $(GOPATH)/bin/$(PROGRAM_NAME) || true + @rm -f $(MAKEFILE_DIRECTORY)/coverage.html || true + @rm -f $(MAKEFILE_DIRECTORY)/coverage.out || true + @rm -fr $(TARGET_DIRECTORY) || true + + +.PHONY: coverage-osarch-specific +coverage-osarch-specific: export SENZING_LOG_LEVEL=TRACE +coverage-osarch-specific: + @go test -v -coverprofile=coverage.out -p 1 ./... + @go tool cover -html="coverage.out" -o coverage.html + @xdg-open $(MAKEFILE_DIRECTORY)/coverage.html .PHONY: hello-world-osarch-specific diff --git a/makefiles/windows.mk b/makefiles/windows.mk index 2db43cf..2a332a5 100644 --- a/makefiles/windows.mk +++ b/makefiles/windows.mk @@ -11,8 +11,17 @@ .PHONY: clean-osarch-specific clean-osarch-specific: - del /F /S /Q $(TARGET_DIRECTORY) del /F /S /Q $(GOPATH)/bin/$(PROGRAM_NAME) + del /F /S /Q $(MAKEFILE_DIRECTORY)/coverage.html + del /F /S /Q $(MAKEFILE_DIRECTORY)/coverage.out + del /F /S /Q $(TARGET_DIRECTORY) + + +.PHONY: coverage-osarch-specific +coverage-osarch-specific: + @go test -v -coverprofile=coverage.out -p 1 ./... + @go tool cover -html="coverage.out" -o coverage.html + @xdg-open file://$(MAKEFILE_DIRECTORY)/coverage.html .PHONY: hello-world-osarch-specific