-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathTaskfile.yml
240 lines (238 loc) · 6.1 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
version: '3'
output: prefixed
tasks:
default:
cmds:
- task: test
generate-env:
desc: Generates env and env.test files
dir: cmd
silent: true
status:
- test -f env
- test -f env.test
vars:
CONTENT: |
BOT_TOKEN=1234567890:G8o4ATpRsfUtl0p7N1HW9S2IdIcxSRoSY67
ADMINS=123456789
BROADCAST_CHANNEL=-1234567890123
TWITTER_API_KEY=c7FU8EvL9smKN2k2IN0yur67k
TWITTER_API_SECRET=LYzF53kJoVK46rp859rQCw6Dqw6TpQV668aemPb2KI9GUxTTU0
TWITTER_BEARER_TOKEN=hIlQI351HEPT6xbA4xHnYRfgOsF8jqcPT5m6Ec0VeCXtUyOY9Mzy6uFYevH%4ys86GL3KfO1ZRBwichZOlGDYyZ52Ht2BXh2WgUFvywJKbRq9lMH
TWITTER_ACCESS_TOKEN=123456789-0xW7uNw2mEykTVTTKHS32y3oIXHab5hSh7POa0Wf
TWITTER_ACCESS_SECRET=BWa9T8hkEEj5yCutPwJTs7Vk4f1wfj690Dq3UGCyf9YQB
ENVIRONMENT=TEST
LOG_FILE=/var/log/tweetgram.log
cmds:
- echo "Writing content for env files"
- |
{{range $line := .CONTENT | trim | splitLines -}}
echo {{$line}} >> env
echo {{$line}} >> env.test
{{end}}
- echo "Env files generated, set up proper values for vars"
setup:
desc: Set up bot environment to work with
silent: true
cmds:
- task: generate-env
- task: install
- task: generate
generate:
desc: Run all code generation
silent: true
deps:
- clean
- install
cmds:
- task: stringer
- task: json
- task: embed
- task: wire
- task: mock
install:
desc: Download all tools and dependencies to vendor directory
run: once
silent: true
cmds:
- echo "Download tools and dependencies"
- go mod vendor -e
sources:
- go.mod
method: checksum
lint:
desc: Execute golangci-lint tool
deps:
- install
- generate
cmds:
- go run github.com/golangci/golangci-lint/cmd/golangci-lint run
gofumpt:
desc: Run gofumpt
deps:
- install
cmds:
- go run mvdan.cc/gofumpt -l -w cmd internal
wire:
desc: Execute wire binary to generate DI
run: once
silent: true
deps:
- install
cmds:
- go run github.com/google/wire/cmd/wire ./...
sources:
- internal/app/wire.go
generates:
- internal/app/wire_gen.go
clean-wire:
desc: Remove all wire generated files
run: once
cmds:
- find ./internal -type f -name '*_gen.go' -delete
sources:
- internal/app/wire.go
silent: true
stringer:
desc: Stringify all enums
run: once
silent: true
deps:
- install
cmds:
- go run golang.org/x/tools/cmd/stringer -type=TopicName,CommandName internal/pubsub/broadcast.go
sources:
- internal/pubsub/broadcast.go
generates:
- internal/pubsub/topicname_string.go
clean-stringer:
desc: Remove all stringer generated files
run: once
cmds:
- find ./internal -type f -name '*_string.go' -delete
sources:
- internal/pubsub/broadcast.go
silent: true
json:
desc: Generate json Marshal/Unmarshal functions
run: once
silent: true
deps:
- install
cmds:
- go run github.com/mailru/easyjson/easyjson internal/pubsub/broadcast.go
sources:
- internal/pubsub/broadcast.go
generates:
- internal/pubsub/broadcast_easyjson.go
clean-json:
desc: Remove all json generated files
run: once
cmds:
- find ./internal -type f -name '*_easyjson.go' -delete
sources:
- internal/pubsub/broadcast.go
silent: true
embed:
desc: Generate embeded envFile
run: once
deps:
- install
dir: cmd/
silent: true
cmds:
- go run github.com/c-sto/encembed -i env -decvarname envFile -funcname env -o embededenv -srcname embededenv.go -encvarname embededenv
- go run github.com/c-sto/encembed -i env.test -decvarname envTestFile -funcname envTest -o embededenvtest -srcname embededenvtest.go -encvarname embededenvtest
sources:
- cmd/env
- cmd/env.test
generates:
- cmd/embededenv
- cmd/embededenv.go
- cmd/embededenvtest
- cmd/embededenvtest.go
clean-embed:
desc: Remove all embeded generated files
run: once
cmds:
- find ./cmd -type f -name 'embededenv*' -delete
sources:
- cmd/embededenv
- cmd/embededenv.go
- cmd/embededenvtest
- cmd/embededenvtest.go
silent: true
mock:
desc: Generate all mocks for testing
run: once
silent: true
deps:
- install
cmds:
- echo "Generating mocks for all interfaces"
- go run github.com/vektra/mockery/v2/ --all --inpackage --keeptree --dir=internal --output=mocks
- go run github.com/vektra/mockery/v2/ --name=Context --inpackage --keeptree --dir=vendor/gopkg.in/telebot.v3/ --output=mocks/telebot/
sources:
- internal/**/*.go
- vendor/gopkg.in/telebot.v3/
generates:
- mocks/**/*.go
clean-mock:
desc: Remove all mocks
run: once
cmds:
- rm -Rf mocks
sources:
- internal/**/*.go
silent: true
test:
desc: Run all tests
deps:
- clean
- install
- generate
cmds:
- go test -timeout 10s -race -count 5 -coverprofile=coverage.txt -covermode=atomic -shuffle on ./...
mutation:
desc: Run mutation testing
deps:
- clean
- install
- generate
cmds:
- go run github.com/zimmski/go-mutesting/cmd/go-mutesting internal/bot/ internal/config/ internal/handlers/... internal/twitter/
run-test:
desc: Execute test mode for the bot
deps:
- clean
- install
cmds:
- task: stringer
- task: json
- task: wire
- go run cmd/*.go -test=true
run:
desc: Execute the bot
deps:
- clean
- install
cmds:
- task: stringer
- task: json
- task: wire
- task: embed
- go run cmd/*.go
clean:
desc: Clean all auto generated files
run: once
deps:
- clean-json
- clean-stringer
- clean-wire
- clean-embed
- clean-mock
cmds:
- echo "Removing auto generated files"
- rm -f coverage.txt
- echo "Files removed"
silent: true