Skip to content

Commit

Permalink
#179 Working test and linting
Browse files Browse the repository at this point in the history
  • Loading branch information
docktermj committed Jun 26, 2024
1 parent cf8cefa commit d0f1ebd
Show file tree
Hide file tree
Showing 31 changed files with 495 additions and 307 deletions.
2 changes: 2 additions & 0 deletions .github/linters/.checkov.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
quiet: true
skip-check: CKV_DOCKER_7
47 changes: 47 additions & 0 deletions .github/linters/.golangci.yml
Original file line number Diff line number Diff line change
@@ -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
17 changes: 14 additions & 3 deletions .github/workflows/go-test-darwin.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: go test darwin

on: [push]
on: [pull_request, workflow_dispatch]

permissions:
contents: read
Expand All @@ -12,7 +12,7 @@ jobs:
strategy:
matrix:
go: ["1.21"]
os: [macos-latest]
os: [macos-13]

steps:
- name: checkout repository
Expand All @@ -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-darwin
uses: senzing-factory/build-resources/.github/workflows/go-coverage.yaml@v2
26 changes: 25 additions & 1 deletion .github/workflows/go-test-linux.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,29 @@ jobs:
with:
go-version: ${{ matrix.go }}

- name: Set up gotestfmt
uses: gotesttools/gotestfmt-action@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: run go test
run: go test -v -p 1 ./...
run: go test -json -v -p 1 -coverprofile=./cover.out -covermode=atomic -coverpkg=./... ./... 2>&1 | tee /tmp/gotest.log | gotestfmt

- name: Store coverage file
uses: actions/upload-artifact@v4
with:
name: cover.out
path: ./cover.out

- name: Upload test log
uses: actions/upload-artifact@v4
if: always()
with:
name: test-log
path: /tmp/gotest.log
if-no-files-found: error

coverage:
name: coverage
needs: go-test-linux
uses: senzing-factory/build-resources/.github/workflows/go-coverage.yaml@v2
22 changes: 20 additions & 2 deletions .github/workflows/go-test-windows.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: go test windows

on: [push]
on: [pull_request, workflow_dispatch]

permissions:
contents: read
Expand All @@ -25,5 +25,23 @@ jobs:
with:
go-version: ${{ matrix.go }}

- name: Set up gotestfmt
uses: gotesttools/gotestfmt-action@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: run go test
run: go test -v -p 1 ./...
run: |
go test -v -p 1 -coverprofile=cover -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@v2
12 changes: 0 additions & 12 deletions .github/workflows/gofmt.yaml

This file was deleted.

27 changes: 0 additions & 27 deletions .github/workflows/gosec.yaml

This file was deleted.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ go.work

# Makefile
target/
coverage.html
49 changes: 49 additions & 0 deletions .testcoverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# (mandatory)
# Path to coverprofile file (output of `go test -coverprofile` command).
#
# For cases where there are many coverage profiles, such as when running
# unit tests and integration tests separately, you can combine all those
# profiles into one. In this case, the profile should have a comma-separated list
# of profile files, e.g., 'cover_unit.out,cover_integration.out'.
profile: cover.out

# (optional; but recommended to set)
# When specified reported file paths will not contain local prefix in the output
local-prefix: "github.com/org/project"

# Holds coverage thresholds percentages, values should be in range [0-100]
threshold:
# (optional; default 0)
# The minimum coverage that each file should have
file: 0

# (optional; default 0)
# The minimum coverage that each package should have
package: 0

# (optional; default 0)
# The minimum total coverage project should have
total: 0
# Holds regexp rules which will override thresholds for matched files or packages
# using their paths.
#
# First rule from this list that matches file or package is going to apply
# new threshold to it. If project has multiple rules that match same path,
# override rules should be listed in order from specific to more general rules.
#override:
# Increase coverage threshold to 100% for `foo` package
# (default is 80, as configured above in this example)
#- threshold: 100
# path: ^pkg/lib/foo$

# Holds regexp rules which will exclude matched files or packages
# from coverage statistics
#exclude:
# Exclude files or packages matching their paths
#paths:
# - \.pb\.go$ # excludes all protobuf generated files
# - ^pkg/bar # exclude package `pkg/bar`

# NOTES:
# - symbol `/` in all path regexps will be replaced by current OS file path separator
# to properly work on Windows
33 changes: 32 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,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.

Expand Down Expand Up @@ -59,6 +60,13 @@ hello-world: hello-world-osarch-specific
# Dependency management
# -----------------------------------------------------------------------------

.PHONY: make-dependencies
make-dependencies:
@go install github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest
@go install github.com/vladopajic/go-test-coverage/v2@latest
@curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.58.1


.PHONY: dependencies
dependencies:
@go get -u ./...
Expand All @@ -82,6 +90,7 @@ build: build-osarch-specific
.PHONY: build-all $(PLATFORMS)
build-all: $(PLATFORMS)
@mv $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME) $(TARGET_DIRECTORY)/windows-amd64/$(PROGRAM_NAME).exe
@mv $(TARGET_DIRECTORY)/windows-arm64/$(PROGRAM_NAME) $(TARGET_DIRECTORY)/windows-arm64/$(PROGRAM_NAME).exe

# -----------------------------------------------------------------------------
# Test
Expand All @@ -90,6 +99,28 @@ build-all: $(PLATFORMS)
.PHONY: test
test: test-osarch-specific

# -----------------------------------------------------------------------------
# Coverage
# -----------------------------------------------------------------------------

.PHONY: coverage
coverage: coverage-osarch-specific


.PHONY: check-coverage
check-coverage: export SENZING_LOG_LEVEL=TRACE
check-coverage:
go test ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./...
${GOBIN}/go-test-coverage --config=./.testcoverage.yml

# -----------------------------------------------------------------------------
# Lint
# -----------------------------------------------------------------------------

.PHONY: run-golangci-lint
run-golangci-lint:
${GOBIN}/golangci-lint run --config=.github/linters/.golangci.yml

# -----------------------------------------------------------------------------
# Run
# -----------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package main
// Constants
// ----------------------------------------------------------------------------

const MessageIdTemplate = "senzing-9999%04d"
const MessageIDTemplate = "senzing-9999%04d"

// ----------------------------------------------------------------------------
// Variables
Expand Down
3 changes: 2 additions & 1 deletion main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
/*
* The unit tests in this file simulate command line invocation.
*/
func TestMain(testing *testing.T) {
func TestMain(test *testing.T) {
_ = test
main()
}
13 changes: 11 additions & 2 deletions makefiles/darwin.mk
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,17 @@ build-osarch-specific: darwin/amd64

.PHONY: clean-osarch-specific
clean-osarch-specific:
@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
Expand Down
16 changes: 13 additions & 3 deletions makefiles/linux.mk
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,18 @@ build-osarch-specific: linux/amd64

.PHONY: clean-osarch-specific
clean-osarch-specific:
@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
Expand All @@ -36,7 +46,7 @@ setup-osarch-specific:

.PHONY: test-osarch-specific
test-osarch-specific:
@go test -v -p 1 ./...
@go test -json -v -p 1 ./... 2>&1 | tee /tmp/gotest.log | gotestfmt

# -----------------------------------------------------------------------------
# Makefile targets supported only by this platform.
Expand Down
11 changes: 10 additions & 1 deletion makefiles/windows.mk
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,17 @@ build-osarch-specific: windows/amd64

.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
Expand Down
Loading

0 comments on commit d0f1ebd

Please sign in to comment.