mirror of
https://github.com/drone-plugins/drone-docker.git
synced 2026-06-04 18:24:24 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7110dfa04b | |||
| 7b900ae75d | |||
| aabeaaf7bb |
+30
-30
@@ -12,7 +12,7 @@ platform:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: vet
|
- name: vet
|
||||||
image: golang:1.23
|
image: golang:1.24.11
|
||||||
commands:
|
commands:
|
||||||
- go vet ./...
|
- go vet ./...
|
||||||
environment:
|
environment:
|
||||||
@@ -22,7 +22,7 @@ steps:
|
|||||||
path: /go
|
path: /go
|
||||||
|
|
||||||
- name: test
|
- name: test
|
||||||
image: golang:1.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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.23
|
image: golang:1.24.11
|
||||||
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:
|
||||||
|
|||||||
@@ -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.23.0
|
image: golang:1.24.11
|
||||||
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.23.0
|
image: golang:1.24.11
|
||||||
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.23.0
|
image: golang:1.24.11
|
||||||
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.23.0
|
image: golang:1.24.11
|
||||||
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:
|
||||||
|
|||||||
@@ -17,8 +17,14 @@ import (
|
|||||||
"github.com/inhies/go-bytesize"
|
"github.com/inhies/go-bytesize"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// writeCard maintains backward compatibility by using TempTag
|
||||||
func (p Plugin) writeCard() error {
|
func (p Plugin) writeCard() error {
|
||||||
cmd := exec.Command(dockerExe, "inspect", p.Build.TempTag)
|
return p.writeCardForImage(p.Build.TempTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeCardForImage generates card for any image reference
|
||||||
|
func (p Plugin) writeCardForImage(imageRef string) error {
|
||||||
|
cmd := exec.Command(dockerExe, "inspect", imageRef)
|
||||||
data, err := cmd.CombinedOutput()
|
data, err := cmd.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -38,7 +44,11 @@ func (p Plugin) writeCard() error {
|
|||||||
for _, tag := range inspect.RepoTags {
|
for _, tag := range inspect.RepoTags {
|
||||||
sliceTagStruct = append(sliceTagStruct, TagStruct{Tag: tag})
|
sliceTagStruct = append(sliceTagStruct, TagStruct{Tag: tag})
|
||||||
}
|
}
|
||||||
inspect.ParsedRepoTags = sliceTagStruct[1:] // remove the first tag which is always "hash:latest"
|
if len(sliceTagStruct) > 1 {
|
||||||
|
inspect.ParsedRepoTags = sliceTagStruct[1:] // remove the first tag which is always "hash:latest"
|
||||||
|
} else {
|
||||||
|
inspect.ParsedRepoTags = sliceTagStruct
|
||||||
|
}
|
||||||
// create the url from repo and registry
|
// create the url from repo and registry
|
||||||
inspect.URL = mapRegistryToURL(p.Daemon.Registry, p.Build.Repo)
|
inspect.URL = mapRegistryToURL(p.Daemon.Registry, p.Build.Repo)
|
||||||
cardData, _ := json.Marshal(inspect)
|
cardData, _ := json.Marshal(inspect)
|
||||||
|
|||||||
@@ -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",
|
EnvVar: "PLUGIN_DRY_RUN, PLUGIN_NO_PUSH",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "remote.url",
|
Name: "remote.url",
|
||||||
@@ -339,6 +339,16 @@ func main() {
|
|||||||
Usage: "additional cosign parameters (e.g., annotations, flags)",
|
Usage: "additional cosign parameters (e.g., annotations, flags)",
|
||||||
EnvVar: "PLUGIN_COSIGN_PARAMS",
|
EnvVar: "PLUGIN_COSIGN_PARAMS",
|
||||||
},
|
},
|
||||||
|
cli.BoolFlag{
|
||||||
|
Name: "push-only",
|
||||||
|
Usage: "skip build and only push images",
|
||||||
|
EnvVar: "PLUGIN_PUSH_ONLY",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "source-image",
|
||||||
|
Usage: "source image to tag and push (format: repo:tag)",
|
||||||
|
EnvVar: "PLUGIN_SOURCE_IMAGE",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := app.Run(os.Args); err != nil {
|
if err := app.Run(os.Args); err != nil {
|
||||||
@@ -419,6 +429,8 @@ func run(c *cli.Context) error {
|
|||||||
Password: c.String("cosign.password"),
|
Password: c.String("cosign.password"),
|
||||||
Params: c.String("cosign.params"),
|
Params: c.String("cosign.params"),
|
||||||
},
|
},
|
||||||
|
PushOnly: c.Bool("push-only"),
|
||||||
|
SourceImage: c.String("source-image"),
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Bool("tags.auto") {
|
if c.Bool("tags.auto") {
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ type (
|
|||||||
BaseImageRegistry string // Docker registry to pull base image
|
BaseImageRegistry string // Docker registry to pull base image
|
||||||
BaseImageUsername string // Docker registry username to pull base image
|
BaseImageUsername string // Docker registry username to pull base image
|
||||||
BaseImagePassword string // Docker registry password to pull base image
|
BaseImagePassword string // Docker registry password to pull base image
|
||||||
|
PushOnly bool // Push only mode, skips build process
|
||||||
|
SourceImage string // Source image to push (optional)
|
||||||
}
|
}
|
||||||
|
|
||||||
Card []struct {
|
Card []struct {
|
||||||
@@ -201,7 +203,8 @@ func (p Plugin) Exec() error {
|
|||||||
fmt.Println(out)
|
fmt.Println(out)
|
||||||
return fmt.Errorf("Error authenticating base connector: exit status 1")
|
return fmt.Errorf("Error authenticating base connector: exit status 1")
|
||||||
}
|
}
|
||||||
} else {
|
} else if !p.PushOnly {
|
||||||
|
// Skip base image connector warning in push-only mode (not pulling anything)
|
||||||
fmt.Println("\033[33mTo ensure consistent and reliable pipeline execution, we recommend setting up a Base Image Connector.\033[0m\n" +
|
fmt.Println("\033[33mTo ensure consistent and reliable pipeline execution, we recommend setting up a Base Image Connector.\033[0m\n" +
|
||||||
"\033[33mWhile optional at this time, configuring it helps prevent failures caused by Docker Hub's rate limits.\033[0m")
|
"\033[33mWhile optional at this time, configuring it helps prevent failures caused by Docker Hub's rate limits.\033[0m")
|
||||||
}
|
}
|
||||||
@@ -229,6 +232,16 @@ func (p Plugin) Exec() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enforce mutual exclusivity: push-only and dry-run cannot be used together
|
||||||
|
if p.PushOnly && p.Dryrun {
|
||||||
|
return fmt.Errorf("conflict: push-only and dry-run cannot be used together")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle push-only mode if requested
|
||||||
|
if p.PushOnly {
|
||||||
|
return p.pushOnly()
|
||||||
|
}
|
||||||
|
|
||||||
if p.Build.Squash && !p.Daemon.Experimental {
|
if p.Build.Squash && !p.Daemon.Experimental {
|
||||||
fmt.Println("Squash build flag is only available when Docker deamon is started with experimental flag. Ignoring...")
|
fmt.Println("Squash build flag is only available when Docker deamon is started with experimental flag. Ignoring...")
|
||||||
p.Build.Squash = false
|
p.Build.Squash = false
|
||||||
@@ -742,6 +755,22 @@ func getDigest(buildName string) (string, error) {
|
|||||||
return "", errors.New("unable to fetch digest")
|
return "", errors.New("unable to fetch digest")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// imageExists checks if an image exists in local daemon
|
||||||
|
func imageExists(tag string) bool {
|
||||||
|
cmd := exec.Command(dockerExe, "image", "inspect", tag)
|
||||||
|
return cmd.Run() == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getDigestAfterPush gets digest from a pushed image
|
||||||
|
func getDigestAfterPush(tag string) (string, error) {
|
||||||
|
cmd := exec.Command(dockerExe, "inspect", "--format", "{{ index (split (index .RepoDigests 0) \"@\") 1 }}", tag)
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("failed to get digest for %s: %w", tag, err)
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(string(output)), nil
|
||||||
|
}
|
||||||
|
|
||||||
// shouldSignWithCosign determines if cosign signing should be performed
|
// shouldSignWithCosign determines if cosign signing should be performed
|
||||||
func (p Plugin) shouldSignWithCosign() bool {
|
func (p Plugin) shouldSignWithCosign() bool {
|
||||||
return p.Cosign.PrivateKey != ""
|
return p.Cosign.PrivateKey != ""
|
||||||
@@ -837,7 +866,7 @@ func executeCosignCommand(cmd *exec.Cmd) {
|
|||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
fmt.Printf("🚀 Executing: %s %s\n", cmd.Path, strings.Join(cmd.Args[1:], " "))
|
fmt.Printf("🚀 Executing: %s %s\n", cmd.Path, strings.Join(cmd.Args[1:], " "))
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
fmt.Printf("⚠️ WARNING: Image signing failed: %s\n", err)
|
fmt.Printf("⚠️ WARNING: Image signing failed: %s\n", err)
|
||||||
fmt.Printf(" Image was pushed successfully but could not be signed\n")
|
fmt.Printf(" Image was pushed successfully but could not be signed\n")
|
||||||
@@ -845,4 +874,164 @@ func executeCosignCommand(cmd *exec.Cmd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pushOnly handles pushing images without building them
|
||||||
|
func (p Plugin) pushOnly() error {
|
||||||
|
// Check if source image is specified
|
||||||
|
sourceImageName := p.SourceImage
|
||||||
|
var sourceTags []string
|
||||||
|
|
||||||
|
if sourceImageName == "" {
|
||||||
|
// If no source image specified, use the repo and first tag
|
||||||
|
fmt.Println("source_image not provided, using repo and tag value")
|
||||||
|
sourceImageName = p.Build.Repo
|
||||||
|
sourceTags = p.Build.Tags
|
||||||
|
} else {
|
||||||
|
// If source image is specified, check if it has a tag
|
||||||
|
lastColonIndex := strings.LastIndex(sourceImageName, ":")
|
||||||
|
if lastColonIndex > 0 && lastColonIndex < len(sourceImageName) {
|
||||||
|
// Check if there's a slash after the last colon (indicating it's a port, not a tag)
|
||||||
|
// For example: registry:5000/image (has slash after colon - port not tag)
|
||||||
|
// vs image:tag (no slash after colon - it's a tag)
|
||||||
|
if strings.LastIndex(sourceImageName, "/") > lastColonIndex {
|
||||||
|
// The last colon is part of the registry:port, not a tag separator
|
||||||
|
sourceTags = []string{"latest"}
|
||||||
|
} else {
|
||||||
|
// The last colon separates the tag
|
||||||
|
tag := sourceImageName[lastColonIndex+1:]
|
||||||
|
sourceImageName = sourceImageName[:lastColonIndex]
|
||||||
|
|
||||||
|
if tag == "" {
|
||||||
|
fmt.Printf("No tag specified in source image (or empty tag). Using 'latest' as the default tag.\n")
|
||||||
|
tag = "latest"
|
||||||
|
}
|
||||||
|
sourceTags = []string{tag}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Default to "latest" if no tag specified
|
||||||
|
sourceTags = []string{"latest"}
|
||||||
|
}
|
||||||
|
fmt.Printf("Using source image: %s with tag(s): %s\n", sourceImageName, strings.Join(sourceTags, ", "))
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each source tag and target tag combination
|
||||||
|
var digest string
|
||||||
|
var firstPushedImage string
|
||||||
|
|
||||||
|
for _, sourceTag := range sourceTags {
|
||||||
|
sourceFullImageName := fmt.Sprintf("%s:%s", sourceImageName, sourceTag)
|
||||||
|
|
||||||
|
// Check if the source image exists in local daemon
|
||||||
|
if !imageExists(sourceFullImageName) {
|
||||||
|
fmt.Printf("Warning: Source image %s not found\n", sourceFullImageName)
|
||||||
|
// Continue to the next source tag if available, otherwise return error
|
||||||
|
if len(sourceTags) > 1 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return fmt.Errorf("source image %s not found, cannot push", sourceFullImageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each target tag, tag and push
|
||||||
|
for _, targetTag := range p.Build.Tags {
|
||||||
|
targetFullImageName := fmt.Sprintf("%s:%s", p.Build.Repo, targetTag)
|
||||||
|
|
||||||
|
// Skip if source and target are identical
|
||||||
|
if sourceFullImageName == targetFullImageName {
|
||||||
|
fmt.Printf("Source and target image names are identical: %s\n", sourceFullImageName)
|
||||||
|
} else {
|
||||||
|
// Tag the source image with the target name
|
||||||
|
fmt.Printf("Tagging %s as %s\n", sourceFullImageName, targetFullImageName)
|
||||||
|
tagCmd := exec.Command(dockerExe, "tag", sourceFullImageName, targetFullImageName)
|
||||||
|
tagCmd.Stdout = os.Stdout
|
||||||
|
tagCmd.Stderr = os.Stderr
|
||||||
|
trace(tagCmd)
|
||||||
|
if err := tagCmd.Run(); err != nil {
|
||||||
|
return fmt.Errorf("failed to tag image %s as %s: %w", sourceFullImageName, targetFullImageName, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push all target images
|
||||||
|
for _, tag := range p.Build.Tags {
|
||||||
|
fullImageName := fmt.Sprintf("%s:%s", p.Build.Repo, tag)
|
||||||
|
|
||||||
|
// Check if image exists in local daemon
|
||||||
|
if !imageExists(fullImageName) {
|
||||||
|
return fmt.Errorf("image %s not found, cannot push", fullImageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push image
|
||||||
|
fmt.Println("Pushing image:", fullImageName)
|
||||||
|
pushCmd := commandPush(p.Build, tag)
|
||||||
|
pushCmd.Stdout = os.Stdout
|
||||||
|
pushCmd.Stderr = os.Stderr
|
||||||
|
trace(pushCmd)
|
||||||
|
if err := pushCmd.Run(); err != nil {
|
||||||
|
return fmt.Errorf("failed to push image %s: %w", fullImageName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track the first pushed image for card generation
|
||||||
|
if firstPushedImage == "" {
|
||||||
|
firstPushedImage = fullImageName
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the digest after push (we only need one)
|
||||||
|
if digest == "" {
|
||||||
|
d, err := getDigestAfterPush(fullImageName)
|
||||||
|
if err == nil {
|
||||||
|
digest = d
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Warning: Could not get digest for %s: %v\n", fullImageName, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output the adaptive card
|
||||||
|
if firstPushedImage != "" {
|
||||||
|
if err := p.writeCardForImage(firstPushedImage); err != nil {
|
||||||
|
fmt.Printf("Could not create adaptive card. %s\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write to artifact file
|
||||||
|
if p.ArtifactFile != "" && digest != "" {
|
||||||
|
if err := drone.WritePluginArtifactFile(
|
||||||
|
p.Daemon.RegistryType,
|
||||||
|
p.ArtifactFile,
|
||||||
|
p.Daemon.Registry,
|
||||||
|
p.Build.Repo,
|
||||||
|
digest,
|
||||||
|
p.Build.Tags,
|
||||||
|
); err != nil {
|
||||||
|
fmt.Printf("Failed to write plugin artifact file at path: %s with error: %s\n",
|
||||||
|
p.ArtifactFile, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle cosign signing after push
|
||||||
|
if p.shouldSignWithCosign() {
|
||||||
|
// Set up environment variables for cosign
|
||||||
|
os.Setenv("COSIGN_YES", "true")
|
||||||
|
|
||||||
|
if digest != "" {
|
||||||
|
fmt.Printf("🔐 Found image digest: %s\n", digest)
|
||||||
|
|
||||||
|
// Sign with digest reference
|
||||||
|
imageRef := fmt.Sprintf("%s@%s", p.Build.Repo, digest)
|
||||||
|
cosignCmd := createCosignCommand(imageRef, p.Cosign)
|
||||||
|
executeCosignCommand(cosignCmd)
|
||||||
|
} else {
|
||||||
|
fmt.Printf("⚠️ WARNING: Could not get image digest for cosign signing\n")
|
||||||
|
fmt.Printf(" Falling back to tag-based signing\n")
|
||||||
|
|
||||||
|
// Fall back to tag-based signing for each tag
|
||||||
|
for _, tag := range p.Build.Tags {
|
||||||
|
imageRef := fmt.Sprintf("%s:%s", p.Build.Repo, tag)
|
||||||
|
cosignCmd := createCosignCommand(imageRef, p.Cosign)
|
||||||
|
executeCosignCommand(cosignCmd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ require (
|
|||||||
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743
|
github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743
|
||||||
github.com/joho/godotenv v1.3.0
|
github.com/joho/godotenv v1.3.0
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/urfave/cli v1.22.2
|
github.com/urfave/cli v1.22.2
|
||||||
golang.org/x/oauth2 v0.27.0
|
golang.org/x/oauth2 v0.27.0
|
||||||
@@ -48,6 +48,6 @@ require (
|
|||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24
|
||||||
|
|
||||||
toolchain go1.23.7
|
toolchain go1.24.11
|
||||||
|
|||||||
@@ -108,8 +108,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
|
|||||||
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/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.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
github.com/sirupsen/logrus v1.9.3/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=
|
||||||
|
|||||||
Reference in New Issue
Block a user