Skip to content

Commit 940b7dc

Browse files
Task: Add Makefile and scripts
Adds Makefile and scripts for the common development flow. After adding use of gometalinter, several linting issues were found and resolved as part of the fix.
1 parent 67a64c4 commit 940b7dc

39 files changed

+561
-213
lines changed

.editorconfig

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ charset = utf-8
1717
[*.go]
1818
indent_style = tab
1919

20+
[Makefile*]
21+
indent_style = tab
22+
2023
[*.md]
2124
trim_trailing_whitespace = false
2225

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,7 @@ go-swagger.iml
5252

5353
node_modules
5454
_book
55+
56+
tmp/
57+
cover/
58+
bin/

Dockerfile.dev

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM golang:1.8
2+
3+
COPY hack/devtools.sh /opt/devtools.sh
4+
5+
# install the devtools; keeping them in original script will
6+
# enable local development w/o Docker if desired.
7+
RUN set -e -x \
8+
&& /opt/devtools.sh
9+
10+
ENV CGO_ENABLED 1
11+
ENV GOPATH /go:/go-swagger

Makefile

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
MAKEFLAGS += --warn-undefined-variables
2+
SHELL := /bin/bash
3+
.SHELLFLAGS := -o pipefail -euc
4+
.DEFAULT_GOAL := build
5+
6+
include Makefile.variables
7+
8+
.PHONY: help
9+
help:
10+
@echo 'Management commands for cicdtest:'
11+
@echo
12+
@echo 'Usage:'
13+
@echo ' ## Build Commands'
14+
@echo ' make tag-build Add git tag for latest build.'
15+
@echo
16+
@echo ' ## Generator Commands'
17+
@echo ' make generate Run code generator for project.'
18+
@echo
19+
@echo ' ## Develop / Test Commands'
20+
@echo ' make vendor Install dependencies using glide.'
21+
@echo ' make format Run code formatter.'
22+
@echo ' make check Run static code analysis (lint).'
23+
@echo ' make test Run tests on project.'
24+
@echo ' make cover Run tests and capture code coverage metrics on project.'
25+
@echo ' make clean Clean the directory tree of produced artifacts.'
26+
@echo
27+
@echo ' ## Utility Commands'
28+
@echo ' make setup Configures Minishfit/Docker directory mounts.'
29+
@echo
30+
31+
32+
.PHONY: clean
33+
clean:
34+
@rm -rf bin cover *.out *.xml
35+
36+
veryclean: clean
37+
rm -rf tmp
38+
${DOCKER} rmi -f ${DEV_IMAGE} > /dev/null 2>&1 || true
39+
40+
## prefix before other make targets to run in your local dev environment
41+
local: | quiet
42+
@$(eval DOCKRUN= )
43+
quiet: # this is silly but shuts up 'Nothing to be done for `local`'
44+
@:
45+
46+
prepare: tmp/dev_image_id
47+
tmp/dev_image_id:
48+
@mkdir -p tmp
49+
@${DOCKER} rmi -f ${DEV_IMAGE} > /dev/null 2>&1 || true
50+
${DOCKER} build -t ${DEV_IMAGE} -f Dockerfile.dev .
51+
@${DOCKER} inspect -f "{{ .ID }}" ${DEV_IMAGE} > tmp/dev_image_id
52+
53+
# ----------------------------------------------
54+
# build
55+
.PHONY: build
56+
build: build/dev
57+
58+
.PHONY: build/dev
59+
build/dev: check */*.go *.go
60+
@mkdir -p bin/
61+
${DOCKRUN} go build -o bin/swagger --ldflags "$(LDFLAGS)" ./cmd/swagger
62+
63+
.PHONY: install
64+
install: build
65+
${DOCKRUN} go install ./cmd/swagger
66+
67+
.PHONY: vendor
68+
vendor: tmp/dev_image_id
69+
70+
# ----------------------------------------------
71+
# develop and test
72+
73+
.PHONY: format
74+
format: vendor
75+
${DOCKRUN} bash ./hack/format.sh
76+
77+
.PHONY: check
78+
check: format
79+
${DOCKRUN} bash ./hack/check.sh
80+
81+
.PHONY: test
82+
test: check
83+
${DOCKRUN} bash ./hack/test.sh
84+
85+
.PHONY: cover
86+
cover: check
87+
@rm -rf cover/
88+
@mkdir -p cover
89+
${DOCKRUN} bash ./hack/cover.sh
90+
91+
# does not work
92+
.PHONY: canary
93+
canary: build
94+
${DOCKRUN} bash -c 'SWAGGER_BIN=$$(pwd)/bin/swagger ./hack/run-canary.sh'
95+
96+
# generate bindata when templates are updated
97+
.PHONY: generate
98+
generate: build/image_build
99+
${DOCKRUN} go generate ./generator
100+
101+
# ----------------------------------------------
102+
# utilities
103+
104+
.PHONY: setup
105+
setup:
106+
@bash ./hack/setup.sh

Makefile.variables

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
nosudo = $(shell docker version > /dev/null 2>&1 && echo 1)
2+
ifeq ($(nosudo),1)
3+
DOCKER := docker
4+
else
5+
DOCKER := sudo docker
6+
endif
7+
8+
export PROJECT = go-swagger
9+
IMPORT_PATH := github.com/go-swagger/${PROJECT}
10+
11+
export GIT_COMMIT = $(shell git rev-parse --short HEAD)
12+
export GIT_DIRTY = $(shell test -n "$$(git status --porcelain)" && echo "+CHANGES" || true)
13+
export GIT_DESCRIBE = $(shell git describe --tags --always)
14+
LDFLAGS :=
15+
LDFLAGS += -X ${IMPORT_PATH}/cmd/swagger/commands.Commit=${GIT_COMMIT}
16+
LDFLAGS += -X ${IMPORT_PATH}/cmd/swagger/commands.Version=${GIT_DESCRIBE}
17+
18+
# Windows environment?
19+
CYG_CHECK := $(shell hash cygpath 2>/dev/null && echo 1)
20+
ifeq ($(CYG_CHECK),1)
21+
VBOX_CHECK := $(shell hash VBoxManage 2>/dev/null && echo 1)
22+
23+
# Docker Toolbox (pre-Windows 10)
24+
ifeq ($(VBOX_CHECK),1)
25+
ROOT := /${PROJECT}
26+
else
27+
# Docker Windows
28+
ROOT := $(shell cygpath -m -a "$(shell pwd)")
29+
endif
30+
else
31+
# all non-windows environments
32+
ROOT := $(shell pwd)
33+
endif
34+
35+
DEV_IMAGE := ${PROJECT}_dev
36+
37+
DOCKRUN := docker run --rm \
38+
-v ${ROOT}/vendor:/go/src \
39+
-v ${ROOT}:/${PROJECT}/src/${IMPORT_PATH} \
40+
-w /${PROJECT}/src/${IMPORT_PATH} \
41+
${DEV_IMAGE}

cmd/swagger/commands/generate/shared.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ func configureOptsFromConfig(cfg *viper.Viper, opts *generator.GenOpts) error {
4343
if err := cfg.Unmarshal(&def); err != nil {
4444
return err
4545
}
46-
def.ConfigureOpts(opts)
47-
return nil
46+
return def.ConfigureOpts(opts)
4847
}
4948

5049
func setDebug(cfg *viper.Viper) {

cmd/swagger/commands/generate/spec.go

-4
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ func (s *SpecFile) Execute(args []string) error {
5656
return writeToFile(swspec, !s.Compact, string(s.Output))
5757
}
5858

59-
var (
60-
newLine = []byte("\n")
61-
)
62-
6359
func loadSpec(input string) (*spec.Swagger, error) {
6460
if fi, err := os.Stat(input); err == nil {
6561
if fi.IsDir() {

cmd/swagger/commands/initcmd.go

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type InitCmd struct {
77
Model *initcmd.Spec `command:"spec"`
88
}
99

10+
// Execute provides default empty implementation
1011
func (i *InitCmd) Execute(args []string) error {
1112
return nil
1213
}

cmd/swagger/commands/initcmd/spec.go

+4-13
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,13 @@ func (s *Spec) Execute(args []string) error {
9191
info.License = &license
9292
}
9393

94-
for _, cons := range s.Consumes {
95-
doc.Consumes = append(doc.Consumes, cons)
96-
}
97-
for _, prods := range s.Produces {
98-
doc.Produces = append(doc.Produces, prods)
99-
}
100-
for _, scheme := range s.Schemes {
101-
doc.Schemes = append(doc.Schemes, scheme)
102-
}
94+
doc.Consumes = append(doc.Consumes, s.Consumes...)
95+
doc.Produces = append(doc.Produces, s.Produces...)
96+
doc.Schemes = append(doc.Schemes, s.Schemes...)
10397

10498
if s.Format == "json" {
10599
enc := json.NewEncoder(file)
106-
if err := enc.Encode(doc); err != nil {
107-
return err
108-
}
109-
return nil
100+
return enc.Encode(doc)
110101
}
111102

112103
b, err := yaml.Marshal(swag.ToDynamicJSON(doc))

cmd/swagger/commands/serve.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (s *ServeCmd) Execute(args []string) error {
100100
}()
101101

102102
if !s.NoOpen && !s.NoUI {
103-
webbrowser.Open(visit)
103+
_ = webbrowser.Open(visit)
104104
}
105105
log.Println("serving docs at", visit)
106106
return <-errFuture

generator/bindata.go

+52-52
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generator/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import (
2323
"sort"
2424

2525
"github.com/go-openapi/analysis"
26-
"github.com/go-openapi/runtime"
2726
"github.com/go-openapi/loads"
27+
"github.com/go-openapi/runtime"
2828
"github.com/go-openapi/swag"
2929
)
3030

generator/enum_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ func TestEnum_Issue325(t *testing.T) {
402402
genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts)
403403
if assert.NoError(t, err) {
404404
buf := bytes.NewBuffer(nil)
405-
err := templates.MustGet("model").Execute(buf, genModel)
405+
err = templates.MustGet("model").Execute(buf, genModel)
406406
if assert.NoError(t, err) {
407407
ff, err := opts.LanguageOpts.FormatContent("soda_brand.go", buf.Bytes())
408408
if assert.NoError(t, err) {

0 commit comments

Comments
 (0)