mirror of
https://github.com/docker/docker-credential-helpers.git
synced 2026-06-13 16:01:28 +05:30
release target with checksums
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -138,16 +138,11 @@ jobs:
|
|||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/bake-action@v2
|
|
||||||
with:
|
|
||||||
targets: binaries
|
|
||||||
set: |
|
|
||||||
*.cache-from=type=gha,scope=build
|
|
||||||
*.cache-to=type=gha,scope=build,mode=max
|
|
||||||
-
|
|
||||||
name: Move artifacts
|
|
||||||
run: |
|
run: |
|
||||||
mv ${{ env.DESTDIR }}/**/* ${{ env.DESTDIR }}/
|
make release
|
||||||
|
env:
|
||||||
|
CACHE_FROM: type=gha,scope=build
|
||||||
|
CACHE_TO: type=gha,scope=build,mode=max
|
||||||
-
|
-
|
||||||
name: Upload artifacts
|
name: Upload artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
|||||||
+43
-21
@@ -85,54 +85,76 @@ EOT
|
|||||||
FROM scratch AS test-coverage
|
FROM scratch AS test-coverage
|
||||||
COPY --from=test /out /
|
COPY --from=test /out /
|
||||||
|
|
||||||
|
FROM gobase AS version
|
||||||
|
RUN --mount=target=. \
|
||||||
|
echo -n "$(./hack/git-meta version)" | tee /tmp/.version ; echo -n "$(./hack/git-meta revision)" | tee /tmp/.revision
|
||||||
|
|
||||||
FROM base AS build-linux
|
FROM base AS build-linux
|
||||||
ARG PACKAGE
|
ARG PACKAGE
|
||||||
ARG TARGETOS
|
|
||||||
ARG TARGETARCH
|
|
||||||
ARG TARGETVARIANT
|
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
--mount=type=cache,target=/go/pkg/mod <<EOT
|
--mount=type=cache,target=/go/pkg/mod \
|
||||||
|
--mount=type=bind,source=/tmp/.version,target=/tmp/.version,from=version \
|
||||||
|
--mount=type=bind,source=/tmp/.revision,target=/tmp/.revision,from=version <<EOT
|
||||||
set -ex
|
set -ex
|
||||||
xx-go --wrap
|
xx-go --wrap
|
||||||
make build-pass PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
make build-pass build-secretservice PACKAGE=$PACKAGE VERSION=$(cat /tmp/.version) REVISION=$(cat /tmp/.revision) DESTDIR=/out
|
||||||
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
xx-verify /out/docker-credential-pass
|
||||||
make build-secretservice PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
xx-verify /out/docker-credential-secretservice
|
||||||
xx-verify /out/docker-credential-secretservice-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
FROM base AS build-darwin
|
FROM base AS build-darwin
|
||||||
ARG PACKAGE
|
ARG PACKAGE
|
||||||
ARG TARGETOS
|
|
||||||
ARG TARGETARCH
|
|
||||||
ARG TARGETVARIANT
|
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
--mount=type=cache,target=/go/pkg/mod \
|
--mount=type=cache,target=/go/pkg/mod \
|
||||||
--mount=type=bind,from=osxcross,src=/osxsdk,target=/xx-sdk <<EOT
|
--mount=type=bind,from=osxcross,src=/osxsdk,target=/xx-sdk \
|
||||||
|
--mount=type=bind,source=/tmp/.version,target=/tmp/.version,from=version \
|
||||||
|
--mount=type=bind,source=/tmp/.revision,target=/tmp/.revision,from=version <<EOT
|
||||||
set -ex
|
set -ex
|
||||||
xx-go --wrap
|
xx-go --wrap
|
||||||
go install std
|
go install std
|
||||||
make build-osxkeychain PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT}
|
make build-osxkeychain build-pass PACKAGE=$PACKAGE VERSION=$(cat /tmp/.version) REVISION=$(cat /tmp/.revision) DESTDIR=/out
|
||||||
xx-verify /out/docker-credential-osxkeychain-${TARGETARCH}${TARGETVARIANT}
|
xx-verify /out/docker-credential-osxkeychain
|
||||||
make build-pass PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
xx-verify /out/docker-credential-pass
|
||||||
xx-verify /out/docker-credential-pass-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}
|
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
FROM base AS build-windows
|
FROM base AS build-windows
|
||||||
ARG PACKAGE
|
ARG PACKAGE
|
||||||
ARG TARGETARCH
|
|
||||||
ARG TARGETVARIANT
|
|
||||||
RUN --mount=type=bind,target=. \
|
RUN --mount=type=bind,target=. \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
--mount=type=cache,target=/go/pkg/mod <<EOT
|
--mount=type=cache,target=/go/pkg/mod \
|
||||||
|
--mount=type=bind,source=/tmp/.version,target=/tmp/.version,from=version \
|
||||||
|
--mount=type=bind,source=/tmp/.revision,target=/tmp/.revision,from=version <<EOT
|
||||||
set -ex
|
set -ex
|
||||||
xx-go --wrap
|
xx-go --wrap
|
||||||
make build-wincred PACKAGE=$PACKAGE DESTDIR=/out BINNAME=docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe
|
make build-wincred PACKAGE=$PACKAGE VERSION=$(cat /tmp/.version) REVISION=$(cat /tmp/.revision) DESTDIR=/out
|
||||||
xx-verify /out/docker-credential-wincred-${TARGETARCH}${TARGETVARIANT}.exe
|
mv /out/docker-credential-wincred /out/docker-credential-wincred.exe
|
||||||
|
xx-verify /out/docker-credential-wincred.exe
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
FROM build-$TARGETOS AS build
|
FROM build-$TARGETOS AS build
|
||||||
|
|
||||||
FROM scratch AS binaries
|
FROM scratch AS binaries
|
||||||
COPY --from=build /out /
|
COPY --from=build /out /
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM alpine AS releaser
|
||||||
|
WORKDIR /work
|
||||||
|
ARG TARGETOS
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG TARGETVARIANT
|
||||||
|
RUN --mount=from=binaries \
|
||||||
|
--mount=type=bind,source=/tmp/.version,target=/tmp/.version,from=version <<EOT
|
||||||
|
set -e
|
||||||
|
mkdir /out
|
||||||
|
version="$(cat /tmp/.version)"
|
||||||
|
[ "$TARGETOS" = "windows" ] && ext=".exe"
|
||||||
|
for f in *; do
|
||||||
|
cp "$f" "/out/${f%.*}-${version}.${TARGETOS}-${TARGETARCH}${TARGETVARIANT}${ext}"
|
||||||
|
done
|
||||||
|
EOT
|
||||||
|
|
||||||
|
FROM scratch AS release
|
||||||
|
COPY --from=releaser /out/ /
|
||||||
|
|
||||||
|
FROM binaries
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
PACKAGE ?= github.com/docker/docker-credential-helpers
|
PACKAGE ?= github.com/docker/docker-credential-helpers
|
||||||
VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='.m' --always --tags)
|
VERSION ?= $(shell ./hack/git-meta version)
|
||||||
REVISION ?= $(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)
|
REVISION ?= $(shell ./hack/git-meta revision)
|
||||||
|
|
||||||
GO_PKG = github.com/docker/docker-credential-helpers
|
GO_PKG = github.com/docker/docker-credential-helpers
|
||||||
GO_LDFLAGS = -s -w -X ${GO_PKG}/credentials.Version=${VERSION} -X ${GO_PKG}/credentials.Revision=${REVISION} -X ${GO_PKG}/credentials.Package=${PACKAGE}
|
GO_LDFLAGS = -s -w -X ${GO_PKG}/credentials.Version=${VERSION} -X ${GO_PKG}/credentials.Revision=${REVISION} -X ${GO_PKG}/credentials.Package=${PACKAGE}
|
||||||
@@ -17,8 +17,7 @@ clean:
|
|||||||
|
|
||||||
.PHONY: build-%
|
.PHONY: build-%
|
||||||
build-%: # build, can be one of build-osxkeychain build-pass build-secretservice build-wincred
|
build-%: # build, can be one of build-osxkeychain build-pass build-secretservice build-wincred
|
||||||
$(eval BINNAME := docker-credential-$*)
|
go build -trimpath -ldflags="$(GO_LDFLAGS) -X ${GO_PKG}/credentials.Name=docker-credential-$*" -o "$(DESTDIR)/docker-credential-$*" ./$*/cmd/
|
||||||
go build -trimpath -ldflags="$(GO_LDFLAGS) -X ${GO_PKG}/credentials.Name=docker-credential-$*" -o $(DESTDIR)/$(BINNAME) ./$*/cmd/
|
|
||||||
|
|
||||||
# aliases for build-* targets
|
# aliases for build-* targets
|
||||||
.PHONY: osxkeychain secretservice pass wincred
|
.PHONY: osxkeychain secretservice pass wincred
|
||||||
@@ -27,36 +26,16 @@ secretservice: build-secretservice
|
|||||||
pass: build-pass
|
pass: build-pass
|
||||||
wincred: build-wincred
|
wincred: build-wincred
|
||||||
|
|
||||||
.PHONY: osxcodesign
|
|
||||||
osxcodesign: build-osxkeychain
|
|
||||||
$(eval SIGNINGHASH = $(shell security find-identity -v -p codesigning | grep "Developer ID Application: Docker Inc" | cut -d ' ' -f 4))
|
|
||||||
xcrun -log codesign -s $(SIGNINGHASH) --force --verbose bin/build/docker-credential-osxkeychain
|
|
||||||
xcrun codesign --verify --deep --strict --verbose=2 --display bin/build/docker-credential-osxkeychain
|
|
||||||
|
|
||||||
.PHONY: linuxrelease
|
|
||||||
linuxrelease:
|
|
||||||
mkdir -p release
|
|
||||||
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-amd64.tar.gz docker-credential-pass
|
|
||||||
cd bin && tar cvfz ../release/docker-credential-secretservice-$(VERSION)-amd64.tar.gz docker-credential-secretservice
|
|
||||||
|
|
||||||
.PHONY: osxrelease
|
|
||||||
osxrelease:
|
|
||||||
mkdir -p release
|
|
||||||
cd bin && tar cvfz ../release/docker-credential-osxkeychain-$(VERSION)-amd64.tar.gz docker-credential-osxkeychain
|
|
||||||
cd bin && tar cvfz ../release/docker-credential-pass-$(VERSION)-darwin-amd64.tar.gz docker-credential-pass
|
|
||||||
|
|
||||||
.PHONY: winrelease
|
|
||||||
winrelease:
|
|
||||||
mkdir -p release
|
|
||||||
cd bin && zip ../release/docker-credential-wincred-$(VERSION)-amd64.zip docker-credential-wincred.exe
|
|
||||||
|
|
||||||
.PHONY: cross
|
.PHONY: cross
|
||||||
cross: # cross build all supported credential helpers
|
cross: # cross build all supported credential helpers
|
||||||
$(BUILDX_CMD) bake cross
|
$(BUILDX_CMD) bake binaries
|
||||||
|
|
||||||
|
.PHONY: release
|
||||||
|
release: # create release
|
||||||
|
./hack/release
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test: # tests all packages except vendor
|
||||||
# tests all packages except vendor
|
|
||||||
go test -v `go list ./... | grep -v /vendor/`
|
go test -v `go list ./... | grep -v /vendor/`
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ $ make osxkeychain
|
|||||||
3 - Put that binary in your `$PATH`, so Docker can find it.
|
3 - Put that binary in your `$PATH`, so Docker can find it.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ cp bin/docker-credential-osxkeychain /usr/local/bin/
|
$ cp bin/build/docker-credential-osxkeychain /usr/local/bin/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|||||||
@@ -65,3 +65,9 @@ target "binaries" {
|
|||||||
"windows/amd64"
|
"windows/amd64"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target "release" {
|
||||||
|
inherits = ["binaries"]
|
||||||
|
target = "release"
|
||||||
|
output = [bindir("release")]
|
||||||
|
}
|
||||||
|
|||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
"version")
|
||||||
|
git describe --match 'v[0-9]*' --dirty='.m' --always --tags
|
||||||
|
;;
|
||||||
|
"revision")
|
||||||
|
echo "$(git rev-parse HEAD)$(if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "usage: ./hack/git-meta <version|revision>"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Executable
+59
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
: "${BUILDX_CMD=docker buildx}"
|
||||||
|
: "${DESTDIR=./bin/release}"
|
||||||
|
: "${CACHE_FROM=}"
|
||||||
|
: "${CACHE_TO=}"
|
||||||
|
|
||||||
|
: "${SIGN=}"
|
||||||
|
: "${PFX=}"
|
||||||
|
: "${PFXPASSWORD=}"
|
||||||
|
|
||||||
|
if [ -n "$CACHE_FROM" ]; then
|
||||||
|
for cfrom in $CACHE_FROM; do
|
||||||
|
cacheFlags+=(--set "*.cache-from=$cfrom")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ -n "$CACHE_TO" ]; then
|
||||||
|
for cto in $CACHE_TO; do
|
||||||
|
cacheFlags+=(--set "*.cache-to=$cto")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
dockerpfx=$(mktemp -t dockercredhelper-pfx.XXXXXXXXXX)
|
||||||
|
function clean {
|
||||||
|
rm -f "$dockerpfx"
|
||||||
|
}
|
||||||
|
trap clean EXIT
|
||||||
|
|
||||||
|
# release
|
||||||
|
(
|
||||||
|
set -x
|
||||||
|
${BUILDX_CMD} bake "${cacheFlags[@]}" --set "*.output=$DESTDIR" release
|
||||||
|
)
|
||||||
|
|
||||||
|
# wrap binaries
|
||||||
|
mv -f ./${DESTDIR}/**/* ./${DESTDIR}/
|
||||||
|
find ./${DESTDIR} -type d -empty -delete
|
||||||
|
|
||||||
|
# sign binaries
|
||||||
|
if [ -n "$SIGN" ]; then
|
||||||
|
for f in "${DESTDIR}"/*".darwin-"*; do
|
||||||
|
SIGNINGHASH=$(security find-identity -v -p codesigning | grep "Developer ID Application: Docker Inc" | cut -d ' ' -f 4)
|
||||||
|
xcrun -log codesign -s "$SIGNINGHASH" --force --verbose "$f"
|
||||||
|
xcrun codesign --verify --deep --strict --verbose=2 --display "$f"
|
||||||
|
done
|
||||||
|
for f in "${DESTDIR}"/*".windows-"*; do
|
||||||
|
echo ${PFX} | base64 -d > "$dockerpfx"
|
||||||
|
signtool sign /fd SHA256 /a /f pfx /p ${PFXPASSWORD} /d Docker /du https://www.docker.com /t http://timestamp.verisign.com/scripts/timestamp.dll "$f"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# checksums
|
||||||
|
(
|
||||||
|
cd ${DESTDIR}
|
||||||
|
sha256sum -b docker-credential-* > ./checksums.txt
|
||||||
|
sha256sum -c --strict checksums.txt
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user