Compare commits
No commits in common. "c4ee92e94f433f5e8c8f62c4a8a6c4263c776ff5" and "fa8a0c95eecafdff46beb276b9d64d640996d5c1" have entirely different histories.
c4ee92e94f
...
fa8a0c95ee
3 changed files with 581 additions and 1724 deletions
72
.gitlab-ci.yml
Normal file
72
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
image: golang:latest
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
- build
|
||||||
|
- release
|
||||||
|
|
||||||
|
variables:
|
||||||
|
GOPATH: "${CI_PROJECT_DIR}/.gocache"
|
||||||
|
GOLANGCI_LINT_CACHE: "${GOPATH}/golangci-lint_cache"
|
||||||
|
GOCACHE: "${GOPATH}/go-build"
|
||||||
|
|
||||||
|
.cache: &depscache
|
||||||
|
key: $CI_COMMIT_REF_SLUG
|
||||||
|
paths:
|
||||||
|
- $CI_PROJECT_DIR/.gocache
|
||||||
|
|
||||||
|
code_navigation:
|
||||||
|
stage: test
|
||||||
|
image: sourcegraph/lsif-go:latest
|
||||||
|
allow_failure: true # recommended
|
||||||
|
script:
|
||||||
|
- lsif-go --no-animation
|
||||||
|
- ls -lh dump.lsif
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
lsif: dump.lsif
|
||||||
|
|
||||||
|
lint:
|
||||||
|
stage: test
|
||||||
|
image: golangci/golangci-lint:latest
|
||||||
|
script:
|
||||||
|
- golangci-lint cache status
|
||||||
|
- golangci-lint run --timeout 5m --out-format junit-xml > lint.junit.xml
|
||||||
|
cache:
|
||||||
|
<<: *depscache
|
||||||
|
policy: pull-push
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
junit: lint.junit.xml
|
||||||
|
|
||||||
|
tests:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- export PATH="$PATH:$GOPATH/bin"
|
||||||
|
- go install gotest.tools/gotestsum@latest
|
||||||
|
- gotestsum --junitfile tests.junit.xml -- -coverprofile=coverage.txt -covermode atomic -race ./...
|
||||||
|
after_script:
|
||||||
|
- export PATH="$PATH:$GOPATH/bin"
|
||||||
|
- go install github.com/boumenot/gocover-cobertura@latest
|
||||||
|
- gocover-cobertura < coverage.txt > coverage.xml
|
||||||
|
- go tool cover -func=coverage.txt | grep "total:"
|
||||||
|
coverage: '/total:\s+\(statements\)\s+(\d+.\d+\%)/'
|
||||||
|
cache:
|
||||||
|
<<: *depscache
|
||||||
|
policy: pull-push
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
cobertura: coverage.xml
|
||||||
|
junit: tests.junit.xml
|
||||||
|
|
||||||
|
release:
|
||||||
|
stage: release
|
||||||
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_TAG
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
release-cli create \
|
||||||
|
--name "${CI_COMMIT_TAG}" \
|
||||||
|
--tag-name "${CI_COMMIT_TAG}" \
|
||||||
|
--milestone "${CI_COMMIT_TAG}"
|
2180
.golangci.yml
2180
.golangci.yml
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
||||||
package conf_test
|
package conf
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
@ -7,8 +7,6 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"code.bcarlin.xyz/go/conf"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type testconf struct {
|
type testconf struct {
|
||||||
|
@ -38,7 +36,7 @@ func TestLoadFile(t *testing.T) {
|
||||||
|
|
||||||
file := "test_data/valid.json"
|
file := "test_data/valid.json"
|
||||||
|
|
||||||
err := conf.LoadFile(file, &c)
|
err := LoadFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "config string", c.String)
|
assert.Equal(t, "config string", c.String)
|
||||||
|
@ -57,7 +55,7 @@ func TestLoadFile(t *testing.T) {
|
||||||
|
|
||||||
file := "test_data/invalid.json"
|
file := "test_data/invalid.json"
|
||||||
|
|
||||||
err := conf.LoadFile(file, &c)
|
err := LoadFile(file, &c)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "default string", c.String)
|
assert.Equal(t, "default string", c.String)
|
||||||
|
@ -76,7 +74,7 @@ func TestLoadFile(t *testing.T) {
|
||||||
|
|
||||||
file := "does-not-exist.conf"
|
file := "does-not-exist.conf"
|
||||||
|
|
||||||
err := conf.LoadFile(file, &c)
|
err := LoadFile(file, &c)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "default string", c.String)
|
assert.Equal(t, "default string", c.String)
|
||||||
|
@ -106,7 +104,7 @@ func TestLoadFiles(t *testing.T) {
|
||||||
err = os.WriteFile(paths[1], content2, 0o600)
|
err = os.WriteFile(paths[1], content2, 0o600)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadFiles(&c, paths...)
|
err = LoadFiles(&c, paths...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "foo", c.String)
|
assert.Equal(t, "foo", c.String)
|
||||||
|
@ -131,7 +129,7 @@ func TestLoadFiles(t *testing.T) {
|
||||||
err = os.WriteFile(paths[1], content2, 0o600)
|
err = os.WriteFile(paths[1], content2, 0o600)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadFiles(&c, paths...)
|
err = LoadFiles(&c, paths...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "bar", c.String)
|
assert.Equal(t, "bar", c.String)
|
||||||
|
@ -152,7 +150,7 @@ func TestLoadFiles(t *testing.T) {
|
||||||
err := os.WriteFile(paths[1], content2, 0o600)
|
err := os.WriteFile(paths[1], content2, 0o600)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadFiles(&c, paths...)
|
err = LoadFiles(&c, paths...)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "bar", c.String)
|
assert.Equal(t, "bar", c.String)
|
||||||
|
@ -176,7 +174,7 @@ func TestLoadFiles(t *testing.T) {
|
||||||
err = os.WriteFile(paths[1], content2, 0o600)
|
err = os.WriteFile(paths[1], content2, 0o600)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadFiles(&c, paths...)
|
err = LoadFiles(&c, paths...)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.Equal(t, "", c.String)
|
assert.Equal(t, "", c.String)
|
||||||
|
@ -197,7 +195,7 @@ func TestSaveFile(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
file := filepath.Join(tmpDir, "test.conf")
|
file := filepath.Join(tmpDir, "test.conf")
|
||||||
|
|
||||||
err := conf.SaveFile(file, &c)
|
err := SaveFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.FileExists(t, file)
|
assert.FileExists(t, file)
|
||||||
|
@ -214,7 +212,7 @@ func TestSaveFile(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
file := filepath.Join(tmpDir, "test.conf")
|
file := filepath.Join(tmpDir, "test.conf")
|
||||||
|
|
||||||
err := conf.SaveFile(file, func() error { return nil })
|
err := SaveFile(file, func() error { return nil })
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.NoFileExists(t, file)
|
assert.NoFileExists(t, file)
|
||||||
|
@ -230,7 +228,7 @@ func TestSaveFile(t *testing.T) {
|
||||||
}
|
}
|
||||||
file := "cannot/write/here.conf"
|
file := "cannot/write/here.conf"
|
||||||
|
|
||||||
err := conf.SaveFile(file, &c)
|
err := SaveFile(file, &c)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.NoFileExists(t, file)
|
assert.NoFileExists(t, file)
|
||||||
|
@ -253,11 +251,11 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
file := filepath.Join(tmpDir, "test.conf")
|
file := filepath.Join(tmpDir, "test.conf")
|
||||||
|
|
||||||
err := conf.LoadAndUpdateFile(file, &c)
|
err := LoadAndUpdateFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var c2 testconf
|
var c2 testconf
|
||||||
err = conf.LoadFile(file, &c2)
|
err = read(file, &c2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, c.String, c2.String)
|
assert.Equal(t, c.String, c2.String)
|
||||||
assert.Equal(t, c.Int, c2.Int)
|
assert.Equal(t, c.Int, c2.Int)
|
||||||
|
@ -279,7 +277,7 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
file := filepath.Join(tmpDir, "does-not-exist", "test.conf")
|
file := filepath.Join(tmpDir, "does-not-exist", "test.conf")
|
||||||
|
|
||||||
err := conf.LoadAndUpdateFile(file, &c)
|
err := LoadAndUpdateFile(file, &c)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.NoFileExists(t, file)
|
assert.NoFileExists(t, file)
|
||||||
|
@ -304,7 +302,7 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
err := os.WriteFile(file, content, 0o644)
|
err := os.WriteFile(file, content, 0o644)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadAndUpdateFile(file, &c)
|
err = LoadAndUpdateFile(file, &c)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
assert.False(t, updated)
|
assert.False(t, updated)
|
||||||
|
@ -327,11 +325,11 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
err := os.WriteFile(file, content, 0o644)
|
err := os.WriteFile(file, content, 0o644)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadAndUpdateFile(file, &c)
|
err = LoadAndUpdateFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var c2 testconf
|
var c2 testconf
|
||||||
err = conf.LoadFile(file, &c2)
|
err = read(file, &c2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, "config string", c2.String)
|
assert.Equal(t, "config string", c2.String)
|
||||||
assert.Equal(t, 42, c2.Int)
|
assert.Equal(t, 42, c2.Int)
|
||||||
|
@ -356,13 +354,12 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
err := os.WriteFile(file, content, 0o644)
|
err := os.WriteFile(file, content, 0o644)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadAndUpdateFile(file, &c)
|
err = LoadAndUpdateFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
newContent, err := os.ReadFile(file)
|
newContent, err := os.ReadFile(file)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
assert.Contains(t, string(newContent), "Int")
|
||||||
assert.Contains(t, string(newContent), "Int") //nolint:usestdlibvars // not the constant here
|
|
||||||
assert.Contains(t, string(newContent), "Invariant")
|
assert.Contains(t, string(newContent), "Invariant")
|
||||||
|
|
||||||
assert.True(t, updated)
|
assert.True(t, updated)
|
||||||
|
@ -385,7 +382,7 @@ func TestLoadAndUpdateFile(t *testing.T) {
|
||||||
err := os.WriteFile(file, content, 0o644)
|
err := os.WriteFile(file, content, 0o644)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = conf.LoadAndUpdateFile(file, &c)
|
err = LoadAndUpdateFile(file, &c)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
newContent, err := os.ReadFile(file)
|
newContent, err := os.ReadFile(file)
|
||||||
|
|
Loading…
Reference in a new issue