diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d40c32a..e15d283 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,5 +28,23 @@ jobs: - name: Get Go dependencies run: go get -v -t -d ./... + - name: Lint Go Code + run: | + export PATH=$PATH:$(go env GOPATH)/bin + go get -u golang.org/x/lint/golint + make lint + + - name: Run Code Coverage + run: make test-coverage + + - name: Upload Coverage report to CodeCov + uses: codecov/codecov-action@v1.0.0 + with: + token: ${{secrets.CODECOV_TOKEN}} ## https://github.com/ComplianceAsCode/libreSCAP/settings/secrets + file: ./coverage.txt + - name: Unit tests run: go test ./... + + - name: Build + run: make build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..ddd31f3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,28 @@ +## Mostly copied from https://github.com/brpaz/github-actions-demo-go/blob/master/.github/workflows/release.yml + +name: Release +on: + create: + tags: + -v* + +jobs: + release: + name: Release on GitHub + runs-on ubuntu-latest + steps: + - name: check out code + uses: actions/checkout@v2 + + - name: Validates Go releaser config + uses: docker://goreleaser/goreleaser:latest + with: + args: check + + - name: Create GitHub Release + uses: docker://goreleaser/goreleaser:latest + with: + args: release + env: + GITHUB_TOKEN: ${{secrets.RELEASE_TOKEN}} + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0cf0bcf --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +PROJECT_NAME := "libreSCAP" + +PKG := "github.com/ComplianceAsCode/$(PROJECT_NAME)" + +PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/) + +GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v _test.go) + +.PHONY: all dep lint vet test test-coverage build clean + +all: build + +dep: ## Get the dependencies + @go mod download + +lint: ## Lint the Golang files + @golint -set_exit_status ${PKG_LIST} + +vet: ## Run go vet + @go vet ${PKG_LIST} + +test: ## Run unit tests + @go test -short ${PKG_LIST} + +test-coverage: ## Run tests with coverage reports + @go test -short -coverprofile cover.out -covermode=atomic ${PKG_LIST} + +build: dep ## Build the binary file + @go build -i -o build/main ${PKG} + +clean: ## Remove previous build + @rm -f ${PROJECT_NAME)/build + +help: ## Display help screen + @grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/cli/cli.go b/cli/cli.go new file mode 100644 index 0000000..6d9a8de --- /dev/null +++ b/cli/cli.go @@ -0,0 +1,6 @@ +package cli + +// Hello World scaffolding +func HelloWorld() string { + return "Hello. LibreSCAP is awesome." +} diff --git a/cli/cli_test.go b/cli/cli_test.go new file mode 100644 index 0000000..dbd8c8d --- /dev/null +++ b/cli/cli_test.go @@ -0,0 +1,13 @@ +package cli + +import "testing" + +func TestCLI(t *testing.T) { + + result := HelloWorld() + + if result != "Hello. LibreSCAP is awesome." { + t.Errorf("HelloWorld() = %s; want Hello. LibreSCAP is awesome.", result) + } + +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..e529dbc --- /dev/null +++ b/main.go @@ -0,0 +1,10 @@ +package main + +import ( + "fmt" + "github.com/ComplianceAsCode/libreSCAP/cli" +) + +func main() { + fmt.Println(cli.HelloWorld()) +}