migrate CI to GitHub Actions
use codecov.io to report on code coverage. fix a few issues raised by golangci-lint
This commit is contained in:
18
.github/workflows/linter.yaml
vendored
Normal file
18
.github/workflows/linter.yaml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
name: linter
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go-version: [1.x]
|
||||||
|
platform: [ubuntu-latest]
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: golangci-lint
|
||||||
|
uses: golangci/golangci-lint-action@v2
|
||||||
|
with:
|
||||||
|
version: v1.41
|
||||||
46
.github/workflows/tests.yaml
vendored
Normal file
46
.github/workflows/tests.yaml
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
on: [push, pull_request]
|
||||||
|
name: tests
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go-version: [1.x, 1.15.x]
|
||||||
|
platform: [ubuntu-latest]
|
||||||
|
include:
|
||||||
|
# only update test coverage stats with the most recent go version on linux
|
||||||
|
- go-version: 1.x
|
||||||
|
platform: ubuntu-latest
|
||||||
|
update-coverage: true
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
# styfle/cancel-workflow-action needs to be able to cancel existing action workflows
|
||||||
|
actions: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Cancel previous
|
||||||
|
uses: styfle/cancel-workflow-action@89f242ee29e10c53a841bfe71cc0ce7b2f065abc #0.9.0
|
||||||
|
with:
|
||||||
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go-version }}
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Cache go modules
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cache/go-build
|
||||||
|
~/go/pkg/mod
|
||||||
|
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||||
|
restore-keys: ${{ runner.os }}-go-
|
||||||
|
|
||||||
|
- name: Run go test
|
||||||
|
run: go test -v -race -coverprofile coverage.txt -covermode atomic ./...
|
||||||
|
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
if: ${{ matrix.update-coverage }}
|
||||||
|
uses: codecov/codecov-action@v2
|
||||||
12
.golangci.yaml
Normal file
12
.golangci.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
linters:
|
||||||
|
enable:
|
||||||
|
- dogsled
|
||||||
|
- dupl
|
||||||
|
- gofmt
|
||||||
|
- goimports
|
||||||
|
- misspell
|
||||||
|
- nakedret
|
||||||
|
- stylecheck
|
||||||
|
- unconvert
|
||||||
|
- unparam
|
||||||
|
- whitespace
|
||||||
13
.travis.yml
13
.travis.yml
@@ -1,13 +0,0 @@
|
|||||||
dist: bionic
|
|
||||||
git:
|
|
||||||
depth: 3
|
|
||||||
language: go
|
|
||||||
go:
|
|
||||||
- 1.13.x
|
|
||||||
before_script:
|
|
||||||
- go get golang.org/x/lint/golint
|
|
||||||
script:
|
|
||||||
- go mod tidy
|
|
||||||
- gofmt -d -e -l -s .
|
|
||||||
- golint -set_exit_status ./...
|
|
||||||
- go test -v ./...
|
|
||||||
8
main.go
8
main.go
@@ -178,7 +178,9 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
for _, d := range flag.Args() {
|
for _, d := range flag.Args() {
|
||||||
walk(ch, d)
|
if err := walk(ch, d); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
close(ch)
|
close(ch)
|
||||||
<-done
|
<-done
|
||||||
@@ -189,8 +191,8 @@ type file struct {
|
|||||||
mode os.FileMode
|
mode os.FileMode
|
||||||
}
|
}
|
||||||
|
|
||||||
func walk(ch chan<- *file, start string) {
|
func walk(ch chan<- *file, start string) error {
|
||||||
filepath.Walk(start, func(path string, fi os.FileInfo, err error) error {
|
return filepath.Walk(start, func(path string, fi os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("%s error: %v", path, err)
|
log.Printf("%s error: %v", path, err)
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
2
tmpl.go
2
tmpl.go
@@ -68,7 +68,7 @@ func fetchTemplate(license string, templateFile string, spdx spdxFlag) (string,
|
|||||||
// unknown license, but SPDX headers requested
|
// unknown license, but SPDX headers requested
|
||||||
t = tmplSPDX
|
t = tmplSPDX
|
||||||
} else {
|
} else {
|
||||||
return "", fmt.Errorf("unknown license: %q. Include the '-s' flag to request SPDX style headers using this license.", license)
|
return "", fmt.Errorf("unknown license: %q. Include the '-s' flag to request SPDX style headers using this license", license)
|
||||||
}
|
}
|
||||||
} else if spdx == spdxOn {
|
} else if spdx == spdxOn {
|
||||||
// append spdx headers to recognized license
|
// append spdx headers to recognized license
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ func TestFetchTemplate(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
// custom template files
|
// custom template files
|
||||||
{
|
{
|
||||||
"non-existant template file",
|
"non-existent template file",
|
||||||
"",
|
"",
|
||||||
"/does/not/exist",
|
"/does/not/exist",
|
||||||
spdxOff,
|
spdxOff,
|
||||||
@@ -62,7 +62,7 @@ func TestFetchTemplate(t *testing.T) {
|
|||||||
"",
|
"",
|
||||||
spdxOff,
|
spdxOff,
|
||||||
"",
|
"",
|
||||||
errors.New(`unknown license: "unknown". Include the '-s' flag to request SPDX style headers using this license.`),
|
errors.New(`unknown license: "unknown". Include the '-s' flag to request SPDX style headers using this license`),
|
||||||
},
|
},
|
||||||
|
|
||||||
// pre-defined license templates, no SPDX
|
// pre-defined license templates, no SPDX
|
||||||
|
|||||||
Reference in New Issue
Block a user