-
Notifications
You must be signed in to change notification settings - Fork 0
/
Taskfile.yml
142 lines (123 loc) · 4.04 KB
/
Taskfile.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
version: '3'
dotenv: ['.env']
env:
vYEAR: "v2024"
OPSLEVEL_GO_PKG: "github.com/opslevel/opslevel-go/{{.vYEAR}}"
OPSLEVEL_JQ_PARSER_PKG: "github.com/opslevel/opslevel-jq-parser/{{.vYEAR}}"
tasks:
ci:
desc: Workflow to run in CI
deps:
- install-gofumpt
- install-golangci-lint
- install-nilaway
cmds:
- which jq > /dev/null
- task: lint
- task: has-latest-opslevel-dependencies
- task: test
lint:
desc: Formatting and linting
cmds:
- test -z "$(gofumpt -d -e . | tee /dev/stderr)"
- golangci-lint run
- nilaway -include-pkgs='github.com/opslevel/opslevel-k8s-controller' -test=false ./...
fix:
desc: Fix formatting, linting, go.mod, and update submodule
cmds:
- task: update-opslevel-deps
- gofumpt -w .
- go get -u
- go mod tidy
- golangci-lint run --fix
setup:
desc: Setup linter, formatter, etc. for local testing and CI
cmds:
- cmd: echo "Installing development tools..."
silent: true
- task: brew-install-jq
- task: install-changie
- task: install-gofumpt
- task: install-golangci-lint
- task: install-nilaway
- cmd: echo "Development tools installed!"
silent: true
test:
desc: Run tests
cmds:
- go test -race -coverprofile=coverage.txt -covermode=atomic -v ./... {{ .CLI_ARGS }}
update-opslevel-deps:
desc: Update opslevel dependencies to latest release
cmds:
- go get -u "{{.OPSLEVEL_GO_PKG}}" "{{.OPSLEVEL_JQ_PARSER_PKG}}"
# internal (not directly called) tasks
has-latest-opslevel-dependencies:
desc: Check if opslevel dependencies are up to date in go.mod
silent: true
cmds:
- for: [ "{{.OPSLEVEL_GO_PKG}}", "{{.OPSLEVEL_JQ_PARSER_PKG}}" ]
task: has-latest-opslevel-dep
vars:
OPSLEVEL_PKG: "{{.ITEM}}"
has-latest-opslevel-dep:
internal: true
silent: true
vars:
LATEST_OPSLEVEL_PKG_VERSION:
sh: go list -u -m -versions {{.OPSLEVEL_PKG}} | awk '{print $NF}'
cmds:
- |-
if [[ {{.LATEST_OPSLEVEL_PKG_VERSION}} == $(go list -m --json '{{.OPSLEVEL_PKG}}' | jq -r '.Version') ]]; then
echo "Using latest version of {{.OPSLEVEL_PKG}} - {{.LATEST_OPSLEVEL_PKG_VERSION}}";
else
echo "WARNING: current version of {{.OPSLEVEL_PKG}} is behind '{{.LATEST_OPSLEVEL_PKG_VERSION}}'"
echo "Run 'task fix' to get latest version"
exit 1
fi
requires:
vars: [OPSLEVEL_PKG]
brew-install-jq:
internal: true
platforms: [darwin]
cmds: ["brew install jq"]
preconditions:
- sh: 'which brew'
msg: '"brew" needed to install "jq"- see https://brew.sh'
go-install-tool:
desc: go install '{{.GO_TOOL}}' and set GOBIN if not set
internal: true
silent: true
vars:
IS_TOOL_INSTALLED:
sh: which {{.GO_TOOL}} > /dev/null || echo "1"
cmds:
- test -z "{{.IS_TOOL_INSTALLED}}" || echo "Installing {{.GO_TOOL}}..."
- test -z "{{.IS_TOOL_INSTALLED}}" || go install {{.GO_TOOL_PATH}}
- test -n $(go env GOBIN) || go env -w GOBIN=$(go env GOPATH)/bin
- echo " '{{.GO_TOOL}}' is installed."
requires:
vars: [GO_TOOL, GO_TOOL_PATH]
install-changie:
desc: go install "changie"
internal: true
cmds:
- task: go-install-tool
vars: { GO_TOOL: "changie", GO_TOOL_PATH: "github.com/miniscruff/changie@latest" }
install-gofumpt:
desc: go install "gofumpt"
internal: true
cmds:
- task: go-install-tool
vars: { GO_TOOL: "gofumpt", GO_TOOL_PATH: "mvdan.cc/gofumpt@latest" }
install-golangci-lint:
desc: go install "golangci-lint"
internal: true
cmds:
- task: go-install-tool
vars: { GO_TOOL: "golangci-lint", GO_TOOL_PATH: "github.com/golangci/golangci-lint/cmd/golangci-lint@latest" }
install-nilaway:
desc: go install "nilaway"
internal: true
cmds:
- task: go-install-tool
vars: { GO_TOOL: "nilaway", GO_TOOL_PATH: "go.uber.org/nilaway/cmd/nilaway@latest" }