93 lines
3.4 KiB
Bash
Executable file
93 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -eu;
|
|
CI_PIPELINE_NUMBER=1
|
|
CI_REPO_URL=CI_REPO_URL
|
|
CI_COMMIT_SHA=123
|
|
CI_REPO_CLONE_URL=CI_REPO_CLONE_URL
|
|
PLUGIN_ANNOTATION='{"org.opencontainers.image.description":"A Woodpecker CI plugin for yamllint to lint yaml files.","org.opencontainers.image.documentation":"$CI_REPO_URL/README.md","org.opencontainers.image.licenses":"EUPL-1.2","org.opencontainers.image.ref.name":"kokuwaio/buildctl","org.opencontainers.image.revision":"$CI_COMMIT_SHA","org.opencontainers.image.source":"$CI_REPO_CLONE_URL","org.opencontainers.image.title":"Buildctl Plugin","org.opencontainers.image.url":"$CI_REPO_URL","org.opencontainers.image.vendor":"kokuwa.io","org.opencontainers.image.version":"v0.21.0"}'
|
|
PLUGIN_NAME=registry.kokuwa.io/buildctl:$CI_PIPELINE_NUMBER
|
|
PLUGIN_PLATFORM=linux/amd64,linux/arm64
|
|
PLUGIN_AUTH='{"auths":{"registry.kokuwa.io":{"auth":"d29vZHBlY2tlcjo5cVRrVlpXSW1ITndXWXVMZ1pMajVST0FuYmZlOTEyUjlLWFFIVW51MG1iOGx5UWl5Z3hFUEZxVTN0REo5VzdE"},"ghcr.io":{"auth":"c3NjaG5hYmU6Z2hwX0lHVEswWkk0YTBqN2EzTjNIMlBmOEc2UFl1eGpEYjRmUlk0Yw=="},"https://index.docker.io/v1/":{"auth":"c3NjaG5hYmU6ZGNrcl9wYXRfZ3RnZ1k4RFdzUjJmZlRLTU1yWVI2cFR5Y1VF=="}}}'
|
|
|
|
##
|
|
## check input
|
|
##
|
|
|
|
BUILDCTL_CONTEXT=${PLUGIN_CONTEXT:-$(pwd)}
|
|
BUILDCTL_DOCKERFILE=$(dirname "${PLUGIN_DOCKERFILE:-$BUILDCTL_CONTEXT/Dockerfile}")
|
|
if [[ ! -f $BUILDCTL_DOCKERFILE/Dockerfile ]]; then
|
|
echo "Dockerfile $BUILDCTL_DOCKERFILE/Dockerfile not found!"
|
|
exit 1
|
|
fi
|
|
|
|
BUILDCTL_FRONTEND=${PLUGIN_FRONTEND:-dockerfile.v0}
|
|
if [[ "$BUILDCTL_FRONTEND" != "dockerfile.v0" ]]; then
|
|
echo "Only frontend 'dockerfile.v0' testet and supported yet."
|
|
exit 1
|
|
fi
|
|
|
|
SOURCE_DATE_EPOCH=${PLUGIN_SOURCE_DATE_EPOCH:-0}
|
|
|
|
if [[ -n "${PLUGIN_AUTH:-}" ]]; then
|
|
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME}
|
|
mkdir -p "$DOCKER_CONFIG"
|
|
echo "$PLUGIN_AUTH" > "$DOCKER_CONFIG/config.json"
|
|
echo Stored credentials at "$DOCKER_CONFIG/config.json"
|
|
echo
|
|
fi
|
|
|
|
##
|
|
## build command
|
|
##
|
|
|
|
COMMAND="buildctl"
|
|
COMMAND="$COMMAND build"
|
|
if [[ -n "${PLUGIN_ADDR:-}" ]]; then
|
|
COMMAND="$COMMAND --addr $PLUGIN_ADDR"
|
|
fi
|
|
COMMAND="$COMMAND --frontend $BUILDCTL_FRONTEND"
|
|
COMMAND="$COMMAND --local context='$BUILDCTL_CONTEXT'"
|
|
COMMAND="$COMMAND --local dockerfile='$BUILDCTL_DOCKERFILE'"
|
|
if [[ "${PLUGIN_PLATFORM:-}" == "true" ]]; then
|
|
COMMAND="$COMMAND --opt platform='$PLUGIN_PLATFORM'"
|
|
fi
|
|
# https://github.com/moby/buildkit/blob/master/README.md#output
|
|
OUTPUT=""
|
|
if [[ -n "${PLUGIN_NAME:-}" ]]; then
|
|
OUTPUT="--output type=image,\"name=$PLUGIN_NAME\",push=${PLUGIN_PUSH:-true}"
|
|
OUTPUT="$OUTPUT,oci-mediatypes=true,oci-artifact=true,compression=estargz,compression-level=9"
|
|
OUTPUT="$OUTPUT,rewrite-timestamp=true"
|
|
OUTPUT="$OUTPUT$(echo "$PLUGIN_ANNOTATION" | jq --join-output 'keys[] as $k|",annotation.\($k)=\"\(.[$k])\""')"
|
|
fi
|
|
COMMAND="$COMMAND $OUTPUT"
|
|
|
|
# custom args, e.g. docker run --rm --volume=$HOME:HOME:ro --workdir=$PWD kokuwaio/buildkit --opt buildarg=foo=bar
|
|
if [[ -n "${1:-}" ]]; then
|
|
COMMAND="$COMMAND $*"
|
|
fi
|
|
|
|
##
|
|
## execute command
|
|
##
|
|
|
|
echo
|
|
echo Reproduce with docker:
|
|
echo
|
|
echo "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH docker buildx build ${PLUGIN_CONTEXT:-.}"
|
|
echo " --no-cache"
|
|
if [[ "${PLUGIN_PLATFORM:-}" == "true" ]]; then
|
|
echo " --platform='$PLUGIN_PLATFORM'"
|
|
fi
|
|
if [[ -n "${OUTPUT:-}" ]]; then
|
|
echo " $OUTPUT"
|
|
fi
|
|
echo
|
|
echo Running now:
|
|
echo
|
|
echo -e "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH ${COMMAND// --/\\n --}"
|
|
echo
|
|
|
|
echo "$DOCKER_CONFIG/config.json"
|
|
cat "$DOCKER_CONFIG/config.json" | base64 -w0
|
|
cat "$DOCKER_CONFIG/config.json" | jq
|
|
eval "$COMMAND"
|