Compare commits
38 Commits
dev/moul/m
...
master
Author | SHA1 | Date | |
---|---|---|---|
9b2c559015 | |||
|
f4bcee51a3 | ||
|
a9183c3671 | ||
|
7da678ab31 | ||
|
4946336278 | ||
|
c60433e6c9 | ||
|
b6eb434519 | ||
|
5c194ed5b8 | ||
|
57c04e0d2a | ||
|
1c966f6e9f | ||
|
a0668cce22 | ||
|
dfcdc3b99e | ||
|
b659c9914b | ||
|
d284f78f18 | ||
|
cae6348e1a | ||
|
d6e112de34 | ||
|
f3d1bfdee9 | ||
|
066f210f39 | ||
|
b244c9cc31 | ||
|
3a6b47dc92 | ||
|
5b5d8bf81e | ||
|
42f1289ddc | ||
|
2d28c0f341 | ||
|
e4d1fef8fe | ||
|
1d71729a7c | ||
|
c6eca2356c | ||
|
3576fd314a | ||
|
f43d2a2ac8 | ||
|
baffaa4b6a | ||
|
db5e9b7f99 | ||
|
be3a88a34a | ||
|
bd48cf6168 | ||
|
7110803a05 | ||
|
c41132a4f6 | ||
|
36f4177b68 | ||
|
1ff20846eb | ||
|
5202ea7a53 | ||
|
6949b76e12 |
17
.circleci/config.yml
Normal file
17
.circleci/config.yml
Normal file
@ -0,0 +1,17 @@
|
||||
version: 2.1
|
||||
|
||||
orbs:
|
||||
moul: moul/build@1.14.0 # https://github.com/moul/build
|
||||
|
||||
workflows:
|
||||
main:
|
||||
jobs:
|
||||
- moul/golang-build:
|
||||
gopkg: moul.io/protoc-gen-gotemplate
|
||||
- moul/golang-build:
|
||||
gopkg: moul.io/protoc-gen-gotemplate
|
||||
tag: '1.12'
|
||||
- moul/golang-build:
|
||||
gopkg: moul.io/protoc-gen-gotemplate
|
||||
tag: '1.11'
|
||||
- moul/docker-build
|
3
.dockerignore
Normal file
3
.dockerignore
Normal file
@ -0,0 +1,3 @@
|
||||
Dockerfile
|
||||
*~
|
||||
.git/
|
15
.gitattributes
vendored
Normal file
15
.gitattributes
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Collapse vendored and generated files on GitHub
|
||||
vendor/* linguist-vendored
|
||||
rules.mk linguist-vendored
|
||||
*/vendor/* linguist-vendored
|
||||
*.gen.* linguist-generated
|
||||
*.pb.go linguist-generated
|
||||
go.sum linguist-generated
|
||||
go.mod linguist-generated
|
||||
gen.sum linguist-generated
|
||||
|
||||
# Reduce conflicts on markdown files
|
||||
*.md merge=union
|
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@ -0,0 +1 @@
|
||||
* @moul
|
6
.github/FUNDING.yml
vendored
Normal file
6
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
#github: ["moul"]
|
||||
patreon: moul
|
||||
open_collective: moul
|
||||
custom:
|
||||
- "https://www.buymeacoffee.com/moul"
|
||||
- "https://manfred.life/donate"
|
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Type '....'
|
||||
3. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots / Logs**
|
||||
If applicable, add screenshots or logs to help explain your problem.
|
||||
|
||||
**Versions (please complete the following information, if relevant):**
|
||||
- Software version: [e.g. v1.2.3, latest, building from sources]
|
||||
- OS: [e.g. Ubuntu, Mac, iOS, ...]
|
||||
- Golang version [e.g. 1.13]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
8
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
8
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
name: Custom
|
||||
about: 'Anything else: questions, discussions, thanks, ascii-arts, ...'
|
||||
title: ''
|
||||
labels: discussion
|
||||
assignees: moul
|
||||
|
||||
---
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[IDEA] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<!--
|
||||
Thank you for your contribution to this repo!
|
||||
|
||||
Before submitting a pull request, please check the following:
|
||||
- reference any related issue, PR, link
|
||||
- use the "WIP" title prefix if you need help or more time to finish your PR
|
||||
|
||||
you can remove this markdown comment
|
||||
-->
|
3
renovate.json → .github/renovate.json
vendored
3
renovate.json → .github/renovate.json
vendored
@ -1,5 +1,6 @@
|
||||
{
|
||||
"extends": [
|
||||
"config:base"
|
||||
]
|
||||
],
|
||||
"groupName": "all"
|
||||
}
|
13
.github/workflows/release.yml
vendored
Normal file
13
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
name: Semantic Release
|
||||
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
semantic-release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: codfish/semantic-release-action@v1
|
||||
if: github.ref == 'refs/heads/master'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
45
.gitignore
vendored
45
.gitignore
vendored
@ -1,28 +1,25 @@
|
||||
vendor/**/.travis.yml
|
||||
# Temporary files
|
||||
*~
|
||||
*#
|
||||
.#*
|
||||
coverage.txt
|
||||
|
||||
/protoc-gen-gotemplate
|
||||
|
||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||
*.o
|
||||
*.a
|
||||
*.so
|
||||
|
||||
# Folders
|
||||
_obj
|
||||
_test
|
||||
|
||||
# Architecture specific extensions/prefixes
|
||||
*.[568vq]
|
||||
[568vq].out
|
||||
|
||||
*.cgo1.go
|
||||
*.cgo2.c
|
||||
_cgo_defun.c
|
||||
_cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
|
||||
_testmain.go
|
||||
# Vendors
|
||||
package-lock.json
|
||||
node_modules/
|
||||
vendor/
|
||||
|
||||
# Binaries for programs and plugins
|
||||
dist/
|
||||
gin-bin
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, build with `go test -c`
|
||||
*.test
|
||||
*.prof
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
34
.golangci.yml
Normal file
34
.golangci.yml
Normal file
@ -0,0 +1,34 @@
|
||||
run:
|
||||
deadline: 1m
|
||||
tests: false
|
||||
#skip-files:
|
||||
# - ".*\\.gen\\.go"
|
||||
|
||||
linters-settings:
|
||||
golint:
|
||||
min-confidence: 0
|
||||
maligned:
|
||||
suggest-new: true
|
||||
goconst:
|
||||
min-len: 5
|
||||
min-occurrences: 4
|
||||
misspell:
|
||||
locale: US
|
||||
|
||||
linters:
|
||||
disable-all: true
|
||||
enable:
|
||||
- goconst
|
||||
- misspell
|
||||
- deadcode
|
||||
- misspell
|
||||
- structcheck
|
||||
- errcheck
|
||||
- unused
|
||||
- varcheck
|
||||
- staticcheck
|
||||
- unconvert
|
||||
- gofmt
|
||||
- goimports
|
||||
- golint
|
||||
- ineffassign
|
8
.releaserc.js
Normal file
8
.releaserc.js
Normal file
@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
branch: 'master',
|
||||
plugins: [
|
||||
'@semantic-release/commit-analyzer',
|
||||
'@semantic-release/release-notes-generator',
|
||||
'@semantic-release/github',
|
||||
],
|
||||
};
|
20
.travis.yml
20
.travis.yml
@ -1,20 +0,0 @@
|
||||
language: go
|
||||
go: 1.11.x
|
||||
go_import_path: moul.io/protoc-gen-gotemplate
|
||||
install:
|
||||
- go get github.com/Masterminds/glide
|
||||
- wget https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/.travis/install-protoc.sh && chmod +x install-protoc.sh && ./install-protoc.sh 3.4.0
|
||||
- go get -u github.com/golang/protobuf/protoc-gen-go
|
||||
- go get github.com/securego/gosec/cmd/gosec/...
|
||||
- go get -u github.com/alecthomas/gometalinter
|
||||
- gometalinter --install
|
||||
script:
|
||||
- make install
|
||||
- make test
|
||||
- make lint
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/local
|
||||
env:
|
||||
global:
|
||||
- "PATH=$PATH:$HOME/local/bin"
|
28
AUTHORS
Normal file
28
AUTHORS
Normal file
@ -0,0 +1,28 @@
|
||||
# This file lists all individuals having contributed content to the repository.
|
||||
# For how it is generated, see 'https://github.com/moul/rules.mk'
|
||||
|
||||
Alexandre Beslic <abeslic@abronan.com>
|
||||
Anastasia DERUELLE <anastasia.deruelle@gmail.com>
|
||||
Gero <geronimo@eclypsium.com>
|
||||
gfanton <guilhem.fanton@gmail.com>
|
||||
Guilhem Fanton <guilhem.fanton@gmail.com>
|
||||
Jan Weitz <jan@iosphere.de>
|
||||
jhayotte <julien.hayotte@gmail.com>
|
||||
Julien Hayotte <julien.hayotte@gmail.com>
|
||||
Manfred Touron <m@42.am>
|
||||
Mathieu Acthernoene <zoontek@gmail.com>
|
||||
Mike Lee <mike.lee@safeguardproperties.com>
|
||||
moul-bot <41326314+moul-bot@users.noreply.github.com>
|
||||
Pat Moroney <pat@pat.email>
|
||||
Pat Moroney <pmoroney@name.com>
|
||||
Peter Monko <piotrek.monko@gmail.com>
|
||||
Pierre Roullon <pierre.roullon@gmail.com>
|
||||
Quentin Perez <qperez@ocs.online.net>
|
||||
Renovate Bot <bot@renovateapp.com>
|
||||
Sacha Froment <sfroment42@gmail.com>
|
||||
Shogo Iwano <shiwano@gmail.com>
|
||||
Thomas KERAMBLOCH <tkerambloch@vente-privee.com>
|
||||
Tommy PAGEARD <tpageard@vente-privee.com>
|
||||
Valerio Gheri <valerio.gheri@gmail.com>
|
||||
Victor Login <batazor111@gmail.com>
|
||||
webii <michal.jaglewicz@gmail.com>
|
30
Dockerfile
30
Dockerfile
@ -1,14 +1,18 @@
|
||||
FROM znly/protoc:0.3.0
|
||||
# builder
|
||||
FROM golang:1.15-alpine as builder
|
||||
RUN apk --no-cache add make git go rsync libc-dev
|
||||
RUN go get -u golang.org/x/tools/cmd/goimports
|
||||
RUN go get -u github.com/gobuffalo/packr/v2/packr2
|
||||
COPY . /go/src/moul.io/protoc-gen-gotemplate
|
||||
WORKDIR /go/src/moul.io/protoc-gen-gotemplate
|
||||
RUN packr2
|
||||
RUN go install -a -tags netgo -ldflags '-w -extldflags "-static"' . ./cmd/web-editor
|
||||
RUN ls -la /go/bin
|
||||
|
||||
ENV GOPATH=/go \
|
||||
PATH=/go/bin:${PATH}
|
||||
|
||||
# Install deps and common tools
|
||||
RUN apk --update add make git go rsync libc-dev \
|
||||
&& go get -u golang.org/x/tools/cmd/goimports
|
||||
|
||||
# Install protoc-gen-gotemplate
|
||||
COPY . /go/src/moul.io/protoc-gen-gotemplate
|
||||
WORKDIR /go/src/moul.io/protoc-gen-gotemplate
|
||||
RUN git remote set-url origin https://github.com/moul/protoc-gen-gotemplate
|
||||
RUN go install . ./cmd/web-editor
|
||||
# runtime
|
||||
FROM znly/protoc:0.4.0
|
||||
COPY --from=builder /go/bin/web-editor /go/bin/
|
||||
COPY --from=builder /go/bin/protoc-gen-gotemplate /go/bin/
|
||||
ENV PATH=$PATH:/go/bin
|
||||
EXPOSE 8080
|
||||
ENTRYPOINT []
|
||||
|
34
Makefile
34
Makefile
@ -1,14 +1,14 @@
|
||||
.PHONY: build
|
||||
build:
|
||||
go build -v -i -o protoc-gen-gotemplate .
|
||||
GOPKG ?= moul.io/protoc-gen-gotemplate
|
||||
DOCKER_IMAGE ?= moul/protoc-gen-gotemplate
|
||||
GOBINS ?= . ./cmd/web-editor
|
||||
GOLIBS ?= .
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
go install .
|
||||
go install ./cmd/web-editor
|
||||
all: test install
|
||||
|
||||
.PHONY: test
|
||||
test: install
|
||||
include rules.mk
|
||||
|
||||
.PHONY: examples
|
||||
examples: install
|
||||
cd examples/time && make
|
||||
cd examples/enum && make
|
||||
cd examples/import && make
|
||||
@ -18,19 +18,7 @@ test: install
|
||||
cd examples/flow && make
|
||||
cd examples/sitemap && make
|
||||
cd examples/go-generate && make
|
||||
# cd examples/single-package-mode && make
|
||||
#cd examples/single-package-mode && make
|
||||
cd examples/helpers && make
|
||||
cd examples/arithmetics && make
|
||||
# cd examples/go-kit && make
|
||||
|
||||
.PHONY: docker.build
|
||||
docker.build:
|
||||
docker build --pull -t moul/protoc-gen-gotemplate .
|
||||
|
||||
.PHONY: docker.push
|
||||
docker.push: docker.build
|
||||
docker push moul/protoc-gen-gotemplate
|
||||
|
||||
.PHONY: lint
|
||||
lint:
|
||||
gometalinter --disable-all --enable=errcheck --enable=vet --enable=vetshadow --enable=golint --enable=gosec --enable=ineffassign --enable=goconst --enable=goimports --enable=gofmt --exclude="Binds to all network interfaces" --exclude="should have comment" --enable=staticcheck --enable=gosimple --enable=misspell --deadline=120s . ./cmd/... ./helpers/...
|
||||
#cd examples/go-kit && make
|
||||
|
97
README.md
97
README.md
@ -76,56 +76,57 @@ This project uses [Masterminds/sprig](https://github.com/Masterminds/sprig) libr
|
||||
Non-exhaustive list of new helpers:
|
||||
|
||||
* **all the functions from [sprig](https://github.com/Masterminds/sprig)**
|
||||
* `string`
|
||||
* `json`
|
||||
* `prettyjson`
|
||||
* `splitArray`
|
||||
* `first`
|
||||
* `last`
|
||||
* `upperFirst`
|
||||
* `lowerFirst`
|
||||
* `camelCase`
|
||||
* `lowerCamelCase`
|
||||
* `kebabCase`
|
||||
* `contains`
|
||||
* `trimstr`
|
||||
* `index`
|
||||
* `snakeCase`
|
||||
* `getProtoFile`
|
||||
* `getMessageType`
|
||||
* `getEnumValue`
|
||||
* `isFieldMessage`
|
||||
* `isFieldMessageTimeStamp`
|
||||
* `isFieldRepeated`
|
||||
* `haskellType`
|
||||
* `goType`
|
||||
* `goZeroValue`
|
||||
* `goTypeWithPackage`
|
||||
* `jsType`
|
||||
* `jsSuffixReserved`
|
||||
* `namespacedFlowType`
|
||||
* `httpVerb`
|
||||
* `httpPath`
|
||||
* `httpPathsAdditionalBindings`
|
||||
* `httpBody`
|
||||
* `shortType`
|
||||
* `urlHasVarsFromMessage`
|
||||
* `lowerGoNormalize`
|
||||
* `goNormalize`
|
||||
* `leadingComment`
|
||||
* `trailingComment`
|
||||
* `leadingDetachedComments`
|
||||
* `stringFieldExtension`
|
||||
* `stringMethodOptionsExtension`
|
||||
* `add`
|
||||
* `boolFieldExtension`
|
||||
* `isFieldMap`
|
||||
* `camelCase`
|
||||
* `contains`
|
||||
* `divide`
|
||||
* `fieldMapKeyType`
|
||||
* `fieldMapValueType`
|
||||
* `replaceDict`
|
||||
* `add`
|
||||
* `subtract`
|
||||
* `first`
|
||||
* `getEnumValue`
|
||||
* `getMessageType`
|
||||
* `getProtoFile`
|
||||
* `goNormalize`
|
||||
* `goTypeWithPackage`
|
||||
* `goType`
|
||||
* `goZeroValue`
|
||||
* `haskellType`
|
||||
* `httpBody`
|
||||
* `httpPath`
|
||||
* `httpPathsAdditionalBindings`
|
||||
* `httpVerb`
|
||||
* `index`
|
||||
* `int64FieldExtension`
|
||||
* `isFieldMap`
|
||||
* `isFieldMessageTimeStamp`
|
||||
* `isFieldMessage`
|
||||
* `isFieldRepeated`
|
||||
* `jsSuffixReserved`
|
||||
* `jsType`
|
||||
* `json`
|
||||
* `kebabCase`
|
||||
* `last`
|
||||
* `leadingComment`
|
||||
* `leadingDetachedComments`
|
||||
* `lowerCamelCase`
|
||||
* `lowerFirst`
|
||||
* `lowerGoNormalize`
|
||||
* `multiply`
|
||||
* `divide`
|
||||
* `namespacedFlowType`
|
||||
* `prettyjson`
|
||||
* `replaceDict`
|
||||
* `shortType`
|
||||
* `snakeCase`
|
||||
* `splitArray`
|
||||
* `stringFieldExtension`
|
||||
* `stringMethodOptionsExtension`
|
||||
* `string`
|
||||
* `subtract`
|
||||
* `trailingComment`
|
||||
* `trimstr`
|
||||
* `upperFirst`
|
||||
* `urlHasVarsFromMessage`
|
||||
|
||||
See the project helpers for the complete list.
|
||||
|
||||
@ -152,6 +153,10 @@ $> docker run --rm -v "$(pwd):$(pwd)" -w "$(pwd)" moul/protoc-gen-gotemplate -I.
|
||||
* [translator](https://github.com/moul/translator): Translator Micro-service using Gettext and Go-Kit
|
||||
* [acl](https://github.com/moul/acl): ACL micro-service (gRPC/protobuf + http/json)
|
||||
|
||||
## See also
|
||||
|
||||
* [pbhbs](https://github.com/gponsinet/pbhbs): protobuf gen based on handlebarjs template
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
6
assets/assets
Normal file
6
assets/assets
Normal file
@ -0,0 +1,6 @@
|
||||
/Users/moul/go/src/moul.io/protoc-gen-gotemplate/assets:
|
||||
total used in directory 552 available 9223372036849978910
|
||||
drwxr-xr-x 4 moul staff 128 Dec 9 11:31 .
|
||||
lrwxr-xr-x 1 moul staff 33 Dec 9 11:31 .#web-editor.jpg -> moul@manfred-spacegray.local.9471
|
||||
drwxr-xr-x 21 moul staff 672 Sep 13 18:05 ..
|
||||
-rw-r--r--@ 1 moul staff 280357 Oct 26 2017 web-editor.jpg
|
50
clean.go
Normal file
50
clean.go
Normal file
@ -0,0 +1,50 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func isGenerated(name string) bool {
|
||||
const (
|
||||
genCodeGenerated = "code generated"
|
||||
genDoNotEdit = "do not edit"
|
||||
genAutoFile = "autogenerated file"
|
||||
)
|
||||
|
||||
markers := []string{genCodeGenerated, genDoNotEdit, genAutoFile}
|
||||
|
||||
fileset := token.NewFileSet()
|
||||
syntax, err := parser.ParseFile(fileset, name, nil, parser.PackageClauseOnly|parser.ParseComments)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, comment := range syntax.Comments {
|
||||
for _, marker := range markers {
|
||||
if strings.Contains(strings.ToLower(comment.Text()), marker) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func cleanDir(dir string) error {
|
||||
return filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if dir == "vendor" {
|
||||
return filepath.SkipDir
|
||||
}
|
||||
if isGenerated(path) {
|
||||
err = os.Remove(path)
|
||||
}
|
||||
return err
|
||||
})
|
||||
}
|
104
clone.go
Normal file
104
clone.go
Normal file
@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"go/types"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
"github.com/go-git/go-git/v5/plumbing/filemode"
|
||||
"github.com/go-git/go-git/v5/plumbing/object"
|
||||
"github.com/go-git/go-git/v5/storage/memory"
|
||||
)
|
||||
|
||||
func clone(srcRepo string, dstDir string) error {
|
||||
if !strings.HasPrefix(srcRepo, "https://") {
|
||||
srcRepo = "https://" + srcRepo
|
||||
}
|
||||
|
||||
u, err := url.Parse(srcRepo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var rev string
|
||||
if idx := strings.Index(u.Path, "@"); idx > 0 {
|
||||
rev = u.Path[idx+1:]
|
||||
}
|
||||
|
||||
cloneOpts := &git.CloneOptions{
|
||||
URL: srcRepo,
|
||||
// Progress: os.Stdout,
|
||||
}
|
||||
|
||||
if len(rev) == 0 {
|
||||
cloneOpts.SingleBranch = true
|
||||
cloneOpts.Depth = 1
|
||||
}
|
||||
|
||||
if err := cloneOpts.Validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
repo, err := git.CloneContext(context.Background(), memory.NewStorage(), nil, cloneOpts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ref, err := repo.Head()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
commit, err := repo.CommitObject(ref.Hash())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tree, err := commit.Tree()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(dstDir, os.FileMode(0755)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cleanDir(dstDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = tree.Files().ForEach(func(file *object.File) error {
|
||||
if file == nil {
|
||||
return types.Error{Msg: "file pointer is empty"}
|
||||
}
|
||||
|
||||
fmode, err := file.Mode.ToOSFileMode()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch file.Mode {
|
||||
case filemode.Executable:
|
||||
return writeFile(file, dstDir, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fmode)
|
||||
case filemode.Dir:
|
||||
return os.MkdirAll(filepath.Join(dstDir, file.Name), fmode)
|
||||
case filemode.Regular:
|
||||
return writeFile(file, dstDir, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, fmode)
|
||||
default:
|
||||
return fmt.Errorf("unsupported filetype %v for %s", file.Mode, file.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -11,6 +11,7 @@ import (
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
|
||||
packr "github.com/gobuffalo/packr/v2"
|
||||
"github.com/gorilla/handlers"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
@ -101,7 +102,9 @@ func returnError(w http.ResponseWriter, err error) {
|
||||
func main() {
|
||||
r := mux.NewRouter()
|
||||
|
||||
r.Handle("/", http.FileServer(http.Dir("static")))
|
||||
box := packr.New("static", "./static")
|
||||
|
||||
r.Handle("/", http.FileServer(box))
|
||||
r.HandleFunc("/generate", generate)
|
||||
addr := fmt.Sprintf(":%s", os.Getenv("PORT"))
|
||||
if addr == ":" {
|
||||
|
@ -90,7 +90,7 @@
|
||||
|
||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/github.min.css">
|
||||
<style>.ace_editor { height: 80%; }</style>
|
||||
<style>.ace_editor { height: 80%; min-height: 500px; }</style>
|
||||
</head>
|
||||
<body ng-app="pggt">
|
||||
<div class="container-fluid" ng-controller="PggtCtrl">
|
||||
|
46
copy.go
Normal file
46
copy.go
Normal file
@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/go-git/go-git/v5/plumbing/object"
|
||||
)
|
||||
|
||||
func writeFile(file *object.File, dir string, flag int, mode os.FileMode) error {
|
||||
path := filepath.Join(dir, file.Name)
|
||||
|
||||
if err := os.MkdirAll(filepath.Dir(path), os.FileMode(0755)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
w, err := os.OpenFile(path, flag, mode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := w.Close(); err != nil {
|
||||
log.Printf("Err: failed to close file: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
r, err := file.Reader()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := r.Close(); err != nil {
|
||||
log.Printf("Err: failed to close file: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
if _, err = io.Copy(w, r); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -11,7 +11,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/golang/protobuf/protoc-gen-go/descriptor"
|
||||
"github.com/golang/protobuf/protoc-gen-go/plugin"
|
||||
plugin_go "github.com/golang/protobuf/protoc-gen-go/plugin"
|
||||
|
||||
pgghelpers "moul.io/protoc-gen-gotemplate/helpers"
|
||||
)
|
||||
@ -210,10 +210,8 @@ func (e *GenericTemplateBasedEncoder) Files() []*plugin_go.CodeGeneratorResponse
|
||||
case f := <-resultChan:
|
||||
files = append(files, f)
|
||||
case err = <-errChan:
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return files
|
||||
}
|
||||
|
@ -5,8 +5,8 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-kit/kit/endpoint"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb"
|
||||
oldcontext "golang.org/x/net/context"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/session/gen/pb"
|
||||
)
|
||||
|
||||
var _ = endpoint.Chain
|
||||
|
@ -5,8 +5,8 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-kit/kit/endpoint"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb"
|
||||
oldcontext "golang.org/x/net/context"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/sprint/gen/pb"
|
||||
)
|
||||
|
||||
var _ = endpoint.Chain
|
||||
|
@ -5,8 +5,8 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-kit/kit/endpoint"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb"
|
||||
oldcontext "golang.org/x/net/context"
|
||||
pb "moul.io/protoc-gen-gotemplate/examples/go-kit/services/user/gen/pb"
|
||||
)
|
||||
|
||||
var _ = endpoint.Chain
|
||||
|
@ -2,39 +2,25 @@
|
||||
package company
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"moul.io/protoc-gen-gotemplate/examples/import/output/models/article"
|
||||
"moul.io/protoc-gen-gotemplate/examples/import/output/models/common"
|
||||
"moul.io/protoc-gen-gotemplate/examples/import/output/models/common"
|
||||
)
|
||||
|
||||
type Repository interface {
|
||||
GetArticle(getarticle *common.GetArticle ) (*company.Article, []*company.Storage, error)
|
||||
GetArticle(getarticle *common.GetArticle) (*company.Article, []*company.Storage, error)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------------------- Public SDK -----------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// GetArticle : proto: missing extension proto: missing extension
|
||||
func (sdk *Sdk) GetArticle(ctx context.Context,
|
||||
getarticle *article.GetArticle, token, requestID string)(article *article.Article, storages []*article.GetArticleResponse_Storage, err error) {
|
||||
getarticle *article.GetArticle, token, requestID string) (article *article.Article, storages []*article.GetArticleResponse_Storage, err error) {
|
||||
|
||||
out := &pb.GetArticleResponse{}
|
||||
out := &pb.GetArticleResponse{}
|
||||
_ = out
|
||||
|
||||
|
||||
return out.Article, out.Storages, nil
|
||||
return out.Article, out.Storages, nil
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -4,8 +4,8 @@ package bbb
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"moul.io/protoc-gen-gotemplate/examples/single-package-mode/output/aaa"
|
||||
"golang.org/x/net/context"
|
||||
"moul.io/protoc-gen-gotemplate/examples/single-package-mode/output/aaa"
|
||||
)
|
||||
|
||||
type Service struct{}
|
||||
|
@ -2,9 +2,9 @@
|
||||
package foo
|
||||
|
||||
import (
|
||||
"github.com/golang/protobuf/ptypes/timestamp"
|
||||
"github.com/golang/protobuf/ptypes/timestamp"
|
||||
)
|
||||
|
||||
type Repository interface {
|
||||
GetFoo(timestamp *timestamp.Timestamp ) (*timestamp.Timestamp, error)
|
||||
GetFoo(timestamp *timestamp.Timestamp) (*timestamp.Timestamp, error)
|
||||
}
|
40
go.mod
generated
40
go.mod
generated
@ -1,27 +1,21 @@
|
||||
module moul.io/protoc-gen-gotemplate
|
||||
|
||||
require (
|
||||
github.com/Masterminds/semver v1.2.2 // indirect
|
||||
github.com/Masterminds/sprig v2.14.1+incompatible
|
||||
github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047 // indirect
|
||||
github.com/dgrijalva/jwt-go v0.0.0-20160621201154-c9eaceb2896d // indirect
|
||||
github.com/go-kit/kit v0.0.0-20161109000648-9f5c614cd1e7 // indirect
|
||||
github.com/go-logfmt/logfmt v0.3.0 // indirect
|
||||
github.com/go-stack/stack v1.5.3 // indirect
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
|
||||
github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b
|
||||
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f // indirect
|
||||
github.com/gorilla/handlers v0.0.0-20161028133215-e1b2144f2167
|
||||
github.com/gorilla/mux v1.5.0
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.2.2
|
||||
github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335
|
||||
github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab // indirect
|
||||
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169 // indirect
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect
|
||||
github.com/satori/go.uuid v1.1.0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d // indirect
|
||||
golang.org/x/net v0.0.0-20170108160505-da2b4fa28524 // indirect
|
||||
golang.org/x/text v0.0.0-20161216064924-a49bea13b776 // indirect
|
||||
google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48
|
||||
google.golang.org/grpc v1.0.4 // indirect
|
||||
github.com/Masterminds/goutils v1.1.0 // indirect
|
||||
github.com/Masterminds/semver v1.5.0 // indirect
|
||||
github.com/Masterminds/sprig v2.22.0+incompatible
|
||||
github.com/go-git/go-git/v5 v5.2.0
|
||||
github.com/gobuffalo/packr/v2 v2.8.0
|
||||
github.com/golang/protobuf v1.3.2
|
||||
github.com/google/uuid v1.1.1 // indirect
|
||||
github.com/gorilla/handlers v1.4.2
|
||||
github.com/gorilla/mux v1.7.3
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.12.1
|
||||
github.com/huandu/xstrings v1.3.0
|
||||
github.com/mitchellh/copystructure v1.0.0 // indirect
|
||||
github.com/mitchellh/reflectwalk v1.0.1 // indirect
|
||||
google.golang.org/genproto v0.0.0-20200113173426-e1de0a7b01eb
|
||||
gopkg.in/yaml.v2 v2.2.7 // indirect
|
||||
)
|
||||
|
||||
go 1.13
|
||||
|
310
go.sum
generated
310
go.sum
generated
@ -1,37 +1,281 @@
|
||||
github.com/Masterminds/semver v1.2.2 h1:ptelpryog9A0pR4TGFvIAvw2c8SaNrYkFtfrxhSviss=
|
||||
github.com/Masterminds/semver v1.2.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||
github.com/Masterminds/sprig v2.14.1+incompatible h1:rTHERm50Xp1Cbb8x7xBCeDp//jMMqqR44EWw7KwSXUQ=
|
||||
github.com/Masterminds/sprig v2.14.1+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
|
||||
github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047 h1:Bn0iqJ/349f606hR0juIGyheAI6+hyg9XUOLhN9udLo=
|
||||
github.com/aokoli/goutils v0.0.0-20170502144750-e57d01ace047/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
|
||||
github.com/dgrijalva/jwt-go v0.0.0-20160621201154-c9eaceb2896d/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/go-kit/kit v0.0.0-20161109000648-9f5c614cd1e7/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
|
||||
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
|
||||
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
|
||||
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||
github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
|
||||
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
|
||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
|
||||
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
|
||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
|
||||
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
|
||||
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
|
||||
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
||||
github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM=
|
||||
github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
|
||||
github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 h1:PbKy9zOy4aAKrJ5pibIRpVO2BXnK1Tlcg+caKI7Ox5M=
|
||||
github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw=
|
||||
github.com/go-git/go-git/v5 v5.2.0 h1:YPBLG/3UK1we1ohRkncLjaXWLW+HKp5QNM/jTli2JgI=
|
||||
github.com/go-git/go-git/v5 v5.2.0/go.mod h1:kh02eMX+wdqqxgNMEyq8YgwlIOsDOa9homkUq1PoTMs=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-stack/stack v1.5.3/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/gobuffalo/logger v1.0.3 h1:YaXOTHNPCvkqqA7w05A4v0k2tCdpr+sgFlgINbQ6gqc=
|
||||
github.com/gobuffalo/logger v1.0.3/go.mod h1:SoeejUwldiS7ZsyCBphOGURmWdwUFXs0J7TCjEhjKxM=
|
||||
github.com/gobuffalo/packd v1.0.0 h1:6ERZvJHfe24rfFmA9OaoKBdC7+c9sydrytMg8SdFGBM=
|
||||
github.com/gobuffalo/packd v1.0.0/go.mod h1:6VTc4htmJRFB7u1m/4LeMTWjFoYrUiBkU9Fdec9hrhI=
|
||||
github.com/gobuffalo/packr/v2 v2.8.0 h1:IULGd15bQL59ijXLxEvA5wlMxsmx/ZkQv9T282zNVIY=
|
||||
github.com/gobuffalo/packr/v2 v2.8.0/go.mod h1:PDk2k3vGevNE3SwVyVRgQCCXETC9SaONCNSXT1Q8M1g=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b h1:fE/yi9pibxGEc0gSJuEShcsBXE2d5FW3OudsjE9tKzQ=
|
||||
github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f h1:9oNbS1z4rVpbnkHBdPZU4jo9bSmrLpII768arSyMFgk=
|
||||
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
github.com/gorilla/handlers v0.0.0-20161028133215-e1b2144f2167 h1:uANqGlSIT3JwuQVokEBcvc9WAu5+v4cVD5szF5k+iIU=
|
||||
github.com/gorilla/handlers v0.0.0-20161028133215-e1b2144f2167/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||
github.com/gorilla/mux v1.5.0 h1:mq8bRov+5x+pZNR/uAHyUEgovR9gLgYFwDQIeuYi9TM=
|
||||
github.com/gorilla/mux v1.5.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.2.2 h1:oR2ZMoJtQccW6NIJ9yFxRqAr2rkmcNsCaZKT66A9zt4=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.2.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||
github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335 h1:KZOP9q7J/P4eMBibPuVwuloXgd2dTbLAHRPqxw7NXOw=
|
||||
github.com/huandu/xstrings v0.0.0-20151130125119-3959339b3335/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
|
||||
github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab h1:k/Biv+LJL35wkk0Hveko1nj7as4tSHkHdZaNlzn/gcQ=
|
||||
github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
|
||||
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.12.1 h1:zCy2xE9ablevUOrUZc3Dl72Dt+ya2FNAvC2yLYMHzi4=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/huandu/xstrings v1.3.0 h1:gvV6jG9dTgFEncxo+AF7PH6MZXi/vZl25owA/8Dg8Wo=
|
||||
github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
|
||||
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/karrick/godirwalk v1.15.3 h1:0a2pXOgtB16CqIqXTiT7+K9L73f74n/aNQUnH6Ortew=
|
||||
github.com/karrick/godirwalk v1.15.3/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY=
|
||||
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/satori/go.uuid v1.1.0 h1:B9KXyj+GzIpJbV7gmr873NsY6zpbxNy24CBtGrk7jHo=
|
||||
github.com/satori/go.uuid v1.1.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d h1:qjfFh1YMn6m60QTGoG+IlwUMhNlXJbDyCa6EkHM/N2w=
|
||||
golang.org/x/crypto v0.0.0-20170516161655-0fe963104e9d/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/net v0.0.0-20170108160505-da2b4fa28524/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/text v0.0.0-20161216064924-a49bea13b776/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48 h1:xfoW+Di7qQQUnjptcGb4/rpc701e3RvfNmaywfMxQVI=
|
||||
google.golang.org/genproto v0.0.0-20170517234824-bb3573be0c48/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/grpc v1.0.4/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI=
|
||||
github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc=
|
||||
github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY=
|
||||
github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI=
|
||||
github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI=
|
||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ=
|
||||
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
|
||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE=
|
||||
github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w=
|
||||
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
|
||||
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
|
||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191122220453-ac88ee75c92c/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200308013534-11ec41452d41/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||
google.golang.org/genproto v0.0.0-20200113173426-e1de0a7b01eb h1:EsMpWw4S8DM2QYm5idfmmWsv2N57GWi2tx3p96Gpja4=
|
||||
google.golang.org/genproto v0.0.0-20200113173426-e1de0a7b01eb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo=
|
||||
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
@ -85,6 +85,9 @@ var ProtoHelpersFuncMap = template.FuncMap{
|
||||
|
||||
return strings.ToLower(s[:1]) + s[1:]
|
||||
},
|
||||
"upperCase": func(s string) string {
|
||||
return strings.ToUpper(s)
|
||||
},
|
||||
"kebabCase": func(s string) string {
|
||||
return strings.Replace(xstrings.ToSnakeCase(s), "_", "-", -1)
|
||||
},
|
||||
@ -94,15 +97,15 @@ var ProtoHelpersFuncMap = template.FuncMap{
|
||||
"trimstr": func(cutset, s string) string {
|
||||
return strings.Trim(s, cutset)
|
||||
},
|
||||
"index": func(array interface{}, i int32) interface{} {
|
||||
"index": func(array interface{}, i int) interface{} {
|
||||
slice := reflect.ValueOf(array)
|
||||
if slice.Kind() != reflect.Slice {
|
||||
panic("Error in index(): given a non-slice type")
|
||||
}
|
||||
if i < 0 || int(i) >= slice.Len() {
|
||||
if i < 0 || i >= slice.Len() {
|
||||
panic("Error in index(): index out of bounds")
|
||||
}
|
||||
return slice.Index(int(i)).Interface()
|
||||
return slice.Index(i).Interface()
|
||||
},
|
||||
"add": func(a int, b int) int {
|
||||
return a + b
|
||||
@ -146,9 +149,14 @@ var ProtoHelpersFuncMap = template.FuncMap{
|
||||
"leadingComment": leadingComment,
|
||||
"trailingComment": trailingComment,
|
||||
"leadingDetachedComments": leadingDetachedComments,
|
||||
"stringFileOptionsExtension": stringFileOptionsExtension,
|
||||
"stringMessageExtension": stringMessageExtension,
|
||||
"stringFieldExtension": stringFieldExtension,
|
||||
"int64FieldExtension": int64FieldExtension,
|
||||
"int64MessageExtension": int64MessageExtension,
|
||||
"stringMethodOptionsExtension": stringMethodOptionsExtension,
|
||||
"boolMethodOptionsExtension": boolMethodOptionsExtension,
|
||||
"boolMessageExtension": boolMessageExtension,
|
||||
"boolFieldExtension": boolFieldExtension,
|
||||
"isFieldMap": isFieldMap,
|
||||
"fieldMapKeyType": fieldMapKeyType,
|
||||
@ -156,6 +164,12 @@ var ProtoHelpersFuncMap = template.FuncMap{
|
||||
"replaceDict": replaceDict,
|
||||
"setStore": setStore,
|
||||
"getStore": getStore,
|
||||
"goPkg": goPkg,
|
||||
"goPkgLastElement": goPkgLastElement,
|
||||
"cppType": cppType,
|
||||
"cppTypeWithPackage": cppTypeWithPackage,
|
||||
"rustType": rustType,
|
||||
"rustTypeWithPackage": rustTypeWithPackage,
|
||||
}
|
||||
|
||||
var pathMap map[interface{}]*descriptor.SourceCodeInfo_Location
|
||||
@ -282,12 +296,12 @@ func samePath(a, b []int32) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func findSourceInfoLocation(i interface{}) *descriptor.SourceCodeInfo_Location {
|
||||
/*func findSourceInfoLocation(i interface{}) *descriptor.SourceCodeInfo_Location {
|
||||
if pathMap == nil {
|
||||
return nil
|
||||
}
|
||||
return pathMap[i]
|
||||
}
|
||||
}*/
|
||||
|
||||
func leadingComment(i interface{}) string {
|
||||
loc := pathMap[i]
|
||||
@ -342,6 +356,46 @@ func stringMethodOptionsExtension(fieldID int32, f *descriptor.MethodDescriptorP
|
||||
return *str
|
||||
}
|
||||
|
||||
// stringFileOptionsExtension extracts file options of a string type.
|
||||
// To define your own extensions see:
|
||||
// https://developers.google.com/protocol-buffers/docs/proto#customoptions
|
||||
// Typically the fieldID of private extensions should be in the range:
|
||||
// 50000-99999
|
||||
func stringFileOptionsExtension(fieldID int32, f *descriptor.FileDescriptorProto) string {
|
||||
if f == nil {
|
||||
return ""
|
||||
}
|
||||
if f.Options == nil {
|
||||
return ""
|
||||
}
|
||||
var extendedType *descriptor.FileOptions
|
||||
var extensionType *string
|
||||
|
||||
eds := proto.RegisteredExtensions(f.Options)
|
||||
if eds[fieldID] == nil {
|
||||
ed := &proto.ExtensionDesc{
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("bytes,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
}
|
||||
|
||||
ext, err := proto.GetExtension(f.Options, eds[fieldID])
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
str, ok := ext.(*string)
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
|
||||
return *str
|
||||
}
|
||||
|
||||
func stringFieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) string {
|
||||
if f == nil {
|
||||
return ""
|
||||
@ -377,6 +431,111 @@ func stringFieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) str
|
||||
return *str
|
||||
}
|
||||
|
||||
func int64FieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) int64 {
|
||||
if f == nil {
|
||||
return 0
|
||||
}
|
||||
if f.Options == nil {
|
||||
return 0
|
||||
}
|
||||
var extendedType *descriptor.FieldOptions
|
||||
var extensionType *int64
|
||||
|
||||
eds := proto.RegisteredExtensions(f.Options)
|
||||
if eds[fieldID] == nil {
|
||||
ed := &proto.ExtensionDesc{
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("varint,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
}
|
||||
|
||||
ext, err := proto.GetExtension(f.Options, eds[fieldID])
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
i, ok := ext.(*int64)
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
|
||||
return *i
|
||||
}
|
||||
|
||||
func int64MessageExtension(fieldID int32, f *descriptor.DescriptorProto) int64 {
|
||||
if f == nil {
|
||||
return 0
|
||||
}
|
||||
if f.Options == nil {
|
||||
return 0
|
||||
}
|
||||
var extendedType *descriptor.MessageOptions
|
||||
var extensionType *int64
|
||||
|
||||
eds := proto.RegisteredExtensions(f.Options)
|
||||
if eds[fieldID] == nil {
|
||||
ed := &proto.ExtensionDesc{
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("varint,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
}
|
||||
|
||||
ext, err := proto.GetExtension(f.Options, eds[fieldID])
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
i, ok := ext.(*int64)
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
|
||||
return *i
|
||||
}
|
||||
|
||||
func stringMessageExtension(fieldID int32, f *descriptor.DescriptorProto) string {
|
||||
if f == nil {
|
||||
return ""
|
||||
}
|
||||
if f.Options == nil {
|
||||
return ""
|
||||
}
|
||||
var extendedType *descriptor.MessageOptions
|
||||
var extensionType *string
|
||||
|
||||
eds := proto.RegisteredExtensions(f.Options)
|
||||
if eds[fieldID] == nil {
|
||||
ed := &proto.ExtensionDesc{
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("bytes,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
}
|
||||
|
||||
ext, err := proto.GetExtension(f.Options, eds[fieldID])
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
str, ok := ext.(*string)
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
|
||||
return *str
|
||||
}
|
||||
|
||||
func boolMethodOptionsExtension(fieldID int32, f *descriptor.MethodDescriptorProto) bool {
|
||||
if f == nil {
|
||||
return false
|
||||
@ -393,7 +552,7 @@ func boolMethodOptionsExtension(fieldID int32, f *descriptor.MethodDescriptorPro
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("bytes,%d", fieldID),
|
||||
Tag: fmt.Sprintf("varint,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
@ -447,6 +606,41 @@ func boolFieldExtension(fieldID int32, f *descriptor.FieldDescriptorProto) bool
|
||||
return *b
|
||||
}
|
||||
|
||||
func boolMessageExtension(fieldID int32, f *descriptor.DescriptorProto) bool {
|
||||
if f == nil {
|
||||
return false
|
||||
}
|
||||
if f.Options == nil {
|
||||
return false
|
||||
}
|
||||
var extendedType *descriptor.MessageOptions
|
||||
var extensionType *bool
|
||||
|
||||
eds := proto.RegisteredExtensions(f.Options)
|
||||
if eds[fieldID] == nil {
|
||||
ed := &proto.ExtensionDesc{
|
||||
ExtendedType: extendedType,
|
||||
ExtensionType: extensionType,
|
||||
Field: fieldID,
|
||||
Tag: fmt.Sprintf("varint,%d", fieldID),
|
||||
}
|
||||
proto.RegisterExtension(ed)
|
||||
eds = proto.RegisteredExtensions(f.Options)
|
||||
}
|
||||
|
||||
ext, err := proto.GetExtension(f.Options, eds[fieldID])
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
b, ok := ext.(*bool)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
return *b
|
||||
}
|
||||
|
||||
func init() {
|
||||
for k, v := range sprig.TxtFuncMap() {
|
||||
ProtoHelpersFuncMap[k] = v
|
||||
@ -722,6 +916,108 @@ func haskellType(pkg string, f *descriptor.FieldDescriptorProto) string {
|
||||
}
|
||||
}
|
||||
|
||||
// Warning does not handle message embedded like goTypeWithGoPackage does.
|
||||
func rustTypeWithPackage(f *descriptor.FieldDescriptorProto) string {
|
||||
pkg := ""
|
||||
if *f.Type == descriptor.FieldDescriptorProto_TYPE_MESSAGE || *f.Type == descriptor.FieldDescriptorProto_TYPE_ENUM {
|
||||
if isTimestampPackage(*f.TypeName) {
|
||||
pkg = "timestamp"
|
||||
} else {
|
||||
pkg = getPackageTypeName(*f.TypeName)
|
||||
}
|
||||
}
|
||||
return rustType(pkg, f)
|
||||
}
|
||||
|
||||
func rustType(pkg string, f *descriptor.FieldDescriptorProto) string {
|
||||
isRepeat := *f.Label == descriptor.FieldDescriptorProto_LABEL_REPEATED
|
||||
typeName := "???"
|
||||
switch *f.Type {
|
||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
|
||||
typeName = "f64"
|
||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT:
|
||||
typeName = "f32"
|
||||
case descriptor.FieldDescriptorProto_TYPE_INT64:
|
||||
typeName = "i64"
|
||||
case descriptor.FieldDescriptorProto_TYPE_UINT64:
|
||||
typeName = "u64"
|
||||
case descriptor.FieldDescriptorProto_TYPE_INT32:
|
||||
typeName = "i32"
|
||||
case descriptor.FieldDescriptorProto_TYPE_UINT32:
|
||||
typeName = "u32"
|
||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
||||
typeName = "bool"
|
||||
case descriptor.FieldDescriptorProto_TYPE_STRING:
|
||||
typeName = "String"
|
||||
case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
|
||||
if pkg != "" {
|
||||
pkg = pkg + "."
|
||||
}
|
||||
typeName = fmt.Sprintf("%s%s", pkg, shortType(*f.TypeName))
|
||||
case descriptor.FieldDescriptorProto_TYPE_BYTES:
|
||||
typeName = "Vec<u8>"
|
||||
case descriptor.FieldDescriptorProto_TYPE_ENUM:
|
||||
typeName = fmt.Sprintf("%s%s", pkg, shortType(*f.TypeName))
|
||||
default:
|
||||
break
|
||||
}
|
||||
if isRepeat {
|
||||
return "Vec<" + typeName + ">"
|
||||
}
|
||||
return typeName
|
||||
}
|
||||
|
||||
// Warning does not handle message embedded like goTypeWithGoPackage does.
|
||||
func cppTypeWithPackage(f *descriptor.FieldDescriptorProto) string {
|
||||
pkg := ""
|
||||
if *f.Type == descriptor.FieldDescriptorProto_TYPE_MESSAGE || *f.Type == descriptor.FieldDescriptorProto_TYPE_ENUM {
|
||||
if isTimestampPackage(*f.TypeName) {
|
||||
pkg = "timestamp"
|
||||
} else {
|
||||
pkg = getPackageTypeName(*f.TypeName)
|
||||
}
|
||||
}
|
||||
return cppType(pkg, f)
|
||||
}
|
||||
|
||||
func cppType(pkg string, f *descriptor.FieldDescriptorProto) string {
|
||||
isRepeat := *f.Label == descriptor.FieldDescriptorProto_LABEL_REPEATED
|
||||
typeName := "???"
|
||||
switch *f.Type {
|
||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
|
||||
typeName = "double"
|
||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT:
|
||||
typeName = "float"
|
||||
case descriptor.FieldDescriptorProto_TYPE_INT64:
|
||||
typeName = "int64_t"
|
||||
case descriptor.FieldDescriptorProto_TYPE_UINT64:
|
||||
typeName = "uint64_t"
|
||||
case descriptor.FieldDescriptorProto_TYPE_INT32:
|
||||
typeName = "int32_t"
|
||||
case descriptor.FieldDescriptorProto_TYPE_UINT32:
|
||||
typeName = "uint32_t"
|
||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
||||
typeName = "bool"
|
||||
case descriptor.FieldDescriptorProto_TYPE_STRING:
|
||||
typeName = "std::string"
|
||||
case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
|
||||
if pkg != "" {
|
||||
pkg = pkg + "."
|
||||
}
|
||||
typeName = fmt.Sprintf("%s%s", pkg, shortType(*f.TypeName))
|
||||
case descriptor.FieldDescriptorProto_TYPE_BYTES:
|
||||
typeName = "std::vector<uint8_t>"
|
||||
case descriptor.FieldDescriptorProto_TYPE_ENUM:
|
||||
typeName = fmt.Sprintf("%s%s", pkg, shortType(*f.TypeName))
|
||||
default:
|
||||
break
|
||||
}
|
||||
if isRepeat {
|
||||
return "std::vector<" + typeName + ">"
|
||||
}
|
||||
return typeName
|
||||
}
|
||||
|
||||
func goTypeWithEmbedded(pkg string, f *descriptor.FieldDescriptorProto, p *descriptor.FileDescriptorProto) string {
|
||||
if pkg != "" {
|
||||
pkg = pkg + "."
|
||||
@ -1128,3 +1424,13 @@ func replaceDict(src string, dict map[string]interface{}) string {
|
||||
}
|
||||
return src
|
||||
}
|
||||
|
||||
func goPkg(f *descriptor.FileDescriptorProto) string {
|
||||
return f.Options.GetGoPackage()
|
||||
}
|
||||
|
||||
func goPkgLastElement(f *descriptor.FileDescriptorProto) string {
|
||||
pkg := goPkg(f)
|
||||
pkgSplitted := strings.Split(pkg, "/")
|
||||
return pkgSplitted[len(pkgSplitted)-1]
|
||||
}
|
||||
|
49
main.go
49
main.go
@ -3,12 +3,13 @@ package main // import "moul.io/protoc-gen-gotemplate"
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/golang/protobuf/protoc-gen-go/generator"
|
||||
"github.com/golang/protobuf/protoc-gen-go/plugin"
|
||||
plugin_go "github.com/golang/protobuf/protoc-gen-go/plugin"
|
||||
ggdescriptor "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor"
|
||||
|
||||
pgghelpers "moul.io/protoc-gen-gotemplate/helpers"
|
||||
@ -48,14 +49,12 @@ func main() {
|
||||
debug = false
|
||||
all = false
|
||||
singlePackageMode = false
|
||||
fileMode = false
|
||||
templateRepo = ""
|
||||
)
|
||||
if parameter := g.Request.GetParameter(); parameter != "" {
|
||||
for _, param := range strings.Split(parameter, ",") {
|
||||
parts := strings.Split(param, "=")
|
||||
if len(parts) != 2 {
|
||||
log.Printf("Err: invalid parameter: %q", param)
|
||||
continue
|
||||
}
|
||||
switch parts[0] {
|
||||
case "template_dir":
|
||||
templateDir = parts[1]
|
||||
@ -85,6 +84,20 @@ func main() {
|
||||
default:
|
||||
log.Printf("Err: invalid value for debug: %q", parts[1])
|
||||
}
|
||||
case "file-mode":
|
||||
switch strings.ToLower(parts[1]) {
|
||||
case boolTrue, "t":
|
||||
fileMode = true
|
||||
case boolFalse, "f":
|
||||
default:
|
||||
log.Printf("Err: invalid value for file-mode: %q", parts[1])
|
||||
}
|
||||
case "template_repo":
|
||||
_, err := url.Parse(parts[1])
|
||||
if err != nil {
|
||||
log.Printf("Err: invalid value for template_repo: %q", parts[1])
|
||||
}
|
||||
templateRepo = parts[1]
|
||||
default:
|
||||
log.Printf("Err: unknown parameter: %q", param)
|
||||
}
|
||||
@ -109,6 +122,21 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if templateRepo != "" {
|
||||
if templateDir, err = ioutil.TempDir("", "gen-*"); err != nil {
|
||||
g.Error(err, "failed to create tmp dir")
|
||||
}
|
||||
defer func() {
|
||||
if err := os.RemoveAll(templateDir); err != nil {
|
||||
g.Error(err, "failed to remove tmp dir")
|
||||
}
|
||||
}()
|
||||
|
||||
if err = clone(templateRepo, templateDir); err != nil {
|
||||
g.Error(err, "failed to clone repo")
|
||||
}
|
||||
}
|
||||
|
||||
// Generate the encoders
|
||||
for _, file := range g.Request.GetProtoFile() {
|
||||
if all {
|
||||
@ -125,6 +153,17 @@ func main() {
|
||||
continue
|
||||
}
|
||||
|
||||
if fileMode {
|
||||
if s := file.GetService(); s != nil && len(s) > 0 {
|
||||
encoder := NewGenericTemplateBasedEncoder(templateDir, file, debug, destinationDir)
|
||||
for _, tmpl := range encoder.Files() {
|
||||
concatOrAppend(tmpl)
|
||||
}
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
for _, service := range file.GetService() {
|
||||
encoder := NewGenericServiceTemplateBasedEncoder(templateDir, service, file, debug, destinationDir)
|
||||
for _, tmpl := range encoder.Files() {
|
||||
|
270
rules.mk
vendored
Normal file
270
rules.mk
vendored
Normal file
@ -0,0 +1,270 @@
|
||||
# +--------------------------------------------------------------+
|
||||
# | * * * moul.io/rules.mk |
|
||||
# +--------------------------------------------------------------+
|
||||
# | |
|
||||
# | ++ ______________________________________ |
|
||||
# | ++++ / \ |
|
||||
# | ++++ | | |
|
||||
# | ++++++++++ | https://moul.io/rules.mk is a set | |
|
||||
# | +++ | | of common Makefile rules that can | |
|
||||
# | ++ | | be configured from the Makefile | |
|
||||
# | + -== ==| | or with environment variables. | |
|
||||
# | ( <*> <*> | | |
|
||||
# | | | /| Manfred Touron | |
|
||||
# | | _) / | manfred.life | |
|
||||
# | | +++ / \______________________________________/ |
|
||||
# | \ =+ / |
|
||||
# | \ + |
|
||||
# | |\++++++ |
|
||||
# | | ++++ ||// |
|
||||
# | ___| |___ _||/__ __|
|
||||
# | / --- \ \| ||| __ _ ___ __ __/ /|
|
||||
# |/ | | \ \ / / ' \/ _ \/ // / / |
|
||||
# || | | | | | /_/_/_/\___/\_,_/_/ |
|
||||
# +--------------------------------------------------------------+
|
||||
|
||||
all: help
|
||||
|
||||
##
|
||||
## Common helpers
|
||||
##
|
||||
|
||||
rwildcard = $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
|
||||
|
||||
##
|
||||
## rules.mk
|
||||
##
|
||||
ifneq ($(wildcard rules.mk),)
|
||||
.PHONY: rulesmk.bumpdeps
|
||||
rulesmk.bumpdeps:
|
||||
wget -O rules.mk https://raw.githubusercontent.com/moul/rules.mk/master/rules.mk
|
||||
BUMPDEPS_STEPS += rulesmk.bumpdeps
|
||||
endif
|
||||
|
||||
##
|
||||
## Maintainer
|
||||
##
|
||||
|
||||
ifneq ($(wildcard .git/HEAD),)
|
||||
.PHONY: generate.authors
|
||||
generate.authors: AUTHORS
|
||||
AUTHORS: .git/
|
||||
echo "# This file lists all individuals having contributed content to the repository." > AUTHORS
|
||||
echo "# For how it is generated, see 'https://github.com/moul/rules.mk'" >> AUTHORS
|
||||
echo >> AUTHORS
|
||||
git log --format='%aN <%aE>' | LC_ALL=C.UTF-8 sort -uf >> AUTHORS
|
||||
GENERATE_STEPS += generate.authors
|
||||
endif
|
||||
|
||||
##
|
||||
## Golang
|
||||
##
|
||||
|
||||
ifndef GOPKG
|
||||
ifneq ($(wildcard go.mod),)
|
||||
GOPKG = $(shell sed '/module/!d;s/^omdule\ //' go.mod)
|
||||
endif
|
||||
endif
|
||||
ifdef GOPKG
|
||||
GO ?= go
|
||||
GOPATH ?= $(HOME)/go
|
||||
GOLIBS ?= $(shell find . -type f -name "go.mod" | grep -v /vendor/ | sed 's@/[^/]*$$@@' | sort | uniq)
|
||||
GO_INSTALL_OPTS ?=
|
||||
GO_TEST_OPTS ?= -test.timeout=30s
|
||||
|
||||
ifdef GOBINS
|
||||
.PHONY: go.install
|
||||
go.install:
|
||||
@set -e; for dir in $(GOBINS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
$(GO) install $(GO_INSTALL_OPTS) .; \
|
||||
); done
|
||||
INSTALL_STEPS += go.install
|
||||
|
||||
.PHONY: go.release
|
||||
go.release:
|
||||
goreleaser --snapshot --skip-publish --rm-dist
|
||||
@echo -n "Do you want to release? [y/N] " && read ans && \
|
||||
if [ $${ans:-N} = y ]; then set -xe; goreleaser --rm-dist; fi
|
||||
RELEASE_STEPS += go.release
|
||||
endif
|
||||
|
||||
.PHONY: go.unittest coverage.txt
|
||||
go.unittest: coverage.txt
|
||||
coverage.txt:
|
||||
@rm -f /tmp/coverage.txt
|
||||
@touch /tmp/coverage.txt
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
$(GO) test $(GO_TEST_OPTS) -cover -coverprofile=/tmp/profile.out -covermode=atomic -race ./...; \
|
||||
if [ -f /tmp/profile.out ]; then \
|
||||
cat /tmp/profile.out >> /tmp/coverage.txt; \
|
||||
rm -f /tmp/profile.out; \
|
||||
fi); done
|
||||
mv /tmp/coverage.txt .
|
||||
|
||||
.PHONY: go.coverfunc
|
||||
go.coverfunc: coverage.txt
|
||||
go tool cover -func=./coverage.txt | grep -v .pb.go: | grep -v .pb.gw.go:
|
||||
|
||||
.PHONY: go.lint
|
||||
go.lint:
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
golangci-lint run --verbose ./...; \
|
||||
); done
|
||||
|
||||
.PHONY: go.tidy
|
||||
go.tidy:
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
$(GO) mod tidy; \
|
||||
); done
|
||||
|
||||
.PHONY: go.build
|
||||
go.build:
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
$(GO) build ./...; \
|
||||
); done
|
||||
|
||||
.PHONY: go.bump-deps
|
||||
go.bumpdeps:
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
$(GO) get -u ./...; \
|
||||
); done
|
||||
|
||||
.PHONY: go.bump-deps
|
||||
go.fmt:
|
||||
if ! command -v goimports &>/dev/null; then GO111MODULE=off go get golang.org/x/tools/cmd/goimports; fi
|
||||
@set -e; for dir in $(GOLIBS); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
goimports -w . \
|
||||
); done
|
||||
|
||||
BUILD_STEPS += go.build
|
||||
BUMPDEPS_STEPS += go.bumpdeps
|
||||
TIDY_STEPS += go.tidy
|
||||
LINT_STEPS += go.lint
|
||||
UNITTEST_STEPS += go.unittest
|
||||
FMT_STEPS += go.fmt
|
||||
endif
|
||||
|
||||
##
|
||||
## Node
|
||||
##
|
||||
|
||||
ifndef NPM_PACKAGES
|
||||
ifneq ($(wildcard package.json),)
|
||||
NPM_PACKAGES = .
|
||||
endif
|
||||
endif
|
||||
ifdef NPM_PACKAGES
|
||||
.PHONY: npm.publish
|
||||
npm.publish:
|
||||
@echo -n "Do you want to npm publish? [y/N] " && read ans && \
|
||||
@if [ $${ans:-N} = y ]; then \
|
||||
set -e; for dir in $(NPM_PACKAGES); do ( set -xe; \
|
||||
cd $$dir; \
|
||||
npm publish --access=public; \
|
||||
); done; \
|
||||
fi
|
||||
RELEASE_STEPS += npm.publish
|
||||
endif
|
||||
|
||||
##
|
||||
## Docker
|
||||
##
|
||||
|
||||
ifndef DOCKER_IMAGE
|
||||
ifneq ($(wildcard Dockerfile),)
|
||||
DOCKER_IMAGE = $(notdir $(PWD))
|
||||
endif
|
||||
endif
|
||||
ifdef DOCKER_IMAGE
|
||||
ifneq ($(DOCKER_IMAGE),none)
|
||||
.PHONY: docker.build
|
||||
docker.build:
|
||||
docker build \
|
||||
--build-arg VCS_REF=`git rev-parse --short HEAD` \
|
||||
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
|
||||
--build-arg VERSION=`git describe --tags --always` \
|
||||
-t $(DOCKER_IMAGE) .
|
||||
|
||||
BUILD_STEPS += docker.build
|
||||
endif
|
||||
endif
|
||||
|
||||
##
|
||||
## Common
|
||||
##
|
||||
|
||||
TEST_STEPS += $(UNITTEST_STEPS)
|
||||
TEST_STEPS += $(LINT_STEPS)
|
||||
TEST_STEPS += $(TIDY_STEPS)
|
||||
|
||||
ifneq ($(strip $(TEST_STEPS)),)
|
||||
.PHONY: test
|
||||
test: $(PRE_TEST_STEPS) $(TEST_STEPS)
|
||||
endif
|
||||
|
||||
ifdef INSTALL_STEPS
|
||||
.PHONY: install
|
||||
install: $(PRE_INSTALL_STEPS) $(INSTALL_STEPS)
|
||||
endif
|
||||
|
||||
ifdef UNITTEST_STEPS
|
||||
.PHONY: unittest
|
||||
unittest: $(PRE_UNITTEST_STEPS) $(UNITTEST_STEPS)
|
||||
endif
|
||||
|
||||
ifdef LINT_STEPS
|
||||
.PHONY: lint
|
||||
lint: $(PRE_LINT_STEPS) $(FMT_STEPS) $(LINT_STEPS)
|
||||
endif
|
||||
|
||||
ifdef TIDY_STEPS
|
||||
.PHONY: tidy
|
||||
tidy: $(PRE_TIDY_STEPS) $(TIDY_STEPS)
|
||||
endif
|
||||
|
||||
ifdef BUILD_STEPS
|
||||
.PHONY: build
|
||||
build: $(PRE_BUILD_STEPS) $(BUILD_STEPS)
|
||||
endif
|
||||
|
||||
ifdef RELEASE_STEPS
|
||||
.PHONY: release
|
||||
release: $(PRE_RELEASE_STEPS) $(RELEASE_STEPS)
|
||||
endif
|
||||
|
||||
ifdef BUMPDEPS_STEPS
|
||||
.PHONY: bumpdeps
|
||||
bumpdeps: $(PRE_BUMDEPS_STEPS) $(BUMPDEPS_STEPS)
|
||||
endif
|
||||
|
||||
ifdef FMT_STEPS
|
||||
.PHONY: fmt
|
||||
fmt: $(PRE_FMT_STEPS) $(FMT_STEPS)
|
||||
endif
|
||||
|
||||
ifdef GENERATE_STEPS
|
||||
.PHONY: generate
|
||||
generate: $(PRE_GENERATE_STEPS) $(GENERATE_STEPS)
|
||||
endif
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "General commands:"
|
||||
@[ "$(BUILD_STEPS)" != "" ] && echo " build" || true
|
||||
@[ "$(BUMPDEPS_STEPS)" != "" ] && echo " bumpdeps" || true
|
||||
@[ "$(FMT_STEPS)" != "" ] && echo " fmt" || true
|
||||
@[ "$(GENERATE_STEPS)" != "" ] && echo " generate" || true
|
||||
@[ "$(INSTALL_STEPS)" != "" ] && echo " install" || true
|
||||
@[ "$(LINT_STEPS)" != "" ] && echo " lint" || true
|
||||
@[ "$(RELEASE_STEPS)" != "" ] && echo " release" || true
|
||||
@[ "$(TEST_STEPS)" != "" ] && echo " test" || true
|
||||
@[ "$(TIDY_STEPS)" != "" ] && echo " tidy" || true
|
||||
@[ "$(UNITTEST_STEPS)" != "" ] && echo " unittest" || true
|
||||
@# FIXME: list other commands
|
Loading…
x
Reference in New Issue
Block a user