1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

Update dependencies

This commit is contained in:
Chris Cummer 2019-09-21 03:57:56 -07:00
parent 1bfd26a55c
commit 93ef3ea429
49 changed files with 25702 additions and 216 deletions

46
go.mod
View File

@ -7,7 +7,6 @@ replace github.com/yfronto/newrelic => ./vendor/github.com/yfronto/newrelic
require ( require (
cloud.google.com/go v0.45.1 // indirect cloud.google.com/go v0.45.1 // indirect
code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c
github.com/BurntSushi/xgb v0.0.0-20160522221800-27f122750802 // indirect
github.com/Microsoft/go-winio v0.4.14 // indirect github.com/Microsoft/go-winio v0.4.14 // indirect
github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6 github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6
github.com/StackExchange/wmi v0.0.0-20190523213609-cbe66965904d // indirect github.com/StackExchange/wmi v0.0.0-20190523213609-cbe66965904d // indirect
@ -17,96 +16,57 @@ require (
github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d
github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d
github.com/cenkalti/backoff v2.2.0+incompatible // indirect github.com/cenkalti/backoff v2.2.0+incompatible // indirect
github.com/coreos/bbolt v1.3.3 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/coreos/etcd v3.3.15+incompatible // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect
github.com/cosiner/argv v0.0.1 // indirect
github.com/docker/distribution v2.7.1+incompatible // indirect github.com/docker/distribution v2.7.1+incompatible // indirect
github.com/docker/docker v1.13.1 github.com/docker/docker v1.13.1
github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // indirect github.com/docker/go-units v0.4.0 // indirect
github.com/dustin/go-humanize v1.0.0 github.com/dustin/go-humanize v1.0.0
github.com/gdamore/tcell v1.2.0 github.com/gdamore/tcell v1.2.0
github.com/go-delve/delve v1.3.0 // indirect
github.com/go-kit/kit v0.9.0 // indirect
github.com/go-ole/go-ole v1.2.4 // indirect github.com/go-ole/go-ole v1.2.4 // indirect
github.com/godbus/dbus v5.0.1+incompatible // indirect github.com/godbus/dbus v5.0.1+incompatible // indirect
github.com/gogo/protobuf v1.3.0 // indirect github.com/gogo/protobuf v1.3.0 // indirect
github.com/google/btree v1.0.0 // indirect
github.com/google/go-cmp v0.3.1 // indirect github.com/google/go-cmp v0.3.1 // indirect
github.com/google/go-github/v26 v26.0.9 github.com/google/go-github/v26 v26.0.9
github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70 // indirect
github.com/gorilla/websocket v1.4.1 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.11.1 // indirect
github.com/hashicorp/go-cleanhttp v0.5.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.1 // indirect
github.com/hashicorp/golang-lru v0.5.3 // indirect
github.com/hekmon/cunits v2.0.1+incompatible // indirect github.com/hekmon/cunits v2.0.1+incompatible // indirect
github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd
github.com/jessevdk/go-flags v1.4.0 github.com/jessevdk/go-flags v1.4.0
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/json-iterator/go v1.1.7 // indirect
github.com/kr/pty v1.1.8 // indirect
github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946 github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946
github.com/magiconair/properties v1.8.1 // indirect
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/mattn/go-isatty v0.0.9 // indirect github.com/mattn/go-isatty v0.0.9 // indirect
github.com/microsoft/azure-devops-go-api v0.0.0-20190912142452-3207b4a469d3 // indirect
github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3 github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3
github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4 github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4
github.com/onsi/ginkgo v1.10.1 // indirect github.com/onsi/ginkgo v1.10.1 // indirect
github.com/onsi/gomega v1.7.0 // indirect github.com/onsi/gomega v1.7.0 // indirect
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
github.com/pelletier/go-toml v1.4.0 // indirect
github.com/peterh/liner v1.1.0 // indirect
github.com/pkg/errors v0.8.1 github.com/pkg/errors v0.8.1
github.com/pkg/profile v1.3.0 github.com/pkg/profile v1.3.0
github.com/prometheus/client_golang v1.1.0 // indirect
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
github.com/prometheus/procfs v0.0.4 // indirect
github.com/radovskyb/watcher v1.0.6 github.com/radovskyb/watcher v1.0.6
github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341 github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341
github.com/rivo/uniseg v0.1.0 // indirect github.com/rivo/uniseg v0.1.0 // indirect
github.com/rogpeppe/fastuuid v1.2.0 // indirect
github.com/rogpeppe/go-internal v1.3.1 // indirect
github.com/russross/blackfriday v2.0.0+incompatible // indirect
github.com/shirou/gopsutil v2.18.12+incompatible github.com/shirou/gopsutil v2.18.12+incompatible
github.com/sirupsen/logrus v1.4.2 // indirect
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/cobra v0.0.5 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/viper v1.4.0 // indirect
github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0 github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0
github.com/stretchr/objx v0.2.0 // indirect
github.com/stretchr/testify v1.4.0 github.com/stretchr/testify v1.4.0
github.com/ugorji/go v1.1.7 // indirect
github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76 github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76
github.com/xanzy/go-gitlab v0.18.0 github.com/xanzy/go-gitlab v0.18.0
github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9 github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9
github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5 github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5
github.com/zorkian/go-datadog-api v2.21.0+incompatible github.com/zorkian/go-datadog-api v2.21.0+incompatible
go.etcd.io/bbolt v1.3.3 // indirect
go.opencensus.io v0.22.1 // indirect go.opencensus.io v0.22.1 // indirect
go.starlark.net v0.0.0-20190820173200-988906f77f65 // indirect
golang.org/x/arch v0.0.0-20190815191158-8a70ba74b3a1 // indirect
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 // indirect golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 // indirect
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979 // indirect
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39 // indirect
golang.org/x/lint v0.0.0-20190511005446-959b441ac422 // indirect
golang.org/x/mobile v0.0.0-20190830201351-c6da95954960 // indirect
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect
golang.org/x/oauth2 v0.0.0-20190614102709-0f29369cfe45 golang.org/x/oauth2 v0.0.0-20190614102709-0f29369cfe45
golang.org/x/sync v0.0.0-20190427212804-112230192c58 // indirect
golang.org/x/sys v0.0.0-20190902133755-9109b7679e13 // indirect golang.org/x/sys v0.0.0-20190902133755-9109b7679e13 // indirect
golang.org/x/time v0.0.0-20190513212739-9d24e82272b4 // indirect golang.org/x/time v0.0.0-20190513212739-9d24e82272b4 // indirect
golang.org/x/tools v0.0.0-20190903025054-afe7f8212f0d // indirect
google.golang.org/api v0.9.0 google.golang.org/api v0.9.0
google.golang.org/appengine v1.6.2 // indirect google.golang.org/appengine v1.6.2 // indirect
google.golang.org/grpc v1.23.0 // indirect google.golang.org/grpc v1.23.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5 // indirect gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5 // indirect
gopkg.in/yaml.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.2
honnef.co/go/tools v0.0.1-2019.2.3 // indirect
k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3 k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3
k8s.io/client-go v12.0.0+incompatible k8s.io/client-go v12.0.0+incompatible
) )

190
go.sum
View File

@ -13,12 +13,11 @@ github.com/Azure/go-autorest v11.1.2+incompatible h1:viZ3tV5l4gE2Sw0xrasFHytCGtz
github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/BurntSushi/xgb v0.0.0-20160522221800-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6 h1:JucouG/P7B+i18/RJbFpbqJyaserYaQzFMlfK/eIEY8= github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6 h1:JucouG/P7B+i18/RJbFpbqJyaserYaQzFMlfK/eIEY8=
github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6/go.mod h1:6hH58nzwYc9mw+TPyM1anW0ivbI0ti4lYc+ZBaKmWts= github.com/PagerDuty/go-pagerduty v0.0.0-20190503230806-cf1437c7c8d6/go.mod h1:6hH58nzwYc9mw+TPyM1anW0ivbI0ti4lYc+ZBaKmWts=
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
@ -29,49 +28,28 @@ github.com/StackExchange/wmi v0.0.0-20190523213609-cbe66965904d h1:VWP4o43LuzNby
github.com/StackExchange/wmi v0.0.0-20190523213609-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20190523213609-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/adlio/trello v1.0.0 h1:7Mp6DnNXBHBAdhfcutftFDnX7K/G9yEtScAEplJzu+0= github.com/adlio/trello v1.0.0 h1:7Mp6DnNXBHBAdhfcutftFDnX7K/G9yEtScAEplJzu+0=
github.com/adlio/trello v1.0.0/go.mod h1:l2068AhUuUuQ9Vsb95ECMueHThYyAj4e85lWPmr2/LE= github.com/adlio/trello v1.0.0/go.mod h1:l2068AhUuUuQ9Vsb95ECMueHThYyAj4e85lWPmr2/LE=
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
github.com/alecthomas/chroma v0.6.3 h1:8H1D0yddf0mvgvO4JDBKnzLd9ERmzzAijBxnZXGV/FA= github.com/alecthomas/chroma v0.6.3 h1:8H1D0yddf0mvgvO4JDBKnzLd9ERmzzAijBxnZXGV/FA=
github.com/alecthomas/chroma v0.6.3/go.mod h1:quT2EpvJNqkuPi6DmBHB+E33FXBgBBPzyH5++Dn1LPc= github.com/alecthomas/chroma v0.6.3/go.mod h1:quT2EpvJNqkuPi6DmBHB+E33FXBgBBPzyH5++Dn1LPc=
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo=
github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0=
github.com/alecthomas/kong v0.1.15/go.mod h1:0m2VYms8rH0qbCqVB2gvGHk74bqLIq0HXjCs5bNbNQU= github.com/alecthomas/kong v0.1.15/go.mod h1:0m2VYms8rH0qbCqVB2gvGHk74bqLIq0HXjCs5bNbNQU=
github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E=
github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
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/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d h1:VqtwQ/1Q39dznaTGQXmPzwdTbqKd2jdlfNgawTVM6YU= github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d h1:VqtwQ/1Q39dznaTGQXmPzwdTbqKd2jdlfNgawTVM6YU=
github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk= github.com/andygrunwald/go-gerrit v0.0.0-20190625080919-64931d233c2d/go.mod h1:0iuRQp6WJ44ts+iihy5E/WlPqfg5RNeQxOmzRkxCdtk=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
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/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d h1:28xWzPQ9bdGxKAAwQpZipZZ9Xz8kQcgMPF9cZnvMeuI= github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d h1:28xWzPQ9bdGxKAAwQpZipZZ9Xz8kQcgMPF9cZnvMeuI=
github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d/go.mod h1:8g1Bgq9PbPpXIA3sdlWmWf2JpiWGJee/O4Q+ddYO6+k= github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d/go.mod h1:8g1Bgq9PbPpXIA3sdlWmWf2JpiWGJee/O4Q+ddYO6+k=
github.com/cenkalti/backoff v2.2.0+incompatible h1:8qVbEY6GLhoLlLi1Ac2ZkVhedNwlhQXc39qivKp9+GI= github.com/cenkalti/backoff v2.2.0+incompatible h1:8qVbEY6GLhoLlLi1Ac2ZkVhedNwlhQXc39qivKp9+GI=
github.com/cenkalti/backoff v2.2.0+incompatible/go.mod h1:b6Nc7NRH5C4aCISLry0tLnTjcuTEvoiqcWDdsU0sOGM= github.com/cenkalti/backoff v2.2.0+incompatible/go.mod h1:b6Nc7NRH5C4aCISLry0tLnTjcuTEvoiqcWDdsU0sOGM=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.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/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cosiner/argv v0.0.0-20170225145430-13bacc38a0a5/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ=
github.com/cosiner/argv v0.0.1/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ=
github.com/cpuguy83/go-md2man v1.0.8/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
github.com/darkSasori/todoist v0.0.0-20180703032645-ec6b38b374ab h1:T9EEtA6FSJMVypkNlKjrRo04u1j5Tk+gghymflyivDw=
github.com/darkSasori/todoist v0.0.0-20180703032645-ec6b38b374ab/go.mod h1:dD/81kphWGY78UVdEu2sqkrUMYfvtdKAMaACFYHGkfU=
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@ -80,7 +58,6 @@ github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda h1:NyywMz59neOoVR
github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 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/dlclark/regexp2 v1.1.6 h1:CqB4MjHw0MFCDj+PHHjiESmHX+N7t0tJzKvC6M97BRg= github.com/dlclark/regexp2 v1.1.6 h1:CqB4MjHw0MFCDj+PHHjiESmHX+N7t0tJzKvC6M97BRg=
github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
@ -98,6 +75,7 @@ github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkg
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
@ -105,30 +83,21 @@ github.com/gdamore/tcell v1.1.2/go.mod h1:h3kq4HO9l2On+V9ed8w8ewqQEmGCSSHOgQ+2h8
github.com/gdamore/tcell v1.2.0 h1:ikixzsxc8K8o3V2/CEmyoEW8mJZaNYQQ3NP3VIQdUe4= github.com/gdamore/tcell v1.2.0 h1:ikixzsxc8K8o3V2/CEmyoEW8mJZaNYQQ3NP3VIQdUe4=
github.com/gdamore/tcell v1.2.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/gdamore/tcell v1.2.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-delve/delve v1.3.0/go.mod h1:LLw6qJfIsRK9WcwV2IRRqsdlgrqzOeuGrQOCOIhDpt8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus v5.0.1+incompatible h1:fsDsnr/6MFSIm3kl6JJpq5pH+vO/rA5jUunalLnzSc8= github.com/godbus/dbus v5.0.1+incompatible h1:fsDsnr/6MFSIm3kl6JJpq5pH+vO/rA5jUunalLnzSc8=
github.com/godbus/dbus v5.0.1+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v5.0.1+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
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/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE= github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE=
github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@ -144,6 +113,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-github/v26 v26.0.9 h1:RDv6xjhoFvGuAeYJwsIOC69nCfRna8cdoGw9hvX/Pc0= github.com/google/go-github/v26 v26.0.9 h1:RDv6xjhoFvGuAeYJwsIOC69nCfRna8cdoGw9hvX/Pc0=
github.com/google/go-github/v26 v26.0.9/go.mod h1:v6/FmX9au22j4CtYxnMhJJkP+JfOQDXALk7hI+MPDNM= github.com/google/go-github/v26 v26.0.9/go.mod h1:v6/FmX9au22j4CtYxnMhJJkP+JfOQDXALk7hI+MPDNM=
@ -156,8 +126,6 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190723021845-34ac40c74b70/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= 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/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@ -169,71 +137,48 @@ github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8 h1:L9JPKrtsHMQ4VCRQfHvbbHBfB2Urn8xf6QZeXZ+OrN4= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8 h1:L9JPKrtsHMQ4VCRQfHvbbHBfB2Urn8xf6QZeXZ+OrN4=
github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
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.11.1/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hekmon/cunits v2.0.1+incompatible h1:yy/Wq5YvNtrweqfeRjvrvMdBMH6axBrlL8t7arLlm5A= github.com/hekmon/cunits v2.0.1+incompatible h1:yy/Wq5YvNtrweqfeRjvrvMdBMH6axBrlL8t7arLlm5A=
github.com/hekmon/cunits v2.0.1+incompatible/go.mod h1:0QdfIGGkucx1VgStMNiHOYn84t/Ru65b+D3z1QszVPc= github.com/hekmon/cunits v2.0.1+incompatible/go.mod h1:0QdfIGGkucx1VgStMNiHOYn84t/Ru65b+D3z1QszVPc=
github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd h1:bZZYKxyrUV8EsKB5AjsPsJiWE7n0FDURijlSzYZVqAM= github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd h1:bZZYKxyrUV8EsKB5AjsPsJiWE7n0FDURijlSzYZVqAM=
github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd/go.mod h1:b1R6hlzo+gEUNWGh53mw9mPWyYyODdZu/qlVqT+W+PU= github.com/hekmon/transmissionrpc v0.0.0-20190525133028-1d589625bacd/go.mod h1:b1R6hlzo+gEUNWGh53mw9mPWyYyODdZu/qlVqT+W+PU=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 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.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= 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.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946 h1:z+WaKrgu3kCpcdnbK9YG+JThpOCd1nU5jO5ToVmSlR4= github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946 h1:z+WaKrgu3kCpcdnbK9YG+JThpOCd1nU5jO5ToVmSlR4=
github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/logrusorgru/aurora v0.0.0-20190428105938-cea283e61946/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/lucasb-eyer/go-colorful v1.0.2 h1:mCMFu6PgSozg9tDNMMK3g18oJBX7oYGrC09mS6CXfO4= github.com/lucasb-eyer/go-colorful v1.0.2 h1:mCMFu6PgSozg9tDNMMK3g18oJBX7oYGrC09mS6CXfO4=
github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/microsoft/azure-devops-go-api v0.0.0-20190912142452-3207b4a469d3 h1:FhI3QJOcd1CaXz2+DeFHUNEsS47+gxDERzVhexlTGvg=
github.com/microsoft/azure-devops-go-api v0.0.0-20190912142452-3207b4a469d3/go.mod h1:HfrxIH2ObkhL6NepJKAuEwUYY8kNvspOWDp6HDRIRQs=
github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3 h1:Q42uNxLRytr5ynbRkqspq37TjcfnuXwKmrS9APJv/Bw= github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3 h1:Q42uNxLRytr5ynbRkqspq37TjcfnuXwKmrS9APJv/Bw=
github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY=
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/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf h1:poo3e5STwUVGyyUX0e3fHQUwT1tV8IYEFUUpYd/7LuA= github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf h1:poo3e5STwUVGyyUX0e3fHQUwT1tV8IYEFUUpYd/7LuA=
github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf/go.mod h1:tkVcyzS3qVMlQrQxJoEH1hkTiuo9a8emDzkMi7TZBu0= github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf/go.mod h1:tkVcyzS3qVMlQrQxJoEH1hkTiuo9a8emDzkMi7TZBu0=
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI= github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI=
@ -246,53 +191,29 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4 h1:JnVsYEQzhEcOspy6ngIYNF2u0h2mjkXZptzX0IzZQ4g= github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4 h1:JnVsYEQzhEcOspy6ngIYNF2u0h2mjkXZptzX0IzZQ4g=
github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4/go.mod h1:RL5+WRxWTAXqqCi9i+eZlHrUtO7AQujUqWi+xMohmc4= github.com/olebedev/config v0.0.0-20190528211619-364964f3a8e4/go.mod h1:RL5+WRxWTAXqqCi9i+eZlHrUtO7AQujUqWi+xMohmc4=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/peterh/liner v0.0.0-20170317030525-88609521dc4b/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
github.com/peterh/liner v1.1.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0=
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 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v0.0.0-20170413231811-06b906832ed0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/profile v1.3.0 h1:OQIvuDgm00gWVWGTf4m4mCt6W1/0YqU7Ntg0mySWgaI= github.com/pkg/profile v1.3.0 h1:OQIvuDgm00gWVWGTf4m4mCt6W1/0YqU7Ntg0mySWgaI=
github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 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/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_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
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/client_model v0.0.0-20190812154241-14fe0d1b01d4/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/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
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/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.4/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/radovskyb/watcher v1.0.6 h1:8WIQ9UxEYMZjem1OwU7dVH94DXXk9mAIE1i8eqHD+IY= github.com/radovskyb/watcher v1.0.6 h1:8WIQ9UxEYMZjem1OwU7dVH94DXXk9mAIE1i8eqHD+IY=
github.com/radovskyb/watcher v1.0.6/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= github.com/radovskyb/watcher v1.0.6/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg=
github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341 h1:d2Z5U4d3fenPRFFweaMCogbXiRywM5kgYtu20/hol3M= github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341 h1:d2Z5U4d3fenPRFFweaMCogbXiRywM5kgYtu20/hol3M=
@ -300,106 +221,52 @@ github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341/go.mod h1:+rKjP5+h9HMwW
github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/russross/blackfriday v0.0.0-20180428102519-11635eb403ff/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM=
github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/sirupsen/logrus v0.0.0-20180523074243-ea8897e79973/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
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/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0 h1:WWyBZL7bRdl7Do39EvkJmBFXT11uXLACy0cJHHOZ7IE= github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0 h1:WWyBZL7bRdl7Do39EvkJmBFXT11uXLACy0cJHHOZ7IE=
github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0/go.mod h1:DjuRbAVIoxD4Lv7aE12Km2XYYYKrtXXNbpivYwXv2HE= github.com/sticreations/spotigopher v0.0.0-20181009182052-98632f6f94b0/go.mod h1:DjuRbAVIoxD4Lv7aE12Km2XYYYKrtXXNbpivYwXv2HE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
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/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76 h1:8pVwscQmyw1Dcca9R8QuHvLFTHr4h6MDlgbLM1A+WLA= github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76 h1:8pVwscQmyw1Dcca9R8QuHvLFTHr4h6MDlgbLM1A+WLA=
github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76/go.mod h1:YuuGLJSsTK6DGBD5Zaf3J8LSMfpEC2WtzYPey3XVOdI= github.com/wtfutil/todoist v0.0.0-20180625015933-97395e581a76/go.mod h1:YuuGLJSsTK6DGBD5Zaf3J8LSMfpEC2WtzYPey3XVOdI=
github.com/wtfutil/todoist v0.0.0-20180625015933-ab3a9f0b9d55 h1:vgdZK2w+IZiv18PsEuFeGwaGwVL76Nh4cWOqk10jZ+I=
github.com/wtfutil/todoist v0.0.0-20180625015933-ab3a9f0b9d55/go.mod h1:YuuGLJSsTK6DGBD5Zaf3J8LSMfpEC2WtzYPey3XVOdI=
github.com/xanzy/go-gitlab v0.18.0 h1:LybNSWSIw8BK+GnxuETAhUXEzzh5rHsHjopqVkGJXRE= github.com/xanzy/go-gitlab v0.18.0 h1:LybNSWSIw8BK+GnxuETAhUXEzzh5rHsHjopqVkGJXRE=
github.com/xanzy/go-gitlab v0.18.0/go.mod h1:LSfUQ9OPDnwRqulJk2HcWaAiFfCzaknyeGvjQI67MbE= github.com/xanzy/go-gitlab v0.18.0/go.mod h1:LSfUQ9OPDnwRqulJk2HcWaAiFfCzaknyeGvjQI67MbE=
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=
github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9 h1:MYjp+3xEmdmEs41pec7vbPtMg4Fe+za4FFA1lXV6RLo= github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9 h1:MYjp+3xEmdmEs41pec7vbPtMg4Fe+za4FFA1lXV6RLo=
github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9/go.mod h1:0AAHfU8E7myJ9nLrWxqgrUDCCqNjTQ4/7cRLvYTHBnw= github.com/yfronto/newrelic v0.0.0-20180622232530-7c9c2852e8f9/go.mod h1:0AAHfU8E7myJ9nLrWxqgrUDCCqNjTQ4/7cRLvYTHBnw=
github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5 h1:UagwVflTu8e//SSwujymFEz0G9MUP5/fJJLCzdQy3as= github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5 h1:UagwVflTu8e//SSwujymFEz0G9MUP5/fJJLCzdQy3as=
github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5/go.mod h1:pHsWAmY9PfX7i/uwPZkmWrebc8JbK8FppKbvyevwzSU= github.com/zmb3/spotify v0.0.0-20190520155326-158b1863f5b5/go.mod h1:pHsWAmY9PfX7i/uwPZkmWrebc8JbK8FppKbvyevwzSU=
github.com/zorkian/go-datadog-api v2.21.0+incompatible h1:0VoM99qhHpD3FusaEaeD3C6HikYgesr8cSSknq1vmTY= github.com/zorkian/go-datadog-api v2.21.0+incompatible h1:0VoM99qhHpD3FusaEaeD3C6HikYgesr8cSSknq1vmTY=
github.com/zorkian/go-datadog-api v2.21.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss= github.com/zorkian/go-datadog-api v2.21.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50= go.opencensus.io v0.22.1 h1:8dP3SGL7MPB94crU3bEPplMPe83FI4EouesJUeFHv50=
go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg=
go.starlark.net v0.0.0-20190820173200-988906f77f65/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg=
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/arch v0.0.0-20171004143515-077ac972c2e4/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
golang.org/x/arch v0.0.0-20190815191158-8a70ba74b3a1/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4=
golang.org/x/crypto v0.0.0-20180614174826-fd5f17ee7299/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20190902063713-cb417be4ba39/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190511005446-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mobile v0.0.0-20190830201351-c6da95954960/go.mod h1:mJOp/i0LXPxJZ9weeIadcPqKVfS05Ai7m6/t9z1Hs/Y=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -415,7 +282,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@ -433,28 +299,20 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/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-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190427212804-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190902133755-9109b7679e13 h1:tdsQdquKbTNMsSZLqnLELJGzCANp9oXhu6zFBW6ODx4= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13 h1:tdsQdquKbTNMsSZLqnLELJGzCANp9oXhu6zFBW6ODx4=
golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -469,11 +327,9 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190513212739-9d24e82272b4 h1:RMGusaKverhgGR5KBERIKiTyWoWHRd84GCtsNlvLvIo= golang.org/x/time v0.0.0-20190513212739-9d24e82272b4 h1:RMGusaKverhgGR5KBERIKiTyWoWHRd84GCtsNlvLvIo=
golang.org/x/time v0.0.0-20190513212739-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190513212739-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-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181120060634-fc4f04983f62/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-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-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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@ -483,11 +339,7 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190903025054-afe7f8212f0d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@ -510,26 +362,21 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2El
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o= gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o=
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180615191036-16f9a43967d6/go.mod h1:d3R+NllX3X5e0zlG1Rful3uLvsGC/Q3OHut5464DEQw=
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5 h1:G5L6mi3mG1Ms5pQfIiUJEMNV64fqgQlpxlPf+4phLmw= gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5 h1:G5L6mi3mG1Ms5pQfIiUJEMNV64fqgQlpxlPf+4phLmw=
gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5/go.mod h1:d3R+NllX3X5e0zlG1Rful3uLvsGC/Q3OHut5464DEQw= gopkg.in/jarcoal/httpmock.v1 v1.0.0-20190314184232-a8ac0a50d0b5/go.mod h1:d3R+NllX3X5e0zlG1Rful3uLvsGC/Q3OHut5464DEQw=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
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.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@ -537,13 +384,11 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.0.0-20190620084959-7cf5895f2711 h1:BblVYz/wE5WtBsD/Gvu54KyBUTJMflolzc5I2DTvh50= k8s.io/api v0.0.0-20190620084959-7cf5895f2711 h1:BblVYz/wE5WtBsD/Gvu54KyBUTJMflolzc5I2DTvh50=
k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A=
k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA=
k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3 h1:ov3gR/oGSdOkfEetREkvyrTMbEUDAADeF9WMoihPv0w= k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3 h1:ov3gR/oGSdOkfEetREkvyrTMbEUDAADeF9WMoihPv0w=
k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3/go.mod h1:+ntn62igV2hyNj7/0brOvXSMONE2KxcePkSxK7/9FFQ= k8s.io/apimachinery v0.0.0-20190802060556-6fa4771c83b3/go.mod h1:+ntn62igV2hyNj7/0brOvXSMONE2KxcePkSxK7/9FFQ=
k8s.io/client-go v11.0.0+incompatible h1:LBbX2+lOwY9flffWlJM7f1Ct8V2SRNiMRDFeiwnJo9o=
k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY= k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY=
k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k=
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
@ -555,7 +400,6 @@ k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4y
k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4= k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4=
k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,417 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package azuredevops
import (
"bytes"
"context"
"encoding/json"
"github.com/google/uuid"
"io"
"io/ioutil"
"net/http"
"net/url"
"regexp"
"runtime"
"strings"
"sync"
)
const (
// header keys
headerKeyAccept = "Accept"
headerKeyAuthorization = "Authorization"
headerKeyContentType = "Content-Type"
HeaderKeyContinuationToken = "X-MS-ContinuationToken"
headerKeyFedAuthRedirect = "X-TFS-FedAuthRedirect"
headerKeyForceMsaPassThrough = "X-VSS-ForceMsaPassThrough"
headerKeySession = "X-TFS-Session"
headerUserAgent = "User-Agent"
// media types
MediaTypeTextPlain = "text/plain"
MediaTypeApplicationJson = "application/json"
)
// Unique session id to be used by all requests of this session.
var SessionId = uuid.New().String()
// ApiResourceLocation Cache by Url
var apiResourceLocationCache = make(map[string]*map[uuid.UUID]ApiResourceLocation)
var apiResourceLocationCacheLock = sync.RWMutex{}
// Base user agent string. The UserAgent set on the connection will be appended to this.
var baseUserAgent = "go/" + runtime.Version() + " (" + runtime.GOOS + " " + runtime.GOARCH + ") azure-devops-go-api/0.0.0" // todo: get real version
func NewClient(connection *Connection, baseUrl string) *Client {
client := &http.Client{}
if connection.Timeout != nil {
client.Timeout = *connection.Timeout
}
return &Client{
baseUrl: baseUrl,
client: client,
authorization: connection.AuthorizationString,
suppressFedAuthRedirect: connection.SuppressFedAuthRedirect,
forceMsaPassThrough: connection.ForceMsaPassThrough,
userAgent: connection.UserAgent,
}
}
type Client struct {
baseUrl string
client *http.Client
authorization string
suppressFedAuthRedirect bool
forceMsaPassThrough bool
userAgent string
}
func (client *Client) SendRequest(request *http.Request) (response *http.Response, err error) {
resp, err := client.client.Do(request) // todo: add retry logic
if resp != nil && (resp.StatusCode < 200 || resp.StatusCode >= 300) {
err = client.UnwrapError(resp)
}
return resp, err
}
func (client *Client) Send(ctx context.Context,
httpMethod string,
locationId uuid.UUID,
apiVersion string,
routeValues map[string]string,
queryParameters url.Values,
body io.Reader,
mediaType string,
acceptMediaType string,
additionalHeaders map[string]string) (response *http.Response, err error) {
location, err := client.getResourceLocation(ctx, locationId)
if err != nil {
return nil, err
}
generatedUrl := client.GenerateUrl(location, routeValues, queryParameters)
fullUrl := combineUrl(client.baseUrl, generatedUrl)
negotiatedVersion, err := negotiateRequestVersion(location, apiVersion)
if err != nil {
return nil, err
}
req, err := client.CreateRequestMessage(ctx, httpMethod, fullUrl, negotiatedVersion, body, mediaType, acceptMediaType, additionalHeaders)
if err != nil {
return nil, err
}
resp, err := client.SendRequest(req)
if err != nil {
return nil, err
}
// Set session if one was supplied in the response.
session, ok := resp.Header[headerKeySession]
if ok && len(session) > 0 {
SessionId = session[0]
}
return resp, err
}
func (client *Client) GenerateUrl(apiResourceLocation *ApiResourceLocation, routeValues map[string]string, queryParameters url.Values) (request string) {
builtUrl := *apiResourceLocation.RouteTemplate
if routeValues == nil {
routeValues = make(map[string]string)
}
routeValues["area"] = *apiResourceLocation.Area
routeValues["resource"] = *apiResourceLocation.ResourceName
builtUrl = transformRouteTemplate(builtUrl, routeValues)
if queryParameters != nil && len(queryParameters) > 0 {
builtUrl += "?" + queryParameters.Encode()
}
return builtUrl
}
func (client *Client) CreateRequestMessage(ctx context.Context,
httpMethod string,
url string,
apiVersion string,
body io.Reader,
mediaType string,
acceptMediaType string,
additionalHeaders map[string]string) (request *http.Request, err error) {
req, err := http.NewRequest(httpMethod, url, body)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
if client.authorization != "" {
req.Header.Add(headerKeyAuthorization, client.authorization)
}
accept := acceptMediaType
if apiVersion != "" {
accept += ";api-version=" + apiVersion
}
req.Header.Add(headerKeyAccept, accept)
if mediaType != "" {
req.Header.Add(headerKeyContentType, mediaType+";charset=utf-8")
}
if client.suppressFedAuthRedirect {
req.Header.Add(headerKeyFedAuthRedirect, "Suppress")
}
if client.forceMsaPassThrough {
req.Header.Add(headerKeyForceMsaPassThrough, "true")
}
// set session if it has not already been set
_, ok := req.Header[headerKeySession]
if !ok {
req.Header.Add(headerKeySession, SessionId)
}
userAgent := baseUserAgent
if client.userAgent != "" {
userAgent += " " + client.userAgent
}
req.Header.Add(headerUserAgent, userAgent)
for key, value := range additionalHeaders {
req.Header.Add(key, value)
}
return req, err
}
func (client *Client) getResourceLocation(ctx context.Context, locationId uuid.UUID) (*ApiResourceLocation, error) {
locationsMap, ok := getApiResourceLocationCache(client.baseUrl)
if !ok {
locations, err := client.getResourceLocationsFromServer(ctx)
if err != nil {
return nil, err
}
newMap := make(map[uuid.UUID]ApiResourceLocation)
locationsMap = &newMap
for _, locationEntry := range locations {
(*locationsMap)[*locationEntry.Id] = locationEntry
}
setApiResourceLocationCache(client.baseUrl, locationsMap)
}
location, ok := (*locationsMap)[locationId]
if ok {
return &location, nil
}
return nil, &LocationIdNotRegisteredError{locationId, client.baseUrl}
}
func getApiResourceLocationCache(url string) (*map[uuid.UUID]ApiResourceLocation, bool) {
apiResourceLocationCacheLock.RLock()
defer apiResourceLocationCacheLock.RUnlock()
locationsMap, ok := apiResourceLocationCache[url]
return locationsMap, ok
}
func setApiResourceLocationCache(url string, locationsMap *map[uuid.UUID]ApiResourceLocation) {
apiResourceLocationCacheLock.Lock()
defer apiResourceLocationCacheLock.Unlock()
apiResourceLocationCache[url] = locationsMap
}
func (client *Client) getResourceLocationsFromServer(ctx context.Context) ([]ApiResourceLocation, error) {
optionsUri := combineUrl(client.baseUrl, "_apis")
request, err := client.CreateRequestMessage(ctx, http.MethodOptions, optionsUri, "", nil, "", MediaTypeApplicationJson, nil)
if err != nil {
return nil, err
}
resp, err := client.SendRequest(request)
if err != nil {
return nil, err
}
// Set session if one was supplied in the response.
session, ok := resp.Header[headerKeySession]
if ok && len(session) > 0 {
SessionId = session[0]
}
if resp != nil && (resp.StatusCode < 200 || resp.StatusCode >= 300) {
return nil, client.UnwrapError(resp)
}
var locations []ApiResourceLocation
err = client.UnmarshalCollectionBody(resp, &locations)
return locations, err
}
// Examples of api-version: 5.1, 5.1-preview, 5.1-preview.1
var apiVersionRegEx = regexp.MustCompile(`(\d+(\.\d)?)(-preview(.(\d+))?)?`)
func combineUrl(part1 string, part2 string) string {
return strings.TrimRight(part1, "/") + "/" + strings.TrimLeft(part2, "/")
}
func transformRouteTemplate(routeTemplate string, routeValues map[string]string) string {
newTemplate := ""
routeTemplate = strings.Replace(routeTemplate, "{*", "{", -1)
segments := strings.Split(routeTemplate, "/")
for _, segment := range segments {
length := len(segment)
if length <= 2 || segment[0] != '{' || segment[length-1] != '}' {
newTemplate += "/" + segment
} else {
value, ok := routeValues[segment[1:length-1]]
if ok {
newTemplate += "/" + url.PathEscape(value)
}
// else this is an optional parameter that has not been supplied, so don't add it back
}
}
// following covers oddball templates with segments that include the token and additional constants
for key, value := range routeValues {
newTemplate = strings.Replace(newTemplate, "{"+key+"}", value, -1)
}
return newTemplate
}
func (client *Client) UnmarshalBody(response *http.Response, v interface{}) (err error) {
if response != nil && response.Body != nil {
var err error
defer func() {
if closeError := response.Body.Close(); closeError != nil {
err = closeError
}
}()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
}
body = trimByteOrderMark(body)
return json.Unmarshal(body, &v)
}
return nil
}
func (client *Client) UnmarshalCollectionBody(response *http.Response, v interface{}) (err error) {
if response != nil && response.Body != nil {
var err error
defer func() {
if closeError := response.Body.Close(); closeError != nil {
err = closeError
}
}()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
}
body = trimByteOrderMark(body)
err = client.UnmarshalCollectionJson(body, v)
}
return nil
}
func (client *Client) UnmarshalCollectionJson(jsonValue []byte, v interface{}) (err error) {
var wrappedResponse VssJsonCollectionWrapper
err = json.Unmarshal(jsonValue, &wrappedResponse)
if err != nil {
return err
}
value, err := json.Marshal(wrappedResponse.Value) // todo: investigate better way to do this.
if err != nil {
return err
}
return json.Unmarshal(value, &v)
}
// Returns slice of body without utf-8 byte order mark.
// If BOM does not exist body is returned unchanged.
func trimByteOrderMark(body []byte) []byte {
return bytes.TrimPrefix(body, []byte("\xef\xbb\xbf"))
}
func (client *Client) UnwrapError(response *http.Response) (err error) {
if response.ContentLength == 0 {
message := "Request returned status: " + response.Status
return &WrappedError{
Message: &message,
StatusCode: &response.StatusCode,
}
}
defer func() {
if closeError := response.Body.Close(); closeError != nil {
err = closeError
}
}()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
}
body = trimByteOrderMark(body)
contentType, ok := response.Header[headerKeyContentType]
if ok && len(contentType) > 0 && strings.Index(contentType[0], MediaTypeTextPlain) >= 0 {
message := string(body)
statusCode := response.StatusCode
return WrappedError{Message: &message, StatusCode: &statusCode}
}
var wrappedError WrappedError
err = json.Unmarshal(body, &wrappedError)
if err != nil {
return err
}
if wrappedError.Message == nil {
var wrappedImproperError WrappedImproperError
err = json.Unmarshal(body, &wrappedImproperError)
if err == nil && wrappedImproperError.Value != nil && wrappedImproperError.Value.Message != nil {
statusCode := response.StatusCode
return &WrappedError{
Message: wrappedImproperError.Value.Message,
StatusCode: &statusCode,
}
}
}
return wrappedError
}
func (client *Client) GetResourceAreas(ctx context.Context) (*[]ResourceAreaInfo, error) {
queryParams := url.Values{}
locationId, _ := uuid.Parse("e81700f7-3be2-46de-8624-2eb35882fcaa")
resp, err := client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []ResourceAreaInfo
err = client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
type LocationIdNotRegisteredError struct {
LocationId uuid.UUID
Url string
}
func (e LocationIdNotRegisteredError) Error() string {
return "API resource location " + e.LocationId.String() + " is not registered on " + e.Url + "."
}
type InvalidApiVersion struct {
ApiVersion string
}
func (e InvalidApiVersion) Error() string {
return "The requested api-version is not in a valid format: " + e.ApiVersion
}

View File

@ -0,0 +1,154 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package azuredevops
import (
"context"
"encoding/base64"
"github.com/google/uuid"
"strings"
"sync"
"time"
)
// Creates a new Azure DevOps connection instance using a personal access token.
func NewPatConnection(organizationUrl string, personalAccessToken string) *Connection {
authorizationString := CreateBasicAuthHeaderValue("", personalAccessToken)
organizationUrl = normalizeUrl(organizationUrl)
return &Connection{
AuthorizationString: authorizationString,
BaseUrl: organizationUrl,
SuppressFedAuthRedirect: true,
}
}
func NewAnonymousConnection(organizationUrl string) *Connection {
organizationUrl = normalizeUrl(organizationUrl)
return &Connection{
BaseUrl: organizationUrl,
SuppressFedAuthRedirect: true,
}
}
type Connection struct {
AuthorizationString string
BaseUrl string
UserAgent string
SuppressFedAuthRedirect bool
ForceMsaPassThrough bool
Timeout *time.Duration
clientCache map[string]Client
clientCacheLock sync.RWMutex
resourceAreaCache map[uuid.UUID]ResourceAreaInfo
resourceAreaCacheLock sync.RWMutex
}
func CreateBasicAuthHeaderValue(username, password string) string {
auth := username + ":" + password
return "Basic " + base64.StdEncoding.EncodeToString([]byte(auth))
}
func normalizeUrl(url string) string {
return strings.ToLower(strings.TrimRight(url, "/"))
}
func (connection *Connection) GetClientByResourceAreaId(ctx context.Context, resourceAreaID uuid.UUID) (*Client, error) {
resourceAreaInfo, err := connection.getResourceAreaInfo(ctx, resourceAreaID)
if err != nil {
return nil, err
}
var client *Client
if resourceAreaInfo != nil {
client = connection.GetClientByUrl(*resourceAreaInfo.LocationUrl)
} else {
// resourceAreaInfo will be nil for on prem servers
client = connection.GetClientByUrl(connection.BaseUrl)
}
return client, nil
}
func (connection *Connection) GetClientByUrl(baseUrl string) *Client {
normalizedUrl := normalizeUrl(baseUrl)
azureDevOpsClient, ok := connection.getClientCacheEntry(normalizedUrl)
if !ok {
azureDevOpsClient = NewClient(connection, normalizedUrl)
connection.setClientCacheEntry(normalizedUrl, azureDevOpsClient)
}
return azureDevOpsClient
}
func (connection *Connection) getResourceAreaInfo(ctx context.Context, resourceAreaId uuid.UUID) (*ResourceAreaInfo, error) {
resourceAreaInfo, ok := connection.getResourceAreaCacheEntry(resourceAreaId)
if !ok {
client := connection.GetClientByUrl(connection.BaseUrl)
resourceAreaInfos, err := client.GetResourceAreas(ctx)
if err != nil {
return nil, err
}
if len(*resourceAreaInfos) > 0 {
for _, resourceEntry := range *resourceAreaInfos {
connection.setResourceAreaCacheEntry(*resourceEntry.Id, &resourceEntry)
}
resourceAreaInfo, ok = connection.getResourceAreaCacheEntry(resourceAreaId)
} else {
// on prem servers return an empty list
return nil, nil
}
}
if ok {
return resourceAreaInfo, nil
}
return nil, &ResourceAreaIdNotRegisteredError{resourceAreaId, connection.BaseUrl}
}
// Client Cache by Url
func (connection *Connection) getClientCacheEntry(url string) (*Client, bool) {
if connection.clientCache == nil {
return nil, false
}
connection.clientCacheLock.RLock()
defer connection.clientCacheLock.RUnlock()
client, ok := connection.clientCache[url]
return &client, ok
}
func (connection *Connection) setClientCacheEntry(url string, client *Client) {
connection.clientCacheLock.Lock()
defer connection.clientCacheLock.Unlock()
if connection.clientCache == nil {
connection.clientCache = make(map[string]Client)
}
connection.clientCache[url] = *client
}
func (connection *Connection) getResourceAreaCacheEntry(resourceAreaId uuid.UUID) (*ResourceAreaInfo, bool) {
if connection.resourceAreaCache == nil {
return nil, false
}
connection.resourceAreaCacheLock.RLock()
defer connection.resourceAreaCacheLock.RUnlock()
resourceAreaInfo, ok := connection.resourceAreaCache[resourceAreaId]
return &resourceAreaInfo, ok
}
func (connection *Connection) setResourceAreaCacheEntry(resourceAreaId uuid.UUID, resourceAreaInfo *ResourceAreaInfo) {
connection.resourceAreaCacheLock.Lock()
defer connection.resourceAreaCacheLock.Unlock()
if connection.resourceAreaCache == nil {
connection.resourceAreaCache = make(map[uuid.UUID]ResourceAreaInfo)
}
connection.resourceAreaCache[resourceAreaId] = *resourceAreaInfo
}
type ResourceAreaIdNotRegisteredError struct {
ResourceAreaId uuid.UUID
Url string
}
func (e ResourceAreaIdNotRegisteredError) Error() string {
return "API resource area Id " + e.ResourceAreaId.String() + " is not registered on " + e.Url + "."
}

View File

@ -0,0 +1,863 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package core
import (
"bytes"
"context"
"encoding/json"
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/operations"
"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
"net/http"
"net/url"
"strconv"
"strings"
)
var ResourceAreaId, _ = uuid.Parse("79134c72-4a58-4b42-976c-04e7115f32bf")
type Client struct {
Client azuredevops.Client
}
func NewClient(ctx context.Context, connection *azuredevops.Connection) (*Client, error) {
client, err := connection.GetClientByResourceAreaId(ctx, ResourceAreaId)
if err != nil {
return nil, err
}
return &Client{
Client: *client,
}, nil
}
// [Preview API] Removes the avatar for the project.
func (client *Client) RemoveProjectAvatar(ctx context.Context, args RemoveProjectAvatarArgs) error {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
locationId, _ := uuid.Parse("54b2a2a0-859b-4d05-827c-ec4c862f641a")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the RemoveProjectAvatar function
type RemoveProjectAvatarArgs struct {
// (required) The ID or name of the project.
ProjectId *string
}
// [Preview API] Sets the avatar for the project.
func (client *Client) SetProjectAvatar(ctx context.Context, args SetProjectAvatarArgs) error {
if args.AvatarBlob == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.AvatarBlob"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
body, marshalErr := json.Marshal(*args.AvatarBlob)
if marshalErr != nil {
return marshalErr
}
locationId, _ := uuid.Parse("54b2a2a0-859b-4d05-827c-ec4c862f641a")
_, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the SetProjectAvatar function
type SetProjectAvatarArgs struct {
// (required) The avatar blob data object to upload.
AvatarBlob *ProjectAvatar
// (required) The ID or name of the project.
ProjectId *string
}
// [Preview API]
func (client *Client) CreateConnectedService(ctx context.Context, args CreateConnectedServiceArgs) (*WebApiConnectedService, error) {
if args.ConnectedServiceCreationData == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ConnectedServiceCreationData"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
body, marshalErr := json.Marshal(*args.ConnectedServiceCreationData)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("b4f70219-e18b-42c5-abe3-98b07d35525e")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1-preview.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue WebApiConnectedService
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateConnectedService function
type CreateConnectedServiceArgs struct {
// (required)
ConnectedServiceCreationData *WebApiConnectedServiceDetails
// (required)
ProjectId *string
}
// [Preview API]
func (client *Client) GetConnectedServiceDetails(ctx context.Context, args GetConnectedServiceDetailsArgs) (*WebApiConnectedServiceDetails, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
if args.Name == nil || *args.Name == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Name"}
}
routeValues["name"] = *args.Name
locationId, _ := uuid.Parse("b4f70219-e18b-42c5-abe3-98b07d35525e")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue WebApiConnectedServiceDetails
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetConnectedServiceDetails function
type GetConnectedServiceDetailsArgs struct {
// (required)
ProjectId *string
// (required)
Name *string
}
// [Preview API]
func (client *Client) GetConnectedServices(ctx context.Context, args GetConnectedServicesArgs) (*[]WebApiConnectedService, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
queryParams := url.Values{}
if args.Kind != nil {
queryParams.Add("kind", string(*args.Kind))
}
locationId, _ := uuid.Parse("b4f70219-e18b-42c5-abe3-98b07d35525e")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []WebApiConnectedService
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetConnectedServices function
type GetConnectedServicesArgs struct {
// (required)
ProjectId *string
// (optional)
Kind *ConnectedServiceKind
}
// Get a list of members for a specific team.
func (client *Client) GetTeamMembersWithExtendedProperties(ctx context.Context, args GetTeamMembersWithExtendedPropertiesArgs) (*[]webapi.TeamMember, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
if args.TeamId == nil || *args.TeamId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.TeamId"}
}
routeValues["teamId"] = *args.TeamId
queryParams := url.Values{}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
locationId, _ := uuid.Parse("294c494c-2600-4d7e-b76c-3dd50c3c95be")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []webapi.TeamMember
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetTeamMembersWithExtendedProperties function
type GetTeamMembersWithExtendedPropertiesArgs struct {
// (required) The name or ID (GUID) of the team project the team belongs to.
ProjectId *string
// (required) The name or ID (GUID) of the team .
TeamId *string
// (optional)
Top *int
// (optional)
Skip *int
}
// Get a process by ID.
func (client *Client) GetProcessById(ctx context.Context, args GetProcessByIdArgs) (*Process, error) {
routeValues := make(map[string]string)
if args.ProcessId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProcessId"}
}
routeValues["processId"] = (*args.ProcessId).String()
locationId, _ := uuid.Parse("93878975-88c5-4e6a-8abb-7ddd77a8a7d8")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Process
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProcessById function
type GetProcessByIdArgs struct {
// (required) ID for a process.
ProcessId *uuid.UUID
}
// Get a list of processes.
func (client *Client) GetProcesses(ctx context.Context, args GetProcessesArgs) (*[]Process, error) {
locationId, _ := uuid.Parse("93878975-88c5-4e6a-8abb-7ddd77a8a7d8")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Process
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProcesses function
type GetProcessesArgs struct {
}
// Get project collection with the specified id or name.
func (client *Client) GetProjectCollection(ctx context.Context, args GetProjectCollectionArgs) (*TeamProjectCollection, error) {
routeValues := make(map[string]string)
if args.CollectionId == nil || *args.CollectionId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.CollectionId"}
}
routeValues["collectionId"] = *args.CollectionId
locationId, _ := uuid.Parse("8031090f-ef1d-4af6-85fc-698cd75d42bf")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue TeamProjectCollection
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProjectCollection function
type GetProjectCollectionArgs struct {
// (required)
CollectionId *string
}
// Get project collection references for this application.
func (client *Client) GetProjectCollections(ctx context.Context, args GetProjectCollectionsArgs) (*[]TeamProjectCollectionReference, error) {
queryParams := url.Values{}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
locationId, _ := uuid.Parse("8031090f-ef1d-4af6-85fc-698cd75d42bf")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []TeamProjectCollectionReference
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProjectCollections function
type GetProjectCollectionsArgs struct {
// (optional)
Top *int
// (optional)
Skip *int
}
// Get project with the specified id or name, optionally including capabilities.
func (client *Client) GetProject(ctx context.Context, args GetProjectArgs) (*TeamProject, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
queryParams := url.Values{}
if args.IncludeCapabilities != nil {
queryParams.Add("includeCapabilities", strconv.FormatBool(*args.IncludeCapabilities))
}
if args.IncludeHistory != nil {
queryParams.Add("includeHistory", strconv.FormatBool(*args.IncludeHistory))
}
locationId, _ := uuid.Parse("603fe2ac-9723-48b9-88ad-09305aa6c6e1")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue TeamProject
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProject function
type GetProjectArgs struct {
// (required)
ProjectId *string
// (optional) Include capabilities (such as source control) in the team project result (default: false).
IncludeCapabilities *bool
// (optional) Search within renamed projects (that had such name in the past).
IncludeHistory *bool
}
// Get all projects in the organization that the authenticated user has access to.
func (client *Client) GetProjects(ctx context.Context, args GetProjectsArgs) (*GetProjectsResponseValue, error) {
queryParams := url.Values{}
if args.StateFilter != nil {
queryParams.Add("stateFilter", string(*args.StateFilter))
}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
if args.ContinuationToken != nil {
queryParams.Add("continuationToken", *args.ContinuationToken)
}
if args.GetDefaultTeamImageUrl != nil {
queryParams.Add("getDefaultTeamImageUrl", strconv.FormatBool(*args.GetDefaultTeamImageUrl))
}
locationId, _ := uuid.Parse("603fe2ac-9723-48b9-88ad-09305aa6c6e1")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue GetProjectsResponseValue
responseValue.ContinuationToken = resp.Header.Get(azuredevops.HeaderKeyContinuationToken)
err = client.Client.UnmarshalCollectionBody(resp, &responseValue.Value)
return &responseValue, err
}
// Arguments for the GetProjects function
type GetProjectsArgs struct {
// (optional) Filter on team projects in a specific team project state (default: WellFormed).
StateFilter *ProjectState
// (optional)
Top *int
// (optional)
Skip *int
// (optional)
ContinuationToken *string
// (optional)
GetDefaultTeamImageUrl *bool
}
// Return type for the GetProjects function
type GetProjectsResponseValue struct {
Value []TeamProjectReference
// The continuation token to be used to get the next page of results.
ContinuationToken string
}
// Queues a project to be created. Use the [GetOperation](../../operations/operations/get) to periodically check for create project status.
func (client *Client) QueueCreateProject(ctx context.Context, args QueueCreateProjectArgs) (*operations.OperationReference, error) {
if args.ProjectToCreate == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectToCreate"}
}
body, marshalErr := json.Marshal(*args.ProjectToCreate)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("603fe2ac-9723-48b9-88ad-09305aa6c6e1")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue operations.OperationReference
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the QueueCreateProject function
type QueueCreateProjectArgs struct {
// (required) The project to create.
ProjectToCreate *TeamProject
}
// Queues a project to be deleted. Use the [GetOperation](../../operations/operations/get) to periodically check for delete project status.
func (client *Client) QueueDeleteProject(ctx context.Context, args QueueDeleteProjectArgs) (*operations.OperationReference, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = (*args.ProjectId).String()
locationId, _ := uuid.Parse("603fe2ac-9723-48b9-88ad-09305aa6c6e1")
resp, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue operations.OperationReference
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the QueueDeleteProject function
type QueueDeleteProjectArgs struct {
// (required) The project id of the project to delete.
ProjectId *uuid.UUID
}
// Update an existing project's name, abbreviation, description, or restore a project.
func (client *Client) UpdateProject(ctx context.Context, args UpdateProjectArgs) (*operations.OperationReference, error) {
if args.ProjectUpdate == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectUpdate"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = (*args.ProjectId).String()
body, marshalErr := json.Marshal(*args.ProjectUpdate)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("603fe2ac-9723-48b9-88ad-09305aa6c6e1")
resp, err := client.Client.Send(ctx, http.MethodPatch, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue operations.OperationReference
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the UpdateProject function
type UpdateProjectArgs struct {
// (required) The updates for the project. The state must be set to wellFormed to restore the project.
ProjectUpdate *TeamProject
// (required) The project id of the project to update.
ProjectId *uuid.UUID
}
// [Preview API] Get a collection of team project properties.
func (client *Client) GetProjectProperties(ctx context.Context, args GetProjectPropertiesArgs) (*[]ProjectProperty, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = (*args.ProjectId).String()
queryParams := url.Values{}
if args.Keys != nil {
listAsString := strings.Join((*args.Keys)[:], ",")
queryParams.Add("keys", listAsString)
}
locationId, _ := uuid.Parse("4976a71a-4487-49aa-8aab-a1eda469037a")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []ProjectProperty
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProjectProperties function
type GetProjectPropertiesArgs struct {
// (required) The team project ID.
ProjectId *uuid.UUID
// (optional) A comma-delimited string of team project property names. Wildcard characters ("?" and "*") are supported. If no key is specified, all properties will be returned.
Keys *[]string
}
// [Preview API] Create, update, and delete team project properties.
func (client *Client) SetProjectProperties(ctx context.Context, args SetProjectPropertiesArgs) error {
if args.PatchDocument == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.PatchDocument"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = (*args.ProjectId).String()
body, marshalErr := json.Marshal(*args.PatchDocument)
if marshalErr != nil {
return marshalErr
}
locationId, _ := uuid.Parse("4976a71a-4487-49aa-8aab-a1eda469037a")
_, err := client.Client.Send(ctx, http.MethodPatch, locationId, "5.1-preview.1", routeValues, nil, bytes.NewReader(body), "application/json-patch+json", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the SetProjectProperties function
type SetProjectPropertiesArgs struct {
// (required) The team project ID.
ProjectId *uuid.UUID
// (required) A JSON Patch document that represents an array of property operations. See RFC 6902 for more details on JSON Patch. The accepted operation verbs are Add and Remove, where Add is used for both creating and updating properties. The path consists of a forward slash and a property name.
PatchDocument *[]webapi.JsonPatchOperation
}
// [Preview API]
func (client *Client) CreateOrUpdateProxy(ctx context.Context, args CreateOrUpdateProxyArgs) (*Proxy, error) {
if args.Proxy == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Proxy"}
}
body, marshalErr := json.Marshal(*args.Proxy)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("ec1f4311-f2b4-4c15-b2b8-8990b80d2908")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.2", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Proxy
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateOrUpdateProxy function
type CreateOrUpdateProxyArgs struct {
// (required)
Proxy *Proxy
}
// [Preview API]
func (client *Client) DeleteProxy(ctx context.Context, args DeleteProxyArgs) error {
queryParams := url.Values{}
if args.ProxyUrl == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "proxyUrl"}
}
queryParams.Add("proxyUrl", *args.ProxyUrl)
if args.Site != nil {
queryParams.Add("site", *args.Site)
}
locationId, _ := uuid.Parse("ec1f4311-f2b4-4c15-b2b8-8990b80d2908")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.2", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the DeleteProxy function
type DeleteProxyArgs struct {
// (required)
ProxyUrl *string
// (optional)
Site *string
}
// [Preview API]
func (client *Client) GetProxies(ctx context.Context, args GetProxiesArgs) (*[]Proxy, error) {
queryParams := url.Values{}
if args.ProxyUrl != nil {
queryParams.Add("proxyUrl", *args.ProxyUrl)
}
locationId, _ := uuid.Parse("ec1f4311-f2b4-4c15-b2b8-8990b80d2908")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.2", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Proxy
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetProxies function
type GetProxiesArgs struct {
// (optional)
ProxyUrl *string
}
// Create a team in a team project.
func (client *Client) CreateTeam(ctx context.Context, args CreateTeamArgs) (*WebApiTeam, error) {
if args.Team == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Team"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
body, marshalErr := json.Marshal(*args.Team)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("d30a3dd1-f8ba-442a-b86a-bd0c0c383e59")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue WebApiTeam
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateTeam function
type CreateTeamArgs struct {
// (required) The team data used to create the team.
Team *WebApiTeam
// (required) The name or ID (GUID) of the team project in which to create the team.
ProjectId *string
}
// Delete a team.
func (client *Client) DeleteTeam(ctx context.Context, args DeleteTeamArgs) error {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
if args.TeamId == nil || *args.TeamId == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.TeamId"}
}
routeValues["teamId"] = *args.TeamId
locationId, _ := uuid.Parse("d30a3dd1-f8ba-442a-b86a-bd0c0c383e59")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the DeleteTeam function
type DeleteTeamArgs struct {
// (required) The name or ID (GUID) of the team project containing the team to delete.
ProjectId *string
// (required) The name or ID of the team to delete.
TeamId *string
}
// Get a specific team.
func (client *Client) GetTeam(ctx context.Context, args GetTeamArgs) (*WebApiTeam, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
if args.TeamId == nil || *args.TeamId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.TeamId"}
}
routeValues["teamId"] = *args.TeamId
queryParams := url.Values{}
if args.ExpandIdentity != nil {
queryParams.Add("$expandIdentity", strconv.FormatBool(*args.ExpandIdentity))
}
locationId, _ := uuid.Parse("d30a3dd1-f8ba-442a-b86a-bd0c0c383e59")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue WebApiTeam
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetTeam function
type GetTeamArgs struct {
// (required) The name or ID (GUID) of the team project containing the team.
ProjectId *string
// (required) The name or ID (GUID) of the team.
TeamId *string
// (optional) A value indicating whether or not to expand Identity information in the result WebApiTeam object.
ExpandIdentity *bool
}
// Get a list of teams.
func (client *Client) GetTeams(ctx context.Context, args GetTeamsArgs) (*[]WebApiTeam, error) {
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
queryParams := url.Values{}
if args.Mine != nil {
queryParams.Add("$mine", strconv.FormatBool(*args.Mine))
}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
if args.ExpandIdentity != nil {
queryParams.Add("$expandIdentity", strconv.FormatBool(*args.ExpandIdentity))
}
locationId, _ := uuid.Parse("d30a3dd1-f8ba-442a-b86a-bd0c0c383e59")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []WebApiTeam
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetTeams function
type GetTeamsArgs struct {
// (required)
ProjectId *string
// (optional) If true return all the teams requesting user is member, otherwise return all the teams user has read access.
Mine *bool
// (optional) Maximum number of teams to return.
Top *int
// (optional) Number of teams to skip.
Skip *int
// (optional) A value indicating whether or not to expand Identity information in the result WebApiTeam object.
ExpandIdentity *bool
}
// Update a team's name and/or description.
func (client *Client) UpdateTeam(ctx context.Context, args UpdateTeamArgs) (*WebApiTeam, error) {
if args.TeamData == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.TeamData"}
}
routeValues := make(map[string]string)
if args.ProjectId == nil || *args.ProjectId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ProjectId"}
}
routeValues["projectId"] = *args.ProjectId
if args.TeamId == nil || *args.TeamId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.TeamId"}
}
routeValues["teamId"] = *args.TeamId
body, marshalErr := json.Marshal(*args.TeamData)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("d30a3dd1-f8ba-442a-b86a-bd0c0c383e59")
resp, err := client.Client.Send(ctx, http.MethodPatch, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue WebApiTeam
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the UpdateTeam function
type UpdateTeamArgs struct {
// (required)
TeamData *WebApiTeam
// (required) The name or ID (GUID) of the team project containing the team to update.
ProjectId *string
// (required) The name of ID of the team to update.
TeamId *string
}
// [Preview API] Get a list of all teams.
func (client *Client) GetAllTeams(ctx context.Context, args GetAllTeamsArgs) (*[]WebApiTeam, error) {
queryParams := url.Values{}
if args.Mine != nil {
queryParams.Add("$mine", strconv.FormatBool(*args.Mine))
}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
if args.ExpandIdentity != nil {
queryParams.Add("$expandIdentity", strconv.FormatBool(*args.ExpandIdentity))
}
locationId, _ := uuid.Parse("7a4d9ee9-3433-4347-b47a-7a80f1cf307e")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.3", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []WebApiTeam
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetAllTeams function
type GetAllTeamsArgs struct {
// (optional) If true, then return all teams requesting user is member. Otherwise return all teams user has read access.
Mine *bool
// (optional) Maximum number of teams to return.
Top *int
// (optional) Number of teams to skip.
Skip *int
// (optional) A value indicating whether or not to expand Identity information in the result WebApiTeam object.
ExpandIdentity *bool
}

View File

@ -0,0 +1,483 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package core
import (
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/identity"
"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
)
type ConnectedServiceKind string
type connectedServiceKindValuesType struct {
Custom ConnectedServiceKind
AzureSubscription ConnectedServiceKind
Chef ConnectedServiceKind
Generic ConnectedServiceKind
}
var ConnectedServiceKindValues = connectedServiceKindValuesType{
// Custom or unknown service
Custom: "custom",
// Azure Subscription
AzureSubscription: "azureSubscription",
// Chef Connection
Chef: "chef",
// Generic Connection
Generic: "generic",
}
type IdentityData struct {
IdentityIds *[]uuid.UUID `json:"identityIds,omitempty"`
}
type Process struct {
Name *string `json:"name,omitempty"`
Url *string `json:"url,omitempty"`
Links interface{} `json:"_links,omitempty"`
Description *string `json:"description,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
IsDefault *bool `json:"isDefault,omitempty"`
Type *ProcessType `json:"type,omitempty"`
}
// Type of process customization on a collection.
type ProcessCustomizationType string
type processCustomizationTypeValuesType struct {
Xml ProcessCustomizationType
Inherited ProcessCustomizationType
}
var ProcessCustomizationTypeValues = processCustomizationTypeValuesType{
// Customization based on project-scoped xml customization
Xml: "xml",
// Customization based on process inheritance
Inherited: "inherited",
}
type ProcessReference struct {
Name *string `json:"name,omitempty"`
Url *string `json:"url,omitempty"`
}
type ProcessType string
type processTypeValuesType struct {
System ProcessType
Custom ProcessType
Inherited ProcessType
}
var ProcessTypeValues = processTypeValuesType{
System: "system",
Custom: "custom",
Inherited: "inherited",
}
// Contains the image data for project avatar.
type ProjectAvatar struct {
// The avatar image represented as a byte array.
Image *[]byte `json:"image,omitempty"`
}
type ProjectChangeType string
type projectChangeTypeValuesType struct {
Modified ProjectChangeType
Deleted ProjectChangeType
Added ProjectChangeType
}
var ProjectChangeTypeValues = projectChangeTypeValuesType{
Modified: "modified",
Deleted: "deleted",
Added: "added",
}
// Contains information describing a project.
type ProjectInfo struct {
// The abbreviated name of the project.
Abbreviation *string `json:"abbreviation,omitempty"`
// The description of the project.
Description *string `json:"description,omitempty"`
// The id of the project.
Id *uuid.UUID `json:"id,omitempty"`
// The time that this project was last updated.
LastUpdateTime *azuredevops.Time `json:"lastUpdateTime,omitempty"`
// The name of the project.
Name *string `json:"name,omitempty"`
// A set of name-value pairs storing additional property data related to the project.
Properties *[]ProjectProperty `json:"properties,omitempty"`
// The current revision of the project.
Revision *uint64 `json:"revision,omitempty"`
// The current state of the project.
State *ProjectState `json:"state,omitempty"`
// A Uri that can be used to refer to this project.
Uri *string `json:"uri,omitempty"`
// The version number of the project.
Version *uint64 `json:"version,omitempty"`
// Indicates whom the project is visible to.
Visibility *ProjectVisibility `json:"visibility,omitempty"`
}
type ProjectMessage struct {
Project *ProjectInfo `json:"project,omitempty"`
ProjectChangeType *ProjectChangeType `json:"projectChangeType,omitempty"`
ShouldInvalidateSystemStore *bool `json:"shouldInvalidateSystemStore,omitempty"`
}
type ProjectProperties struct {
// The team project Id
ProjectId *uuid.UUID `json:"projectId,omitempty"`
// The collection of team project properties
Properties *[]ProjectProperty `json:"properties,omitempty"`
}
// A named value associated with a project.
type ProjectProperty struct {
// The name of the property.
Name *string `json:"name,omitempty"`
// The value of the property.
Value interface{} `json:"value,omitempty"`
}
type ProjectState string
type projectStateValuesType struct {
Deleting ProjectState
New ProjectState
WellFormed ProjectState
CreatePending ProjectState
All ProjectState
Unchanged ProjectState
Deleted ProjectState
}
var ProjectStateValues = projectStateValuesType{
// Project is in the process of being deleted.
Deleting: "deleting",
// Project is in the process of being created.
New: "new",
// Project is completely created and ready to use.
WellFormed: "wellFormed",
// Project has been queued for creation, but the process has not yet started.
CreatePending: "createPending",
// All projects regardless of state.
All: "all",
// Project has not been changed.
Unchanged: "unchanged",
// Project has been deleted.
Deleted: "deleted",
}
type ProjectVisibility string
type projectVisibilityValuesType struct {
Private ProjectVisibility
Public ProjectVisibility
}
var ProjectVisibilityValues = projectVisibilityValuesType{
// The project is only visible to users with explicit access.
Private: "private",
// The project is visible to all.
Public: "public",
}
type Proxy struct {
Authorization *ProxyAuthorization `json:"authorization,omitempty"`
// This is a description string
Description *string `json:"description,omitempty"`
// The friendly name of the server
FriendlyName *string `json:"friendlyName,omitempty"`
GlobalDefault *bool `json:"globalDefault,omitempty"`
// This is a string representation of the site that the proxy server is located in (e.g. "NA-WA-RED")
Site *string `json:"site,omitempty"`
SiteDefault *bool `json:"siteDefault,omitempty"`
// The URL of the proxy server
Url *string `json:"url,omitempty"`
}
type ProxyAuthorization struct {
// Gets or sets the endpoint used to obtain access tokens from the configured token service.
AuthorizationUrl *string `json:"authorizationUrl,omitempty"`
// Gets or sets the client identifier for this proxy.
ClientId *uuid.UUID `json:"clientId,omitempty"`
// Gets or sets the user identity to authorize for on-prem.
Identity *string `json:"identity,omitempty"`
// Gets or sets the public key used to verify the identity of this proxy. Only specify on hosted.
PublicKey *webapi.PublicKey `json:"publicKey,omitempty"`
}
type SourceControlTypes string
type sourceControlTypesValuesType struct {
Tfvc SourceControlTypes
Git SourceControlTypes
}
var SourceControlTypesValues = sourceControlTypesValuesType{
Tfvc: "tfvc",
Git: "git",
}
// The Team Context for an operation.
type TeamContext struct {
// The team project Id or name. Ignored if ProjectId is set.
Project *string `json:"project,omitempty"`
// The Team Project ID. Required if Project is not set.
ProjectId *uuid.UUID `json:"projectId,omitempty"`
// The Team Id or name. Ignored if TeamId is set.
Team *string `json:"team,omitempty"`
// The Team Id
TeamId *uuid.UUID `json:"teamId,omitempty"`
}
// Represents a Team Project object.
type TeamProject struct {
// Project abbreviation.
Abbreviation *string `json:"abbreviation,omitempty"`
// Url to default team identity image.
DefaultTeamImageUrl *string `json:"defaultTeamImageUrl,omitempty"`
// The project's description (if any).
Description *string `json:"description,omitempty"`
// Project identifier.
Id *uuid.UUID `json:"id,omitempty"`
// Project last update time.
LastUpdateTime *azuredevops.Time `json:"lastUpdateTime,omitempty"`
// Project name.
Name *string `json:"name,omitempty"`
// Project revision.
Revision *uint64 `json:"revision,omitempty"`
// Project state.
State *ProjectState `json:"state,omitempty"`
// Url to the full version of the object.
Url *string `json:"url,omitempty"`
// Project visibility.
Visibility *ProjectVisibility `json:"visibility,omitempty"`
// The links to other objects related to this object.
Links interface{} `json:"_links,omitempty"`
// Set of capabilities this project has (such as process template & version control).
Capabilities *map[string]map[string]string `json:"capabilities,omitempty"`
// The shallow ref to the default team.
DefaultTeam *WebApiTeamRef `json:"defaultTeam,omitempty"`
}
// Data contract for a TeamProjectCollection.
type TeamProjectCollection struct {
// Collection Id.
Id *uuid.UUID `json:"id,omitempty"`
// Collection Name.
Name *string `json:"name,omitempty"`
// Collection REST Url.
Url *string `json:"url,omitempty"`
// The links to other objects related to this object.
Links interface{} `json:"_links,omitempty"`
// Project collection description.
Description *string `json:"description,omitempty"`
// Process customization type on this collection. It can be Xml or Inherited.
ProcessCustomizationType *ProcessCustomizationType `json:"processCustomizationType,omitempty"`
// Project collection state.
State *string `json:"state,omitempty"`
}
// Reference object for a TeamProjectCollection.
type TeamProjectCollectionReference struct {
// Collection Id.
Id *uuid.UUID `json:"id,omitempty"`
// Collection Name.
Name *string `json:"name,omitempty"`
// Collection REST Url.
Url *string `json:"url,omitempty"`
}
// Represents a shallow reference to a TeamProject.
type TeamProjectReference struct {
// Project abbreviation.
Abbreviation *string `json:"abbreviation,omitempty"`
// Url to default team identity image.
DefaultTeamImageUrl *string `json:"defaultTeamImageUrl,omitempty"`
// The project's description (if any).
Description *string `json:"description,omitempty"`
// Project identifier.
Id *uuid.UUID `json:"id,omitempty"`
// Project last update time.
LastUpdateTime *azuredevops.Time `json:"lastUpdateTime,omitempty"`
// Project name.
Name *string `json:"name,omitempty"`
// Project revision.
Revision *uint64 `json:"revision,omitempty"`
// Project state.
State *ProjectState `json:"state,omitempty"`
// Url to the full version of the object.
Url *string `json:"url,omitempty"`
// Project visibility.
Visibility *ProjectVisibility `json:"visibility,omitempty"`
}
// A data transfer object that stores the metadata associated with the creation of temporary data.
type TemporaryDataCreatedDTO struct {
ExpirationSeconds *int `json:"expirationSeconds,omitempty"`
Origin *string `json:"origin,omitempty"`
Value interface{} `json:"value,omitempty"`
ExpirationDate *azuredevops.Time `json:"expirationDate,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
Url *string `json:"url,omitempty"`
}
// A data transfer object that stores the metadata associated with the temporary data.
type TemporaryDataDTO struct {
ExpirationSeconds *int `json:"expirationSeconds,omitempty"`
Origin *string `json:"origin,omitempty"`
Value interface{} `json:"value,omitempty"`
}
// Updateable properties for a WebApiTeam.
type UpdateTeam struct {
// New description for the team.
Description *string `json:"description,omitempty"`
// New name for the team.
Name *string `json:"name,omitempty"`
}
type WebApiConnectedService struct {
Url *string `json:"url,omitempty"`
// The user who did the OAuth authentication to created this service
AuthenticatedBy *webapi.IdentityRef `json:"authenticatedBy,omitempty"`
// Extra description on the service.
Description *string `json:"description,omitempty"`
// Friendly Name of service connection
FriendlyName *string `json:"friendlyName,omitempty"`
// Id/Name of the connection service. For Ex: Subscription Id for Azure Connection
Id *string `json:"id,omitempty"`
// The kind of service.
Kind *string `json:"kind,omitempty"`
// The project associated with this service
Project *TeamProjectReference `json:"project,omitempty"`
// Optional uri to connect directly to the service such as https://windows.azure.com
ServiceUri *string `json:"serviceUri,omitempty"`
}
type WebApiConnectedServiceDetails struct {
Id *string `json:"id,omitempty"`
Url *string `json:"url,omitempty"`
// Meta data for service connection
ConnectedServiceMetaData *WebApiConnectedService `json:"connectedServiceMetaData,omitempty"`
// Credential info
CredentialsXml *string `json:"credentialsXml,omitempty"`
// Optional uri to connect directly to the service such as https://windows.azure.com
EndPoint *string `json:"endPoint,omitempty"`
}
type WebApiConnectedServiceRef struct {
Id *string `json:"id,omitempty"`
Url *string `json:"url,omitempty"`
}
// The representation of data needed to create a tag definition which is sent across the wire.
type WebApiCreateTagRequestData struct {
// Name of the tag definition that will be created.
Name *string `json:"name,omitempty"`
}
type WebApiProject struct {
// Project abbreviation.
Abbreviation *string `json:"abbreviation,omitempty"`
// Url to default team identity image.
DefaultTeamImageUrl *string `json:"defaultTeamImageUrl,omitempty"`
// The project's description (if any).
Description *string `json:"description,omitempty"`
// Project identifier.
Id *uuid.UUID `json:"id,omitempty"`
// Project last update time.
LastUpdateTime *azuredevops.Time `json:"lastUpdateTime,omitempty"`
// Project name.
Name *string `json:"name,omitempty"`
// Project revision.
Revision *uint64 `json:"revision,omitempty"`
// Project state.
State *ProjectState `json:"state,omitempty"`
// Url to the full version of the object.
Url *string `json:"url,omitempty"`
// Project visibility.
Visibility *ProjectVisibility `json:"visibility,omitempty"`
// Set of capabilities this project has
Capabilities *map[string]map[string]string `json:"capabilities,omitempty"`
// Reference to collection which contains this project
Collection *WebApiProjectCollectionRef `json:"collection,omitempty"`
// Default team for this project
DefaultTeam *WebApiTeamRef `json:"defaultTeam,omitempty"`
}
type WebApiProjectCollection struct {
// Collection Tfs Url (Host Url)
CollectionUrl *string `json:"collectionUrl,omitempty"`
// Collection Guid
Id *uuid.UUID `json:"id,omitempty"`
// Collection Name
Name *string `json:"name,omitempty"`
// Collection REST Url
Url *string `json:"url,omitempty"`
// Project collection description
Description *string `json:"description,omitempty"`
// Project collection state
State *string `json:"state,omitempty"`
}
type WebApiProjectCollectionRef struct {
// Collection Tfs Url (Host Url)
CollectionUrl *string `json:"collectionUrl,omitempty"`
// Collection Guid
Id *uuid.UUID `json:"id,omitempty"`
// Collection Name
Name *string `json:"name,omitempty"`
// Collection REST Url
Url *string `json:"url,omitempty"`
}
// The representation of a tag definition which is sent across the wire.
type WebApiTagDefinition struct {
// Whether or not the tag definition is active.
Active *bool `json:"active,omitempty"`
// ID of the tag definition.
Id *uuid.UUID `json:"id,omitempty"`
// The name of the tag definition.
Name *string `json:"name,omitempty"`
// Resource URL for the Tag Definition.
Url *string `json:"url,omitempty"`
}
type WebApiTeam struct {
// Team (Identity) Guid. A Team Foundation ID.
Id *uuid.UUID `json:"id,omitempty"`
// Team name
Name *string `json:"name,omitempty"`
// Team REST API Url
Url *string `json:"url,omitempty"`
// Team description
Description *string `json:"description,omitempty"`
// Team identity.
Identity *identity.Identity `json:"identity,omitempty"`
// Identity REST API Url to this team
IdentityUrl *string `json:"identityUrl,omitempty"`
ProjectId *uuid.UUID `json:"projectId,omitempty"`
ProjectName *string `json:"projectName,omitempty"`
}
type WebApiTeamRef struct {
// Team (Identity) Guid. A Team Foundation ID.
Id *uuid.UUID `json:"id,omitempty"`
// Team name
Name *string `json:"name,omitempty"`
// Team REST API Url
Url *string `json:"url,omitempty"`
}

View File

@ -0,0 +1,350 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package delegatedauthorization
import (
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
)
type AccessTokenResult struct {
AccessToken *webapi.JsonWebToken `json:"accessToken,omitempty"`
AccessTokenError *TokenError `json:"accessTokenError,omitempty"`
AuthorizationId *uuid.UUID `json:"authorizationId,omitempty"`
ErrorDescription *string `json:"errorDescription,omitempty"`
HasError *bool `json:"hasError,omitempty"`
RefreshToken *RefreshTokenGrant `json:"refreshToken,omitempty"`
TokenType *string `json:"tokenType,omitempty"`
ValidTo *azuredevops.Time `json:"validTo,omitempty"`
}
type Authorization struct {
AccessIssued *azuredevops.Time `json:"accessIssued,omitempty"`
Audience *string `json:"audience,omitempty"`
AuthorizationId *uuid.UUID `json:"authorizationId,omitempty"`
IdentityId *uuid.UUID `json:"identityId,omitempty"`
IsAccessUsed *bool `json:"isAccessUsed,omitempty"`
IsValid *bool `json:"isValid,omitempty"`
RedirectUri *string `json:"redirectUri,omitempty"`
RegistrationId *uuid.UUID `json:"registrationId,omitempty"`
Scopes *string `json:"scopes,omitempty"`
Source *string `json:"source,omitempty"`
ValidFrom *azuredevops.Time `json:"validFrom,omitempty"`
ValidTo *azuredevops.Time `json:"validTo,omitempty"`
}
type AuthorizationDecision struct {
Authorization *Authorization `json:"authorization,omitempty"`
AuthorizationError *AuthorizationError `json:"authorizationError,omitempty"`
AuthorizationGrant *AuthorizationGrant `json:"authorizationGrant,omitempty"`
HasError *bool `json:"hasError,omitempty"`
IsAuthorized *bool `json:"isAuthorized,omitempty"`
}
type AuthorizationDescription struct {
ClientRegistration *Registration `json:"clientRegistration,omitempty"`
HasError *bool `json:"hasError,omitempty"`
InitiationError *InitiationError `json:"initiationError,omitempty"`
ScopeDescriptions *[]AuthorizationScopeDescription `json:"scopeDescriptions,omitempty"`
}
type AuthorizationDetails struct {
Authorization *Authorization `json:"authorization,omitempty"`
ClientRegistration *Registration `json:"clientRegistration,omitempty"`
ScopeDescriptions *[]AuthorizationScopeDescription `json:"scopeDescriptions,omitempty"`
}
type AuthorizationError string
type authorizationErrorValuesType struct {
None AuthorizationError
ClientIdRequired AuthorizationError
InvalidClientId AuthorizationError
ResponseTypeRequired AuthorizationError
ResponseTypeNotSupported AuthorizationError
ScopeRequired AuthorizationError
InvalidScope AuthorizationError
RedirectUriRequired AuthorizationError
InsecureRedirectUri AuthorizationError
InvalidRedirectUri AuthorizationError
InvalidUserId AuthorizationError
InvalidUserType AuthorizationError
AccessDenied AuthorizationError
}
var AuthorizationErrorValues = authorizationErrorValuesType{
None: "none",
ClientIdRequired: "clientIdRequired",
InvalidClientId: "invalidClientId",
ResponseTypeRequired: "responseTypeRequired",
ResponseTypeNotSupported: "responseTypeNotSupported",
ScopeRequired: "scopeRequired",
InvalidScope: "invalidScope",
RedirectUriRequired: "redirectUriRequired",
InsecureRedirectUri: "insecureRedirectUri",
InvalidRedirectUri: "invalidRedirectUri",
InvalidUserId: "invalidUserId",
InvalidUserType: "invalidUserType",
AccessDenied: "accessDenied",
}
type AuthorizationGrant struct {
GrantType *GrantType `json:"grantType,omitempty"`
}
type AuthorizationScopeDescription struct {
Description *string `json:"description,omitempty"`
Market *string `json:"market,omitempty"`
Title *string `json:"title,omitempty"`
}
type ClientType string
type clientTypeValuesType struct {
Confidential ClientType
Public ClientType
MediumTrust ClientType
HighTrust ClientType
FullTrust ClientType
}
var ClientTypeValues = clientTypeValuesType{
Confidential: "confidential",
Public: "public",
MediumTrust: "mediumTrust",
HighTrust: "highTrust",
FullTrust: "fullTrust",
}
type GrantType string
type grantTypeValuesType struct {
None GrantType
JwtBearer GrantType
RefreshToken GrantType
Implicit GrantType
ClientCredentials GrantType
}
var GrantTypeValues = grantTypeValuesType{
None: "none",
JwtBearer: "jwtBearer",
RefreshToken: "refreshToken",
Implicit: "implicit",
ClientCredentials: "clientCredentials",
}
type HostAuthorization struct {
HostId *uuid.UUID `json:"hostId,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
IsValid *bool `json:"isValid,omitempty"`
RegistrationId *uuid.UUID `json:"registrationId,omitempty"`
}
type HostAuthorizationDecision struct {
HasError *bool `json:"hasError,omitempty"`
HostAuthorizationError *HostAuthorizationError `json:"hostAuthorizationError,omitempty"`
HostAuthorizationId *uuid.UUID `json:"hostAuthorizationId,omitempty"`
}
type HostAuthorizationError string
type hostAuthorizationErrorValuesType struct {
None HostAuthorizationError
ClientIdRequired HostAuthorizationError
AccessDenied HostAuthorizationError
FailedToAuthorizeHost HostAuthorizationError
ClientIdNotFound HostAuthorizationError
InvalidClientId HostAuthorizationError
}
var HostAuthorizationErrorValues = hostAuthorizationErrorValuesType{
None: "none",
ClientIdRequired: "clientIdRequired",
AccessDenied: "accessDenied",
FailedToAuthorizeHost: "failedToAuthorizeHost",
ClientIdNotFound: "clientIdNotFound",
InvalidClientId: "invalidClientId",
}
type InitiationError string
type initiationErrorValuesType struct {
None InitiationError
ClientIdRequired InitiationError
InvalidClientId InitiationError
ResponseTypeRequired InitiationError
ResponseTypeNotSupported InitiationError
ScopeRequired InitiationError
InvalidScope InitiationError
RedirectUriRequired InitiationError
InsecureRedirectUri InitiationError
InvalidRedirectUri InitiationError
}
var InitiationErrorValues = initiationErrorValuesType{
None: "none",
ClientIdRequired: "clientIdRequired",
InvalidClientId: "invalidClientId",
ResponseTypeRequired: "responseTypeRequired",
ResponseTypeNotSupported: "responseTypeNotSupported",
ScopeRequired: "scopeRequired",
InvalidScope: "invalidScope",
RedirectUriRequired: "redirectUriRequired",
InsecureRedirectUri: "insecureRedirectUri",
InvalidRedirectUri: "invalidRedirectUri",
}
type RefreshTokenGrant struct {
GrantType *GrantType `json:"grantType,omitempty"`
Jwt *webapi.JsonWebToken `json:"jwt,omitempty"`
}
type Registration struct {
ClientType *ClientType `json:"clientType,omitempty"`
IdentityId *uuid.UUID `json:"identityId,omitempty"`
Issuer *string `json:"issuer,omitempty"`
IsValid *bool `json:"isValid,omitempty"`
IsWellKnown *bool `json:"isWellKnown,omitempty"`
OrganizationLocation *string `json:"organizationLocation,omitempty"`
OrganizationName *string `json:"organizationName,omitempty"`
// Raw cert data string from public key. This will be used for authenticating medium trust clients.
PublicKey *string `json:"publicKey,omitempty"`
RedirectUris *[]string `json:"redirectUris,omitempty"`
RegistrationDescription *string `json:"registrationDescription,omitempty"`
RegistrationId *uuid.UUID `json:"registrationId,omitempty"`
RegistrationLocation *string `json:"registrationLocation,omitempty"`
RegistrationLogoSecureLocation *string `json:"registrationLogoSecureLocation,omitempty"`
RegistrationName *string `json:"registrationName,omitempty"`
RegistrationPrivacyStatementLocation *string `json:"registrationPrivacyStatementLocation,omitempty"`
RegistrationTermsOfServiceLocation *string `json:"registrationTermsOfServiceLocation,omitempty"`
ResponseTypes *string `json:"responseTypes,omitempty"`
Scopes *string `json:"scopes,omitempty"`
Secret *string `json:"secret,omitempty"`
SecretValidTo *azuredevops.Time `json:"secretValidTo,omitempty"`
SecretVersionId *uuid.UUID `json:"secretVersionId,omitempty"`
ValidFrom *azuredevops.Time `json:"validFrom,omitempty"`
}
type ResponseType string
type responseTypeValuesType struct {
None ResponseType
Assertion ResponseType
IdToken ResponseType
TenantPicker ResponseType
SignoutToken ResponseType
AppToken ResponseType
Code ResponseType
}
var ResponseTypeValues = responseTypeValuesType{
None: "none",
Assertion: "assertion",
IdToken: "idToken",
TenantPicker: "tenantPicker",
SignoutToken: "signoutToken",
AppToken: "appToken",
Code: "code",
}
type SessionToken struct {
AccessId *uuid.UUID `json:"accessId,omitempty"`
// This is populated when user requests a compact token. The alternate token value is self describing token.
AlternateToken *string `json:"alternateToken,omitempty"`
AuthorizationId *uuid.UUID `json:"authorizationId,omitempty"`
Claims *map[string]string `json:"claims,omitempty"`
ClientId *uuid.UUID `json:"clientId,omitempty"`
DisplayName *string `json:"displayName,omitempty"`
HostAuthorizationId *uuid.UUID `json:"hostAuthorizationId,omitempty"`
IsPublic *bool `json:"isPublic,omitempty"`
IsValid *bool `json:"isValid,omitempty"`
PublicData *string `json:"publicData,omitempty"`
Scope *string `json:"scope,omitempty"`
Source *string `json:"source,omitempty"`
TargetAccounts *[]uuid.UUID `json:"targetAccounts,omitempty"`
// This is computed and not returned in Get queries
Token *string `json:"token,omitempty"`
UserId *uuid.UUID `json:"userId,omitempty"`
ValidFrom *azuredevops.Time `json:"validFrom,omitempty"`
ValidTo *azuredevops.Time `json:"validTo,omitempty"`
}
type TokenError string
type tokenErrorValuesType struct {
None TokenError
GrantTypeRequired TokenError
AuthorizationGrantRequired TokenError
ClientSecretRequired TokenError
RedirectUriRequired TokenError
InvalidAuthorizationGrant TokenError
InvalidAuthorizationScopes TokenError
InvalidRefreshToken TokenError
AuthorizationNotFound TokenError
AuthorizationGrantExpired TokenError
AccessAlreadyIssued TokenError
InvalidRedirectUri TokenError
AccessTokenNotFound TokenError
InvalidAccessToken TokenError
AccessTokenAlreadyRefreshed TokenError
InvalidClientSecret TokenError
ClientSecretExpired TokenError
ServerError TokenError
AccessDenied TokenError
AccessTokenKeyRequired TokenError
InvalidAccessTokenKey TokenError
FailedToGetAccessToken TokenError
InvalidClientId TokenError
InvalidClient TokenError
InvalidValidTo TokenError
InvalidUserId TokenError
FailedToIssueAccessToken TokenError
AuthorizationGrantScopeMissing TokenError
InvalidPublicAccessTokenKey TokenError
InvalidPublicAccessToken TokenError
PublicFeatureFlagNotEnabled TokenError
SshPolicyDisabled TokenError
}
var TokenErrorValues = tokenErrorValuesType{
None: "none",
GrantTypeRequired: "grantTypeRequired",
AuthorizationGrantRequired: "authorizationGrantRequired",
ClientSecretRequired: "clientSecretRequired",
RedirectUriRequired: "redirectUriRequired",
InvalidAuthorizationGrant: "invalidAuthorizationGrant",
InvalidAuthorizationScopes: "invalidAuthorizationScopes",
InvalidRefreshToken: "invalidRefreshToken",
AuthorizationNotFound: "authorizationNotFound",
AuthorizationGrantExpired: "authorizationGrantExpired",
AccessAlreadyIssued: "accessAlreadyIssued",
InvalidRedirectUri: "invalidRedirectUri",
AccessTokenNotFound: "accessTokenNotFound",
InvalidAccessToken: "invalidAccessToken",
AccessTokenAlreadyRefreshed: "accessTokenAlreadyRefreshed",
InvalidClientSecret: "invalidClientSecret",
ClientSecretExpired: "clientSecretExpired",
ServerError: "serverError",
AccessDenied: "accessDenied",
AccessTokenKeyRequired: "accessTokenKeyRequired",
InvalidAccessTokenKey: "invalidAccessTokenKey",
FailedToGetAccessToken: "failedToGetAccessToken",
InvalidClientId: "invalidClientId",
InvalidClient: "invalidClient",
InvalidValidTo: "invalidValidTo",
InvalidUserId: "invalidUserId",
FailedToIssueAccessToken: "failedToIssueAccessToken",
AuthorizationGrantScopeMissing: "authorizationGrantScopeMissing",
InvalidPublicAccessTokenKey: "invalidPublicAccessTokenKey",
InvalidPublicAccessToken: "invalidPublicAccessToken",
PublicFeatureFlagNotEnabled: "publicFeatureFlagNotEnabled",
SshPolicyDisabled: "sshPolicyDisabled",
}

View File

@ -0,0 +1,80 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package distributedtaskcommon
type AuthorizationHeader struct {
Name *string `json:"name,omitempty"`
Value *string `json:"value,omitempty"`
}
// Represents binding of data source for the service endpoint request.
type DataSourceBindingBase struct {
// Pagination format supported by this data source(ContinuationToken/SkipTop).
CallbackContextTemplate *string `json:"callbackContextTemplate,omitempty"`
// Subsequent calls needed?
CallbackRequiredTemplate *string `json:"callbackRequiredTemplate,omitempty"`
// Gets or sets the name of the data source.
DataSourceName *string `json:"dataSourceName,omitempty"`
// Gets or sets the endpoint Id.
EndpointId *string `json:"endpointId,omitempty"`
// Gets or sets the url of the service endpoint.
EndpointUrl *string `json:"endpointUrl,omitempty"`
// Gets or sets the authorization headers.
Headers *[]AuthorizationHeader `json:"headers,omitempty"`
// Defines the initial value of the query params
InitialContextTemplate *string `json:"initialContextTemplate,omitempty"`
// Gets or sets the parameters for the data source.
Parameters *map[string]string `json:"parameters,omitempty"`
// Gets or sets http request body
RequestContent *string `json:"requestContent,omitempty"`
// Gets or sets http request verb
RequestVerb *string `json:"requestVerb,omitempty"`
// Gets or sets the result selector.
ResultSelector *string `json:"resultSelector,omitempty"`
// Gets or sets the result template.
ResultTemplate *string `json:"resultTemplate,omitempty"`
// Gets or sets the target of the data source.
Target *string `json:"target,omitempty"`
}
type ProcessParameters struct {
DataSourceBindings *[]DataSourceBindingBase `json:"dataSourceBindings,omitempty"`
Inputs *[]TaskInputDefinitionBase `json:"inputs,omitempty"`
SourceDefinitions *[]TaskSourceDefinitionBase `json:"sourceDefinitions,omitempty"`
}
type TaskInputDefinitionBase struct {
Aliases *[]string `json:"aliases,omitempty"`
DefaultValue *string `json:"defaultValue,omitempty"`
GroupName *string `json:"groupName,omitempty"`
HelpMarkDown *string `json:"helpMarkDown,omitempty"`
Label *string `json:"label,omitempty"`
Name *string `json:"name,omitempty"`
Options *map[string]string `json:"options,omitempty"`
Properties *map[string]string `json:"properties,omitempty"`
Required *bool `json:"required,omitempty"`
Type *string `json:"type,omitempty"`
Validation *TaskInputValidation `json:"validation,omitempty"`
VisibleRule *string `json:"visibleRule,omitempty"`
}
type TaskInputValidation struct {
// Conditional expression
Expression *string `json:"expression,omitempty"`
// Message explaining how user can correct if validation fails
Message *string `json:"message,omitempty"`
}
type TaskSourceDefinitionBase struct {
AuthKey *string `json:"authKey,omitempty"`
Endpoint *string `json:"endpoint,omitempty"`
KeySelector *string `json:"keySelector,omitempty"`
Selector *string `json:"selector,omitempty"`
Target *string `json:"target,omitempty"`
}

View File

@ -0,0 +1,17 @@
package azuredevops
type ArgumentNilError struct {
ArgumentName string
}
func (e ArgumentNilError) Error() string {
return "Argument " + e.ArgumentName + " can not be nil"
}
type ArgumentNilOrEmptyError struct {
ArgumentName string
}
func (e ArgumentNilOrEmptyError) Error() string {
return "Argument " + e.ArgumentName + " can not be nil or empty"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
module github.com/microsoft/azure-devops-go-api/azuredevops
go 1.12
require github.com/google/uuid v1.1.1

View File

@ -0,0 +1,2 @@
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=

View File

@ -0,0 +1,942 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package identity
import (
"bytes"
"context"
"encoding/json"
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/delegatedauthorization"
"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
"net/http"
"net/url"
"strconv"
)
var ResourceAreaId, _ = uuid.Parse("8a3d49b8-91f0-46ef-b33d-dda338c25db3")
type Client struct {
Client azuredevops.Client
}
func NewClient(ctx context.Context, connection *azuredevops.Connection) (*Client, error) {
client, err := connection.GetClientByResourceAreaId(ctx, ResourceAreaId)
if err != nil {
return nil, err
}
return &Client{
Client: *client,
}, nil
}
// [Preview API]
func (client *Client) CreateOrBindWithClaims(ctx context.Context, args CreateOrBindWithClaimsArgs) (*Identity, error) {
if args.SourceIdentity == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.SourceIdentity"}
}
body, marshalErr := json.Marshal(*args.SourceIdentity)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("90ddfe71-171c-446c-bf3b-b597cd562afd")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Identity
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateOrBindWithClaims function
type CreateOrBindWithClaimsArgs struct {
// (required)
SourceIdentity *Identity
}
// [Preview API]
func (client *Client) GetDescriptorById(ctx context.Context, args GetDescriptorByIdArgs) (*string, error) {
routeValues := make(map[string]string)
if args.Id == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Id"}
}
routeValues["id"] = (*args.Id).String()
queryParams := url.Values{}
if args.IsMasterId != nil {
queryParams.Add("isMasterId", strconv.FormatBool(*args.IsMasterId))
}
locationId, _ := uuid.Parse("a230389a-94f2-496c-839f-c929787496dd")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue string
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetDescriptorById function
type GetDescriptorByIdArgs struct {
// (required)
Id *uuid.UUID
// (optional)
IsMasterId *bool
}
func (client *Client) CreateGroups(ctx context.Context, args CreateGroupsArgs) (*[]Identity, error) {
if args.Container == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Container"}
}
body, marshalErr := json.Marshal(args.Container)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("5966283b-4196-4d57-9211-1b68f41ec1c2")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Identity
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateGroups function
type CreateGroupsArgs struct {
// (required)
Container interface{}
}
func (client *Client) DeleteGroup(ctx context.Context, args DeleteGroupArgs) error {
routeValues := make(map[string]string)
if args.GroupId == nil || *args.GroupId == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.GroupId"}
}
routeValues["groupId"] = *args.GroupId
locationId, _ := uuid.Parse("5966283b-4196-4d57-9211-1b68f41ec1c2")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the DeleteGroup function
type DeleteGroupArgs struct {
// (required)
GroupId *string
}
func (client *Client) ListGroups(ctx context.Context, args ListGroupsArgs) (*[]Identity, error) {
queryParams := url.Values{}
if args.ScopeIds != nil {
queryParams.Add("scopeIds", *args.ScopeIds)
}
if args.Recurse != nil {
queryParams.Add("recurse", strconv.FormatBool(*args.Recurse))
}
if args.Deleted != nil {
queryParams.Add("deleted", strconv.FormatBool(*args.Deleted))
}
if args.Properties != nil {
queryParams.Add("properties", *args.Properties)
}
locationId, _ := uuid.Parse("5966283b-4196-4d57-9211-1b68f41ec1c2")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Identity
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ListGroups function
type ListGroupsArgs struct {
// (optional)
ScopeIds *string
// (optional)
Recurse *bool
// (optional)
Deleted *bool
// (optional)
Properties *string
}
func (client *Client) GetIdentityChanges(ctx context.Context, args GetIdentityChangesArgs) (*ChangedIdentities, error) {
queryParams := url.Values{}
if args.IdentitySequenceId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "identitySequenceId"}
}
queryParams.Add("identitySequenceId", strconv.Itoa(*args.IdentitySequenceId))
if args.GroupSequenceId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "groupSequenceId"}
}
queryParams.Add("groupSequenceId", strconv.Itoa(*args.GroupSequenceId))
if args.OrganizationIdentitySequenceId != nil {
queryParams.Add("organizationIdentitySequenceId", strconv.Itoa(*args.OrganizationIdentitySequenceId))
}
if args.PageSize != nil {
queryParams.Add("pageSize", strconv.Itoa(*args.PageSize))
}
if args.ScopeId != nil {
queryParams.Add("scopeId", (*args.ScopeId).String())
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue ChangedIdentities
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetIdentityChanges function
type GetIdentityChangesArgs struct {
// (required)
IdentitySequenceId *int
// (required)
GroupSequenceId *int
// (optional)
OrganizationIdentitySequenceId *int
// (optional)
PageSize *int
// (optional)
ScopeId *uuid.UUID
}
func (client *Client) GetUserIdentityIdsByDomainId(ctx context.Context, args GetUserIdentityIdsByDomainIdArgs) (*[]uuid.UUID, error) {
queryParams := url.Values{}
if args.DomainId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "domainId"}
}
queryParams.Add("domainId", (*args.DomainId).String())
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []uuid.UUID
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetUserIdentityIdsByDomainId function
type GetUserIdentityIdsByDomainIdArgs struct {
// (required)
DomainId *uuid.UUID
}
func (client *Client) ReadIdentities(ctx context.Context, args ReadIdentitiesArgs) (*[]Identity, error) {
queryParams := url.Values{}
if args.Descriptors != nil {
queryParams.Add("descriptors", *args.Descriptors)
}
if args.IdentityIds != nil {
queryParams.Add("identityIds", *args.IdentityIds)
}
if args.SubjectDescriptors != nil {
queryParams.Add("subjectDescriptors", *args.SubjectDescriptors)
}
if args.SocialDescriptors != nil {
queryParams.Add("socialDescriptors", *args.SocialDescriptors)
}
if args.SearchFilter != nil {
queryParams.Add("searchFilter", *args.SearchFilter)
}
if args.FilterValue != nil {
queryParams.Add("filterValue", *args.FilterValue)
}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
if args.Properties != nil {
queryParams.Add("properties", *args.Properties)
}
if args.IncludeRestrictedVisibility != nil {
queryParams.Add("includeRestrictedVisibility", strconv.FormatBool(*args.IncludeRestrictedVisibility))
}
if args.Options != nil {
queryParams.Add("options", string(*args.Options))
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Identity
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadIdentities function
type ReadIdentitiesArgs struct {
// (optional)
Descriptors *string
// (optional)
IdentityIds *string
// (optional)
SubjectDescriptors *string
// (optional)
SocialDescriptors *string
// (optional)
SearchFilter *string
// (optional)
FilterValue *string
// (optional)
QueryMembership *QueryMembership
// (optional)
Properties *string
// (optional)
IncludeRestrictedVisibility *bool
// (optional)
Options *ReadIdentitiesOptions
}
func (client *Client) ReadIdentitiesByScope(ctx context.Context, args ReadIdentitiesByScopeArgs) (*[]Identity, error) {
queryParams := url.Values{}
if args.ScopeId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "scopeId"}
}
queryParams.Add("scopeId", (*args.ScopeId).String())
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
if args.Properties != nil {
queryParams.Add("properties", *args.Properties)
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Identity
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadIdentitiesByScope function
type ReadIdentitiesByScopeArgs struct {
// (required)
ScopeId *uuid.UUID
// (optional)
QueryMembership *QueryMembership
// (optional)
Properties *string
}
func (client *Client) ReadIdentity(ctx context.Context, args ReadIdentityArgs) (*Identity, error) {
routeValues := make(map[string]string)
if args.IdentityId == nil || *args.IdentityId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.IdentityId"}
}
routeValues["identityId"] = *args.IdentityId
queryParams := url.Values{}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
if args.Properties != nil {
queryParams.Add("properties", *args.Properties)
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Identity
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadIdentity function
type ReadIdentityArgs struct {
// (required)
IdentityId *string
// (optional)
QueryMembership *QueryMembership
// (optional)
Properties *string
}
func (client *Client) UpdateIdentities(ctx context.Context, args UpdateIdentitiesArgs) (*[]IdentityUpdateData, error) {
if args.Identities == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Identities"}
}
body, marshalErr := json.Marshal(*args.Identities)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []IdentityUpdateData
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the UpdateIdentities function
type UpdateIdentitiesArgs struct {
// (required)
Identities *azuredevops.VssJsonCollectionWrapper
}
func (client *Client) UpdateIdentity(ctx context.Context, args UpdateIdentityArgs) error {
if args.Identity == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.Identity"}
}
routeValues := make(map[string]string)
if args.IdentityId == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.IdentityId"}
}
routeValues["identityId"] = (*args.IdentityId).String()
body, marshalErr := json.Marshal(*args.Identity)
if marshalErr != nil {
return marshalErr
}
locationId, _ := uuid.Parse("28010c54-d0c0-4c89-a5b0-1c9e188b9fb7")
_, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the UpdateIdentity function
type UpdateIdentityArgs struct {
// (required)
Identity *Identity
// (required)
IdentityId *uuid.UUID
}
func (client *Client) CreateIdentity(ctx context.Context, args CreateIdentityArgs) (*Identity, error) {
if args.FrameworkIdentityInfo == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.FrameworkIdentityInfo"}
}
body, marshalErr := json.Marshal(*args.FrameworkIdentityInfo)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("dd55f0eb-6ea2-4fe4-9ebe-919e7dd1dfb4")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Identity
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateIdentity function
type CreateIdentityArgs struct {
// (required)
FrameworkIdentityInfo *FrameworkIdentityInfo
}
// [Preview API]
func (client *Client) ReadIdentityBatch(ctx context.Context, args ReadIdentityBatchArgs) (*[]Identity, error) {
if args.BatchInfo == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.BatchInfo"}
}
body, marshalErr := json.Marshal(*args.BatchInfo)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("299e50df-fe45-4d3a-8b5b-a5836fac74dc")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1-preview.1", nil, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []Identity
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadIdentityBatch function
type ReadIdentityBatchArgs struct {
// (required)
BatchInfo *IdentityBatchInfo
}
// [Preview API]
func (client *Client) GetIdentitySnapshot(ctx context.Context, args GetIdentitySnapshotArgs) (*IdentitySnapshot, error) {
routeValues := make(map[string]string)
if args.ScopeId == nil || *args.ScopeId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ScopeId"}
}
routeValues["scopeId"] = *args.ScopeId
locationId, _ := uuid.Parse("d56223df-8ccd-45c9-89b4-eddf692400d7")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue IdentitySnapshot
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetIdentitySnapshot function
type GetIdentitySnapshotArgs struct {
// (required)
ScopeId *string
}
// Read the max sequence id of all the identities.
func (client *Client) GetMaxSequenceId(ctx context.Context, args GetMaxSequenceIdArgs) (*uint64, error) {
locationId, _ := uuid.Parse("e4a70778-cb2c-4e85-b7cc-3f3c7ae2d408")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue uint64
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetMaxSequenceId function
type GetMaxSequenceIdArgs struct {
}
// Read identity of the home tenant request user.
func (client *Client) GetSelf(ctx context.Context, args GetSelfArgs) (*IdentitySelf, error) {
locationId, _ := uuid.Parse("4bb02b5b-c120-4be2-b68e-21f7c50a4b82")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", nil, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue IdentitySelf
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetSelf function
type GetSelfArgs struct {
}
// [Preview API]
func (client *Client) AddMember(ctx context.Context, args AddMemberArgs) (*bool, error) {
routeValues := make(map[string]string)
if args.ContainerId == nil || *args.ContainerId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerId"}
}
routeValues["containerId"] = *args.ContainerId
if args.MemberId == nil || *args.MemberId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.MemberId"}
}
routeValues["memberId"] = *args.MemberId
locationId, _ := uuid.Parse("8ba35978-138e-41f8-8963-7b1ea2c5f775")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue bool
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the AddMember function
type AddMemberArgs struct {
// (required)
ContainerId *string
// (required)
MemberId *string
}
// [Preview API]
func (client *Client) ReadMember(ctx context.Context, args ReadMemberArgs) (*string, error) {
routeValues := make(map[string]string)
if args.ContainerId == nil || *args.ContainerId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerId"}
}
routeValues["containerId"] = *args.ContainerId
if args.MemberId == nil || *args.MemberId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.MemberId"}
}
routeValues["memberId"] = *args.MemberId
queryParams := url.Values{}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
locationId, _ := uuid.Parse("8ba35978-138e-41f8-8963-7b1ea2c5f775")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue string
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadMember function
type ReadMemberArgs struct {
// (required)
ContainerId *string
// (required)
MemberId *string
// (optional)
QueryMembership *QueryMembership
}
// [Preview API]
func (client *Client) ReadMembers(ctx context.Context, args ReadMembersArgs) (*[]string, error) {
routeValues := make(map[string]string)
if args.ContainerId == nil || *args.ContainerId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerId"}
}
routeValues["containerId"] = *args.ContainerId
queryParams := url.Values{}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
locationId, _ := uuid.Parse("8ba35978-138e-41f8-8963-7b1ea2c5f775")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []string
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadMembers function
type ReadMembersArgs struct {
// (required)
ContainerId *string
// (optional)
QueryMembership *QueryMembership
}
// [Preview API]
func (client *Client) RemoveMember(ctx context.Context, args RemoveMemberArgs) (*bool, error) {
routeValues := make(map[string]string)
if args.ContainerId == nil || *args.ContainerId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerId"}
}
routeValues["containerId"] = *args.ContainerId
if args.MemberId == nil || *args.MemberId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.MemberId"}
}
routeValues["memberId"] = *args.MemberId
locationId, _ := uuid.Parse("8ba35978-138e-41f8-8963-7b1ea2c5f775")
resp, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue bool
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the RemoveMember function
type RemoveMemberArgs struct {
// (required)
ContainerId *string
// (required)
MemberId *string
}
// [Preview API]
func (client *Client) ReadMemberOf(ctx context.Context, args ReadMemberOfArgs) (*string, error) {
routeValues := make(map[string]string)
if args.MemberId == nil || *args.MemberId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.MemberId"}
}
routeValues["memberId"] = *args.MemberId
if args.ContainerId == nil || *args.ContainerId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.ContainerId"}
}
routeValues["containerId"] = *args.ContainerId
queryParams := url.Values{}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
locationId, _ := uuid.Parse("22865b02-9e4a-479e-9e18-e35b8803b8a0")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue string
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadMemberOf function
type ReadMemberOfArgs struct {
// (required)
MemberId *string
// (required)
ContainerId *string
// (optional)
QueryMembership *QueryMembership
}
// [Preview API]
func (client *Client) ReadMembersOf(ctx context.Context, args ReadMembersOfArgs) (*[]string, error) {
routeValues := make(map[string]string)
if args.MemberId == nil || *args.MemberId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.MemberId"}
}
routeValues["memberId"] = *args.MemberId
queryParams := url.Values{}
if args.QueryMembership != nil {
queryParams.Add("queryMembership", string(*args.QueryMembership))
}
locationId, _ := uuid.Parse("22865b02-9e4a-479e-9e18-e35b8803b8a0")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []string
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the ReadMembersOf function
type ReadMembersOfArgs struct {
// (required)
MemberId *string
// (optional)
QueryMembership *QueryMembership
}
// [Preview API]
func (client *Client) CreateScope(ctx context.Context, args CreateScopeArgs) (*IdentityScope, error) {
if args.Info == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Info"}
}
routeValues := make(map[string]string)
if args.ScopeId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ScopeId"}
}
routeValues["scopeId"] = (*args.ScopeId).String()
body, marshalErr := json.Marshal(*args.Info)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("4e11e2bf-1e79-4eb5-8f34-a6337bd0de38")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1-preview.2", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue IdentityScope
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreateScope function
type CreateScopeArgs struct {
// (required)
Info *CreateScopeInfo
// (required)
ScopeId *uuid.UUID
}
// [Preview API]
func (client *Client) DeleteScope(ctx context.Context, args DeleteScopeArgs) error {
routeValues := make(map[string]string)
if args.ScopeId == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.ScopeId"}
}
routeValues["scopeId"] = (*args.ScopeId).String()
locationId, _ := uuid.Parse("4e11e2bf-1e79-4eb5-8f34-a6337bd0de38")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1-preview.2", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the DeleteScope function
type DeleteScopeArgs struct {
// (required)
ScopeId *uuid.UUID
}
// [Preview API]
func (client *Client) GetScopeById(ctx context.Context, args GetScopeByIdArgs) (*IdentityScope, error) {
routeValues := make(map[string]string)
if args.ScopeId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ScopeId"}
}
routeValues["scopeId"] = (*args.ScopeId).String()
locationId, _ := uuid.Parse("4e11e2bf-1e79-4eb5-8f34-a6337bd0de38")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.2", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue IdentityScope
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetScopeById function
type GetScopeByIdArgs struct {
// (required)
ScopeId *uuid.UUID
}
// [Preview API]
func (client *Client) GetScopeByName(ctx context.Context, args GetScopeByNameArgs) (*IdentityScope, error) {
queryParams := url.Values{}
if args.ScopeName == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "scopeName"}
}
queryParams.Add("scopeName", *args.ScopeName)
locationId, _ := uuid.Parse("4e11e2bf-1e79-4eb5-8f34-a6337bd0de38")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.2", nil, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue IdentityScope
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetScopeByName function
type GetScopeByNameArgs struct {
// (required)
ScopeName *string
}
// [Preview API]
func (client *Client) UpdateScope(ctx context.Context, args UpdateScopeArgs) error {
if args.PatchDocument == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.PatchDocument"}
}
routeValues := make(map[string]string)
if args.ScopeId == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.ScopeId"}
}
routeValues["scopeId"] = (*args.ScopeId).String()
body, marshalErr := json.Marshal(*args.PatchDocument)
if marshalErr != nil {
return marshalErr
}
locationId, _ := uuid.Parse("4e11e2bf-1e79-4eb5-8f34-a6337bd0de38")
_, err := client.Client.Send(ctx, http.MethodPatch, locationId, "5.1-preview.2", routeValues, nil, bytes.NewReader(body), "application/json-patch+json", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the UpdateScope function
type UpdateScopeArgs struct {
// (required)
PatchDocument *[]webapi.JsonPatchOperation
// (required)
ScopeId *uuid.UUID
}
// [Preview API]
func (client *Client) GetSignedInToken(ctx context.Context, args GetSignedInTokenArgs) (*delegatedauthorization.AccessTokenResult, error) {
locationId, _ := uuid.Parse("6074ff18-aaad-4abb-a41e-5c75f6178057")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", nil, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue delegatedauthorization.AccessTokenResult
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetSignedInToken function
type GetSignedInTokenArgs struct {
}
// [Preview API]
func (client *Client) GetSignoutToken(ctx context.Context, args GetSignoutTokenArgs) (*delegatedauthorization.AccessTokenResult, error) {
locationId, _ := uuid.Parse("be39e83c-7529-45e9-9c67-0410885880da")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", nil, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue delegatedauthorization.AccessTokenResult
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetSignoutToken function
type GetSignoutTokenArgs struct {
}
// [Preview API]
func (client *Client) GetTenant(ctx context.Context, args GetTenantArgs) (*TenantInfo, error) {
routeValues := make(map[string]string)
if args.TenantId == nil || *args.TenantId == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.TenantId"}
}
routeValues["tenantId"] = *args.TenantId
locationId, _ := uuid.Parse("5f0a1723-2e2c-4c31-8cae-002d01bdd592")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue TenantInfo
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetTenant function
type GetTenantArgs struct {
// (required)
TenantId *string
}

View File

@ -0,0 +1,234 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package identity
import (
"github.com/google/uuid"
)
// Container class for changed identities
type ChangedIdentities struct {
// Changed Identities
Identities *[]Identity `json:"identities,omitempty"`
// More data available, set to true if pagesize is specified.
MoreData *bool `json:"moreData,omitempty"`
// Last Identity SequenceId
SequenceContext *ChangedIdentitiesContext `json:"sequenceContext,omitempty"`
}
// Context class for changed identities
type ChangedIdentitiesContext struct {
// Last Group SequenceId
GroupSequenceId *int `json:"groupSequenceId,omitempty"`
// Last Identity SequenceId
IdentitySequenceId *int `json:"identitySequenceId,omitempty"`
// Last Group OrganizationIdentitySequenceId
OrganizationIdentitySequenceId *int `json:"organizationIdentitySequenceId,omitempty"`
// Page size
PageSize *int `json:"pageSize,omitempty"`
}
type CreateScopeInfo struct {
AdminGroupDescription *string `json:"adminGroupDescription,omitempty"`
AdminGroupName *string `json:"adminGroupName,omitempty"`
CreatorId *uuid.UUID `json:"creatorId,omitempty"`
ParentScopeId *uuid.UUID `json:"parentScopeId,omitempty"`
ScopeName *string `json:"scopeName,omitempty"`
ScopeType *GroupScopeType `json:"scopeType,omitempty"`
}
type FrameworkIdentityInfo struct {
DisplayName *string `json:"displayName,omitempty"`
Identifier *string `json:"identifier,omitempty"`
IdentityType *FrameworkIdentityType `json:"identityType,omitempty"`
Role *string `json:"role,omitempty"`
}
type FrameworkIdentityType string
type frameworkIdentityTypeValuesType struct {
None FrameworkIdentityType
ServiceIdentity FrameworkIdentityType
AggregateIdentity FrameworkIdentityType
ImportedIdentity FrameworkIdentityType
}
var FrameworkIdentityTypeValues = frameworkIdentityTypeValuesType{
None: "none",
ServiceIdentity: "serviceIdentity",
AggregateIdentity: "aggregateIdentity",
ImportedIdentity: "importedIdentity",
}
type GroupMembership struct {
Active *bool `json:"active,omitempty"`
Descriptor *string `json:"descriptor,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
QueriedId *uuid.UUID `json:"queriedId,omitempty"`
}
type GroupScopeType string
type groupScopeTypeValuesType struct {
Generic GroupScopeType
ServiceHost GroupScopeType
TeamProject GroupScopeType
}
var GroupScopeTypeValues = groupScopeTypeValuesType{
Generic: "generic",
ServiceHost: "serviceHost",
TeamProject: "teamProject",
}
type Identity struct {
// The custom display name for the identity (if any). Setting this property to an empty string will clear the existing custom display name. Setting this property to null will not affect the existing persisted value (since null values do not get sent over the wire or to the database)
CustomDisplayName *string `json:"customDisplayName,omitempty"`
Descriptor *string `json:"descriptor,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
IsActive *bool `json:"isActive,omitempty"`
IsContainer *bool `json:"isContainer,omitempty"`
MasterId *uuid.UUID `json:"masterId,omitempty"`
MemberIds *[]uuid.UUID `json:"memberIds,omitempty"`
MemberOf *[]string `json:"memberOf,omitempty"`
Members *[]string `json:"members,omitempty"`
MetaTypeId *int `json:"metaTypeId,omitempty"`
Properties interface{} `json:"properties,omitempty"`
// The display name for the identity as specified by the source identity provider.
ProviderDisplayName *string `json:"providerDisplayName,omitempty"`
ResourceVersion *int `json:"resourceVersion,omitempty"`
SocialDescriptor *string `json:"socialDescriptor,omitempty"`
SubjectDescriptor *string `json:"subjectDescriptor,omitempty"`
UniqueUserId *int `json:"uniqueUserId,omitempty"`
}
// Base Identity class to allow "trimmed" identity class in the GetConnectionData API Makes sure that on-the-wire representations of the derived classes are compatible with each other (e.g. Server responds with PublicIdentity object while client deserializes it as Identity object) Derived classes should not have additional [DataMember] properties
type IdentityBase struct {
// The custom display name for the identity (if any). Setting this property to an empty string will clear the existing custom display name. Setting this property to null will not affect the existing persisted value (since null values do not get sent over the wire or to the database)
CustomDisplayName *string `json:"customDisplayName,omitempty"`
Descriptor *string `json:"descriptor,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
IsActive *bool `json:"isActive,omitempty"`
IsContainer *bool `json:"isContainer,omitempty"`
MasterId *uuid.UUID `json:"masterId,omitempty"`
MemberIds *[]uuid.UUID `json:"memberIds,omitempty"`
MemberOf *[]string `json:"memberOf,omitempty"`
Members *[]string `json:"members,omitempty"`
MetaTypeId *int `json:"metaTypeId,omitempty"`
Properties interface{} `json:"properties,omitempty"`
// The display name for the identity as specified by the source identity provider.
ProviderDisplayName *string `json:"providerDisplayName,omitempty"`
ResourceVersion *int `json:"resourceVersion,omitempty"`
SocialDescriptor *string `json:"socialDescriptor,omitempty"`
SubjectDescriptor *string `json:"subjectDescriptor,omitempty"`
UniqueUserId *int `json:"uniqueUserId,omitempty"`
}
type IdentityBatchInfo struct {
Descriptors *[]string `json:"descriptors,omitempty"`
IdentityIds *[]uuid.UUID `json:"identityIds,omitempty"`
IncludeRestrictedVisibility *bool `json:"includeRestrictedVisibility,omitempty"`
PropertyNames *[]string `json:"propertyNames,omitempty"`
QueryMembership *QueryMembership `json:"queryMembership,omitempty"`
SocialDescriptors *[]string `json:"socialDescriptors,omitempty"`
SubjectDescriptors *[]string `json:"subjectDescriptors,omitempty"`
}
type IdentityScope struct {
Administrators *string `json:"administrators,omitempty"`
Id *uuid.UUID `json:"id,omitempty"`
IsActive *bool `json:"isActive,omitempty"`
IsGlobal *bool `json:"isGlobal,omitempty"`
LocalScopeId *uuid.UUID `json:"localScopeId,omitempty"`
Name *string `json:"name,omitempty"`
ParentId *uuid.UUID `json:"parentId,omitempty"`
ScopeType *GroupScopeType `json:"scopeType,omitempty"`
SecuringHostId *uuid.UUID `json:"securingHostId,omitempty"`
SubjectDescriptor *string `json:"subjectDescriptor,omitempty"`
}
// Identity information.
type IdentitySelf struct {
// The UserPrincipalName (UPN) of the account. This value comes from the source provider.
AccountName *string `json:"accountName,omitempty"`
// The display name. For AAD accounts with multiple tenants this is the display name of the profile in the home tenant.
DisplayName *string `json:"displayName,omitempty"`
// This represents the name of the container of origin. For AAD accounts this is the tenantID of the home tenant. For MSA accounts this is the string "Windows Live ID".
Domain *string `json:"domain,omitempty"`
// This is the VSID of the home tenant profile. If the profile is signed into the home tenant or if the profile has no tenants then this Id is the same as the Id returned by the profile/profiles/me endpoint. Going forward it is recommended that you use the combined values of Origin, OriginId and Domain to uniquely identify a user rather than this Id.
Id *uuid.UUID `json:"id,omitempty"`
// The type of source provider for the origin identifier. For MSA accounts this is "msa". For AAD accounts this is "aad".
Origin *string `json:"origin,omitempty"`
// The unique identifier from the system of origin. If there are multiple tenants this is the unique identifier of the account in the home tenant. (For MSA this is the PUID in hex notation, for AAD this is the object id.)
OriginId *string `json:"originId,omitempty"`
// For AAD accounts this is all of the tenants that this account is a member of.
Tenants *[]TenantInfo `json:"tenants,omitempty"`
}
type IdentitySnapshot struct {
Groups *[]Identity `json:"groups,omitempty"`
IdentityIds *[]uuid.UUID `json:"identityIds,omitempty"`
Memberships *[]GroupMembership `json:"memberships,omitempty"`
ScopeId *uuid.UUID `json:"scopeId,omitempty"`
Scopes *[]IdentityScope `json:"scopes,omitempty"`
}
type IdentityUpdateData struct {
Id *uuid.UUID `json:"id,omitempty"`
Index *int `json:"index,omitempty"`
Updated *bool `json:"updated,omitempty"`
}
type QueryMembership string
type queryMembershipValuesType struct {
None QueryMembership
Direct QueryMembership
Expanded QueryMembership
ExpandedUp QueryMembership
ExpandedDown QueryMembership
}
var QueryMembershipValues = queryMembershipValuesType{
// Query will not return any membership data
None: "none",
// Query will return only direct membership data
Direct: "direct",
// Query will return expanded membership data
Expanded: "expanded",
// Query will return expanded up membership data (parents only)
ExpandedUp: "expandedUp",
// Query will return expanded down membership data (children only)
ExpandedDown: "expandedDown",
}
// [Flags]
type ReadIdentitiesOptions string
type readIdentitiesOptionsValuesType struct {
None ReadIdentitiesOptions
FilterIllegalMemberships ReadIdentitiesOptions
}
var ReadIdentitiesOptionsValues = readIdentitiesOptionsValuesType{
None: "none",
FilterIllegalMemberships: "filterIllegalMemberships",
}
type SwapIdentityInfo struct {
Id1 *uuid.UUID `json:"id1,omitempty"`
Id2 *uuid.UUID `json:"id2,omitempty"`
}
type TenantInfo struct {
HomeTenant *bool `json:"homeTenant,omitempty"`
TenantId *uuid.UUID `json:"tenantId,omitempty"`
TenantName *string `json:"tenantName,omitempty"`
VerifiedDomains *[]string `json:"verifiedDomains,omitempty"`
}

View File

@ -0,0 +1,130 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package azuredevops
import (
"encoding/json"
"github.com/google/uuid"
"strconv"
"time"
)
// ApiResourceLocation Information about the location of a REST API resource
type ApiResourceLocation struct {
// Area name for this resource
Area *string `json:"area,omitempty"`
// Unique Identifier for this location
Id *uuid.UUID `json:"id,omitempty"`
// Maximum api version that this resource supports (current server version for this resource)
MaxVersion *string `json:"maxVersion,omitempty"`
// Minimum api version that this resource supports
MinVersion *string `json:"minVersion,omitempty"`
// The latest version of this resource location that is in "Release" (non-preview) mode
ReleasedVersion *string `json:"releasedVersion,omitempty"`
// Resource name
ResourceName *string `json:"resourceName,omitempty"`
// The current resource version supported by this resource location
ResourceVersion *int `json:"resourceVersion,omitempty"`
// This location's route template (templated relative path)
RouteTemplate *string `json:"routeTemplate,omitempty"`
}
// WrappedImproperError
type WrappedImproperError struct {
Count *int `json:"count,omitEmpty"`
Value *ImproperError `json:"value,omitEmpty"`
}
// ImproperError
type ImproperError struct {
Message *string `json:"Message,omitEmpty"`
}
// KeyValuePair
type KeyValuePair struct {
Key *interface{} `json:"key,omitEmpty"`
Value *interface{} `json:"value,omitEmpty"`
}
// ResourceAreaInfo
type ResourceAreaInfo struct {
Id *uuid.UUID `json:"id,omitempty"`
LocationUrl *string `json:"locationUrl,omitempty"`
Name *string `json:"name,omitempty"`
}
type Time struct {
Time time.Time
}
func (t *Time) UnmarshalJSON(b []byte) error {
t2 := time.Time{}
err := json.Unmarshal(b, &t2)
// ignore errors for 0001-01-01T00:00:00 dates. The Azure DevOps service
// returns default dates in a format that is invalid for a time.Time. The
// correct value would have a 'z' at the end to represent utc. We are going
// to ignore this error, and set the value to the default time.Time value.
// https://github.com/microsoft/azure-devops-go-api/issues/17
if err != nil {
if parseError, ok := err.(*time.ParseError); ok && parseError.Value == "\"0001-01-01T00:00:00\"" {
err = nil
}
}
t.Time = t2
return err
}
func (t *Time) MarshalJSON() ([]byte, error) {
return json.Marshal(t.Time)
}
func (t Time) String() string {
return t.Time.String()
}
func (t Time) Equal(u Time) bool {
return t.Time.Equal(u.Time)
}
// ServerSystemError
type ServerSystemError struct {
ClassName *string `json:"className,omitempty"`
InnerException *ServerSystemError `json:"innerException,omitempty"`
Message *string `json:"message,omitempty"`
}
func (e ServerSystemError) Error() string {
return *e.Message
}
// VssJsonCollectionWrapper -
type VssJsonCollectionWrapper struct {
Count *int `json:"count"`
Value *[]interface{} `json:"value"`
}
// WrappedError
type WrappedError struct {
ExceptionId *string `json:"$id,omitempty"`
InnerError *WrappedError `json:"innerException,omitempty"`
Message *string `json:"message,omitempty"`
TypeName *string `json:"typeName,omitempty"`
TypeKey *string `json:"typeKey,omitempty"`
ErrorCode *int `json:"errorCode,omitempty"`
EventId *int `json:"eventId,omitempty"`
CustomProperties *map[string]interface{} `json:"customProperties,omitempty"`
StatusCode *int
}
func (e WrappedError) Error() string {
if e.Message == nil {
if e.StatusCode != nil {
return "REST call returned status code " + strconv.Itoa(*e.StatusCode)
}
return ""
}
return *e.Message
}

View File

@ -0,0 +1,59 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package operations
import (
"context"
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"net/http"
"net/url"
)
type Client struct {
Client azuredevops.Client
}
func NewClient(ctx context.Context, connection *azuredevops.Connection) *Client {
client := connection.GetClientByUrl(connection.BaseUrl)
return &Client{
Client: *client,
}
}
// Gets an operation from the the operationId using the given pluginId.
func (client *Client) GetOperation(ctx context.Context, args GetOperationArgs) (*Operation, error) {
routeValues := make(map[string]string)
if args.OperationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.OperationId"}
}
routeValues["operationId"] = (*args.OperationId).String()
queryParams := url.Values{}
if args.PluginId != nil {
queryParams.Add("pluginId", (*args.PluginId).String())
}
locationId, _ := uuid.Parse("9a1b74b4-2ca8-4a9f-8470-c2f2e6fdc949")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue Operation
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetOperation function
type GetOperationArgs struct {
// (required) The ID for the operation.
OperationId *uuid.UUID
// (optional) The ID for the plugin.
PluginId *uuid.UUID
}

View File

@ -0,0 +1,77 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package operations
import (
"github.com/google/uuid"
)
// Contains information about the progress or result of an async operation.
type Operation struct {
// Unique identifier for the operation.
Id *uuid.UUID `json:"id,omitempty"`
// Unique identifier for the plugin.
PluginId *uuid.UUID `json:"pluginId,omitempty"`
// The current status of the operation.
Status *OperationStatus `json:"status,omitempty"`
// URL to get the full operation object.
Url *string `json:"url,omitempty"`
// Links to other related objects.
Links interface{} `json:"_links,omitempty"`
// Detailed messaged about the status of an operation.
DetailedMessage *string `json:"detailedMessage,omitempty"`
// Result message for an operation.
ResultMessage *string `json:"resultMessage,omitempty"`
// URL to the operation result.
ResultUrl *OperationResultReference `json:"resultUrl,omitempty"`
}
// Reference for an async operation.
type OperationReference struct {
// Unique identifier for the operation.
Id *uuid.UUID `json:"id,omitempty"`
// Unique identifier for the plugin.
PluginId *uuid.UUID `json:"pluginId,omitempty"`
// The current status of the operation.
Status *OperationStatus `json:"status,omitempty"`
// URL to get the full operation object.
Url *string `json:"url,omitempty"`
}
type OperationResultReference struct {
// URL to the operation result.
ResultUrl *string `json:"resultUrl,omitempty"`
}
// The status of an operation.
type OperationStatus string
type operationStatusValuesType struct {
NotSet OperationStatus
Queued OperationStatus
InProgress OperationStatus
Cancelled OperationStatus
Succeeded OperationStatus
Failed OperationStatus
}
var OperationStatusValues = operationStatusValuesType{
// The operation does not have a status set.
NotSet: "notSet",
// The operation has been queued.
Queued: "queued",
// The operation is in progress.
InProgress: "inProgress",
// The operation was cancelled by the user.
Cancelled: "cancelled",
// The operation completed successfully.
Succeeded: "succeeded",
// The operation completed with a failure.
Failed: "failed",
}

View File

@ -0,0 +1,463 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package policy
import (
"bytes"
"context"
"encoding/json"
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"net/http"
"net/url"
"strconv"
)
var ResourceAreaId, _ = uuid.Parse("fb13a388-40dd-4a04-b530-013a739c72ef")
type Client struct {
Client azuredevops.Client
}
func NewClient(ctx context.Context, connection *azuredevops.Connection) (*Client, error) {
client, err := connection.GetClientByResourceAreaId(ctx, ResourceAreaId)
if err != nil {
return nil, err
}
return &Client{
Client: *client,
}, nil
}
// Create a policy configuration of a given policy type.
func (client *Client) CreatePolicyConfiguration(ctx context.Context, args CreatePolicyConfigurationArgs) (*PolicyConfiguration, error) {
if args.Configuration == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Configuration"}
}
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId != nil {
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
}
body, marshalErr := json.Marshal(*args.Configuration)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("dad91cbe-d183-45f8-9c6e-9c1164472121")
resp, err := client.Client.Send(ctx, http.MethodPost, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyConfiguration
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the CreatePolicyConfiguration function
type CreatePolicyConfigurationArgs struct {
// (required) The policy configuration to create.
Configuration *PolicyConfiguration
// (required) Project ID or project name
Project *string
// (optional)
ConfigurationId *int
}
// Delete a policy configuration by its ID.
func (client *Client) DeletePolicyConfiguration(ctx context.Context, args DeletePolicyConfigurationArgs) error {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId == nil {
return &azuredevops.ArgumentNilError{ArgumentName: "args.ConfigurationId"}
}
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
locationId, _ := uuid.Parse("dad91cbe-d183-45f8-9c6e-9c1164472121")
_, err := client.Client.Send(ctx, http.MethodDelete, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return err
}
return nil
}
// Arguments for the DeletePolicyConfiguration function
type DeletePolicyConfigurationArgs struct {
// (required) Project ID or project name
Project *string
// (required) ID of the policy configuration to delete.
ConfigurationId *int
}
// Get a policy configuration by its ID.
func (client *Client) GetPolicyConfiguration(ctx context.Context, args GetPolicyConfigurationArgs) (*PolicyConfiguration, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ConfigurationId"}
}
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
locationId, _ := uuid.Parse("dad91cbe-d183-45f8-9c6e-9c1164472121")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyConfiguration
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyConfiguration function
type GetPolicyConfigurationArgs struct {
// (required) Project ID or project name
Project *string
// (required) ID of the policy configuration
ConfigurationId *int
}
// Get a list of policy configurations in a project.
func (client *Client) GetPolicyConfigurations(ctx context.Context, args GetPolicyConfigurationsArgs) (*GetPolicyConfigurationsResponseValue, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
queryParams := url.Values{}
if args.Scope != nil {
queryParams.Add("scope", *args.Scope)
}
if args.PolicyType != nil {
queryParams.Add("policyType", (*args.PolicyType).String())
}
locationId, _ := uuid.Parse("dad91cbe-d183-45f8-9c6e-9c1164472121")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue GetPolicyConfigurationsResponseValue
responseValue.ContinuationToken = resp.Header.Get(azuredevops.HeaderKeyContinuationToken)
err = client.Client.UnmarshalCollectionBody(resp, &responseValue.Value)
return &responseValue, err
}
// Arguments for the GetPolicyConfigurations function
type GetPolicyConfigurationsArgs struct {
// (required) Project ID or project name
Project *string
// (optional) [Provided for legacy reasons] The scope on which a subset of policies is defined.
Scope *string
// (optional) Filter returned policies to only this type
PolicyType *uuid.UUID
}
// Return type for the GetPolicyConfigurations function
type GetPolicyConfigurationsResponseValue struct {
Value []PolicyConfiguration
// The continuation token to be used to get the next page of results.
ContinuationToken string
}
// Update a policy configuration by its ID.
func (client *Client) UpdatePolicyConfiguration(ctx context.Context, args UpdatePolicyConfigurationArgs) (*PolicyConfiguration, error) {
if args.Configuration == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.Configuration"}
}
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ConfigurationId"}
}
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
body, marshalErr := json.Marshal(*args.Configuration)
if marshalErr != nil {
return nil, marshalErr
}
locationId, _ := uuid.Parse("dad91cbe-d183-45f8-9c6e-9c1164472121")
resp, err := client.Client.Send(ctx, http.MethodPut, locationId, "5.1", routeValues, nil, bytes.NewReader(body), "application/json", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyConfiguration
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the UpdatePolicyConfiguration function
type UpdatePolicyConfigurationArgs struct {
// (required) The policy configuration to update.
Configuration *PolicyConfiguration
// (required) Project ID or project name
Project *string
// (required) ID of the existing policy configuration to be updated.
ConfigurationId *int
}
// [Preview API] Gets the present evaluation state of a policy.
func (client *Client) GetPolicyEvaluation(ctx context.Context, args GetPolicyEvaluationArgs) (*PolicyEvaluationRecord, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.EvaluationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.EvaluationId"}
}
routeValues["evaluationId"] = (*args.EvaluationId).String()
locationId, _ := uuid.Parse("46aecb7a-5d2c-4647-897b-0209505a9fe4")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyEvaluationRecord
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyEvaluation function
type GetPolicyEvaluationArgs struct {
// (required) Project ID or project name
Project *string
// (required) ID of the policy evaluation to be retrieved.
EvaluationId *uuid.UUID
}
// [Preview API] Requeue the policy evaluation.
func (client *Client) RequeuePolicyEvaluation(ctx context.Context, args RequeuePolicyEvaluationArgs) (*PolicyEvaluationRecord, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.EvaluationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.EvaluationId"}
}
routeValues["evaluationId"] = (*args.EvaluationId).String()
locationId, _ := uuid.Parse("46aecb7a-5d2c-4647-897b-0209505a9fe4")
resp, err := client.Client.Send(ctx, http.MethodPatch, locationId, "5.1-preview.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyEvaluationRecord
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the RequeuePolicyEvaluation function
type RequeuePolicyEvaluationArgs struct {
// (required) Project ID or project name
Project *string
// (required) ID of the policy evaluation to be retrieved.
EvaluationId *uuid.UUID
}
// [Preview API] Retrieves a list of all the policy evaluation statuses for a specific pull request.
func (client *Client) GetPolicyEvaluations(ctx context.Context, args GetPolicyEvaluationsArgs) (*[]PolicyEvaluationRecord, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
queryParams := url.Values{}
if args.ArtifactId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "artifactId"}
}
queryParams.Add("artifactId", *args.ArtifactId)
if args.IncludeNotApplicable != nil {
queryParams.Add("includeNotApplicable", strconv.FormatBool(*args.IncludeNotApplicable))
}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
locationId, _ := uuid.Parse("c23ddff5-229c-4d04-a80b-0fdce9f360c8")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1-preview.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []PolicyEvaluationRecord
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyEvaluations function
type GetPolicyEvaluationsArgs struct {
// (required) Project ID or project name
Project *string
// (required) A string which uniquely identifies the target of a policy evaluation.
ArtifactId *string
// (optional) Some policies might determine that they do not apply to a specific pull request. Setting this parameter to true will return evaluation records even for policies which don't apply to this pull request.
IncludeNotApplicable *bool
// (optional) The number of policy evaluation records to retrieve.
Top *int
// (optional) The number of policy evaluation records to ignore. For example, to retrieve results 101-150, set top to 50 and skip to 100.
Skip *int
}
// Retrieve a specific revision of a given policy by ID.
func (client *Client) GetPolicyConfigurationRevision(ctx context.Context, args GetPolicyConfigurationRevisionArgs) (*PolicyConfiguration, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ConfigurationId"}
}
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
if args.RevisionId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.RevisionId"}
}
routeValues["revisionId"] = strconv.Itoa(*args.RevisionId)
locationId, _ := uuid.Parse("fe1e68a2-60d3-43cb-855b-85e41ae97c95")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyConfiguration
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyConfigurationRevision function
type GetPolicyConfigurationRevisionArgs struct {
// (required) Project ID or project name
Project *string
// (required) The policy configuration ID.
ConfigurationId *int
// (required) The revision ID.
RevisionId *int
}
// Retrieve all revisions for a given policy.
func (client *Client) GetPolicyConfigurationRevisions(ctx context.Context, args GetPolicyConfigurationRevisionsArgs) (*[]PolicyConfiguration, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.ConfigurationId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.ConfigurationId"}
}
routeValues["configurationId"] = strconv.Itoa(*args.ConfigurationId)
queryParams := url.Values{}
if args.Top != nil {
queryParams.Add("$top", strconv.Itoa(*args.Top))
}
if args.Skip != nil {
queryParams.Add("$skip", strconv.Itoa(*args.Skip))
}
locationId, _ := uuid.Parse("fe1e68a2-60d3-43cb-855b-85e41ae97c95")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, queryParams, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []PolicyConfiguration
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyConfigurationRevisions function
type GetPolicyConfigurationRevisionsArgs struct {
// (required) Project ID or project name
Project *string
// (required) The policy configuration ID.
ConfigurationId *int
// (optional) The number of revisions to retrieve.
Top *int
// (optional) The number of revisions to ignore. For example, to retrieve results 101-150, set top to 50 and skip to 100.
Skip *int
}
// Retrieve a specific policy type by ID.
func (client *Client) GetPolicyType(ctx context.Context, args GetPolicyTypeArgs) (*PolicyType, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
if args.TypeId == nil {
return nil, &azuredevops.ArgumentNilError{ArgumentName: "args.TypeId"}
}
routeValues["typeId"] = (*args.TypeId).String()
locationId, _ := uuid.Parse("44096322-2d3d-466a-bb30-d1b7de69f61f")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue PolicyType
err = client.Client.UnmarshalBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyType function
type GetPolicyTypeArgs struct {
// (required) Project ID or project name
Project *string
// (required) The policy ID.
TypeId *uuid.UUID
}
// Retrieve all available policy types.
func (client *Client) GetPolicyTypes(ctx context.Context, args GetPolicyTypesArgs) (*[]PolicyType, error) {
routeValues := make(map[string]string)
if args.Project == nil || *args.Project == "" {
return nil, &azuredevops.ArgumentNilOrEmptyError{ArgumentName: "args.Project"}
}
routeValues["project"] = *args.Project
locationId, _ := uuid.Parse("44096322-2d3d-466a-bb30-d1b7de69f61f")
resp, err := client.Client.Send(ctx, http.MethodGet, locationId, "5.1", routeValues, nil, nil, "", "application/json", nil)
if err != nil {
return nil, err
}
var responseValue []PolicyType
err = client.Client.UnmarshalCollectionBody(resp, &responseValue)
return &responseValue, err
}
// Arguments for the GetPolicyTypes function
type GetPolicyTypesArgs struct {
// (required) Project ID or project name
Project *string
}

View File

@ -0,0 +1,134 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package policy
import (
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/webapi"
)
// The full policy configuration with settings.
type PolicyConfiguration struct {
// The policy configuration ID.
Id *int `json:"id,omitempty"`
// The policy configuration type.
Type *PolicyTypeRef `json:"type,omitempty"`
// The URL where the policy configuration can be retrieved.
Url *string `json:"url,omitempty"`
// The policy configuration revision ID.
Revision *int `json:"revision,omitempty"`
// The links to other objects related to this object.
Links interface{} `json:"_links,omitempty"`
// A reference to the identity that created the policy.
CreatedBy *webapi.IdentityRef `json:"createdBy,omitempty"`
// The date and time when the policy was created.
CreatedDate *azuredevops.Time `json:"createdDate,omitempty"`
// Indicates whether the policy is blocking.
IsBlocking *bool `json:"isBlocking,omitempty"`
// Indicates whether the policy has been (soft) deleted.
IsDeleted *bool `json:"isDeleted,omitempty"`
// Indicates whether the policy is enabled.
IsEnabled *bool `json:"isEnabled,omitempty"`
// The policy configuration settings.
Settings interface{} `json:"settings,omitempty"`
}
// Policy configuration reference.
type PolicyConfigurationRef struct {
// The policy configuration ID.
Id *int `json:"id,omitempty"`
// The policy configuration type.
Type *PolicyTypeRef `json:"type,omitempty"`
// The URL where the policy configuration can be retrieved.
Url *string `json:"url,omitempty"`
}
// This record encapsulates the current state of a policy as it applies to one specific pull request. Each pull request has a unique PolicyEvaluationRecord for each pull request which the policy applies to.
type PolicyEvaluationRecord struct {
// Links to other related objects
Links interface{} `json:"_links,omitempty"`
// A string which uniquely identifies the target of a policy evaluation.
ArtifactId *string `json:"artifactId,omitempty"`
// Time when this policy finished evaluating on this pull request.
CompletedDate *azuredevops.Time `json:"completedDate,omitempty"`
// Contains all configuration data for the policy which is being evaluated.
Configuration *PolicyConfiguration `json:"configuration,omitempty"`
// Internal context data of this policy evaluation.
Context interface{} `json:"context,omitempty"`
// Guid which uniquely identifies this evaluation record (one policy running on one pull request).
EvaluationId *uuid.UUID `json:"evaluationId,omitempty"`
// Time when this policy was first evaluated on this pull request.
StartedDate *azuredevops.Time `json:"startedDate,omitempty"`
// Status of the policy (Running, Approved, Failed, etc.)
Status *PolicyEvaluationStatus `json:"status,omitempty"`
}
// Status of a policy which is running against a specific pull request.
type PolicyEvaluationStatus string
type policyEvaluationStatusValuesType struct {
Queued PolicyEvaluationStatus
Running PolicyEvaluationStatus
Approved PolicyEvaluationStatus
Rejected PolicyEvaluationStatus
NotApplicable PolicyEvaluationStatus
Broken PolicyEvaluationStatus
}
var PolicyEvaluationStatusValues = policyEvaluationStatusValuesType{
// The policy is either queued to run, or is waiting for some event before progressing.
Queued: "queued",
// The policy is currently running.
Running: "running",
// The policy has been fulfilled for this pull request.
Approved: "approved",
// The policy has rejected this pull request.
Rejected: "rejected",
// The policy does not apply to this pull request.
NotApplicable: "notApplicable",
// The policy has encountered an unexpected error.
Broken: "broken",
}
// User-friendly policy type with description (used for querying policy types).
type PolicyType struct {
// Display name of the policy type.
DisplayName *string `json:"displayName,omitempty"`
// The policy type ID.
Id *uuid.UUID `json:"id,omitempty"`
// The URL where the policy type can be retrieved.
Url *string `json:"url,omitempty"`
// The links to other objects related to this object.
Links interface{} `json:"_links,omitempty"`
// Detailed description of the policy type.
Description *string `json:"description,omitempty"`
}
// Policy type reference.
type PolicyTypeRef struct {
// Display name of the policy type.
DisplayName *string `json:"displayName,omitempty"`
// The policy type ID.
Id *uuid.UUID `json:"id,omitempty"`
// The URL where the policy type can be retrieved.
Url *string `json:"url,omitempty"`
}
// A particular revision for a policy configuration.
type VersionedPolicyConfigurationRef struct {
// The policy configuration ID.
Id *int `json:"id,omitempty"`
// The policy configuration type.
Type *PolicyTypeRef `json:"type,omitempty"`
// The URL where the policy configuration can be retrieved.
Url *string `json:"url,omitempty"`
// The policy configuration revision ID.
Revision *int `json:"revision,omitempty"`
}

View File

@ -0,0 +1,97 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package system
type SqlDbType string
type sqlDbTypeValuesType struct {
BigInt SqlDbType
Binary SqlDbType
Bit SqlDbType
Char SqlDbType
DateTime SqlDbType
Decimal SqlDbType
Float SqlDbType
Image SqlDbType
Int SqlDbType
Money SqlDbType
NChar SqlDbType
NText SqlDbType
NVarChar SqlDbType
Real SqlDbType
UniqueIdentifier SqlDbType
SmallDateTime SqlDbType
SmallInt SqlDbType
SmallMoney SqlDbType
Text SqlDbType
Timestamp SqlDbType
TinyInt SqlDbType
VarBinary SqlDbType
VarChar SqlDbType
Variant SqlDbType
Xml SqlDbType
Udt SqlDbType
Structured SqlDbType
Date SqlDbType
Time SqlDbType
DateTime2 SqlDbType
DateTimeOffset SqlDbType
}
var SqlDbTypeValues = sqlDbTypeValuesType{
BigInt: "bigInt",
Binary: "binary",
Bit: "bit",
Char: "char",
DateTime: "dateTime",
Decimal: "decimal",
Float: "float",
Image: "image",
Int: "int",
Money: "money",
NChar: "nChar",
NText: "nText",
NVarChar: "nVarChar",
Real: "real",
UniqueIdentifier: "uniqueIdentifier",
SmallDateTime: "smallDateTime",
SmallInt: "smallInt",
SmallMoney: "smallMoney",
Text: "text",
Timestamp: "timestamp",
TinyInt: "tinyInt",
VarBinary: "varBinary",
VarChar: "varChar",
Variant: "variant",
Xml: "xml",
Udt: "udt",
Structured: "structured",
Date: "date",
Time: "time",
DateTime2: "dateTime2",
DateTimeOffset: "dateTimeOffset",
}
type TraceLevel string
type traceLevelValuesType struct {
Off TraceLevel
Error TraceLevel
Warning TraceLevel
Info TraceLevel
Verbose TraceLevel
}
var TraceLevelValues = traceLevelValuesType{
Off: "off",
Error: "error",
Warning: "warning",
Info: "info",
Verbose: "verbose",
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package azuredevops
import (
"strconv"
"strings"
)
type Version struct {
Major int
Minor int
}
func NewVersion(version string) (*Version, error) {
split := strings.Split(version, ".")
if len(split) > 1 {
major, err := strconv.Atoi(split[0])
if err != nil {
return nil, err
}
minor, err := strconv.Atoi(split[1])
if err != nil {
return nil, err
}
return &Version{
Major: major,
Minor: minor,
}, nil
}
return nil, &InvalidVersionStringError{version: version}
}
func (version Version) CompareTo(compareToVersion Version) int {
if version.Major > compareToVersion.Major {
return 1
} else if version.Major < compareToVersion.Major {
return -1
} else if version.Minor > compareToVersion.Minor {
return 1
} else if version.Minor < compareToVersion.Minor {
return -1
}
return 0
}
func (version Version) String() string {
return strconv.Itoa(version.Major) + "." + strconv.Itoa(version.Minor)
}
type InvalidVersionStringError struct {
version string
}
func (e *InvalidVersionStringError) Error() string {
return "The version string was invalid: " + e.version
}

View File

@ -0,0 +1,72 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package azuredevops
import "strconv"
func negotiateRequestVersion(location *ApiResourceLocation, apiVersion string) (string, error) {
if apiVersion == "" {
// if no api-version is sent to the server, the server will decide the version. The server uses the latest
// released version if the endpoint has been released, otherwise it will use the latest preview version.
return apiVersion, nil
}
matches := apiVersionRegEx.FindStringSubmatch(apiVersion)
if len(matches) == 0 && matches[0] != "" {
return apiVersion, &InvalidApiVersion{apiVersion}
}
requestedApiVersion, err := NewVersion(matches[1])
if err != nil {
return apiVersion, err
}
locationMinVersion, err := NewVersion(*location.MinVersion)
if err != nil {
return apiVersion, err
}
if locationMinVersion.CompareTo(*requestedApiVersion) > 0 {
// Client is older than the server. The server no longer supports this
// resource (deprecated).
return apiVersion, nil
} else {
locationMaxVersion, err := NewVersion(*location.MaxVersion)
if err != nil {
return apiVersion, err
}
if locationMaxVersion.CompareTo(*requestedApiVersion) < 0 {
// Client is newer than the server. Negotiate down to the latest version
// on the server
negotiatedVersion := string(*location.MaxVersion)
if *location.ReleasedVersion < *location.MaxVersion {
negotiatedVersion += "-preview"
}
return negotiatedVersion, nil
} else {
// We can send at the requested api version. Make sure the resource version
// is not bigger than what the server supports
negotiatedVersion := matches[1]
if len(matches) > 3 && matches[3] != "" { // matches '-preview'
negotiatedVersion += "-preview"
if len(matches) > 5 && matches[5] != "" { // has a resource version
requestedResourceVersion, _ := strconv.Atoi(matches[5])
if *location.ResourceVersion < requestedResourceVersion {
negotiatedVersion += "." + strconv.Itoa(*location.ResourceVersion)
} else {
negotiatedVersion += "." + matches[5]
}
}
} else {
// requesting released version, ensure server supports a released version, and if not append '-preview'
locationReleasedVersion, err := NewVersion(*location.ReleasedVersion)
if err != nil {
return apiVersion, err
}
if (locationReleasedVersion.Major == 0 && locationReleasedVersion.Minor == 0) || locationReleasedVersion.CompareTo(*requestedApiVersion) < 0 {
negotiatedVersion += "-preview"
}
}
return negotiatedVersion, nil
}
}
}

View File

@ -0,0 +1,315 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
// Generated file, DO NOT EDIT
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
// --------------------------------------------------------------------------------------------
package webapi
import (
"github.com/google/uuid"
"github.com/microsoft/azure-devops-go-api/azuredevops"
"github.com/microsoft/azure-devops-go-api/azuredevops/system"
)
// Information about the location of a REST API resource
type ApiResourceLocation struct {
// Area name for this resource
Area *string `json:"area,omitempty"`
// Unique Identifier for this location
Id *uuid.UUID `json:"id,omitempty"`
// Maximum api version that this resource supports (current server version for this resource)
MaxVersion *string `json:"maxVersion,omitempty"`
// Minimum api version that this resource supports
MinVersion *string `json:"minVersion,omitempty"`
// The latest version of this resource location that is in "Release" (non-preview) mode
ReleasedVersion *string `json:"releasedVersion,omitempty"`
// Resource name
ResourceName *string `json:"resourceName,omitempty"`
// The current resource version supported by this resource location
ResourceVersion *int `json:"resourceVersion,omitempty"`
// This location's route template (templated relative path)
RouteTemplate *string `json:"routeTemplate,omitempty"`
}
// [Flags] Enumeration of the options that can be passed in on Connect.
type ConnectOptions string
type connectOptionsValuesType struct {
None ConnectOptions
IncludeServices ConnectOptions
IncludeLastUserAccess ConnectOptions
IncludeInheritedDefinitionsOnly ConnectOptions
IncludeNonInheritedDefinitionsOnly ConnectOptions
}
var ConnectOptionsValues = connectOptionsValuesType{
// Retrieve no optional data.
None: "none",
// Includes information about AccessMappings and ServiceDefinitions.
IncludeServices: "includeServices",
// Includes the last user access for this host.
IncludeLastUserAccess: "includeLastUserAccess",
// This is only valid on the deployment host and when true. Will only return inherited definitions.
IncludeInheritedDefinitionsOnly: "includeInheritedDefinitionsOnly",
// When true will only return non inherited definitions. Only valid at non-deployment host.
IncludeNonInheritedDefinitionsOnly: "includeNonInheritedDefinitionsOnly",
}
// [Flags]
type DeploymentFlags string
type deploymentFlagsValuesType struct {
None DeploymentFlags
Hosted DeploymentFlags
OnPremises DeploymentFlags
}
var DeploymentFlagsValues = deploymentFlagsValuesType{
None: "none",
Hosted: "hosted",
OnPremises: "onPremises",
}
// Defines an "actor" for an event.
type EventActor struct {
// Required: This is the identity of the user for the specified role.
Id *uuid.UUID `json:"id,omitempty"`
// Required: The event specific name of a role.
Role *string `json:"role,omitempty"`
}
// Defines a scope for an event.
type EventScope struct {
// Required: This is the identity of the scope for the type.
Id *uuid.UUID `json:"id,omitempty"`
// Optional: The display name of the scope
Name *string `json:"name,omitempty"`
// Required: The event specific type of a scope.
Type *string `json:"type,omitempty"`
}
type IdentityRef struct {
// Deprecated - Can be retrieved by querying the Graph user referenced in the "self" entry of the IdentityRef "_links" dictionary
DirectoryAlias *string `json:"directoryAlias,omitempty"`
Id *string `json:"id,omitempty"`
// Deprecated - Available in the "avatar" entry of the IdentityRef "_links" dictionary
ImageUrl *string `json:"imageUrl,omitempty"`
// Deprecated - Can be retrieved by querying the Graph membership state referenced in the "membershipState" entry of the GraphUser "_links" dictionary
Inactive *bool `json:"inactive,omitempty"`
// Deprecated - Can be inferred from the subject type of the descriptor (Descriptor.IsAadUserType/Descriptor.IsAadGroupType)
IsAadIdentity *bool `json:"isAadIdentity,omitempty"`
// Deprecated - Can be inferred from the subject type of the descriptor (Descriptor.IsGroupType)
IsContainer *bool `json:"isContainer,omitempty"`
IsDeletedInOrigin *bool `json:"isDeletedInOrigin,omitempty"`
// Deprecated - not in use in most preexisting implementations of ToIdentityRef
ProfileUrl *string `json:"profileUrl,omitempty"`
// Deprecated - use Domain+PrincipalName instead
UniqueName *string `json:"uniqueName,omitempty"`
}
type IdentityRefWithEmail struct {
// Deprecated - Can be retrieved by querying the Graph user referenced in the "self" entry of the IdentityRef "_links" dictionary
DirectoryAlias *string `json:"directoryAlias,omitempty"`
Id *string `json:"id,omitempty"`
// Deprecated - Available in the "avatar" entry of the IdentityRef "_links" dictionary
ImageUrl *string `json:"imageUrl,omitempty"`
// Deprecated - Can be retrieved by querying the Graph membership state referenced in the "membershipState" entry of the GraphUser "_links" dictionary
Inactive *bool `json:"inactive,omitempty"`
// Deprecated - Can be inferred from the subject type of the descriptor (Descriptor.IsAadUserType/Descriptor.IsAadGroupType)
IsAadIdentity *bool `json:"isAadIdentity,omitempty"`
// Deprecated - Can be inferred from the subject type of the descriptor (Descriptor.IsGroupType)
IsContainer *bool `json:"isContainer,omitempty"`
IsDeletedInOrigin *bool `json:"isDeletedInOrigin,omitempty"`
// Deprecated - not in use in most preexisting implementations of ToIdentityRef
ProfileUrl *string `json:"profileUrl,omitempty"`
// Deprecated - use Domain+PrincipalName instead
UniqueName *string `json:"uniqueName,omitempty"`
PreferredEmailAddress *string `json:"preferredEmailAddress,omitempty"`
}
// The JSON model for a JSON Patch operation
type JsonPatchOperation struct {
// The path to copy from for the Move/Copy operation.
From *string `json:"from,omitempty"`
// The patch operation
Op *Operation `json:"op,omitempty"`
// The path for the operation. In the case of an array, a zero based index can be used to specify the position in the array (e.g. /biscuits/0/name). The "-" character can be used instead of an index to insert at the end of the array (e.g. /biscuits/-).
Path *string `json:"path,omitempty"`
// The value for the operation. This is either a primitive or a JToken.
Value interface{} `json:"value,omitempty"`
}
type JsonWebToken struct {
}
type JWTAlgorithm string
type jwtAlgorithmValuesType struct {
None JWTAlgorithm
HS256 JWTAlgorithm
RS256 JWTAlgorithm
}
var JWTAlgorithmValues = jwtAlgorithmValuesType{
None: "none",
HS256: "hS256",
RS256: "rS256",
}
type Operation string
type operationValuesType struct {
Add Operation
Remove Operation
Replace Operation
Move Operation
Copy Operation
Test Operation
}
var OperationValues = operationValuesType{
Add: "add",
Remove: "remove",
Replace: "replace",
Move: "move",
Copy: "copy",
Test: "test",
}
// Represents the public key portion of an RSA asymmetric key.
type PublicKey struct {
// Gets or sets the exponent for the public key.
Exponent *[]byte `json:"exponent,omitempty"`
// Gets or sets the modulus for the public key.
Modulus *[]byte `json:"modulus,omitempty"`
}
type Publisher struct {
// Name of the publishing service.
Name *string `json:"name,omitempty"`
// Service Owner Guid Eg. Tfs : 00025394-6065-48CA-87D9-7F5672854EF7
ServiceOwnerId *uuid.UUID `json:"serviceOwnerId,omitempty"`
}
// The class to represent a REST reference link. RFC: http://tools.ietf.org/html/draft-kelly-json-hal-06 The RFC is not fully implemented, additional properties are allowed on the reference link but as of yet we don't have a need for them.
type ReferenceLink struct {
Href *string `json:"href,omitempty"`
}
type ResourceRef struct {
Id *string `json:"id,omitempty"`
Url *string `json:"url,omitempty"`
}
type ServiceEvent struct {
// This is the id of the type. Constants that will be used by subscribers to identify/filter events being published on a topic.
EventType *string `json:"eventType,omitempty"`
// This is the service that published this event.
Publisher *Publisher `json:"publisher,omitempty"`
// The resource object that carries specific information about the event. The object must have the ServiceEventObject applied for serialization/deserialization to work.
Resource interface{} `json:"resource,omitempty"`
// This dictionary carries the context descriptors along with their ids.
ResourceContainers *map[string]interface{} `json:"resourceContainers,omitempty"`
// This is the version of the resource.
ResourceVersion *string `json:"resourceVersion,omitempty"`
}
// A signed url allowing limited-time anonymous access to private resources.
type SignedUrl struct {
SignatureExpires *azuredevops.Time `json:"signatureExpires,omitempty"`
Url *string `json:"url,omitempty"`
}
type TeamMember struct {
Identity *IdentityRef `json:"identity,omitempty"`
IsTeamAdmin *bool `json:"isTeamAdmin,omitempty"`
}
// A single secured timing consisting of a duration and start time
type TimingEntry struct {
// Duration of the entry in ticks
ElapsedTicks *uint64 `json:"elapsedTicks,omitempty"`
// Properties to distinguish timings within the same group or to provide data to send with telemetry
Properties *map[string]interface{} `json:"properties,omitempty"`
// Offset from Server Request Context start time in microseconds
StartOffset *uint64 `json:"startOffset,omitempty"`
}
// A set of secured performance timings all keyed off of the same string
type TimingGroup struct {
// The total number of timing entries associated with this group
Count *int `json:"count,omitempty"`
// Overall duration of all entries in this group in ticks
ElapsedTicks *uint64 `json:"elapsedTicks,omitempty"`
// A list of timing entries in this group. Only the first few entries in each group are collected.
Timings *[]TimingEntry `json:"timings,omitempty"`
}
// This class describes a trace filter, i.e. a set of criteria on whether or not a trace event should be emitted
type TraceFilter struct {
Area *string `json:"area,omitempty"`
ExceptionType *string `json:"exceptionType,omitempty"`
IsEnabled *bool `json:"isEnabled,omitempty"`
Layer *string `json:"layer,omitempty"`
Level *system.TraceLevel `json:"level,omitempty"`
Method *string `json:"method,omitempty"`
// Used to serialize additional identity information (display name, etc) to clients. Not set by default. Server-side callers should use OwnerId.
Owner *IdentityRef `json:"owner,omitempty"`
OwnerId *uuid.UUID `json:"ownerId,omitempty"`
Path *string `json:"path,omitempty"`
ProcessName *string `json:"processName,omitempty"`
Service *string `json:"service,omitempty"`
ServiceHost *uuid.UUID `json:"serviceHost,omitempty"`
TimeCreated *azuredevops.Time `json:"timeCreated,omitempty"`
TraceId *uuid.UUID `json:"traceId,omitempty"`
Tracepoint *int `json:"tracepoint,omitempty"`
Uri *string `json:"uri,omitempty"`
UserAgent *string `json:"userAgent,omitempty"`
UserLogin *string `json:"userLogin,omitempty"`
}
type VssJsonCollectionWrapper struct {
Count *int `json:"count,omitempty"`
Value *[]interface{} `json:"value,omitempty"`
}
type VssJsonCollectionWrapperBase struct {
Count *int `json:"count,omitempty"`
}
// This is the type used for firing notifications intended for the subsystem in the Notifications SDK. For components that can't take a dependency on the Notifications SDK directly, they can use ITeamFoundationEventService.PublishNotification and the Notifications SDK ISubscriber implementation will get it.
type VssNotificationEvent struct {
// Optional: A list of actors which are additional identities with corresponding roles that are relevant to the event.
Actors *[]EventActor `json:"actors,omitempty"`
// Optional: A list of artifacts referenced or impacted by this event.
ArtifactUris *[]string `json:"artifactUris,omitempty"`
// Required: The event payload. If Data is a string, it must be in Json or XML format. Otherwise it must have a serialization format attribute.
Data interface{} `json:"data,omitempty"`
// Required: The name of the event. This event must be registered in the context it is being fired.
EventType *string `json:"eventType,omitempty"`
// How long before the event expires and will be cleaned up. The default is to use the system default.
ExpiresIn interface{} `json:"expiresIn,omitempty"`
// The id of the item, artifact, extension, project, etc.
ItemId *string `json:"itemId,omitempty"`
// How long to wait before processing this event. The default is to process immediately.
ProcessDelay interface{} `json:"processDelay,omitempty"`
// Optional: A list of scopes which are are relevant to the event.
Scopes *[]EventScope `json:"scopes,omitempty"`
// This is the time the original source event for this VssNotificationEvent was created. For example, for something like a build completion notification SourceEventCreatedTime should be the time the build finished not the time this event was raised.
SourceEventCreatedTime *azuredevops.Time `json:"sourceEventCreatedTime,omitempty"`
}
type WrappedException struct {
CustomProperties *map[string]interface{} `json:"customProperties,omitempty"`
ErrorCode *int `json:"errorCode,omitempty"`
EventId *int `json:"eventId,omitempty"`
HelpLink *string `json:"helpLink,omitempty"`
InnerException *WrappedException `json:"innerException,omitempty"`
Message *string `json:"message,omitempty"`
StackTrace *string `json:"stackTrace,omitempty"`
TypeKey *string `json:"typeKey,omitempty"`
TypeName *string `json:"typeName,omitempty"`
}

9
vendor/github.com/google/uuid/.travis.yml generated vendored Normal file
View File

@ -0,0 +1,9 @@
language: go
go:
- 1.4.3
- 1.5.3
- tip
script:
- go test -v ./...

10
vendor/github.com/google/uuid/CONTRIBUTING.md generated vendored Normal file
View File

@ -0,0 +1,10 @@
# How to contribute
We definitely welcome patches and contribution to this project!
### Legal requirements
In order to protect both you and ourselves, you will need to sign the
[Contributor License Agreement](https://cla.developers.google.com/clas).
You may have already signed it for other Google projects.

9
vendor/github.com/google/uuid/CONTRIBUTORS generated vendored Normal file
View File

@ -0,0 +1,9 @@
Paul Borman <borman@google.com>
bmatsuo
shawnps
theory
jboverfelt
dsymonds
cd1
wallclockbuilder
dansouza

27
vendor/github.com/google/uuid/LICENSE generated vendored Normal file
View File

@ -0,0 +1,27 @@
Copyright (c) 2009,2014 Google Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

19
vendor/github.com/google/uuid/README.md generated vendored Normal file
View File

@ -0,0 +1,19 @@
# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master)
The uuid package generates and inspects UUIDs based on
[RFC 4122](http://tools.ietf.org/html/rfc4122)
and DCE 1.1: Authentication and Security Services.
This package is based on the github.com/pborman/uuid package (previously named
code.google.com/p/go-uuid). It differs from these earlier packages in that
a UUID is a 16 byte array rather than a byte slice. One loss due to this
change is the ability to represent an invalid UUID (vs a NIL UUID).
###### Install
`go get github.com/google/uuid`
###### Documentation
[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid)
Full `go doc` style documentation for the package can be viewed online without
installing this package by using the GoDoc site here:
http://godoc.org/github.com/google/uuid

80
vendor/github.com/google/uuid/dce.go generated vendored Normal file
View File

@ -0,0 +1,80 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"encoding/binary"
"fmt"
"os"
)
// A Domain represents a Version 2 domain
type Domain byte
// Domain constants for DCE Security (Version 2) UUIDs.
const (
Person = Domain(0)
Group = Domain(1)
Org = Domain(2)
)
// NewDCESecurity returns a DCE Security (Version 2) UUID.
//
// The domain should be one of Person, Group or Org.
// On a POSIX system the id should be the users UID for the Person
// domain and the users GID for the Group. The meaning of id for
// the domain Org or on non-POSIX systems is site defined.
//
// For a given domain/id pair the same token may be returned for up to
// 7 minutes and 10 seconds.
func NewDCESecurity(domain Domain, id uint32) (UUID, error) {
uuid, err := NewUUID()
if err == nil {
uuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2
uuid[9] = byte(domain)
binary.BigEndian.PutUint32(uuid[0:], id)
}
return uuid, err
}
// NewDCEPerson returns a DCE Security (Version 2) UUID in the person
// domain with the id returned by os.Getuid.
//
// NewDCESecurity(Person, uint32(os.Getuid()))
func NewDCEPerson() (UUID, error) {
return NewDCESecurity(Person, uint32(os.Getuid()))
}
// NewDCEGroup returns a DCE Security (Version 2) UUID in the group
// domain with the id returned by os.Getgid.
//
// NewDCESecurity(Group, uint32(os.Getgid()))
func NewDCEGroup() (UUID, error) {
return NewDCESecurity(Group, uint32(os.Getgid()))
}
// Domain returns the domain for a Version 2 UUID. Domains are only defined
// for Version 2 UUIDs.
func (uuid UUID) Domain() Domain {
return Domain(uuid[9])
}
// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2
// UUIDs.
func (uuid UUID) ID() uint32 {
return binary.BigEndian.Uint32(uuid[0:4])
}
func (d Domain) String() string {
switch d {
case Person:
return "Person"
case Group:
return "Group"
case Org:
return "Org"
}
return fmt.Sprintf("Domain%d", int(d))
}

12
vendor/github.com/google/uuid/doc.go generated vendored Normal file
View File

@ -0,0 +1,12 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package uuid generates and inspects UUIDs.
//
// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security
// Services.
//
// A UUID is a 16 byte (128 bit) array. UUIDs may be used as keys to
// maps or compared directly.
package uuid

1
vendor/github.com/google/uuid/go.mod generated vendored Normal file
View File

@ -0,0 +1 @@
module github.com/google/uuid

53
vendor/github.com/google/uuid/hash.go generated vendored Normal file
View File

@ -0,0 +1,53 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"crypto/md5"
"crypto/sha1"
"hash"
)
// Well known namespace IDs and UUIDs
var (
NameSpaceDNS = Must(Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8"))
NameSpaceURL = Must(Parse("6ba7b811-9dad-11d1-80b4-00c04fd430c8"))
NameSpaceOID = Must(Parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8"))
NameSpaceX500 = Must(Parse("6ba7b814-9dad-11d1-80b4-00c04fd430c8"))
Nil UUID // empty UUID, all zeros
)
// NewHash returns a new UUID derived from the hash of space concatenated with
// data generated by h. The hash should be at least 16 byte in length. The
// first 16 bytes of the hash are used to form the UUID. The version of the
// UUID will be the lower 4 bits of version. NewHash is used to implement
// NewMD5 and NewSHA1.
func NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {
h.Reset()
h.Write(space[:])
h.Write(data)
s := h.Sum(nil)
var uuid UUID
copy(uuid[:], s)
uuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4)
uuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant
return uuid
}
// NewMD5 returns a new MD5 (Version 3) UUID based on the
// supplied name space and data. It is the same as calling:
//
// NewHash(md5.New(), space, data, 3)
func NewMD5(space UUID, data []byte) UUID {
return NewHash(md5.New(), space, data, 3)
}
// NewSHA1 returns a new SHA1 (Version 5) UUID based on the
// supplied name space and data. It is the same as calling:
//
// NewHash(sha1.New(), space, data, 5)
func NewSHA1(space UUID, data []byte) UUID {
return NewHash(sha1.New(), space, data, 5)
}

37
vendor/github.com/google/uuid/marshal.go generated vendored Normal file
View File

@ -0,0 +1,37 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import "fmt"
// MarshalText implements encoding.TextMarshaler.
func (uuid UUID) MarshalText() ([]byte, error) {
var js [36]byte
encodeHex(js[:], uuid)
return js[:], nil
}
// UnmarshalText implements encoding.TextUnmarshaler.
func (uuid *UUID) UnmarshalText(data []byte) error {
id, err := ParseBytes(data)
if err == nil {
*uuid = id
}
return err
}
// MarshalBinary implements encoding.BinaryMarshaler.
func (uuid UUID) MarshalBinary() ([]byte, error) {
return uuid[:], nil
}
// UnmarshalBinary implements encoding.BinaryUnmarshaler.
func (uuid *UUID) UnmarshalBinary(data []byte) error {
if len(data) != 16 {
return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
}
copy(uuid[:], data)
return nil
}

90
vendor/github.com/google/uuid/node.go generated vendored Normal file
View File

@ -0,0 +1,90 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"sync"
)
var (
nodeMu sync.Mutex
ifname string // name of interface being used
nodeID [6]byte // hardware for version 1 UUIDs
zeroID [6]byte // nodeID with only 0's
)
// NodeInterface returns the name of the interface from which the NodeID was
// derived. The interface "user" is returned if the NodeID was set by
// SetNodeID.
func NodeInterface() string {
defer nodeMu.Unlock()
nodeMu.Lock()
return ifname
}
// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs.
// If name is "" then the first usable interface found will be used or a random
// Node ID will be generated. If a named interface cannot be found then false
// is returned.
//
// SetNodeInterface never fails when name is "".
func SetNodeInterface(name string) bool {
defer nodeMu.Unlock()
nodeMu.Lock()
return setNodeInterface(name)
}
func setNodeInterface(name string) bool {
iname, addr := getHardwareInterface(name) // null implementation for js
if iname != "" && addr != nil {
ifname = iname
copy(nodeID[:], addr)
return true
}
// We found no interfaces with a valid hardware address. If name
// does not specify a specific interface generate a random Node ID
// (section 4.1.6)
if name == "" {
ifname = "random"
randomBits(nodeID[:])
return true
}
return false
}
// NodeID returns a slice of a copy of the current Node ID, setting the Node ID
// if not already set.
func NodeID() []byte {
defer nodeMu.Unlock()
nodeMu.Lock()
if nodeID == zeroID {
setNodeInterface("")
}
nid := nodeID
return nid[:]
}
// SetNodeID sets the Node ID to be used for Version 1 UUIDs. The first 6 bytes
// of id are used. If id is less than 6 bytes then false is returned and the
// Node ID is not set.
func SetNodeID(id []byte) bool {
if len(id) < 6 {
return false
}
defer nodeMu.Unlock()
nodeMu.Lock()
copy(nodeID[:], id)
ifname = "user"
return true
}
// NodeID returns the 6 byte node id encoded in uuid. It returns nil if uuid is
// not valid. The NodeID is only well defined for version 1 and 2 UUIDs.
func (uuid UUID) NodeID() []byte {
var node [6]byte
copy(node[:], uuid[10:])
return node[:]
}

12
vendor/github.com/google/uuid/node_js.go generated vendored Normal file
View File

@ -0,0 +1,12 @@
// Copyright 2017 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build js
package uuid
// getHardwareInterface returns nil values for the JS version of the code.
// This remvoves the "net" dependency, because it is not used in the browser.
// Using the "net" library inflates the size of the transpiled JS code by 673k bytes.
func getHardwareInterface(name string) (string, []byte) { return "", nil }

33
vendor/github.com/google/uuid/node_net.go generated vendored Normal file
View File

@ -0,0 +1,33 @@
// Copyright 2017 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build !js
package uuid
import "net"
var interfaces []net.Interface // cached list of interfaces
// getHardwareInterface returns the name and hardware address of interface name.
// If name is "" then the name and hardware address of one of the system's
// interfaces is returned. If no interfaces are found (name does not exist or
// there are no interfaces) then "", nil is returned.
//
// Only addresses of at least 6 bytes are returned.
func getHardwareInterface(name string) (string, []byte) {
if interfaces == nil {
var err error
interfaces, err = net.Interfaces()
if err != nil {
return "", nil
}
}
for _, ifs := range interfaces {
if len(ifs.HardwareAddr) >= 6 && (name == "" || name == ifs.Name) {
return ifs.Name, ifs.HardwareAddr
}
}
return "", nil
}

59
vendor/github.com/google/uuid/sql.go generated vendored Normal file
View File

@ -0,0 +1,59 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"database/sql/driver"
"fmt"
)
// Scan implements sql.Scanner so UUIDs can be read from databases transparently
// Currently, database types that map to string and []byte are supported. Please
// consult database-specific driver documentation for matching types.
func (uuid *UUID) Scan(src interface{}) error {
switch src := src.(type) {
case nil:
return nil
case string:
// if an empty UUID comes from a table, we return a null UUID
if src == "" {
return nil
}
// see Parse for required string format
u, err := Parse(src)
if err != nil {
return fmt.Errorf("Scan: %v", err)
}
*uuid = u
case []byte:
// if an empty UUID comes from a table, we return a null UUID
if len(src) == 0 {
return nil
}
// assumes a simple slice of bytes if 16 bytes
// otherwise attempts to parse
if len(src) != 16 {
return uuid.Scan(string(src))
}
copy((*uuid)[:], src)
default:
return fmt.Errorf("Scan: unable to scan type %T into UUID", src)
}
return nil
}
// Value implements sql.Valuer so that UUIDs can be written to databases
// transparently. Currently, UUIDs map to strings. Please consult
// database-specific driver documentation for matching types.
func (uuid UUID) Value() (driver.Value, error) {
return uuid.String(), nil
}

123
vendor/github.com/google/uuid/time.go generated vendored Normal file
View File

@ -0,0 +1,123 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"encoding/binary"
"sync"
"time"
)
// A Time represents a time as the number of 100's of nanoseconds since 15 Oct
// 1582.
type Time int64
const (
lillian = 2299160 // Julian day of 15 Oct 1582
unix = 2440587 // Julian day of 1 Jan 1970
epoch = unix - lillian // Days between epochs
g1582 = epoch * 86400 // seconds between epochs
g1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs
)
var (
timeMu sync.Mutex
lasttime uint64 // last time we returned
clockSeq uint16 // clock sequence for this run
timeNow = time.Now // for testing
)
// UnixTime converts t the number of seconds and nanoseconds using the Unix
// epoch of 1 Jan 1970.
func (t Time) UnixTime() (sec, nsec int64) {
sec = int64(t - g1582ns100)
nsec = (sec % 10000000) * 100
sec /= 10000000
return sec, nsec
}
// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and
// clock sequence as well as adjusting the clock sequence as needed. An error
// is returned if the current time cannot be determined.
func GetTime() (Time, uint16, error) {
defer timeMu.Unlock()
timeMu.Lock()
return getTime()
}
func getTime() (Time, uint16, error) {
t := timeNow()
// If we don't have a clock sequence already, set one.
if clockSeq == 0 {
setClockSequence(-1)
}
now := uint64(t.UnixNano()/100) + g1582ns100
// If time has gone backwards with this clock sequence then we
// increment the clock sequence
if now <= lasttime {
clockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000
}
lasttime = now
return Time(now), clockSeq, nil
}
// ClockSequence returns the current clock sequence, generating one if not
// already set. The clock sequence is only used for Version 1 UUIDs.
//
// The uuid package does not use global static storage for the clock sequence or
// the last time a UUID was generated. Unless SetClockSequence is used, a new
// random clock sequence is generated the first time a clock sequence is
// requested by ClockSequence, GetTime, or NewUUID. (section 4.2.1.1)
func ClockSequence() int {
defer timeMu.Unlock()
timeMu.Lock()
return clockSequence()
}
func clockSequence() int {
if clockSeq == 0 {
setClockSequence(-1)
}
return int(clockSeq & 0x3fff)
}
// SetClockSequence sets the clock sequence to the lower 14 bits of seq. Setting to
// -1 causes a new sequence to be generated.
func SetClockSequence(seq int) {
defer timeMu.Unlock()
timeMu.Lock()
setClockSequence(seq)
}
func setClockSequence(seq int) {
if seq == -1 {
var b [2]byte
randomBits(b[:]) // clock sequence
seq = int(b[0])<<8 | int(b[1])
}
oldSeq := clockSeq
clockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant
if oldSeq != clockSeq {
lasttime = 0
}
}
// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in
// uuid. The time is only defined for version 1 and 2 UUIDs.
func (uuid UUID) Time() Time {
time := int64(binary.BigEndian.Uint32(uuid[0:4]))
time |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32
time |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48
return Time(time)
}
// ClockSequence returns the clock sequence encoded in uuid.
// The clock sequence is only well defined for version 1 and 2 UUIDs.
func (uuid UUID) ClockSequence() int {
return int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff
}

43
vendor/github.com/google/uuid/util.go generated vendored Normal file
View File

@ -0,0 +1,43 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"io"
)
// randomBits completely fills slice b with random data.
func randomBits(b []byte) {
if _, err := io.ReadFull(rander, b); err != nil {
panic(err.Error()) // rand should never fail
}
}
// xvalues returns the value of a byte as a hexadecimal digit or 255.
var xvalues = [256]byte{
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,
255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
}
// xtob converts hex characters x1 and x2 into a byte.
func xtob(x1, x2 byte) (byte, bool) {
b1 := xvalues[x1]
b2 := xvalues[x2]
return (b1 << 4) | b2, b1 != 255 && b2 != 255
}

245
vendor/github.com/google/uuid/uuid.go generated vendored Normal file
View File

@ -0,0 +1,245 @@
// Copyright 2018 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"bytes"
"crypto/rand"
"encoding/hex"
"errors"
"fmt"
"io"
"strings"
)
// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC
// 4122.
type UUID [16]byte
// A Version represents a UUID's version.
type Version byte
// A Variant represents a UUID's variant.
type Variant byte
// Constants returned by Variant.
const (
Invalid = Variant(iota) // Invalid UUID
RFC4122 // The variant specified in RFC4122
Reserved // Reserved, NCS backward compatibility.
Microsoft // Reserved, Microsoft Corporation backward compatibility.
Future // Reserved for future definition.
)
var rander = rand.Reader // random function
// Parse decodes s into a UUID or returns an error. Both the standard UUID
// forms of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded as well as the
// Microsoft encoding {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} and the raw hex
// encoding: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
func Parse(s string) (UUID, error) {
var uuid UUID
switch len(s) {
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
case 36:
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
case 36 + 9:
if strings.ToLower(s[:9]) != "urn:uuid:" {
return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9])
}
s = s[9:]
// {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
case 36 + 2:
s = s[1:]
// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
case 32:
var ok bool
for i := range uuid {
uuid[i], ok = xtob(s[i*2], s[i*2+1])
if !ok {
return uuid, errors.New("invalid UUID format")
}
}
return uuid, nil
default:
return uuid, fmt.Errorf("invalid UUID length: %d", len(s))
}
// s is now at least 36 bytes long
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
return uuid, errors.New("invalid UUID format")
}
for i, x := range [16]int{
0, 2, 4, 6,
9, 11,
14, 16,
19, 21,
24, 26, 28, 30, 32, 34} {
v, ok := xtob(s[x], s[x+1])
if !ok {
return uuid, errors.New("invalid UUID format")
}
uuid[i] = v
}
return uuid, nil
}
// ParseBytes is like Parse, except it parses a byte slice instead of a string.
func ParseBytes(b []byte) (UUID, error) {
var uuid UUID
switch len(b) {
case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) {
return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9])
}
b = b[9:]
case 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
b = b[1:]
case 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
var ok bool
for i := 0; i < 32; i += 2 {
uuid[i/2], ok = xtob(b[i], b[i+1])
if !ok {
return uuid, errors.New("invalid UUID format")
}
}
return uuid, nil
default:
return uuid, fmt.Errorf("invalid UUID length: %d", len(b))
}
// s is now at least 36 bytes long
// it must be of the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
if b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' {
return uuid, errors.New("invalid UUID format")
}
for i, x := range [16]int{
0, 2, 4, 6,
9, 11,
14, 16,
19, 21,
24, 26, 28, 30, 32, 34} {
v, ok := xtob(b[x], b[x+1])
if !ok {
return uuid, errors.New("invalid UUID format")
}
uuid[i] = v
}
return uuid, nil
}
// MustParse is like Parse but panics if the string cannot be parsed.
// It simplifies safe initialization of global variables holding compiled UUIDs.
func MustParse(s string) UUID {
uuid, err := Parse(s)
if err != nil {
panic(`uuid: Parse(` + s + `): ` + err.Error())
}
return uuid
}
// FromBytes creates a new UUID from a byte slice. Returns an error if the slice
// does not have a length of 16. The bytes are copied from the slice.
func FromBytes(b []byte) (uuid UUID, err error) {
err = uuid.UnmarshalBinary(b)
return uuid, err
}
// Must returns uuid if err is nil and panics otherwise.
func Must(uuid UUID, err error) UUID {
if err != nil {
panic(err)
}
return uuid
}
// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
// , or "" if uuid is invalid.
func (uuid UUID) String() string {
var buf [36]byte
encodeHex(buf[:], uuid)
return string(buf[:])
}
// URN returns the RFC 2141 URN form of uuid,
// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, or "" if uuid is invalid.
func (uuid UUID) URN() string {
var buf [36 + 9]byte
copy(buf[:], "urn:uuid:")
encodeHex(buf[9:], uuid)
return string(buf[:])
}
func encodeHex(dst []byte, uuid UUID) {
hex.Encode(dst, uuid[:4])
dst[8] = '-'
hex.Encode(dst[9:13], uuid[4:6])
dst[13] = '-'
hex.Encode(dst[14:18], uuid[6:8])
dst[18] = '-'
hex.Encode(dst[19:23], uuid[8:10])
dst[23] = '-'
hex.Encode(dst[24:], uuid[10:])
}
// Variant returns the variant encoded in uuid.
func (uuid UUID) Variant() Variant {
switch {
case (uuid[8] & 0xc0) == 0x80:
return RFC4122
case (uuid[8] & 0xe0) == 0xc0:
return Microsoft
case (uuid[8] & 0xe0) == 0xe0:
return Future
default:
return Reserved
}
}
// Version returns the version of uuid.
func (uuid UUID) Version() Version {
return Version(uuid[6] >> 4)
}
func (v Version) String() string {
if v > 15 {
return fmt.Sprintf("BAD_VERSION_%d", v)
}
return fmt.Sprintf("VERSION_%d", v)
}
func (v Variant) String() string {
switch v {
case RFC4122:
return "RFC4122"
case Reserved:
return "Reserved"
case Microsoft:
return "Microsoft"
case Future:
return "Future"
case Invalid:
return "Invalid"
}
return fmt.Sprintf("BadVariant%d", int(v))
}
// SetRand sets the random number generator to r, which implements io.Reader.
// If r.Read returns an error when the package requests random data then
// a panic will be issued.
//
// Calling SetRand with nil sets the random number generator to the default
// generator.
func SetRand(r io.Reader) {
if r == nil {
rander = rand.Reader
return
}
rander = r
}

44
vendor/github.com/google/uuid/version1.go generated vendored Normal file
View File

@ -0,0 +1,44 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import (
"encoding/binary"
)
// NewUUID returns a Version 1 UUID based on the current NodeID and clock
// sequence, and the current time. If the NodeID has not been set by SetNodeID
// or SetNodeInterface then it will be set automatically. If the NodeID cannot
// be set NewUUID returns nil. If clock sequence has not been set by
// SetClockSequence then it will be set automatically. If GetTime fails to
// return the current NewUUID returns nil and an error.
//
// In most cases, New should be used.
func NewUUID() (UUID, error) {
nodeMu.Lock()
if nodeID == zeroID {
setNodeInterface("")
}
nodeMu.Unlock()
var uuid UUID
now, seq, err := GetTime()
if err != nil {
return uuid, err
}
timeLow := uint32(now & 0xffffffff)
timeMid := uint16((now >> 32) & 0xffff)
timeHi := uint16((now >> 48) & 0x0fff)
timeHi |= 0x1000 // Version 1
binary.BigEndian.PutUint32(uuid[0:], timeLow)
binary.BigEndian.PutUint16(uuid[4:], timeMid)
binary.BigEndian.PutUint16(uuid[6:], timeHi)
binary.BigEndian.PutUint16(uuid[8:], seq)
copy(uuid[10:], nodeID[:])
return uuid, nil
}

38
vendor/github.com/google/uuid/version4.go generated vendored Normal file
View File

@ -0,0 +1,38 @@
// Copyright 2016 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uuid
import "io"
// New creates a new random UUID or panics. New is equivalent to
// the expression
//
// uuid.Must(uuid.NewRandom())
func New() UUID {
return Must(NewRandom())
}
// NewRandom returns a Random (Version 4) UUID.
//
// The strength of the UUIDs is based on the strength of the crypto/rand
// package.
//
// A note about uniqueness derived from the UUID Wikipedia entry:
//
// Randomly generated UUIDs have 122 random bits. One's annual risk of being
// hit by a meteorite is estimated to be one chance in 17 billion, that
// means the probability is about 0.00000000006 (6 × 1011),
// equivalent to the odds of creating a few tens of trillions of UUIDs in a
// year and having one duplicate.
func NewRandom() (UUID, error) {
var uuid UUID
_, err := io.ReadFull(rander, uuid[:])
if err != nil {
return Nil, err
}
uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
return uuid, nil
}

15
vendor/modules.txt vendored
View File

@ -170,6 +170,8 @@ github.com/google/go-github/v26/github
github.com/google/go-querystring/query github.com/google/go-querystring/query
# github.com/google/gofuzz v1.0.0 # github.com/google/gofuzz v1.0.0
github.com/google/gofuzz github.com/google/gofuzz
# github.com/google/uuid v1.1.1
github.com/google/uuid
# github.com/googleapis/gax-go/v2 v2.0.5 # github.com/googleapis/gax-go/v2 v2.0.5
github.com/googleapis/gax-go/v2 github.com/googleapis/gax-go/v2
# github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d # github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d
@ -202,6 +204,19 @@ github.com/logrusorgru/aurora
github.com/lucasb-eyer/go-colorful github.com/lucasb-eyer/go-colorful
# github.com/mattn/go-runewidth v0.0.4 # github.com/mattn/go-runewidth v0.0.4
github.com/mattn/go-runewidth github.com/mattn/go-runewidth
# github.com/microsoft/azure-devops-go-api/azuredevops v0.0.0-20190912142452-3207b4a469d3
github.com/microsoft/azure-devops-go-api/azuredevops
github.com/microsoft/azure-devops-go-api/azuredevops/build
github.com/microsoft/azure-devops-go-api/azuredevops/core
github.com/microsoft/azure-devops-go-api/azuredevops/distributedtaskcommon
github.com/microsoft/azure-devops-go-api/azuredevops/git
github.com/microsoft/azure-devops-go-api/azuredevops/test
github.com/microsoft/azure-devops-go-api/azuredevops/webapi
github.com/microsoft/azure-devops-go-api/azuredevops/identity
github.com/microsoft/azure-devops-go-api/azuredevops/operations
github.com/microsoft/azure-devops-go-api/azuredevops/policy
github.com/microsoft/azure-devops-go-api/azuredevops/system
github.com/microsoft/azure-devops-go-api/azuredevops/delegatedauthorization
# github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf # github.com/mmcdole/gofeed v1.0.0-beta2.0.20190420154928-0e68beaf6fdf
github.com/mmcdole/gofeed github.com/mmcdole/gofeed
github.com/mmcdole/gofeed/atom github.com/mmcdole/gofeed/atom