diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..1899438 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,24 @@ +--- +name: Bug report +about: For reporting bugs in go-micro +title: "[BUG]" +labels: '' +assignees: '' + +--- + +**Describe the bug** + +1. What are you trying to do? +2. What did you expect to happen? +3. What happens instead? + +**How to reproduce the bug:** + +If possible, please include a minimal code snippet here. + +**Environment:** +Go Version: please paste `go version` output here +``` +please paste `go env` output here +``` diff --git a/.github/ISSUE_TEMPLATE/feature-request---enhancement.md b/.github/ISSUE_TEMPLATE/feature-request---enhancement.md new file mode 100644 index 0000000..459817f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request---enhancement.md @@ -0,0 +1,17 @@ +--- +name: Feature request / Enhancement +about: If you have a need not served by go-micro +title: "[FEATURE]" +labels: '' +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. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..1daf48b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,14 @@ +--- +name: Question +about: Ask a question about go-micro +title: '' +labels: '' +assignees: '' + +--- + +Before asking, please check if your question has already been answered: + +1. Check the documentation - https://micro.mu/docs/ +2. Check the examples and plugins - https://github.com/micro/examples & https://github.com/micro/go-plugins +3. Search existing issues diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..cba3cbc --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +## Pull Request template +Please, go through these steps before clicking submit on this PR. + +1. Give a descriptive title to your PR. +2. Provide a description of your changes. +3. Make sure you have some relevant tests. +4. Put `closes #XXXX` in your comment to auto-close the issue that your PR fixes (if applicable). + +**PLEASE REMOVE THIS TEMPLATE BEFORE SUBMITTING** diff --git a/.github/generate.sh b/.github/generate.sh new file mode 100755 index 0000000..70a3a57 --- /dev/null +++ b/.github/generate.sh @@ -0,0 +1,15 @@ +#!/bin/bash -e + +find . -type f -name '*.pb.*.go' -o -name '*.pb.go' -a ! -name 'message.pb.go' -delete +PROTOS=$(find . -type f -name '*.proto' | grep -v proto/google/api) + +mkdir -p proto/google/api +curl -s -o proto/google/api/annotations.proto -L https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/annotations.proto +curl -s -o proto/google/api/http.proto -L https://raw.githubusercontent.com/googleapis/googleapis/master/google/api/http.proto + +for PROTO in $PROTOS; do + echo $PROTO + protoc -I./proto -I. -I$(dirname $PROTO) --go-grpc_out=paths=source_relative:. --go_out=paths=source_relative:. --micro_out=paths=source_relative:. $PROTO +done + +rm -r proto diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 0000000..c597bf3 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,20 @@ +{ + "extends": [ + "config:base" + ], + "postUpdateOptions": ["gomodTidy"], + "packageRules": [ + { + "matchUpdateTypes": ["minor", "patch", "pin", "digest"], + "automerge": true + }, + { + "groupName": "all deps", + "separateMajorMinor": true, + "groupSlug": "all", + "packagePatterns": [ + "*" + ] + } + ] +} diff --git a/.github/stale.sh b/.github/stale.sh new file mode 100755 index 0000000..8a345c4 --- /dev/null +++ b/.github/stale.sh @@ -0,0 +1,13 @@ +#!/bin/bash -ex + +export PATH=$PATH:$(pwd)/bin +export GO111MODULE=on +export GOBIN=$(pwd)/bin + +#go get github.com/rvflash/goup@v0.4.1 + +#goup -v ./... +#go get github.com/psampaz/go-mod-outdated@v0.6.0 +go list -u -m -mod=mod -json all | go-mod-outdated -update -direct -ci || true + +#go list -u -m -json all | go-mod-outdated -update diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4caf631 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,62 @@ +name: build +on: + push: + branches: + - master +jobs: + test: + name: test + runs-on: ubuntu-latest + steps: + - name: setup + uses: actions/setup-go@v2 + with: + go-version: 1.16 + - name: cache + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go- + - name: sdk checkout + uses: actions/checkout@v2 + - name: sdk deps + run: go get -v -t -d ./... + - name: sdk test + env: + INTEGRATION_TESTS: yes + run: go test -mod readonly -v ./... + - name: tests checkout + uses: actions/checkout@v2 + with: + repository: unistack-org/micro-tests + ref: refs/heads/master + path: micro-tests + fetch-depth: 1 + - name: tests deps + run: | + cd micro-tests + go mod edit -replace="github.com/unistack-org/micro/v3=../" + go get -v -t -d ./... + - name: tests test + env: + INTEGRATION_TESTS: yes + run: cd micro-tests && go test -mod readonly -v ./... + lint: + name: lint + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + - name: lint + uses: golangci/golangci-lint-action@v2 + continue-on-error: true + with: + # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. + version: v1.30 + # Optional: working directory, useful for monorepos + # working-directory: somedir + # Optional: golangci-lint command line arguments. + # args: --issues-exit-code=0 + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..25307f5 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,62 @@ +name: prbuild +on: + pull_request: + branches: + - master +jobs: + test: + name: test + runs-on: ubuntu-latest + steps: + - name: setup + uses: actions/setup-go@v2 + with: + go-version: 1.16 + - name: cache + uses: actions/cache@v2 + with: + path: ~/go/pkg + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go- + - name: sdk checkout + uses: actions/checkout@v2 + - name: sdk deps + run: go get -v -t -d ./... + - name: sdk test + env: + INTEGRATION_TESTS: yes + run: go test -mod readonly -v ./... + - name: tests checkout + uses: actions/checkout@v2 + with: + repository: unistack-org/micro-tests + ref: refs/heads/master + path: micro-tests + fetch-depth: 1 + - name: tests deps + run: | + cd micro-tests + go mod edit -replace="github.com/unistack-org/micro/v3=../" + go get -v -t -d ./... + - name: tests test + env: + INTEGRATION_TESTS: yes + run: cd micro-tests && go test -mod readonly -v ./... + lint: + name: lint + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + - name: lint + uses: golangci/golangci-lint-action@v2 + continue-on-error: true + with: + # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. + version: v1.30 + # Optional: working directory, useful for monorepos + # working-directory: somedir + # Optional: golangci-lint command line arguments. + # args: --issues-exit-code=0 + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true diff --git a/.synced b/.synced new file mode 100644 index 0000000..34fdefe --- /dev/null +++ b/.synced @@ -0,0 +1 @@ +0a6e451539fd046bbfea625b05ef2e3006c69214 \ No newline at end of file diff --git a/dns.go b/dns.go index 005d429..51bc479 100644 --- a/dns.go +++ b/dns.go @@ -5,18 +5,12 @@ import ( "net" "strconv" - "github.com/micro/go-micro/v3/router" + "github.com/unistack-org/micro/v3/router" ) // NewRouter returns an initialized dns router func NewRouter(opts ...router.Option) router.Router { - options := router.DefaultOptions() - for _, o := range opts { - o(&options) - } - if len(options.Network) == 0 { - options.Network = "micro" - } + options := router.NewOptions(opts...) return &dns{options} } @@ -43,9 +37,10 @@ func (d *dns) Close() error { return nil } -func (d *dns) Lookup(service string, opts ...router.LookupOption) ([]router.Route, error) { +func (d *dns) Lookup(opts ...router.QueryOption) ([]router.Route, error) { + options := router.NewQuery(opts...) // check to see if we have the port provided in the service, e.g. go-micro-srv-foo:8000 - host, port, err := net.SplitHostPort(service) + host, port, err := net.SplitHostPort(options.Service) if err == nil { // lookup the service using A records ips, err := net.LookupHost(host) @@ -59,7 +54,7 @@ func (d *dns) Lookup(service string, opts ...router.LookupOption) ([]router.Rout result := make([]router.Route, len(ips)) for i, ip := range ips { result[i] = router.Route{ - Service: service, + Service: options.Service, Address: fmt.Sprintf("%s:%d", ip, uint16(p)), } } @@ -68,7 +63,7 @@ func (d *dns) Lookup(service string, opts ...router.LookupOption) ([]router.Rout // we didn't get the port so we'll lookup the service using SRV records. If we can't lookup the // service using the SRV record, we return the error. - _, nodes, err := net.LookupSRV(service, "tcp", d.options.Network) + _, nodes, err := net.LookupSRV(options.Service, "tcp", d.options.Network) if err != nil { return nil, err } @@ -77,7 +72,7 @@ func (d *dns) Lookup(service string, opts ...router.LookupOption) ([]router.Rout result := make([]router.Route, len(nodes)) for i, n := range nodes { result[i] = router.Route{ - Service: service, + Service: options.Service, Address: fmt.Sprintf("%s:%d", n.Target, n.Port), Network: d.options.Network, } @@ -89,6 +84,10 @@ func (d *dns) Watch(opts ...router.WatchOption) (router.Watcher, error) { return nil, nil } +func (d *dns) Name() string { + return d.options.Name +} + func (d *dns) String() string { return "dns" } diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b985aa3 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/unistack-org/micro-router-dns + +go 1.16 + +require github.com/unistack-org/micro/v3 v3.2.14 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..329bd6e --- /dev/null +++ b/go.sum @@ -0,0 +1,25 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/heimdalr/dag v1.0.1/go.mod h1:t+ZkR+sjKL4xhlE1B9rwpvwfo+x+2R0363efS+Oghns= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/silas/dag v0.0.0-20210121180416-41cf55125c34/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= +github.com/unistack-org/micro/v3 v3.2.14 h1:BD7JR2W0WlJvJgHN3uPWrE/vNAGyxhIQrIODeDCfoSk= +github.com/unistack-org/micro/v3 v3.2.14/go.mod h1:3j13mSd/rILNjyP0tEVtDxyDkJBtnHUXShNCuPHkC5A= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=