mirror of
https://github.com/drone-plugins/drone-docker.git
synced 2026-07-16 16:21:18 +08:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d0238ab8a8 |
+30
-30
@@ -12,7 +12,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: vet
|
- name: vet
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- go vet ./...
|
- go vet ./...
|
||||||
environment:
|
environment:
|
||||||
@@ -22,7 +22,7 @@ steps:
|
|||||||
path: /go
|
path: /go
|
||||||
|
|
||||||
- name: test
|
- name: test
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- go test -cover ./...
|
- go test -cover ./...
|
||||||
environment:
|
environment:
|
||||||
@@ -55,7 +55,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: go build
|
- name: go build
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
environment:
|
environment:
|
||||||
CGO_ENABLED: 0
|
CGO_ENABLED: 0
|
||||||
commands:
|
commands:
|
||||||
@@ -162,7 +162,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: go build
|
- name: go build
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
environment:
|
environment:
|
||||||
CGO_ENABLED: 0
|
CGO_ENABLED: 0
|
||||||
commands:
|
commands:
|
||||||
@@ -264,7 +264,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-docker ./cmd/drone-docker'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-docker ./cmd/drone-docker'
|
||||||
environment:
|
environment:
|
||||||
@@ -275,7 +275,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-docker ./cmd/drone-docker'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-docker ./cmd/drone-docker'
|
||||||
environment:
|
environment:
|
||||||
@@ -285,7 +285,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: executable
|
- name: executable
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- ./release/linux/amd64/drone-docker --help
|
- ./release/linux/amd64/drone-docker --help
|
||||||
|
|
||||||
@@ -329,7 +329,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-docker ./cmd/drone-docker'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-docker ./cmd/drone-docker'
|
||||||
environment:
|
environment:
|
||||||
@@ -340,7 +340,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-docker ./cmd/drone-docker'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-docker ./cmd/drone-docker'
|
||||||
environment:
|
environment:
|
||||||
@@ -350,7 +350,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: executable
|
- name: executable
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- ./release/linux/arm64/drone-docker --help
|
- ./release/linux/arm64/drone-docker --help
|
||||||
|
|
||||||
@@ -429,7 +429,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-gcr ./cmd/drone-gcr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-gcr ./cmd/drone-gcr'
|
||||||
environment:
|
environment:
|
||||||
@@ -440,7 +440,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-gcr ./cmd/drone-gcr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-gcr ./cmd/drone-gcr'
|
||||||
environment:
|
environment:
|
||||||
@@ -488,7 +488,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-gcr ./cmd/drone-gcr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-gcr ./cmd/drone-gcr'
|
||||||
environment:
|
environment:
|
||||||
@@ -499,7 +499,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-gcr ./cmd/drone-gcr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-gcr ./cmd/drone-gcr'
|
||||||
environment:
|
environment:
|
||||||
@@ -582,7 +582,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-gar ./cmd/drone-gar'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-gar ./cmd/drone-gar'
|
||||||
environment:
|
environment:
|
||||||
@@ -593,7 +593,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-gar ./cmd/drone-gar'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-gar ./cmd/drone-gar'
|
||||||
environment:
|
environment:
|
||||||
@@ -641,7 +641,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-gar ./cmd/drone-gar'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-gar ./cmd/drone-gar'
|
||||||
environment:
|
environment:
|
||||||
@@ -652,7 +652,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-gar ./cmd/drone-gar'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-gar ./cmd/drone-gar'
|
||||||
environment:
|
environment:
|
||||||
@@ -734,7 +734,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-ecr ./cmd/drone-ecr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-ecr ./cmd/drone-ecr'
|
||||||
environment:
|
environment:
|
||||||
@@ -744,7 +744,7 @@ steps:
|
|||||||
exclude:
|
exclude:
|
||||||
- tag
|
- tag
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-ecr ./cmd/drone-ecr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-ecr ./cmd/drone-ecr'
|
||||||
environment:
|
environment:
|
||||||
@@ -792,7 +792,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-ecr ./cmd/drone-ecr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-ecr ./cmd/drone-ecr'
|
||||||
environment:
|
environment:
|
||||||
@@ -802,7 +802,7 @@ steps:
|
|||||||
exclude:
|
exclude:
|
||||||
- tag
|
- tag
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-ecr ./cmd/drone-ecr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-ecr ./cmd/drone-ecr'
|
||||||
environment:
|
environment:
|
||||||
@@ -885,7 +885,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-heroku ./cmd/drone-heroku'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/amd64/drone-heroku ./cmd/drone-heroku'
|
||||||
environment:
|
environment:
|
||||||
@@ -895,7 +895,7 @@ steps:
|
|||||||
exclude:
|
exclude:
|
||||||
- tag
|
- tag
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-heroku ./cmd/drone-heroku'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/amd64/drone-heroku ./cmd/drone-heroku'
|
||||||
environment:
|
environment:
|
||||||
@@ -944,7 +944,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-heroku ./cmd/drone-heroku'
|
- 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/linux/arm64/drone-heroku ./cmd/drone-heroku'
|
||||||
environment:
|
environment:
|
||||||
@@ -954,7 +954,7 @@ steps:
|
|||||||
exclude:
|
exclude:
|
||||||
- tag
|
- tag
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-heroku ./cmd/drone-heroku'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/linux/arm64/drone-heroku ./cmd/drone-heroku'
|
||||||
environment:
|
environment:
|
||||||
@@ -1035,7 +1035,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/amd64/drone-acr ./cmd/drone-acr'
|
- 'go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/amd64/drone-acr ./cmd/drone-acr'
|
||||||
environment:
|
environment:
|
||||||
@@ -1045,7 +1045,7 @@ steps:
|
|||||||
exclude:
|
exclude:
|
||||||
- tag
|
- tag
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/amd64/drone-acr ./cmd/drone-acr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/amd64/drone-acr ./cmd/drone-acr'
|
||||||
environment:
|
environment:
|
||||||
@@ -1093,7 +1093,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-push
|
- name: build-push
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm64/drone-acr ./cmd/drone-acr'
|
- 'go build -v -ldflags "-X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm64/drone-acr ./cmd/drone-acr'
|
||||||
environment:
|
environment:
|
||||||
@@ -1104,7 +1104,7 @@ steps:
|
|||||||
- tag
|
- tag
|
||||||
|
|
||||||
- name: build-tag
|
- name: build-tag
|
||||||
image: golang:1.24.11
|
image: golang:1.23
|
||||||
commands:
|
commands:
|
||||||
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm64/drone-acr ./cmd/drone-acr'
|
- 'go build -v -ldflags "-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}" -a -tags netgo -o release/linux/arm64/drone-acr ./cmd/drone-acr'
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
+4
-513
@@ -33,7 +33,7 @@ pipeline:
|
|||||||
identifier: Run_1
|
identifier: Run_1
|
||||||
spec:
|
spec:
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
image: golang:1.25.7
|
image: golang:1.23.0
|
||||||
shell: Sh
|
shell: Sh
|
||||||
command: go vet ./...
|
command: go vet ./...
|
||||||
- step:
|
- step:
|
||||||
@@ -42,7 +42,7 @@ pipeline:
|
|||||||
identifier: Run_2
|
identifier: Run_2
|
||||||
spec:
|
spec:
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
image: golang:1.25.7
|
image: golang:1.23.0
|
||||||
shell: Sh
|
shell: Sh
|
||||||
command: go test -cover ./...
|
command: go test -cover ./...
|
||||||
- parallel:
|
- parallel:
|
||||||
@@ -70,7 +70,7 @@ pipeline:
|
|||||||
identifier: Build_Push
|
identifier: Build_Push
|
||||||
spec:
|
spec:
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
image: golang:1.25.7
|
image: golang:1.23.0
|
||||||
shell: Sh
|
shell: Sh
|
||||||
command: go build -a -tags netgo -o release/linux/amd64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
command: go build -a -tags netgo -o release/linux/amd64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
||||||
envVariables:
|
envVariables:
|
||||||
@@ -157,7 +157,7 @@ pipeline:
|
|||||||
identifier: buildpush
|
identifier: buildpush
|
||||||
spec:
|
spec:
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
connectorRef: Plugins_Docker_Hub_Connector
|
||||||
image: golang:1.25.7
|
image: golang:1.23.0
|
||||||
shell: Sh
|
shell: Sh
|
||||||
command: go build -a -tags netgo -o release/linux/arm64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
command: go build -a -tags netgo -o release/linux/arm64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
||||||
envVariables:
|
envVariables:
|
||||||
@@ -398,480 +398,6 @@ pipeline:
|
|||||||
- acr
|
- acr
|
||||||
buildIntelligence:
|
buildIntelligence:
|
||||||
enabled: false
|
enabled: false
|
||||||
- stage:
|
|
||||||
name: rf-linux-amd64
|
|
||||||
identifier: rf_linamd64
|
|
||||||
description: ""
|
|
||||||
type: CI
|
|
||||||
spec:
|
|
||||||
cloneCodebase: true
|
|
||||||
caching:
|
|
||||||
enabled: false
|
|
||||||
paths: []
|
|
||||||
platform:
|
|
||||||
os: Linux
|
|
||||||
arch: Amd64
|
|
||||||
runtime:
|
|
||||||
type: Cloud
|
|
||||||
spec: {}
|
|
||||||
execution:
|
|
||||||
steps:
|
|
||||||
- step:
|
|
||||||
type: GitClone
|
|
||||||
name: Clone RF Dockerfiles
|
|
||||||
identifier: clone_rf
|
|
||||||
spec:
|
|
||||||
connectorRef: RapidFortPlugins
|
|
||||||
build:
|
|
||||||
type: branch
|
|
||||||
spec:
|
|
||||||
branch: CI-23243
|
|
||||||
cloneDirectory: rf-plugins
|
|
||||||
- step:
|
|
||||||
type: Run
|
|
||||||
name: Build Binary
|
|
||||||
identifier: build_binary
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: golang:1.25.7
|
|
||||||
shell: Sh
|
|
||||||
command: go build -a -tags netgo -o release/linux/amd64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
|
||||||
envVariables:
|
|
||||||
CGO_ENABLED: "0"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: RF Build and Push on Tag
|
|
||||||
identifier: rf_docker_build_push_tag
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username: <+secrets.getValue("harnesssecureusername")>
|
|
||||||
password: <+secrets.getValue("dockerHarnessSecurePwd")>
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.linux.amd64.rf
|
|
||||||
auto_tag: "true"
|
|
||||||
auto_tag_suffix: linux-amd64
|
|
||||||
base_image_username: <+secrets.getValue("harness0HARUsername")>
|
|
||||||
base_image_password: <+secrets.getValue("harness0HARPAT")>
|
|
||||||
base_image_registry: harness0.harness.io/oci/docker_artifacts
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "tag"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
- step:
|
|
||||||
type: BuildAndPushDockerRegistry
|
|
||||||
name: RF Build and Push on Branch
|
|
||||||
identifier: rf_build_push_branch
|
|
||||||
spec:
|
|
||||||
connectorRef: harnesssecure
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
tags:
|
|
||||||
- linux-amd64
|
|
||||||
caching: false
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.linux.amd64.rf
|
|
||||||
envVariables:
|
|
||||||
PLUGIN_BASE_IMAGE_USERNAME: <+secrets.getValue("harness0HARUsername")>
|
|
||||||
PLUGIN_BASE_IMAGE_PASSWORD: <+secrets.getValue("harness0HARPAT")>
|
|
||||||
PLUGIN_BASE_IMAGE_REGISTRY: harness0.harness.io/oci/docker_artifacts
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "branch"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
variables:
|
|
||||||
- name: CI_ENABLE_BARE_METAL
|
|
||||||
type: String
|
|
||||||
description: ""
|
|
||||||
required: false
|
|
||||||
value: "false"
|
|
||||||
- stage:
|
|
||||||
name: rf-linux-arm64
|
|
||||||
identifier: rf_linarm64
|
|
||||||
description: ""
|
|
||||||
type: CI
|
|
||||||
spec:
|
|
||||||
cloneCodebase: true
|
|
||||||
caching:
|
|
||||||
enabled: false
|
|
||||||
paths: []
|
|
||||||
platform:
|
|
||||||
os: Linux
|
|
||||||
arch: Arm64
|
|
||||||
runtime:
|
|
||||||
type: Cloud
|
|
||||||
spec: {}
|
|
||||||
execution:
|
|
||||||
steps:
|
|
||||||
- step:
|
|
||||||
type: GitClone
|
|
||||||
name: Clone RF Dockerfiles
|
|
||||||
identifier: clone_rf
|
|
||||||
spec:
|
|
||||||
connectorRef: RapidFortPlugins
|
|
||||||
build:
|
|
||||||
type: branch
|
|
||||||
spec:
|
|
||||||
branch: CI-23243
|
|
||||||
cloneDirectory: rf-plugins
|
|
||||||
- step:
|
|
||||||
type: Run
|
|
||||||
name: Build Binary
|
|
||||||
identifier: build_binary
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: golang:1.25.7
|
|
||||||
shell: Sh
|
|
||||||
command: go build -a -tags netgo -o release/linux/arm64/drone-<+matrix.repo> ./cmd/drone-<+matrix.repo>
|
|
||||||
envVariables:
|
|
||||||
CGO_ENABLED: "0"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: RF Build and Push on Tag
|
|
||||||
identifier: rf_docker_build_push_tag
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username: <+secrets.getValue("harnesssecureusername")>
|
|
||||||
password: <+secrets.getValue("dockerHarnessSecurePwd")>
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.linux.arm64.rf
|
|
||||||
auto_tag: "true"
|
|
||||||
auto_tag_suffix: linux-arm64
|
|
||||||
base_image_username: <+secrets.getValue("harness0HARUsername")>
|
|
||||||
base_image_password: <+secrets.getValue("harness0HARPAT")>
|
|
||||||
base_image_registry: harness0.harness.io/oci/docker_artifacts
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "tag"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
- step:
|
|
||||||
type: BuildAndPushDockerRegistry
|
|
||||||
name: RF Build and Push on Branch
|
|
||||||
identifier: rf_build_push_branch
|
|
||||||
spec:
|
|
||||||
connectorRef: harnesssecure
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
tags:
|
|
||||||
- linux-arm64
|
|
||||||
caching: false
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.linux.arm64.rf
|
|
||||||
envVariables:
|
|
||||||
PLUGIN_BASE_IMAGE_USERNAME: <+secrets.getValue("harness0HARUsername")>
|
|
||||||
PLUGIN_BASE_IMAGE_PASSWORD: <+secrets.getValue("harness0HARPAT")>
|
|
||||||
PLUGIN_BASE_IMAGE_REGISTRY: harness0.harness.io/oci/docker_artifacts
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "branch"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
variables:
|
|
||||||
- name: CI_ENABLE_BARE_METAL
|
|
||||||
type: String
|
|
||||||
description: ""
|
|
||||||
required: false
|
|
||||||
value: "false"
|
|
||||||
- stage:
|
|
||||||
name: win-1809-amd64-rf
|
|
||||||
identifier: win1809amd64rf
|
|
||||||
description: ""
|
|
||||||
type: CI
|
|
||||||
spec:
|
|
||||||
cloneCodebase: true
|
|
||||||
caching:
|
|
||||||
enabled: true
|
|
||||||
infrastructure:
|
|
||||||
type: VM
|
|
||||||
spec:
|
|
||||||
type: Pool
|
|
||||||
spec:
|
|
||||||
poolName: windows-2019
|
|
||||||
os: Windows
|
|
||||||
execution:
|
|
||||||
steps:
|
|
||||||
- step:
|
|
||||||
type: GitClone
|
|
||||||
name: Clone RF Dockerfiles
|
|
||||||
identifier: Clone_RF_Dockerfiles
|
|
||||||
spec:
|
|
||||||
connectorRef: RapidFortPlugins
|
|
||||||
cloneDirectory: rf-plugins
|
|
||||||
build:
|
|
||||||
type: branch
|
|
||||||
spec:
|
|
||||||
branch: CI-23243
|
|
||||||
- step:
|
|
||||||
type: Run
|
|
||||||
name: Build Binary
|
|
||||||
identifier: go_build
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: golang:1.23.0
|
|
||||||
shell: Sh
|
|
||||||
command: |-
|
|
||||||
# disable cgo
|
|
||||||
export CGO_ENABLED=0
|
|
||||||
|
|
||||||
go build -o release/windows/amd64/drone-<+matrix.repo>.exe ./cmd/drone-<+matrix.repo>
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gcr
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: RF Build and Push on Tag
|
|
||||||
identifier: RF_Build_and_Push_on_Tag
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username: <+secrets.getValue("harnesssecureusername")>
|
|
||||||
password: <+secrets.getValue("dockerHarnessSecurePwd")>
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.windows.amd64.1809.rf
|
|
||||||
auto_tag: "true"
|
|
||||||
auto_tag_suffix: windows-1809-amd64
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "branch"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
- step:
|
|
||||||
type: BuildAndPushDockerRegistry
|
|
||||||
name: RF Build and Push on Branch
|
|
||||||
identifier: rf_build_push_branch
|
|
||||||
spec:
|
|
||||||
connectorRef: harnesssecure
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
tags:
|
|
||||||
- windows-1809-amd64
|
|
||||||
caching: false
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.windows.amd64.1809.rf
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "branch"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
delegateSelectors:
|
|
||||||
- windows-vm
|
|
||||||
- stage:
|
|
||||||
name: win-ltsc2022-amd64-rf
|
|
||||||
identifier: winamd64rf
|
|
||||||
description: ""
|
|
||||||
type: CI
|
|
||||||
spec:
|
|
||||||
cloneCodebase: true
|
|
||||||
caching:
|
|
||||||
enabled: false
|
|
||||||
paths: []
|
|
||||||
platform:
|
|
||||||
os: Windows
|
|
||||||
arch: Amd64
|
|
||||||
runtime:
|
|
||||||
type: Cloud
|
|
||||||
spec: {}
|
|
||||||
execution:
|
|
||||||
steps:
|
|
||||||
- step:
|
|
||||||
type: GitClone
|
|
||||||
name: Clone RF Dockerfiles
|
|
||||||
identifier: Clone_RF_Dockerfiles
|
|
||||||
spec:
|
|
||||||
connectorRef: RapidFortPlugins
|
|
||||||
cloneDirectory: rf-plugins
|
|
||||||
build:
|
|
||||||
type: branch
|
|
||||||
spec:
|
|
||||||
branch: CI-23243
|
|
||||||
- step:
|
|
||||||
type: Run
|
|
||||||
name: Build Binary -ltsc2022
|
|
||||||
identifier: build_amd64ltsc2022
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: golang:1.23.0
|
|
||||||
shell: Sh
|
|
||||||
command: |-
|
|
||||||
# disable cgo
|
|
||||||
export CGO_ENABLED=0
|
|
||||||
|
|
||||||
go build -o release/windows/amd64/drone-<+matrix.repo>.exe ./cmd/drone-<+matrix.repo>
|
|
||||||
envVariables:
|
|
||||||
CGO_ENABLED: "0"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gcr
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: RF Build and Push on Tag
|
|
||||||
identifier: RF_Build_and_Push_on_Tag
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
username: <+secrets.getValue("harnesssecureusername")>
|
|
||||||
password: <+secrets.getValue("dockerHarnessSecurePwd")>
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.windows.amd64.ltsc2022.rf
|
|
||||||
auto_tag: "true"
|
|
||||||
auto_tag_suffix: windows-ltsc2022-amd64
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "tag"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
- step:
|
|
||||||
type: BuildAndPushDockerRegistry
|
|
||||||
name: RF Build and Push on Branch
|
|
||||||
identifier: rf_build_push_branch
|
|
||||||
spec:
|
|
||||||
connectorRef: harnesssecure
|
|
||||||
repo: harnesssecure/<+matrix.repo>
|
|
||||||
tags:
|
|
||||||
- windows-ltsc2022-amd64
|
|
||||||
caching: false
|
|
||||||
dockerfile: rf-plugins/drone-docker/docker/<+matrix.repo>/Dockerfile.windows.amd64.ltsc2022.rf
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "branch"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
buildIntelligence:
|
|
||||||
enabled: false
|
|
||||||
- stage:
|
|
||||||
name: win-ltsc-2025-amd64
|
|
||||||
identifier: winltsc2025amd64
|
|
||||||
description: ""
|
|
||||||
type: CI
|
|
||||||
spec:
|
|
||||||
cloneCodebase: true
|
|
||||||
caching:
|
|
||||||
enabled: false
|
|
||||||
override: false
|
|
||||||
paths: []
|
|
||||||
buildIntelligence:
|
|
||||||
enabled: false
|
|
||||||
infrastructure:
|
|
||||||
type: VM
|
|
||||||
spec:
|
|
||||||
type: Pool
|
|
||||||
spec:
|
|
||||||
poolName: windows-2025
|
|
||||||
os: Windows
|
|
||||||
execution:
|
|
||||||
steps:
|
|
||||||
- step:
|
|
||||||
type: Run
|
|
||||||
name: Build Binary 2025
|
|
||||||
identifier: Build_Binary_2025
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: golang:1.23.0
|
|
||||||
shell: Sh
|
|
||||||
command: |-
|
|
||||||
# disable cgo
|
|
||||||
export CGO_ENABLED=0
|
|
||||||
|
|
||||||
go build -o release/windows/amd64/drone-<+matrix.repo>.exe ./cmd/drone-<+matrix.repo>
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gcr
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: Plugin_1
|
|
||||||
identifier: Plugin_1
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/docker:windows-ltsc2025-amd64
|
|
||||||
settings:
|
|
||||||
username: drone
|
|
||||||
password: <+secrets.getValue("Plugins_Docker_Hub_Pat")>
|
|
||||||
repo: plugins/<+matrix.repo>
|
|
||||||
dockerfile: docker/<+matrix.repo>/Dockerfile.windows.amd64.ltsc2025
|
|
||||||
auto_tag: "true"
|
|
||||||
auto_tag_suffix: windows-ltsc2025-amd64
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- gcr
|
|
||||||
- gar
|
|
||||||
- ecr
|
|
||||||
- acr
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "tag"
|
|
||||||
- stage:
|
- stage:
|
||||||
name: Manifest and Release
|
name: Manifest and Release
|
||||||
identifier: Manifest
|
identifier: Manifest
|
||||||
@@ -884,18 +410,6 @@ pipeline:
|
|||||||
paths: []
|
paths: []
|
||||||
execution:
|
execution:
|
||||||
steps:
|
steps:
|
||||||
- step:
|
|
||||||
type: GitClone
|
|
||||||
name: Clone RF Manifest Templates
|
|
||||||
identifier: clone_rf_manifest
|
|
||||||
spec:
|
|
||||||
connectorRef: RapidFortPlugins
|
|
||||||
build:
|
|
||||||
type: branch
|
|
||||||
spec:
|
|
||||||
branch: main
|
|
||||||
cloneDirectory: rf-plugins
|
|
||||||
contextType: Pipeline
|
|
||||||
- step:
|
- step:
|
||||||
type: Plugin
|
type: Plugin
|
||||||
name: Manifest
|
name: Manifest
|
||||||
@@ -921,29 +435,6 @@ pipeline:
|
|||||||
- ecr
|
- ecr
|
||||||
- heroku
|
- heroku
|
||||||
- acr
|
- acr
|
||||||
- step:
|
|
||||||
type: Plugin
|
|
||||||
name: RF Manifest
|
|
||||||
identifier: rf_manifest
|
|
||||||
spec:
|
|
||||||
connectorRef: Plugins_Docker_Hub_Connector
|
|
||||||
image: plugins/manifest
|
|
||||||
settings:
|
|
||||||
username: <+secrets.getValue("harnesssecureusername")>
|
|
||||||
password: <+secrets.getValue("dockerHarnessSecurePwd")>
|
|
||||||
auto_tag: "true"
|
|
||||||
ignore_missing: "true"
|
|
||||||
spec: rf-plugins/drone-docker/docker/<+matrix.repo>/manifest.tmpl
|
|
||||||
when:
|
|
||||||
stageStatus: Success
|
|
||||||
condition: <+codebase.build.type> == "tag"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
repo:
|
|
||||||
- docker
|
|
||||||
- acr
|
|
||||||
- ecr
|
|
||||||
- gar
|
|
||||||
platform:
|
platform:
|
||||||
os: Linux
|
os: Linux
|
||||||
arch: Amd64
|
arch: Amd64
|
||||||
|
|||||||
+25
-28
@@ -6,7 +6,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log/slog"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@@ -17,6 +16,8 @@ import (
|
|||||||
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
|
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
|
||||||
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
|
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
docker "github.com/drone-plugins/drone-docker"
|
docker "github.com/drone-plugins/drone-docker"
|
||||||
azureutil "github.com/drone-plugins/drone-docker/internal/azure"
|
azureutil "github.com/drone-plugins/drone-docker/internal/azure"
|
||||||
@@ -83,12 +84,11 @@ func main() {
|
|||||||
var err error
|
var err error
|
||||||
username = defaultUsername
|
username = defaultUsername
|
||||||
if idToken != "" && clientId != "" && tenantId != "" {
|
if idToken != "" && clientId != "" && tenantId != "" {
|
||||||
slog.Debug("using OIDC authentication flow")
|
logrus.Debug("Using OIDC authentication flow")
|
||||||
var aadToken string
|
var aadToken string
|
||||||
aadToken, err = azureutil.GetAADAccessTokenViaClientAssertion(context.Background(), tenantId, clientId, idToken, authorityHost)
|
aadToken, err = azureutil.GetAADAccessTokenViaClientAssertion(context.Background(), tenantId, clientId, idToken, authorityHost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("failed to get AAD access token", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
var p string
|
var p string
|
||||||
p, err = getPublicUrl(aadToken, registry, subscriptionId)
|
p, err = getPublicUrl(aadToken, registry, subscriptionId)
|
||||||
@@ -99,14 +99,12 @@ func main() {
|
|||||||
}
|
}
|
||||||
password, err = fetchACRToken(tenantId, aadToken, registry)
|
password, err = fetchACRToken(tenantId, aadToken, registry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("failed to fetch ACR token", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
password, publicUrl, err = getAuth(clientId, clientSecret, clientCert, tenantId, subscriptionId, registry)
|
password, publicUrl, err = getAuth(clientId, clientSecret, clientCert, tenantId, subscriptionId, registry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("failed to get auth", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,8 +133,7 @@ func main() {
|
|||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("command execution failed", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,26 +153,26 @@ func getAuth(clientId, clientSecret, clientCert, tenantId, subscriptionId, regis
|
|||||||
if clientCert != "" {
|
if clientCert != "" {
|
||||||
err := setupACRCert(clientCert, acrCertPath)
|
err := setupACRCert(clientCert, acrCertPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Warn("failed to push setup cert file", "error", err)
|
errors.Wrap(err, "failed to push setup cert file")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get AZ env
|
// Get AZ env
|
||||||
if err := os.Setenv(clientIdEnv, clientId); err != nil {
|
if err := os.Setenv(clientIdEnv, clientId); err != nil {
|
||||||
return "", "", fmt.Errorf("failed to set env variable client Id: %w", err)
|
return "", "", errors.Wrap(err, "failed to set env variable client Id")
|
||||||
}
|
}
|
||||||
if err := os.Setenv(clientSecretKeyEnv, clientSecret); err != nil {
|
if err := os.Setenv(clientSecretKeyEnv, clientSecret); err != nil {
|
||||||
return "", "", fmt.Errorf("failed to set env variable client secret: %w", err)
|
return "", "", errors.Wrap(err, "failed to set env variable client secret")
|
||||||
}
|
}
|
||||||
if err := os.Setenv(tenantKeyEnv, tenantId); err != nil {
|
if err := os.Setenv(tenantKeyEnv, tenantId); err != nil {
|
||||||
return "", "", fmt.Errorf("failed to set env variable tenant Id: %w", err)
|
return "", "", errors.Wrap(err, "failed to set env variable tenant Id")
|
||||||
}
|
}
|
||||||
if err := os.Setenv(certPathEnv, acrCertPath); err != nil {
|
if err := os.Setenv(certPathEnv, acrCertPath); err != nil {
|
||||||
return "", "", fmt.Errorf("failed to set env variable cert path: %w", err)
|
return "", "", errors.Wrap(err, "failed to set env variable cert path")
|
||||||
}
|
}
|
||||||
env, err := azidentity.NewEnvironmentCredential(nil)
|
env, err := azidentity.NewEnvironmentCredential(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("failed to get env credentials from azure: %w", err)
|
return "", "", errors.Wrap(err, "failed to get env credentials from azure")
|
||||||
}
|
}
|
||||||
os.Unsetenv(clientIdEnv)
|
os.Unsetenv(clientIdEnv)
|
||||||
os.Unsetenv(clientSecretKeyEnv)
|
os.Unsetenv(clientSecretKeyEnv)
|
||||||
@@ -188,7 +185,7 @@ func getAuth(clientId, clientSecret, clientCert, tenantId, subscriptionId, regis
|
|||||||
}
|
}
|
||||||
aadToken, err := env.GetToken(context.Background(), policy)
|
aadToken, err := env.GetToken(context.Background(), policy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("failed to fetch access token: %w", err)
|
return "", "", errors.Wrap(err, "failed to fetch access token")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get public URL for artifacts
|
// Get public URL for artifacts
|
||||||
@@ -201,7 +198,7 @@ func getAuth(clientId, clientSecret, clientCert, tenantId, subscriptionId, regis
|
|||||||
// Fetch token
|
// Fetch token
|
||||||
ACRToken, err := fetchACRToken(tenantId, aadToken.Token, registry)
|
ACRToken, err := fetchACRToken(tenantId, aadToken.Token, registry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("failed to fetch ACR token: %w", err)
|
return "", "", errors.Wrap(err, "failed to fetch ACR token")
|
||||||
}
|
}
|
||||||
return ACRToken, publicUrl, nil
|
return ACRToken, publicUrl, nil
|
||||||
}
|
}
|
||||||
@@ -216,14 +213,14 @@ func fetchACRToken(tenantId, token, registry string) (string, error) {
|
|||||||
}
|
}
|
||||||
jsonResponse, err := http.PostForm(fmt.Sprintf("https://%s/oauth2/exchange", registry), formData)
|
jsonResponse, err := http.PostForm(fmt.Sprintf("https://%s/oauth2/exchange", registry), formData)
|
||||||
if err != nil || jsonResponse == nil {
|
if err != nil || jsonResponse == nil {
|
||||||
return "", fmt.Errorf("failed to fetch ACR token: %w", err)
|
return "", errors.Wrap(err, "failed to fetch ACR token")
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch token from response
|
// fetch token from response
|
||||||
var response map[string]interface{}
|
var response map[string]interface{}
|
||||||
err = json.NewDecoder(jsonResponse.Body).Decode(&response)
|
err = json.NewDecoder(jsonResponse.Body).Decode(&response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to decode oauth exchange response: %w", err)
|
return "", errors.Wrap(err, "failed to decode oauth exchange response")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the refresh_token from the response
|
// Parse the refresh_token from the response
|
||||||
@@ -231,19 +228,19 @@ func fetchACRToken(tenantId, token, registry string) (string, error) {
|
|||||||
if refreshToken, ok := t.(string); ok {
|
if refreshToken, ok := t.(string); ok {
|
||||||
return refreshToken, nil
|
return refreshToken, nil
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("failed to cast refresh token from acr")
|
return "", errors.New("failed to cast refresh token from acr")
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("refresh token not found in response of oauth exchange call: %w", err)
|
return "", errors.Wrap(err, "refresh token not found in response of oauth exchange call")
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupACRCert(cert, certPath string) error {
|
func setupACRCert(cert, certPath string) error {
|
||||||
decoded, err := base64.StdEncoding.DecodeString(cert)
|
decoded, err := base64.StdEncoding.DecodeString(cert)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to base64 decode ACR certificate: %w", err)
|
return errors.Wrap(err, "failed to base64 decode ACR certificate")
|
||||||
}
|
}
|
||||||
err = ioutil.WriteFile(certPath, decoded, 0644)
|
err = ioutil.WriteFile(certPath, decoded, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to write ACR certificate: %w", err)
|
return errors.Wrap(err, "failed to write ACR certificate")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -265,24 +262,24 @@ func getPublicUrl(token, registryUrl, subscriptionId string) (string, error) {
|
|||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return "", fmt.Errorf("failed to create request for getting container registry setting: %w", err)
|
return "", errors.Wrap(err, "failed to create request for getting container registry setting")
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Header.Add("Authorization", "Bearer "+token)
|
req.Header.Add("Authorization", "Bearer "+token)
|
||||||
res, err := client.Do(req)
|
res, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return "", fmt.Errorf("failed to send request for getting container registry setting: %w", err)
|
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
var response subscriptionUrlResponse
|
var response subscriptionUrlResponse
|
||||||
err = json.NewDecoder(res.Body).Decode(&response)
|
err = json.NewDecoder(res.Body).Decode(&response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to send request for getting container registry setting: %w", err)
|
return "", errors.Wrap(err, "failed to send request for getting container registry setting")
|
||||||
}
|
}
|
||||||
if len(response.Value) == 0 {
|
if len(response.Value) == 0 {
|
||||||
return "", fmt.Errorf("no id present for base url")
|
return "", errors.New("no id present for base url")
|
||||||
}
|
}
|
||||||
return basePublicUrl + encodeParam(response.Value[0].ID), nil
|
return basePublicUrl + encodeParam(response.Value[0].ID), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/dchest/uniuri"
|
"github.com/dchest/uniuri"
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
docker "github.com/drone-plugins/drone-docker"
|
docker "github.com/drone-plugins/drone-docker"
|
||||||
@@ -33,7 +33,7 @@ func main() {
|
|||||||
cli.BoolFlag{
|
cli.BoolFlag{
|
||||||
Name: "dry-run",
|
Name: "dry-run",
|
||||||
Usage: "dry run disables docker push",
|
Usage: "dry run disables docker push",
|
||||||
EnvVar: "PLUGIN_DRY_RUN, PLUGIN_NO_PUSH",
|
EnvVar: "PLUGIN_DRY_RUN",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "remote.url",
|
Name: "remote.url",
|
||||||
@@ -112,12 +112,6 @@ func main() {
|
|||||||
Usage: "don't start the docker daemon",
|
Usage: "don't start the docker daemon",
|
||||||
EnvVar: "PLUGIN_DAEMON_OFF",
|
EnvVar: "PLUGIN_DAEMON_OFF",
|
||||||
},
|
},
|
||||||
cli.IntFlag{
|
|
||||||
Name: "daemon.retry-count",
|
|
||||||
Usage: "number of retry attempts to reach docker daemon",
|
|
||||||
Value: 15,
|
|
||||||
EnvVar: "PLUGIN_DAEMON_RETRY_COUNT",
|
|
||||||
},
|
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "dockerfile",
|
Name: "dockerfile",
|
||||||
Usage: "build dockerfile",
|
Usage: "build dockerfile",
|
||||||
@@ -358,8 +352,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := app.Run(os.Args); err != nil {
|
if err := app.Run(os.Args); err != nil {
|
||||||
slog.Error("application error", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,7 +419,6 @@ func run(c *cli.Context) error {
|
|||||||
DNSSearch: c.StringSlice("daemon.dns-search"),
|
DNSSearch: c.StringSlice("daemon.dns-search"),
|
||||||
MTU: c.String("daemon.mtu"),
|
MTU: c.String("daemon.mtu"),
|
||||||
Experimental: c.Bool("daemon.experimental"),
|
Experimental: c.Bool("daemon.experimental"),
|
||||||
RetryCount: c.Int("daemon.retry-count"),
|
|
||||||
RegistryType: registryType,
|
RegistryType: registryType,
|
||||||
},
|
},
|
||||||
BaseImageRegistry: c.String("docker.baseimageregistry"),
|
BaseImageRegistry: c.String("docker.baseimageregistry"),
|
||||||
@@ -451,12 +443,12 @@ func run(c *cli.Context) error {
|
|||||||
c.String("tags.suffix"),
|
c.String("tags.suffix"),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("cannot build docker image, invalid semantic version", "commit_ref", c.String("commit.ref"), "error", err)
|
logrus.Printf("cannot build docker image for %s, invalid semantic version", c.String("commit.ref"))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
plugin.Build.Tags = tag
|
plugin.Build.Tags = tag
|
||||||
} else {
|
} else {
|
||||||
slog.Info("skipping automated docker build", "commit_ref", c.String("commit.ref"))
|
logrus.Printf("skipping automated docker build for %s", c.String("commit.ref"))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+91
-93
@@ -1,31 +1,35 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"log/slog"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go-v2/aws"
|
|
||||||
"github.com/aws/aws-sdk-go-v2/config"
|
|
||||||
"github.com/aws/aws-sdk-go-v2/credentials/stscreds"
|
|
||||||
"github.com/aws/aws-sdk-go-v2/service/ecr"
|
|
||||||
ecrtypes "github.com/aws/aws-sdk-go-v2/service/ecr/types"
|
|
||||||
"github.com/aws/aws-sdk-go-v2/service/sts"
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ecr"
|
||||||
|
|
||||||
docker "github.com/drone-plugins/drone-docker"
|
docker "github.com/drone-plugins/drone-docker"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ecrAPI interface {
|
||||||
|
DescribeImages(*ecr.DescribeImagesInput) (*ecr.DescribeImagesOutput, error)
|
||||||
|
}
|
||||||
|
|
||||||
const defaultRegion = "us-east-1"
|
const defaultRegion = "us-east-1"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// Load env-file if it exists first
|
||||||
if env := os.Getenv("PLUGIN_ENV_FILE"); env != "" {
|
if env := os.Getenv("PLUGIN_ENV_FILE"); env != "" {
|
||||||
godotenv.Load(env)
|
godotenv.Load(env)
|
||||||
}
|
}
|
||||||
@@ -46,6 +50,7 @@ func main() {
|
|||||||
skipPushIfTagExists = parseBoolOrDefault(false, getenv("PLUGIN_SKIP_PUSH_IF_TAG_EXISTS"))
|
skipPushIfTagExists = parseBoolOrDefault(false, getenv("PLUGIN_SKIP_PUSH_IF_TAG_EXISTS"))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// set the region
|
||||||
if region == "" {
|
if region == "" {
|
||||||
region = defaultRegion
|
region = defaultRegion
|
||||||
}
|
}
|
||||||
@@ -57,15 +62,13 @@ func main() {
|
|||||||
os.Setenv("AWS_SECRET_ACCESS_KEY", secret)
|
os.Setenv("AWS_SECRET_ACCESS_KEY", secret)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
sess, err := session.NewSession(&aws.Config{Region: ®ion})
|
||||||
|
|
||||||
cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion(region))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(fmt.Sprintf("error creating aws config: %v", err))
|
log.Fatal(fmt.Sprintf("error creating aws session: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := getECRClient(cfg, assumeRole, externalId, idToken)
|
svc := getECRClient(sess, assumeRole, externalId, idToken)
|
||||||
username, password, defaultRegistry, err := getAuthInfo(ctx, svc)
|
username, password, defaultRegistry, err := getAuthInfo(svc)
|
||||||
|
|
||||||
if registry == "" {
|
if registry == "" {
|
||||||
registry = defaultRegistry
|
registry = defaultRegistry
|
||||||
@@ -80,32 +83,32 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if create {
|
if create {
|
||||||
err = ensureRepoExists(ctx, svc, trimHostname(repo, registry), scanOnPush)
|
err = ensureRepoExists(svc, trimHostname(repo, registry), scanOnPush)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(fmt.Sprintf("error creating ECR repo: %v", err))
|
log.Fatal(fmt.Sprintf("error creating ECR repo: %v", err))
|
||||||
}
|
}
|
||||||
err = updateImageScanningConfig(ctx, svc, trimHostname(repo, registry), scanOnPush)
|
err = updateImageScannningConfig(svc, trimHostname(repo, registry), scanOnPush)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(fmt.Sprintf("error updating scan on push for ECR repo: %v", err))
|
log.Fatal(fmt.Sprintf("error updating scan on push for ECR repo: %v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if lifecyclePolicy != "" {
|
if lifecyclePolicy != "" {
|
||||||
p, err := os.ReadFile(lifecyclePolicy)
|
p, err := ioutil.ReadFile(lifecyclePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := uploadLifeCyclePolicy(ctx, svc, string(p), trimHostname(repo, registry)); err != nil {
|
if err := uploadLifeCyclePolicy(svc, string(p), trimHostname(repo, registry)); err != nil {
|
||||||
log.Fatal(fmt.Sprintf("error uploading ECR lifecycle policy: %v", err))
|
log.Fatal(fmt.Sprintf("error uploading ECR lifecycle policy: %v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if repositoryPolicy != "" {
|
if repositoryPolicy != "" {
|
||||||
p, err := os.ReadFile(repositoryPolicy)
|
p, err := ioutil.ReadFile(repositoryPolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := uploadRepositoryPolicy(ctx, svc, string(p), trimHostname(repo, registry)); err != nil {
|
if err := uploadRepositoryPolicy(svc, string(p), trimHostname(repo, registry)); err != nil {
|
||||||
log.Fatal(fmt.Sprintf("error uploading ECR repository policy. %v", err))
|
log.Fatal(fmt.Sprintf("error uploading ECR repository policy. %v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,6 +119,7 @@ func main() {
|
|||||||
os.Setenv("DOCKER_PASSWORD", password)
|
os.Setenv("DOCKER_PASSWORD", password)
|
||||||
os.Setenv("PLUGIN_REGISTRY_TYPE", "ECR")
|
os.Setenv("PLUGIN_REGISTRY_TYPE", "ECR")
|
||||||
|
|
||||||
|
// Skip if tag already exits for both mutable and immutable repos
|
||||||
if skipPushIfTagExists {
|
if skipPushIfTagExists {
|
||||||
tagInput := getenv("PLUGIN_TAG", "PLUGIN_TAGS")
|
tagInput := getenv("PLUGIN_TAG", "PLUGIN_TAGS")
|
||||||
var tags []string
|
var tags []string
|
||||||
@@ -132,24 +136,23 @@ func main() {
|
|||||||
|
|
||||||
repositoryName := trimHostname(repo, registry)
|
repositoryName := trimHostname(repo, registry)
|
||||||
for _, t := range tags {
|
for _, t := range tags {
|
||||||
exists, err := tagExists(ctx, svc, repositoryName, t)
|
exists, err := tagExists(svc, repositoryName, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("error checking if image exists for tag", "tag", t, "error", err)
|
logrus.Fatalf("Error checking if image exists for tag %s: %v", t, err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
if exists {
|
if exists {
|
||||||
slog.Info("image tag exists, skipping push", "repo", repo, "tag", t)
|
logrus.Infof("%s:%s: Image tag exists. Skipping push.", repo, t)
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// invoke the base docker plugin binary
|
||||||
cmd := exec.Command(docker.GetDroneDockerExecCmd())
|
cmd := exec.Command(docker.GetDroneDockerExecCmd())
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
if err = cmd.Run(); err != nil {
|
if err = cmd.Run(); err != nil {
|
||||||
slog.Error("command execution failed", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,63 +162,57 @@ func trimHostname(repo, registry string) string {
|
|||||||
return repo
|
return repo
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureRepoExists(ctx context.Context, svc *ecr.Client, name string, scanOnPush bool) error {
|
func ensureRepoExists(svc *ecr.ECR, name string, scanOnPush bool) (err error) {
|
||||||
_, err := svc.CreateRepository(ctx, &ecr.CreateRepositoryInput{
|
input := &ecr.CreateRepositoryInput{}
|
||||||
RepositoryName: aws.String(name),
|
input.SetRepositoryName(name)
|
||||||
ImageScanningConfiguration: &ecrtypes.ImageScanningConfiguration{
|
input.SetImageScanningConfiguration(&ecr.ImageScanningConfiguration{ScanOnPush: &scanOnPush})
|
||||||
ScanOnPush: scanOnPush,
|
_, err = svc.CreateRepository(input)
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var rae *ecrtypes.RepositoryAlreadyExistsException
|
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ecr.ErrCodeRepositoryAlreadyExistsException {
|
||||||
if errors.As(err, &rae) {
|
// eat it, we skip checking for existing to save two requests
|
||||||
return nil
|
err = nil
|
||||||
}
|
}
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateImageScanningConfig(ctx context.Context, svc *ecr.Client, name string, scanOnPush bool) error {
|
func updateImageScannningConfig(svc *ecr.ECR, name string, scanOnPush bool) (err error) {
|
||||||
_, err := svc.PutImageScanningConfiguration(ctx, &ecr.PutImageScanningConfigurationInput{
|
input := &ecr.PutImageScanningConfigurationInput{}
|
||||||
RepositoryName: aws.String(name),
|
input.SetRepositoryName(name)
|
||||||
ImageScanningConfiguration: &ecrtypes.ImageScanningConfiguration{
|
input.SetImageScanningConfiguration(&ecr.ImageScanningConfiguration{ScanOnPush: &scanOnPush})
|
||||||
ScanOnPush: scanOnPush,
|
_, err = svc.PutImageScanningConfiguration(input)
|
||||||
},
|
|
||||||
})
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func uploadLifeCyclePolicy(ctx context.Context, svc *ecr.Client, lifecyclePolicy string, name string) error {
|
func uploadLifeCyclePolicy(svc *ecr.ECR, lifecyclePolicy string, name string) (err error) {
|
||||||
_, err := svc.PutLifecyclePolicy(ctx, &ecr.PutLifecyclePolicyInput{
|
input := &ecr.PutLifecyclePolicyInput{}
|
||||||
LifecyclePolicyText: aws.String(lifecyclePolicy),
|
input.SetLifecyclePolicyText(lifecyclePolicy)
|
||||||
RepositoryName: aws.String(name),
|
input.SetRepositoryName(name)
|
||||||
})
|
_, err = svc.PutLifecyclePolicy(input)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func uploadRepositoryPolicy(ctx context.Context, svc *ecr.Client, repositoryPolicy string, name string) error {
|
func uploadRepositoryPolicy(svc *ecr.ECR, repositoryPolicy string, name string) (err error) {
|
||||||
_, err := svc.SetRepositoryPolicy(ctx, &ecr.SetRepositoryPolicyInput{
|
input := &ecr.SetRepositoryPolicyInput{}
|
||||||
PolicyText: aws.String(repositoryPolicy),
|
input.SetPolicyText(repositoryPolicy)
|
||||||
RepositoryName: aws.String(name),
|
input.SetRepositoryName(name)
|
||||||
})
|
_, err = svc.SetRepositoryPolicy(input)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAuthInfo(ctx context.Context, svc *ecr.Client) (username, password, registry string, err error) {
|
func getAuthInfo(svc *ecr.ECR) (username, password, registry string, err error) {
|
||||||
var result *ecr.GetAuthorizationTokenOutput
|
var result *ecr.GetAuthorizationTokenOutput
|
||||||
var decoded []byte
|
var decoded []byte
|
||||||
|
|
||||||
result, err = svc.GetAuthorizationToken(ctx, &ecr.GetAuthorizationTokenInput{})
|
result, err = svc.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(result.AuthorizationData) == 0 {
|
|
||||||
err = fmt.Errorf("no authorization data returned from ECR")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
auth := result.AuthorizationData[0]
|
auth := result.AuthorizationData[0]
|
||||||
token := *auth.AuthorizationToken
|
token := *auth.AuthorizationToken
|
||||||
decoded, err = base64.StdEncoding.DecodeString(token)
|
decoded, err = base64.StdEncoding.DecodeString(token)
|
||||||
@@ -224,11 +221,7 @@ func getAuthInfo(ctx context.Context, svc *ecr.Client) (username, password, regi
|
|||||||
}
|
}
|
||||||
|
|
||||||
registry = strings.TrimPrefix(*auth.ProxyEndpoint, "https://")
|
registry = strings.TrimPrefix(*auth.ProxyEndpoint, "https://")
|
||||||
creds := strings.SplitN(string(decoded), ":", 2)
|
creds := strings.Split(string(decoded), ":")
|
||||||
if len(creds) < 2 {
|
|
||||||
err = fmt.Errorf("invalid ECR authorization token format")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
username = creds[0]
|
username = creds[0]
|
||||||
password = creds[1]
|
password = creds[1]
|
||||||
return
|
return
|
||||||
@@ -240,6 +233,7 @@ func parseBoolOrDefault(defaultValue bool, s string) (result bool) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
result = defaultValue
|
result = defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,51 +247,55 @@ func getenv(key ...string) (s string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getECRClient(cfg aws.Config, role string, externalId string, idToken string) *ecr.Client {
|
func getECRClient(sess *session.Session, role string, externalId string, idToken string) *ecr.ECR {
|
||||||
if role == "" {
|
if role == "" {
|
||||||
return ecr.NewFromConfig(cfg)
|
return ecr.New(sess)
|
||||||
}
|
}
|
||||||
|
|
||||||
stsSvc := sts.NewFromConfig(cfg)
|
|
||||||
|
|
||||||
if idToken != "" {
|
if idToken != "" {
|
||||||
provider := stscreds.NewWebIdentityRoleProvider(stsSvc, role, identityToken(idToken))
|
tempFile, err := os.CreateTemp("/tmp", "idToken-*.jwt")
|
||||||
cfg.Credentials = aws.NewCredentialsCache(provider)
|
if err != nil {
|
||||||
return ecr.NewFromConfig(cfg)
|
log.Fatalf("Failed to create temporary file: %v", err)
|
||||||
|
}
|
||||||
|
defer tempFile.Close()
|
||||||
|
|
||||||
|
if err := os.Chmod(tempFile.Name(), 0600); err != nil {
|
||||||
|
log.Fatalf("Failed to set file permissions: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var provider *stscreds.AssumeRoleProvider
|
if _, err := tempFile.WriteString(idToken); err != nil {
|
||||||
if externalId != "" {
|
log.Fatalf("Failed to write ID token to temporary file: %v", err)
|
||||||
provider = stscreds.NewAssumeRoleProvider(stsSvc, role, func(o *stscreds.AssumeRoleOptions) {
|
}
|
||||||
o.ExternalID = &externalId
|
|
||||||
|
// Create credentials using the path to the ID token file
|
||||||
|
creds := stscreds.NewWebIdentityCredentials(sess, role, "", tempFile.Name())
|
||||||
|
return ecr.New(sess, &aws.Config{Credentials: creds})
|
||||||
|
} else if externalId != "" {
|
||||||
|
return ecr.New(sess, &aws.Config{
|
||||||
|
Credentials: stscreds.NewCredentials(sess, role, func(p *stscreds.AssumeRoleProvider) {
|
||||||
|
p.ExternalID = &externalId
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
provider = stscreds.NewAssumeRoleProvider(stsSvc, role)
|
return ecr.New(sess, &aws.Config{
|
||||||
|
Credentials: stscreds.NewCredentials(sess, role),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
cfg.Credentials = aws.NewCredentialsCache(provider)
|
|
||||||
return ecr.NewFromConfig(cfg)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func tagExists(ctx context.Context, svc *ecr.Client, repository, tag string) (bool, error) {
|
func tagExists(svc ecrAPI, repository, tag string) (bool, error) {
|
||||||
input := &ecr.DescribeImagesInput{
|
input := &ecr.DescribeImagesInput{
|
||||||
RepositoryName: aws.String(repository),
|
RepositoryName: aws.String(repository),
|
||||||
ImageIds: []ecrtypes.ImageIdentifier{
|
ImageIds: []*ecr.ImageIdentifier{
|
||||||
{ImageTag: aws.String(tag)},
|
{ImageTag: aws.String(tag)},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
output, err := svc.DescribeImages(ctx, input)
|
output, err := svc.DescribeImages(input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var inf *ecrtypes.ImageNotFoundException
|
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "ImageNotFoundException" {
|
||||||
if errors.As(err, &inf) {
|
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return len(output.ImageDetails) > 0, nil
|
return len(output.ImageDetails) > 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type identityToken string
|
|
||||||
|
|
||||||
func (t identityToken) GetIdentityToken() ([]byte, error) {
|
|
||||||
return []byte(t), nil
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"log/slog"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
@@ -16,6 +15,7 @@ import (
|
|||||||
"github.com/drone-plugins/drone-docker/internal/gcp"
|
"github.com/drone-plugins/drone-docker/internal/gcp"
|
||||||
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
)
|
)
|
||||||
@@ -58,13 +58,11 @@ func loadConfig() Config {
|
|||||||
if idToken != "" && projectId != "" && poolId != "" && providerId != "" && serviceAccountEmail != "" {
|
if idToken != "" && projectId != "" && poolId != "" && providerId != "" && serviceAccountEmail != "" {
|
||||||
federalToken, err := gcp.GetFederalToken(idToken, projectId, poolId, providerId)
|
federalToken, err := gcp.GetFederalToken(idToken, projectId, poolId, providerId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("getFederalToken error", "error", err)
|
logrus.Fatalf("Error (getFederalToken): %s", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
accessToken, err := gcp.GetGoogleCloudAccessToken(federalToken, serviceAccountEmail)
|
accessToken, err := gcp.GetGoogleCloudAccessToken(federalToken, serviceAccountEmail)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("getGoogleCloudAccessToken error", "error", err)
|
logrus.Fatalf("Error (getGoogleCloudAccessToken): %s", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
config.AccessToken = accessToken
|
config.AccessToken = accessToken
|
||||||
} else {
|
} else {
|
||||||
@@ -112,8 +110,7 @@ func main() {
|
|||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("command execution failed", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"log"
|
"log"
|
||||||
"log/slog"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
@@ -15,6 +14,7 @@ import (
|
|||||||
"github.com/drone-plugins/drone-docker/internal/gcp"
|
"github.com/drone-plugins/drone-docker/internal/gcp"
|
||||||
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -48,13 +48,11 @@ func loadConfig() Config {
|
|||||||
if idToken != "" && projectId != "" && poolId != "" && providerId != "" && serviceAccountEmail != "" {
|
if idToken != "" && projectId != "" && poolId != "" && providerId != "" && serviceAccountEmail != "" {
|
||||||
federalToken, err := gcp.GetFederalToken(idToken, projectId, poolId, providerId)
|
federalToken, err := gcp.GetFederalToken(idToken, projectId, poolId, providerId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("getFederalToken error", "error", err)
|
logrus.Fatalf("Error (getFederalToken): %s", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
accessToken, err := gcp.GetGoogleCloudAccessToken(federalToken, serviceAccountEmail)
|
accessToken, err := gcp.GetGoogleCloudAccessToken(federalToken, serviceAccountEmail)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("getGoogleCloudAccessToken error", "error", err)
|
logrus.Fatalf("Error (getGoogleCloudAccessToken): %s", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
config.AccessToken = accessToken
|
config.AccessToken = accessToken
|
||||||
} else {
|
} else {
|
||||||
@@ -105,8 +103,7 @@ func main() {
|
|||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("command execution failed", "error", err)
|
logrus.Fatal(err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ type (
|
|||||||
MTU string // Docker daemon mtu setting
|
MTU string // Docker daemon mtu setting
|
||||||
IPv6 bool // Docker daemon IPv6 networking
|
IPv6 bool // Docker daemon IPv6 networking
|
||||||
Experimental bool // Docker daemon enable experimental mode
|
Experimental bool // Docker daemon enable experimental mode
|
||||||
RetryCount int // Number of retry attempts to reach Docker daemon
|
|
||||||
RegistryType drone.RegistryType // Docker registry type
|
RegistryType drone.RegistryType // Docker registry type
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,18 +137,14 @@ func (p Plugin) Exec() error {
|
|||||||
|
|
||||||
// poll the docker daemon until it is started. This ensures the daemon is
|
// poll the docker daemon until it is started. This ensures the daemon is
|
||||||
// ready to accept connections before we proceed.
|
// ready to accept connections before we proceed.
|
||||||
maxRetries := p.Daemon.RetryCount
|
|
||||||
if maxRetries <= 0 {
|
|
||||||
maxRetries = 15 // default value
|
|
||||||
}
|
|
||||||
for i := 0; ; i++ {
|
for i := 0; ; i++ {
|
||||||
cmd := commandInfo()
|
cmd := commandInfo()
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if i == maxRetries {
|
if i == 15 {
|
||||||
fmt.Printf("Unable to reach Docker Daemon after %d attempts.\n", maxRetries)
|
fmt.Println("Unable to reach Docker Daemon after 15 attempts.")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
time.Sleep(time.Second * 1)
|
time.Sleep(time.Second * 1)
|
||||||
@@ -597,8 +592,7 @@ func addProxyValue(build *Build, key string) {
|
|||||||
|
|
||||||
// helper function to get a proxy value from the environment.
|
// helper function to get a proxy value from the environment.
|
||||||
//
|
//
|
||||||
// Checks in order: lowercase key, uppercase key, then HARNESS_<UPPERCASE_KEY>.
|
// assumes that the upper and lower case versions of are the same.
|
||||||
// Assumes that the upper and lower case versions are the same value.
|
|
||||||
func getProxyValue(key string) string {
|
func getProxyValue(key string) string {
|
||||||
value := os.Getenv(key)
|
value := os.Getenv(key)
|
||||||
|
|
||||||
@@ -606,26 +600,15 @@ func getProxyValue(key string) string {
|
|||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
value = os.Getenv(strings.ToUpper(key))
|
return os.Getenv(strings.ToUpper(key))
|
||||||
|
|
||||||
if len(value) > 0 {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
harnessValue := os.Getenv("HARNESS_" + strings.ToUpper(key))
|
|
||||||
if len(harnessValue) > 0 {
|
|
||||||
fmt.Printf("Using HARNESS_%s as proxy value for %s\n", strings.ToUpper(key), key)
|
|
||||||
}
|
|
||||||
return harnessValue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// helper function that looks to see if a proxy value was set in the build args.
|
// helper function that looks to see if a proxy value was set in the build args.
|
||||||
func hasProxyBuildArg(build *Build, key string) bool {
|
func hasProxyBuildArg(build *Build, key string) bool {
|
||||||
keyUpper := strings.ToUpper(key)
|
keyUpper := strings.ToUpper(key)
|
||||||
harnessKey := "HARNESS_" + keyUpper
|
|
||||||
|
|
||||||
for _, s := range build.Args {
|
for _, s := range build.Args {
|
||||||
if strings.HasPrefix(s, key) || strings.HasPrefix(s, keyUpper) || strings.HasPrefix(s, harnessKey) {
|
if strings.HasPrefix(s, key) || strings.HasPrefix(s, keyUpper) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -634,10 +617,9 @@ func hasProxyBuildArg(build *Build, key string) bool {
|
|||||||
}
|
}
|
||||||
func hasProxyBuildArgNew(build *Build, key string) bool {
|
func hasProxyBuildArgNew(build *Build, key string) bool {
|
||||||
keyUpper := strings.ToUpper(key)
|
keyUpper := strings.ToUpper(key)
|
||||||
harnessKey := "HARNESS_" + keyUpper
|
|
||||||
|
|
||||||
for _, s := range build.ArgsNew {
|
for _, s := range build.ArgsNew {
|
||||||
if strings.HasPrefix(s, key) || strings.HasPrefix(s, keyUpper) || strings.HasPrefix(s, harnessKey) {
|
if strings.HasPrefix(s, key) || strings.HasPrefix(s, keyUpper) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
# escape=`
|
|
||||||
FROM plugins/docker:windows-ltsc2025-amd64
|
|
||||||
|
|
||||||
LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|
||||||
org.label-schema.name="Drone ACR" `
|
|
||||||
org.label-schema.vendor="Drone.IO Community" `
|
|
||||||
org.label-schema.schema-version="1.0"
|
|
||||||
|
|
||||||
ADD release/windows/amd64/drone-acr.exe C:/bin/drone-acr.exe
|
|
||||||
ENTRYPOINT [ "C:\\bin\\drone-acr.exe" ]
|
|
||||||
@@ -29,9 +29,3 @@ manifests:
|
|||||||
architecture: amd64
|
architecture: amd64
|
||||||
os: windows
|
os: windows
|
||||||
version: ltsc2022
|
version: ltsc2022
|
||||||
-
|
|
||||||
image: plugins/acr:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-ltsc2025-amd64
|
|
||||||
platform:
|
|
||||||
architecture: amd64
|
|
||||||
os: windows
|
|
||||||
version: ltsc2025
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
FROM docker:28.5.2-dind
|
FROM docker:28.1.1-dind
|
||||||
|
|
||||||
ENV DOCKER_HOST=unix:///var/run/docker.sock
|
ENV DOCKER_HOST=unix:///var/run/docker.sock
|
||||||
|
|
||||||
# Install cosign for container image signing
|
# Install cosign for container image signing
|
||||||
RUN wget -O /usr/local/bin/cosign https://github.com/sigstore/cosign/releases/download/v2.6.3/cosign-linux-amd64 \
|
RUN wget -O /usr/local/bin/cosign https://github.com/sigstore/cosign/releases/download/v2.5.3/cosign-linux-amd64 \
|
||||||
&& chmod +x /usr/local/bin/cosign
|
&& chmod +x /usr/local/bin/cosign
|
||||||
|
|
||||||
ADD release/linux/amd64/drone-docker /bin/
|
ADD release/linux/amd64/drone-docker /bin/
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
FROM arm64v8/docker:28.5.2-dind
|
FROM arm64v8/docker:28.1.1-dind
|
||||||
|
|
||||||
ENV DOCKER_HOST=unix:///var/run/docker.sock
|
ENV DOCKER_HOST=unix:///var/run/docker.sock
|
||||||
|
|
||||||
# Install cosign for container image signing
|
# Install cosign for container image signing
|
||||||
RUN wget -O /usr/local/bin/cosign https://github.com/sigstore/cosign/releases/download/v2.6.3/cosign-linux-arm64 \
|
RUN wget -O /usr/local/bin/cosign https://github.com/sigstore/cosign/releases/download/v2.5.3/cosign-linux-arm64 \
|
||||||
&& chmod +x /usr/local/bin/cosign
|
&& chmod +x /usr/local/bin/cosign
|
||||||
|
|
||||||
ADD release/linux/arm64/drone-docker /bin/
|
ADD release/linux/arm64/drone-docker /bin/
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|||||||
RUN mkdir C:\bin
|
RUN mkdir C:\bin
|
||||||
|
|
||||||
# Install cosign for container image signing
|
# Install cosign for container image signing
|
||||||
ADD https://github.com/sigstore/cosign/releases/download/v2.6.3/cosign-windows-amd64.exe C:/bin/cosign.exe
|
ADD https://github.com/sigstore/cosign/releases/download/v2.5.3/cosign-windows-amd64.exe C:/bin/cosign.exe
|
||||||
|
|
||||||
COPY --from=download /windows/system32/netapi32.dll /windows/system32/netapi32.dll
|
COPY --from=download /windows/system32/netapi32.dll /windows/system32/netapi32.dll
|
||||||
COPY --from=download /app/docker.exe C:/bin/docker.exe
|
COPY --from=download /app/docker.exe C:/bin/docker.exe
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|||||||
RUN mkdir C:\bin
|
RUN mkdir C:\bin
|
||||||
|
|
||||||
# Install cosign for container image signing
|
# Install cosign for container image signing
|
||||||
ADD https://github.com/sigstore/cosign/releases/download/v2.6.3/cosign-windows-amd64.exe C:/bin/cosign.exe
|
ADD https://github.com/sigstore/cosign/releases/download/v2.5.3/cosign-windows-amd64.exe C:/bin/cosign.exe
|
||||||
|
|
||||||
COPY --from=download /windows/system32/netapi32.dll /windows/system32/netapi32.dll
|
COPY --from=download /windows/system32/netapi32.dll /windows/system32/netapi32.dll
|
||||||
COPY --from=download /app/docker.exe C:/bin/docker.exe
|
COPY --from=download /app/docker.exe C:/bin/docker.exe
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
# escape=`
|
|
||||||
FROM mcr.microsoft.com/windows/servercore:ltsc2025 as download
|
|
||||||
|
|
||||||
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
|
|
||||||
|
|
||||||
# Modernized for ltsc2025: fetch the standalone Docker CLI matching the daemon
|
|
||||||
# generation used on Windows Server 2025 hosts (28.x). Replaces the 1809/ltsc2022
|
|
||||||
# pattern of extracting docker.exe from DockerToolbox 19.03.1 via innoextract.
|
|
||||||
ENV DOCKER_VERSION 28.4.0
|
|
||||||
|
|
||||||
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; `
|
|
||||||
Invoke-WebRequest -UseBasicParsing `
|
|
||||||
$('https://download.docker.com/win/static/stable/x86_64/docker-{0}.zip' -f $env:DOCKER_VERSION) `
|
|
||||||
-OutFile docker.zip ; `
|
|
||||||
Expand-Archive docker.zip -DestinationPath C:\ ; `
|
|
||||||
Remove-Item docker.zip
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/windows/nanoserver:ltsc2025
|
|
||||||
USER ContainerAdministrator
|
|
||||||
|
|
||||||
LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|
||||||
org.label-schema.name="Drone Docker" `
|
|
||||||
org.label-schema.vendor="Drone.IO Community" `
|
|
||||||
org.label-schema.schema-version="1.0"
|
|
||||||
|
|
||||||
RUN mkdir C:\bin
|
|
||||||
|
|
||||||
# Install cosign for container image signing
|
|
||||||
ADD https://github.com/sigstore/cosign/releases/download/v2.6.3/cosign-windows-amd64.exe C:/bin/cosign.exe
|
|
||||||
|
|
||||||
# nanoserver:ltsc2025 ships netapi32.dll natively (unlike 1809/ltsc2022 where we
|
|
||||||
# had to copy it in from servercore). Overwriting the ltsc2025 copy fails with
|
|
||||||
# "Access is denied" because system32 files are locked, so we skip that COPY.
|
|
||||||
COPY --from=download /docker/docker.exe C:/bin/docker.exe
|
|
||||||
ADD release/windows/amd64/drone-docker.exe C:/bin/drone-docker.exe
|
|
||||||
ENTRYPOINT [ "C:\\bin\\drone-docker.exe" ]
|
|
||||||
@@ -29,9 +29,3 @@ manifests:
|
|||||||
architecture: amd64
|
architecture: amd64
|
||||||
os: windows
|
os: windows
|
||||||
version: ltsc2022
|
version: ltsc2022
|
||||||
-
|
|
||||||
image: plugins/docker:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-ltsc2025-amd64
|
|
||||||
platform:
|
|
||||||
architecture: amd64
|
|
||||||
os: windows
|
|
||||||
version: ltsc2025
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
# escape=`
|
|
||||||
FROM plugins/docker:windows-ltsc2025-amd64
|
|
||||||
|
|
||||||
LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|
||||||
org.label-schema.name="Drone ECR" `
|
|
||||||
org.label-schema.vendor="Drone.IO Community" `
|
|
||||||
org.label-schema.schema-version="1.0"
|
|
||||||
|
|
||||||
ADD release/windows/amd64/drone-ecr.exe C:/bin/drone-ecr.exe
|
|
||||||
ENTRYPOINT [ "C:\\bin\\drone-ecr.exe" ]
|
|
||||||
@@ -29,9 +29,3 @@ manifests:
|
|||||||
architecture: amd64
|
architecture: amd64
|
||||||
os: windows
|
os: windows
|
||||||
version: ltsc2022
|
version: ltsc2022
|
||||||
-
|
|
||||||
image: plugins/ecr:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-ltsc2025-amd64
|
|
||||||
platform:
|
|
||||||
architecture: amd64
|
|
||||||
os: windows
|
|
||||||
version: ltsc2025
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
# escape=`
|
|
||||||
FROM plugins/docker:windows-ltsc2025-amd64
|
|
||||||
|
|
||||||
LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|
||||||
org.label-schema.name="Drone GAR" `
|
|
||||||
org.label-schema.vendor="Drone.IO Community" `
|
|
||||||
org.label-schema.schema-version="1.0"
|
|
||||||
|
|
||||||
ADD release/windows/amd64/drone-gar.exe C:/bin/drone-gar.exe
|
|
||||||
ENTRYPOINT [ "C:\\bin\\drone-gar.exe" ]
|
|
||||||
@@ -29,9 +29,3 @@ manifests:
|
|||||||
architecture: amd64
|
architecture: amd64
|
||||||
os: windows
|
os: windows
|
||||||
version: ltsc2022
|
version: ltsc2022
|
||||||
-
|
|
||||||
image: plugins/gar:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-ltsc2025-amd64
|
|
||||||
platform:
|
|
||||||
architecture: amd64
|
|
||||||
os: windows
|
|
||||||
version: ltsc2025
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
# escape=`
|
|
||||||
FROM plugins/docker:windows-ltsc2025-amd64
|
|
||||||
|
|
||||||
LABEL maintainer="Drone.IO Community <drone-dev@googlegroups.com>" `
|
|
||||||
org.label-schema.name="Drone GCR" `
|
|
||||||
org.label-schema.vendor="Drone.IO Community" `
|
|
||||||
org.label-schema.schema-version="1.0"
|
|
||||||
|
|
||||||
ADD release/windows/amd64/drone-gcr.exe C:/bin/drone-gcr.exe
|
|
||||||
ENTRYPOINT [ "C:\\bin\\drone-gcr.exe" ]
|
|
||||||
@@ -29,9 +29,3 @@ manifests:
|
|||||||
architecture: amd64
|
architecture: amd64
|
||||||
os: windows
|
os: windows
|
||||||
version: ltsc2022
|
version: ltsc2022
|
||||||
-
|
|
||||||
image: plugins/gcr:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-ltsc2025-amd64
|
|
||||||
platform:
|
|
||||||
architecture: amd64
|
|
||||||
os: windows
|
|
||||||
version: ltsc2025
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package docker
|
package docker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -180,90 +179,3 @@ func TestCommandBuild(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetProxyValue(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
key string
|
|
||||||
envVars map[string]string
|
|
||||||
expected string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "lowercase env var set",
|
|
||||||
key: "http_proxy",
|
|
||||||
envVars: map[string]string{"http_proxy": "http://proxy:8080"},
|
|
||||||
expected: "http://proxy:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "uppercase env var set",
|
|
||||||
key: "http_proxy",
|
|
||||||
envVars: map[string]string{"HTTP_PROXY": "http://proxy:8080"},
|
|
||||||
expected: "http://proxy:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "HARNESS prefixed env var set",
|
|
||||||
key: "http_proxy",
|
|
||||||
envVars: map[string]string{"HARNESS_HTTP_PROXY": "http://harness-proxy:8080"},
|
|
||||||
expected: "http://harness-proxy:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "standard takes precedence over HARNESS",
|
|
||||||
key: "http_proxy",
|
|
||||||
envVars: map[string]string{
|
|
||||||
"HTTP_PROXY": "http://standard:8080",
|
|
||||||
"HARNESS_HTTP_PROXY": "http://harness:8080",
|
|
||||||
},
|
|
||||||
expected: "http://standard:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "lowercase takes precedence over uppercase",
|
|
||||||
key: "no_proxy",
|
|
||||||
envVars: map[string]string{
|
|
||||||
"no_proxy": "localhost,127.0.0.1",
|
|
||||||
"NO_PROXY": "*.example.com",
|
|
||||||
"HARNESS_NO_PROXY": "*.local",
|
|
||||||
},
|
|
||||||
expected: "localhost,127.0.0.1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "lowercase takes precedence over HARNESS",
|
|
||||||
key: "https_proxy",
|
|
||||||
envVars: map[string]string{
|
|
||||||
"https_proxy": "https://standard:8080",
|
|
||||||
"HARNESS_HTTPS_PROXY": "https://harness:8080",
|
|
||||||
},
|
|
||||||
expected: "https://standard:8080",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "no env var set",
|
|
||||||
key: "http_proxy",
|
|
||||||
envVars: map[string]string{},
|
|
||||||
expected: "",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
// Clean env
|
|
||||||
lowercaseKey := tt.key
|
|
||||||
uppercaseKey := strings.ToUpper(tt.key)
|
|
||||||
harnessKey := "HARNESS_" + strings.ToUpper(tt.key)
|
|
||||||
|
|
||||||
os.Unsetenv(lowercaseKey)
|
|
||||||
os.Unsetenv(uppercaseKey)
|
|
||||||
os.Unsetenv(harnessKey)
|
|
||||||
|
|
||||||
// Set test environment variables
|
|
||||||
for k, v := range tt.envVars {
|
|
||||||
os.Setenv(k, v)
|
|
||||||
defer os.Unsetenv(k)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute and verify
|
|
||||||
result := getProxyValue(tt.key)
|
|
||||||
if result != tt.expected {
|
|
||||||
t.Errorf("getProxyValue(%q) = %q, want %q", tt.key, result, tt.expected)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,69 +1,53 @@
|
|||||||
module github.com/drone-plugins/drone-docker
|
module github.com/drone-plugins/drone-docker
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2
|
||||||
github.com/aws/aws-sdk-go-v2 v1.42.1
|
github.com/aws/aws-sdk-go v1.26.7
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.30
|
github.com/coreos/go-semver v0.3.0
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.29
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.59.1
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.44.1
|
|
||||||
github.com/coreos/go-semver v0.3.1
|
|
||||||
github.com/dchest/uniuri v1.2.0
|
github.com/dchest/uniuri v1.2.0
|
||||||
github.com/drone-plugins/drone-plugin-lib v0.4.2
|
github.com/drone-plugins/drone-plugin-lib v0.4.1
|
||||||
github.com/drone/drone-go v1.7.1
|
github.com/drone/drone-go v1.7.1
|
||||||
github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf
|
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743
|
||||||
github.com/joho/godotenv v1.5.1
|
github.com/joho/godotenv v1.3.0
|
||||||
github.com/stretchr/testify v1.11.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/urfave/cli v1.22.17
|
github.com/sirupsen/logrus v1.9.0
|
||||||
golang.org/x/oauth2 v0.36.0
|
github.com/stretchr/testify v1.10.0
|
||||||
google.golang.org/api v0.288.0
|
github.com/urfave/cli v1.22.2
|
||||||
|
golang.org/x/oauth2 v0.27.0
|
||||||
|
google.golang.org/api v0.146.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/auth v0.22.0 // indirect
|
cloud.google.com/go/compute/metadata v0.3.0 // indirect
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.9.0 // indirect
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30 // indirect
|
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31 // indirect
|
github.com/google/s2a-go v0.1.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 // indirect
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30 // indirect
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.4.1 // indirect
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.32.1 // indirect
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.37.1 // indirect
|
|
||||||
github.com/aws/smithy-go v1.27.3 // indirect
|
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
|
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
|
||||||
github.com/felixge/httpsnoop v1.1.0 // indirect
|
|
||||||
github.com/go-logr/logr v1.4.3 // indirect
|
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
|
||||||
github.com/google/s2a-go v0.1.9 // indirect
|
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.18 // indirect
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.23.0 // indirect
|
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
|
||||||
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect
|
||||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
|
golang.org/x/crypto v0.36.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.44.0 // indirect
|
golang.org/x/net v0.37.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.44.0 // indirect
|
golang.org/x/sys v0.31.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.44.0 // indirect
|
golang.org/x/text v0.23.0 // indirect
|
||||||
golang.org/x/crypto v0.54.0 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect
|
||||||
golang.org/x/net v0.57.0 // indirect
|
google.golang.org/grpc v1.59.0 // indirect
|
||||||
golang.org/x/sys v0.47.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
golang.org/x/text v0.40.0 // indirect
|
gopkg.in/yaml.v2 v2.2.8 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4 // indirect
|
|
||||||
google.golang.org/grpc v1.82.0 // indirect
|
|
||||||
google.golang.org/protobuf v1.36.11 // indirect
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.25.7
|
go 1.23.0
|
||||||
|
|
||||||
|
toolchain go1.23.7
|
||||||
|
|||||||
@@ -1,97 +1,92 @@
|
|||||||
cloud.google.com/go/auth v0.22.0 h1:Xp9wAKkLoeaYb5pYZZoQGz4E9sdPxIbzS3gywZE3ciQ=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go/auth v0.22.0/go.mod h1:M9o2Oz+YI2jAfxewJgb1vyI3vceHF+eohmxyzmrl+9s=
|
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
|
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
|
|
||||||
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
|
|
||||||
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
|
|
||||||
github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e/go.mod h1:Xa6lInWHNQnuWoF0YPSsx+INFA9qk7/7pTjwb3PInkY=
|
github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e/go.mod h1:Xa6lInWHNQnuWoF0YPSsx+INFA9qk7/7pTjwb3PInkY=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0 h1:aokoqcHvaGjiM3VpjKDfMMnF/8epJ+Q1HLJ7CudztqE=
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.22.0/go.mod h1:/WYEx9pcM9Y+Dd/APJaNlSvVSvzl54rrMdZT5+Oi2LM=
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0 h1:CU4+EJeJi3TKYWEcYuSdWsjzw0nVsK/H0MSQOiPcymU=
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0/go.mod h1:q0+UTSRvShwUCrR/s5HtyInYphN7Wvxb7snFM3u+SLA=
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.4.0 h1:xFaZZ+IubdftrDHnGGwZ6QvQ3KHTtWl2MCK+GMt2vxs=
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.4.0/go.mod h1:mCBhUhlMjLLJKr5aqw2TNS/VqJOie8MzWq3DAMJeKso=
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4=
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY=
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
|
||||||
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
|
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
|
||||||
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
|
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2 h1:RHK7bS+HQMslb1sZpAokUt+zTVmue0hKSs2C791hhzU=
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4=
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.7.2/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk=
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
|
||||||
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.42.1 h1:9eOTgu1z/dVtYpNZ3/8/XbbaX0x/BqE3HUzAzs6K0ek=
|
github.com/aws/aws-sdk-go v1.26.7 h1:ObjEnmzvSdYy8KVd3me7v/UMyCn81inLy2SyoIPoBkg=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.42.1/go.mod h1:5pKeft2eJj+gElQ38Jqg4ibCqh+/AK33/0X3hip7IjM=
|
github.com/aws/aws-sdk-go v1.26.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.30 h1:XwsEzpTJfQYJbFicz/QMLwAZdyeNVVoOEkbF7R3gPJk=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.32.30/go.mod h1:Ud32SuMc+/9BGxfpSVld7HrE2o05JwKmXY4M3jOQNZU=
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.29 h1:WHZGssHH887cO0ox07SIQZsFx3MKD4ps6w0xUEmnKYQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.29/go.mod h1:Mhl0xR6zjguiuj00XRx2wMx22sAltk7oya39sT7fdg8=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30 h1:/hi1JADLEW9YYryEz1w4GQu0EtP23pP553Cf9KgsDV4=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30/go.mod h1:/3AOgy4K17Dm4ucMZVC/MJkzy5kmfKUcINRHZyo0koQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 h1:xM/Is9cKMHa8Jj8zkvWhvrFkZsXJV9E+BB4g0HW0duQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30/go.mod h1:WueJeNDZvK1fMYEWJIkcivBfEzUkTpBhzlrUKKY8EuA=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 h1:jn46zC9LdsVR/ZpMIJqMqb8hHv31BlLx3ulVqNspUOk=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30/go.mod h1:1hTMsAgbdS/AtUi4bw8+gUuh1pceo+eXRLfpSuSQj3M=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31 h1:3GUprIsfmGcC5SACIyB0e7E0BM1O1b3Erl5CePYIAeQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31/go.mod h1:7PuV1yl5e2xnUbm+RqvVg5i2iBM8EyijZNoI9wsOoOc=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.59.1 h1:UhEWpfs77k8rSMJ3HdcLzBLTXzTqV+2fik/rfXr6YPs=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.59.1/go.mod h1:UzfjIuiQOpusteIHBCLIikQpxh8ctmdQCvSWWzbcYYI=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 h1:mbRIur/BiHK6SKPjoBIXSE/hJ6g6JGRLuxQy1jGjlN4=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13/go.mod h1:ITg9em2KbJx1s0y4aqRX5OYWG6HBZ5TVR//OdpEZ2CQ=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30 h1:/Z5jmNrKsSD7EmDjzAPsm/3L9IuOkzaynklJZ1qX7S4=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30/go.mod h1:lEzEZnOosE7zi8Z6royW1cFJTD9fpab4Ul1SBrllewk=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.4.1 h1:V7ZZ300WPXGjvkyore5DGe0ljVPOxCXie/thWdtSBXE=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/signin v1.4.1/go.mod h1:mxC0nT/C8wMMS97DemZPzvUZxvIt+2Iq+eS3JdFZGgg=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.32.1 h1:gYFYh4iLLcAOJRLNPY2aD2g9DIhKn4eof8UkIrr1rTk=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.32.1/go.mod h1:u8af9Nqkmqnr96f7v9nHqzZT9XBwbXEkTiqT4ROuJSE=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.37.1 h1:arjT9Cm3/WYbGmD5TUZHk4UQn4Lle1fUNZs5FC6CtF0=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.37.1/go.mod h1:DMPWJBjYs6+3+f/qhBFEFPPlQ6NlhWjai3dJNvipJ84=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.44.1 h1:RvfHDg+xvAeZ+5741vUEjpOVtYSIm93W2zhx10Xtydw=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.44.1/go.mod h1:9gdl4RrflIdpDb2TlXshWgR1F9TeCkvqDx77Vpr4Z/Q=
|
|
||||||
github.com/aws/smithy-go v1.27.3 h1:F3Zb497UhhskkfpJmfkXswyo+t0sh9OTBnIHjogWbVY=
|
|
||||||
github.com/aws/smithy-go v1.27.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
|
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=
|
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g=
|
github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g=
|
||||||
github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY=
|
github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY=
|
||||||
github.com/drone-plugins/drone-plugin-lib v0.4.2 h1:EiJ3Kco6ypP5noBQqVt1bBbuO1eUAumtPvLTX/NVAYg=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
github.com/drone-plugins/drone-plugin-lib v0.4.2/go.mod h1:KwCu92jFjHV3xv2hu5Qg/8zBNvGwbhoJDQw/EwnTvoM=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||||
|
github.com/drone-plugins/drone-plugin-lib v0.4.1 h1:47rZlmcMpr1hSp+6Gl+1Z4t+efi/gMQU3lxukC1Yg64=
|
||||||
|
github.com/drone-plugins/drone-plugin-lib v0.4.1/go.mod h1:KwCu92jFjHV3xv2hu5Qg/8zBNvGwbhoJDQw/EwnTvoM=
|
||||||
github.com/drone/drone-go v1.7.1 h1:ZX+3Rs8YHUSUQ5mkuMLmm1zr1ttiiE2YGNxF3AnyDKw=
|
github.com/drone/drone-go v1.7.1 h1:ZX+3Rs8YHUSUQ5mkuMLmm1zr1ttiiE2YGNxF3AnyDKw=
|
||||||
github.com/drone/drone-go v1.7.1/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg=
|
github.com/drone/drone-go v1.7.1/go.mod h1:fxCf9jAnXDZV1yDr0ckTuWd1intvcQwfJmTRpTZ1mXg=
|
||||||
github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
||||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
|
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||||
|
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
|
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||||
|
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
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.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
|
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||||
|
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||||
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.18 h1:hvVi34VucdrV1IIsiWuqYM8kutw/92MxNEFxCJZEh0k=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.18/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
||||||
github.com/googleapis/gax-go/v2 v2.23.0 h1:Tchl7qkvE7Ip3y+ztvNufYFvkfqTe7NfLTYGIdJRLuE=
|
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
|
||||||
github.com/googleapis/gax-go/v2 v2.23.0/go.mod h1:rBQKOVJCdb8IFEzg+FCwlt1LP/xMDGuqUXhUG+XMXEg=
|
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
|
||||||
github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf h1:FtEj8sfIcaaBfAKrE1Cwb61YDtYq9JxChK1c7AKce7s=
|
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743 h1:X3Xxno5Ji8idrNiUoFc7QyXpqhSYlDRYQmc7mlpMBzU=
|
||||||
github.com/inhies/go-bytesize v0.0.0-20220417184213-4913239db9cf/go.mod h1:yrqSXGoD/4EKfF26AOGzscPOgTTJcyAwM2rpixWT+t4=
|
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743/go.mod h1:KrtyD5PFj++GKkFS/7/RRrfnRhAMGQwy75GLCHWrCNs=
|
||||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
|
||||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||||
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
|
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
|
||||||
github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
|
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||||
|
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
|
||||||
|
github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
@@ -100,70 +95,117 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
|
|||||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
|
||||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
|
||||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||||
|
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
|
||||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
github.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo=
|
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI=
|
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
|
||||||
go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
|
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
|
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
|
||||||
golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk=
|
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||||
golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
|
golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
|
||||||
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
|
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
|
||||||
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||||
|
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
|
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||||
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
|
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||||
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
|
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||||
google.golang.org/api v0.288.0 h1:glhO/J88obKP5I269W3hB73dvBKrjU56ZfmNlNXpgTU=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
google.golang.org/api v0.288.0/go.mod h1:lM2kYRzYUCBY91P9h6VF1PYmvhxii3O5hji37qRvIcY=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 h1:jQ9p21COKWjP3VwuFrNRiiOTMh3mPpN45R7SLrH/HUU=
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7/go.mod h1:KqHwBx2upmfa1XSi1WuRvC+2VGCLtooKkfmyvRbUmqA=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4 h1:7RtFDizMtT9eZzHzKxifoMGfcDBBy+LYZlgfg24ZmOM=
|
google.golang.org/api v0.146.0 h1:9aBYT4vQXt9dhCuLNfwfd3zpwu8atg0yPkjBymwSrOM=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260713224248-f5fc221cf8c4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
|
google.golang.org/api v0.146.0/go.mod h1:OARJqIfoYjXJj4C1AiBSXYZt03qsoz8FQYU6fBEfrHM=
|
||||||
google.golang.org/grpc v1.82.0 h1:vguDnZUPjE26w09A63VoxZPnvPjB5Riyc0mkXPFmAIU=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/grpc v1.82.0/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
|
google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8=
|
||||||
|
google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1:lK0oleSc7IQsUxO3U5TjL9DWlsxpEBemh+zpB7IqhWI=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc=
|
||||||
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
|
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
|
||||||
|
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
|
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||||
|
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|||||||
Reference in New Issue
Block a user