mirror of
https://github.com/moby/buildkit.git
synced 2026-08-10 17:14:08 +00:00
Refactor test for GitHub Actions
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -1,35 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
. $(dirname $0)/util
|
||||
TYP=$1
|
||||
|
||||
. $(dirname $0)/util
|
||||
set -e
|
||||
|
||||
if [ -z "$TRAVIS_COMMIT" ]; then
|
||||
echo "TRAVIS_COMMIT_REQURED"
|
||||
exit 0
|
||||
usage() {
|
||||
echo "usage: ./hack/build_ci_first_pass <typ>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "$TYP" ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
progressFlag=""
|
||||
if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi
|
||||
|
||||
importCacheFlags=""
|
||||
exportCacheFlags=""
|
||||
exportFlags=""
|
||||
|
||||
if [ -f /tmp/buildkit-ci-cache-repo ]; then
|
||||
exportCacheFlags="--export-cache=type=inline"
|
||||
exportFlags="--output=type=image,push=true,name=$(cat /tmp/buildkit-ci-cache-repo)"
|
||||
if [ "$TRAVIS" = "true" ]; then
|
||||
if [ -z "$TRAVIS_COMMIT" ]; then
|
||||
echo "Travis commit required"
|
||||
exit 0
|
||||
fi
|
||||
if [ -f /tmp/buildkit-ci-cache-repo ]; then
|
||||
exportCacheFlags="--cache-to=type=inline"
|
||||
exportFlags="--output=type=image,push=true,name=$(cat /tmp/buildkit-ci-cache-repo)"
|
||||
fi
|
||||
if [ "$TYP" = "binaries" ]; then
|
||||
importCacheFlags="--cache-from=type=registry,ref=cicache.buildk.it/moby/buildkit/master:binaries --cache-from=type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests"
|
||||
exportFlags="$exportFlags:binaries"
|
||||
elif [ "$TYP" = "integration-tests" ]; then
|
||||
importCacheFlags="--cache-from=type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests"
|
||||
exportFlags="$exportFlags:integration-tests"
|
||||
fi
|
||||
elif [ "$GITHUB_ACTIONS" = "true" ]; then
|
||||
context="."
|
||||
if [ -n "$cacheref" ]; then
|
||||
importCacheFlags="--cache-from=type=local,src=$cacheref"
|
||||
exportCacheFlags="--cache-to=type=local,dest=$cacheref"
|
||||
fi
|
||||
fi
|
||||
|
||||
set -x
|
||||
buildctl build $progressFlag --frontend=dockerfile.v0 \
|
||||
$currentcontextBuildctl \
|
||||
--opt target=binaries \
|
||||
--import-cache type=registry,ref=cicache.buildk.it/moby/buildkit/master:binaries \
|
||||
--import-cache type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests \
|
||||
$exportCacheFlags $exportFlags:binaries
|
||||
|
||||
buildctl build $progressFlag --frontend=dockerfile.v0 \
|
||||
$currentcontextBuildctl \
|
||||
--opt target=integration-tests-base \
|
||||
--import-cache type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests \
|
||||
$exportCacheFlags $exportFlags:integration-tests
|
||||
case $TYP in
|
||||
"binaries")
|
||||
buildxCmd build $importCacheFlags $exportCacheFlags $exportFlags \
|
||||
--target "binaries" \
|
||||
$currentcontext
|
||||
;;
|
||||
"integration-tests")
|
||||
buildxCmd build $importCacheFlags $exportCacheFlags $exportFlags \
|
||||
--target "integration-tests-base" \
|
||||
$currentcontext
|
||||
;;
|
||||
*)
|
||||
echo >&2 "Unknown type $TYP"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
79
hack/test
79
hack/test
@@ -8,8 +8,8 @@ set -eu -o pipefail
|
||||
: ${TEST_DOCKERFILE=}
|
||||
: ${TEST_DOCKERD=}
|
||||
: ${TEST_DOCKERD_BINARY=$(which dockerd)}
|
||||
: ${TEST_COVERAGE=}
|
||||
: ${DOCKERFILE_RELEASES=}
|
||||
: ${CONTINUOUS_INTEGRATION=}
|
||||
: ${BUILDKIT_REGISTRY_MIRROR_DIR=}
|
||||
|
||||
if [ "$TEST_DOCKERD" == "1" ] && ! file $TEST_DOCKERD_BINARY | grep "statically linked" >/dev/null; then
|
||||
@@ -19,12 +19,13 @@ fi
|
||||
|
||||
importCacheFlags=""
|
||||
if [ -n "$cacheref" ]; then
|
||||
importCacheFlags="--import-cache=type=registry,ref=$cacheref:integration-tests"
|
||||
if [ "$cachetype" = "local" ]; then
|
||||
importCacheFlags="--cache-from=type=local,src=$cacheref"
|
||||
else
|
||||
importCacheFlags="--cache-from=type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests --cache-from=type=registry,ref=$cacheref:integration-tests"
|
||||
fi
|
||||
fi
|
||||
|
||||
progressFlag=""
|
||||
if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi
|
||||
|
||||
if [ "$#" == 0 ]; then TEST_INTEGRATION=1; fi
|
||||
|
||||
while test $# -gt 0; do
|
||||
@@ -47,33 +48,25 @@ done
|
||||
|
||||
iid="buildkit-tests"
|
||||
iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
|
||||
set -x
|
||||
|
||||
case $buildmode in
|
||||
"buildkit")
|
||||
tmpfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
|
||||
buildctl build $progressFlag --frontend=dockerfile.v0 $currentcontextBuildctl \
|
||||
--opt target=integration-tests \
|
||||
--output type=docker,name=$iid,dest=$tmpfile \
|
||||
--import-cache type=registry,ref=cicache.buildk.it/moby/buildkit/master:integration-tests $importCacheFlags
|
||||
docker load -i $tmpfile
|
||||
rm $tmpfile
|
||||
;;
|
||||
"docker-buildkit")
|
||||
export DOCKER_BUILDKIT=1
|
||||
docker build --iidfile $iidfile --target integration-tests --force-rm .
|
||||
iid=$(cat $iidfile)
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported build mode: $buildmode" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
coverageVol=""
|
||||
coverageFlags=""
|
||||
if [ "$TEST_COVERAGE" = "1" ]; then
|
||||
covdir="$(pwd)/coverage"
|
||||
mkdir -p "$covdir"
|
||||
coverageVol="-v $covdir:/coverage"
|
||||
coverageFlags="-coverprofile=/coverage/coverage.txt -covermode=atomic"
|
||||
fi
|
||||
|
||||
buildxCmd build $importCacheFlags \
|
||||
--target "integration-tests" \
|
||||
--output "type=docker,name=$iid" \
|
||||
$currentcontext
|
||||
|
||||
cacheVolume=$(docker create -v /root/.cache -v /root/.cache/registry -v /go/pkg/mod alpine)
|
||||
|
||||
if [ "$TEST_INTEGRATION" == 1 ]; then
|
||||
cid=$(docker create --rm -v /tmp --volumes-from=$cacheVolume -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry --privileged $iid go test ${TESTFLAGS:--v} ${TESTPKGS:-./...})
|
||||
cid=$(docker create --rm -v /tmp $coverageVol --volumes-from=$cacheVolume -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry --privileged $iid go test $coverageFlags ${TESTFLAGS:--v} ${TESTPKGS:-./...})
|
||||
if [ "$TEST_DOCKERD" = "1" ]; then
|
||||
docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/
|
||||
fi
|
||||
@@ -98,26 +91,15 @@ if [ "$TEST_DOCKERFILE" == 1 ]; then
|
||||
for release in $DOCKERFILE_RELEASES; do
|
||||
buildtags=$(cat ./frontend/dockerfile/release/$release/tags)
|
||||
tarout=$(mktemp -t dockerfile-frontend.XXXXXXXXXX)
|
||||
case $buildmode in
|
||||
"buildkit")
|
||||
buildctl build $progressFlag --frontend=dockerfile.v0 --local context=. --local dockerfile=. \
|
||||
--opt filename=./frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile \
|
||||
--opt build-arg:BUILDTAGS="$buildtags" \
|
||||
--output type=oci,dest=$tarout
|
||||
;;
|
||||
"docker-buildkit")
|
||||
dfiidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
|
||||
docker build --iidfile=$dfiidfile -f ./frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile --build-arg BUILDTAGS="$buildtags" .
|
||||
dfiid=$(cat $dfiidfile)
|
||||
docker save -o $tarout $dfiid
|
||||
docker rmi $dfiid
|
||||
rm $dfiidfile
|
||||
;;
|
||||
esac
|
||||
|
||||
buildxCmd build $importCacheFlags \
|
||||
--build-arg "BUILDTAGS=$buildtags" \
|
||||
--file "./frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile" \
|
||||
.
|
||||
|
||||
if [ -s $tarout ]; then
|
||||
if [ "$release" = "mainline" ] || [ "$release" = "labs" ] || [ -n "$DOCKERFILE_RELEASES_CUSTOM" ] || [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then
|
||||
cid=$(docker create -v /tmp --rm --privileged --volumes-from=$cacheVolume -e TEST_DOCKERD -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM=1 -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend $iid go test --count=1 -tags "$buildtags" ${TESTFLAGS:--v} ./frontend/dockerfile)
|
||||
if [ "$release" = "mainline" ] || [ "$release" = "labs" ] || [ -n "$DOCKERFILE_RELEASES_CUSTOM" ] || [ "$TRAVIS_EVENT_TYPE" = "cron" ] || [ "$GITHUB_ACTIONS" = "true" ]; then
|
||||
cid=$(docker create -v /tmp $coverageVol --rm --privileged --volumes-from=$cacheVolume -e TEST_DOCKERD -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM=1 -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend $iid go test $coverageFlags --count=1 -tags "$buildtags" ${TESTFLAGS:--v} ./frontend/dockerfile)
|
||||
docker cp $tarout $cid:/$release.tar
|
||||
if [ "$TEST_DOCKERD" = "1" ]; then
|
||||
docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/
|
||||
@@ -130,10 +112,3 @@ if [ "$TEST_DOCKERFILE" == 1 ]; then
|
||||
fi
|
||||
|
||||
docker rm -v $cacheVolume
|
||||
|
||||
case $buildmode in
|
||||
"docker-buildkit")
|
||||
rm "$iidfile"
|
||||
docker rmi $iid
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -35,7 +35,7 @@ cachetype=""
|
||||
cacheref=""
|
||||
currentref=""
|
||||
if [ "$GITHUB_ACTIONS" = "true" ]; then
|
||||
currentref="git://github.com/moby/buildkit#$GITHUB_REF"
|
||||
currentref="git://github.com/$GITHUB_REPOSITORY#$GITHUB_REF"
|
||||
cachetype="local"
|
||||
cacheref="$CACHE_DIR"
|
||||
elif [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then
|
||||
|
||||
Reference in New Issue
Block a user