mirror of
https://github.com/docker/docker-credential-helpers.git
synced 2026-06-29 15:52:05 +05:30
Compare commits
22 Commits
d4602cd917
...
v0.9.5
| Author | SHA1 | Date | |
|---|---|---|---|
| b871f76540 | |||
| 50c1460bf5 | |||
| aecf6e5780 | |||
| ecf6c1ccc7 | |||
| b844409a12 | |||
| 9df2c7782a | |||
| 7a15b77bcb | |||
| 81f7ebebfd | |||
| 3f97cf3ce3 | |||
| 8b5e6dffc6 | |||
| 4741f33d28 | |||
| 78303955b8 | |||
| 9b0c242b5c | |||
| 057ed818a9 | |||
| b7a754b9ff | |||
| 62777f0887 | |||
| 9d04e49561 | |||
| bc131d729d | |||
| 84c3413e0e | |||
| fcb0b664b5 | |||
| cf4e41fbb0 | |||
| 53f7bdc3fa |
+11
-11
@@ -15,11 +15,11 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
DESTDIR: ./bin
|
DESTDIR: ./bin
|
||||||
GO_VERSION: 1.24.7
|
GO_VERSION: 1.25.5
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate:
|
validate:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
-
|
-
|
||||||
name: Set up Go
|
name: Set up Go
|
||||||
uses: actions/setup-go@v6
|
uses: actions/setup-go@v6
|
||||||
@@ -114,7 +114,7 @@ jobs:
|
|||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
test-sandboxed:
|
test-sandboxed:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
@@ -135,11 +135,11 @@ jobs:
|
|||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
-
|
-
|
||||||
@@ -165,7 +165,7 @@ jobs:
|
|||||||
find ${{ env.DESTDIR }} -type f -exec file -e ascii -e text -- {} +
|
find ${{ env.DESTDIR }} -type f -exec file -e ascii -e text -- {} +
|
||||||
-
|
-
|
||||||
name: Upload artifacts
|
name: Upload artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: docker-credential-helpers
|
name: docker-credential-helpers
|
||||||
path: ${{ env.DESTDIR }}/*
|
path: ${{ env.DESTDIR }}/*
|
||||||
@@ -173,7 +173,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: GitHub Release
|
name: GitHub Release
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
uses: softprops/action-gh-release@6cbd405e2c4e67a21c47fa9e383d020e4e28b836 # v2.3.3
|
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
@@ -181,11 +181,11 @@ jobs:
|
|||||||
files: ${{ env.DESTDIR }}/*
|
files: ${{ env.DESTDIR }}/*
|
||||||
|
|
||||||
build-deb:
|
build-deb:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
-
|
-
|
||||||
|
|||||||
+2
-7
@@ -1,12 +1,11 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
ARG GO_VERSION=1.24.7
|
ARG GO_VERSION=1.25.5
|
||||||
ARG DEBIAN_VERSION=bookworm
|
ARG DEBIAN_VERSION=bookworm
|
||||||
|
|
||||||
ARG XX_VERSION=1.7.0
|
ARG XX_VERSION=1.7.0
|
||||||
ARG OSXCROSS_VERSION=11.3-r8-debian
|
ARG OSXCROSS_VERSION=11.3-r8-debian
|
||||||
ARG GOLANGCI_LINT_VERSION=v2.5
|
ARG GOLANGCI_LINT_VERSION=v2.8
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
ARG PACKAGE=github.com/docker/docker-credential-helpers
|
ARG PACKAGE=github.com/docker/docker-credential-helpers
|
||||||
|
|
||||||
@@ -18,7 +17,6 @@ FROM crazymax/osxcross:${OSXCROSS_VERSION} AS osxcross
|
|||||||
|
|
||||||
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-${DEBIAN_VERSION} AS gobase
|
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-${DEBIAN_VERSION} AS gobase
|
||||||
COPY --from=xx / /
|
COPY --from=xx / /
|
||||||
ARG DEBIAN_FRONTEND
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends clang dpkg-dev file git lld llvm make pkg-config rsync
|
RUN apt-get update && apt-get install -y --no-install-recommends clang dpkg-dev file git lld llvm make pkg-config rsync
|
||||||
ENV GOFLAGS="-mod=vendor"
|
ENV GOFLAGS="-mod=vendor"
|
||||||
ENV CGO_ENABLED="1"
|
ENV CGO_ENABLED="1"
|
||||||
@@ -56,7 +54,6 @@ EOT
|
|||||||
|
|
||||||
FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION} AS golangci-lint
|
FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION} AS golangci-lint
|
||||||
FROM gobase AS lint
|
FROM gobase AS lint
|
||||||
ARG DEBIAN_FRONTEND
|
|
||||||
RUN apt-get install -y binutils gcc libc6-dev libgcc-11-dev libsecret-1-dev pkg-config
|
RUN apt-get install -y binutils gcc libc6-dev libgcc-11-dev libsecret-1-dev pkg-config
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
@@ -65,11 +62,9 @@ RUN --mount=type=bind,target=. \
|
|||||||
|
|
||||||
FROM gobase AS base
|
FROM gobase AS base
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
ARG DEBIAN_FRONTEND
|
|
||||||
RUN xx-apt-get install -y binutils gcc libc6-dev libgcc-11-dev libsecret-1-dev pkg-config
|
RUN xx-apt-get install -y binutils gcc libc6-dev libgcc-11-dev libsecret-1-dev pkg-config
|
||||||
|
|
||||||
FROM base AS test
|
FROM base AS test
|
||||||
ARG DEBIAN_FRONTEND
|
|
||||||
RUN xx-apt-get install -y dbus-x11 gnome-keyring gpg-agent gpgconf libsecret-1-dev pass
|
RUN xx-apt-get install -y dbus-x11 gnome-keyring gpg-agent gpgconf libsecret-1-dev pass
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
|
|||||||
+1
-3
@@ -1,14 +1,12 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
ARG GO_VERSION=1.24.7
|
ARG GO_VERSION=1.25.5
|
||||||
ARG DISTRO=ubuntu
|
ARG DISTRO=ubuntu
|
||||||
ARG SUITE=jammy
|
ARG SUITE=jammy
|
||||||
|
|
||||||
FROM golang:${GO_VERSION}-bookworm AS golang
|
FROM golang:${GO_VERSION}-bookworm AS golang
|
||||||
|
|
||||||
FROM ${DISTRO}:${SUITE}
|
FROM ${DISTRO}:${SUITE}
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
RUN apt-get update && apt-get install -yy debhelper dh-make libsecret-1-dev
|
RUN apt-get update && apt-get install -yy debhelper dh-make libsecret-1-dev
|
||||||
RUN mkdir -p /build
|
RUN mkdir -p /build
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ retract (
|
|||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/danieljoos/wincred v1.2.2
|
github.com/danieljoos/wincred v1.2.3
|
||||||
github.com/keybase/go-keychain v0.0.1
|
github.com/keybase/go-keychain v0.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0=
|
github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ=
|
||||||
github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8=
|
github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
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/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
|
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
|
||||||
@@ -8,8 +8,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
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/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
|
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
|
||||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
|||||||
+7
-13
@@ -31,13 +31,13 @@ func utf16FromString(str string) []uint16 {
|
|||||||
|
|
||||||
// goBytes copies the given C byte array to a Go byte array (see `C.GoBytes`).
|
// goBytes copies the given C byte array to a Go byte array (see `C.GoBytes`).
|
||||||
// This function avoids having cgo as dependency.
|
// This function avoids having cgo as dependency.
|
||||||
func goBytes(src uintptr, len uint32) []byte {
|
func goBytes(src *byte, len uint32) []byte {
|
||||||
if src == uintptr(0) {
|
if src == nil || len == 0 {
|
||||||
return []byte{}
|
return []byte{}
|
||||||
}
|
}
|
||||||
rv := make([]byte, len)
|
rv := make([]byte, len)
|
||||||
copy(rv, *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
|
copy(rv, *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
|
||||||
Data: src,
|
Data: uintptr(unsafe.Pointer(src)),
|
||||||
Len: int(len),
|
Len: int(len),
|
||||||
Cap: int(len),
|
Cap: int(len),
|
||||||
})))
|
})))
|
||||||
@@ -59,7 +59,7 @@ func sysToCredential(cred *sysCREDENTIAL) (result *Credential) {
|
|||||||
result.CredentialBlob = goBytes(cred.CredentialBlob, cred.CredentialBlobSize)
|
result.CredentialBlob = goBytes(cred.CredentialBlob, cred.CredentialBlobSize)
|
||||||
result.Attributes = make([]CredentialAttribute, cred.AttributeCount)
|
result.Attributes = make([]CredentialAttribute, cred.AttributeCount)
|
||||||
attrSlice := *(*[]sysCREDENTIAL_ATTRIBUTE)(unsafe.Pointer(&reflect.SliceHeader{
|
attrSlice := *(*[]sysCREDENTIAL_ATTRIBUTE)(unsafe.Pointer(&reflect.SliceHeader{
|
||||||
Data: cred.Attributes,
|
Data: uintptr(unsafe.Pointer(cred.Attributes)),
|
||||||
Len: int(cred.AttributeCount),
|
Len: int(cred.AttributeCount),
|
||||||
Cap: int(cred.AttributeCount),
|
Cap: int(cred.AttributeCount),
|
||||||
}))
|
}))
|
||||||
@@ -85,17 +85,13 @@ func sysFromCredential(cred *Credential) (result *sysCREDENTIAL) {
|
|||||||
result.LastWritten = syscall.NsecToFiletime(cred.LastWritten.UnixNano())
|
result.LastWritten = syscall.NsecToFiletime(cred.LastWritten.UnixNano())
|
||||||
result.CredentialBlobSize = uint32(len(cred.CredentialBlob))
|
result.CredentialBlobSize = uint32(len(cred.CredentialBlob))
|
||||||
if len(cred.CredentialBlob) > 0 {
|
if len(cred.CredentialBlob) > 0 {
|
||||||
result.CredentialBlob = uintptr(unsafe.Pointer(&cred.CredentialBlob[0]))
|
result.CredentialBlob = &cred.CredentialBlob[0]
|
||||||
} else {
|
|
||||||
result.CredentialBlob = 0
|
|
||||||
}
|
}
|
||||||
result.Persist = uint32(cred.Persist)
|
result.Persist = uint32(cred.Persist)
|
||||||
result.AttributeCount = uint32(len(cred.Attributes))
|
result.AttributeCount = uint32(len(cred.Attributes))
|
||||||
attributes := make([]sysCREDENTIAL_ATTRIBUTE, len(cred.Attributes))
|
attributes := make([]sysCREDENTIAL_ATTRIBUTE, len(cred.Attributes))
|
||||||
if len(attributes) > 0 {
|
if len(attributes) > 0 {
|
||||||
result.Attributes = uintptr(unsafe.Pointer(&attributes[0]))
|
result.Attributes = &attributes[0]
|
||||||
} else {
|
|
||||||
result.Attributes = 0
|
|
||||||
}
|
}
|
||||||
for i := range cred.Attributes {
|
for i := range cred.Attributes {
|
||||||
inAttr := &cred.Attributes[i]
|
inAttr := &cred.Attributes[i]
|
||||||
@@ -104,9 +100,7 @@ func sysFromCredential(cred *Credential) (result *sysCREDENTIAL) {
|
|||||||
outAttr.Flags = 0
|
outAttr.Flags = 0
|
||||||
outAttr.ValueSize = uint32(len(inAttr.Value))
|
outAttr.ValueSize = uint32(len(inAttr.Value))
|
||||||
if len(inAttr.Value) > 0 {
|
if len(inAttr.Value) > 0 {
|
||||||
outAttr.Value = uintptr(unsafe.Pointer(&inAttr.Value[0]))
|
outAttr.Value = &inAttr.Value[0]
|
||||||
} else {
|
|
||||||
outAttr.Value = 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.TargetAlias, _ = syscall.UTF16PtrFromString(cred.TargetAlias)
|
result.TargetAlias, _ = syscall.UTF16PtrFromString(cred.TargetAlias)
|
||||||
|
|||||||
+6
-3
@@ -5,6 +5,7 @@ package wincred
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@@ -33,10 +34,10 @@ type sysCREDENTIAL struct {
|
|||||||
Comment *uint16
|
Comment *uint16
|
||||||
LastWritten windows.Filetime
|
LastWritten windows.Filetime
|
||||||
CredentialBlobSize uint32
|
CredentialBlobSize uint32
|
||||||
CredentialBlob uintptr
|
CredentialBlob *byte
|
||||||
Persist uint32
|
Persist uint32
|
||||||
AttributeCount uint32
|
AttributeCount uint32
|
||||||
Attributes uintptr
|
Attributes *sysCREDENTIAL_ATTRIBUTE
|
||||||
TargetAlias *uint16
|
TargetAlias *uint16
|
||||||
UserName *uint16
|
UserName *uint16
|
||||||
}
|
}
|
||||||
@@ -46,7 +47,7 @@ type sysCREDENTIAL_ATTRIBUTE struct {
|
|||||||
Keyword *uint16
|
Keyword *uint16
|
||||||
Flags uint32
|
Flags uint32
|
||||||
ValueSize uint32
|
ValueSize uint32
|
||||||
Value uintptr
|
Value *byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows/desktop/api/wincred/ns-wincred-_credentialw
|
// https://docs.microsoft.com/en-us/windows/desktop/api/wincred/ns-wincred-_credentialw
|
||||||
@@ -93,6 +94,8 @@ func sysCredWrite(cred *Credential, typ sysCRED_TYPE) error {
|
|||||||
uintptr(unsafe.Pointer(ncred)),
|
uintptr(unsafe.Pointer(ncred)),
|
||||||
0,
|
0,
|
||||||
)
|
)
|
||||||
|
// Make sure everything reachable from ncred stays alive through the call.
|
||||||
|
runtime.KeepAlive(ncred)
|
||||||
if ret == 0 {
|
if ret == 0 {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# github.com/danieljoos/wincred v1.2.2
|
# github.com/danieljoos/wincred v1.2.3
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/danieljoos/wincred
|
github.com/danieljoos/wincred
|
||||||
# github.com/keybase/go-keychain v0.0.1
|
# github.com/keybase/go-keychain v0.0.1
|
||||||
|
|||||||
Reference in New Issue
Block a user