@@ -21,26 +21,95 @@ if [ "${DOCKER_IMAGE%/*/*}" != "${DOCKER_IMAGE}" ]; then
2121 DOCKER_SERVER=${DOCKER_IMAGE%/*/* }
2222fi
2323
24+ DOCKER_DIR=contrib/docker
25+ GOVENDOR_VOL=govendor-cache
26+ GOVENDOR_DIR=/root/go/.cache/govendor
27+ GOBUILD_VOL=gobuild-cache
28+ GOBUILD_DIR=/root/.cache/go-build
29+ TOPLEVEL_VOL=$PWD
30+ TOPLEVEL_DIR=/root/go/src/github.com/skydive-project/skydive
31+
32+ docker_tag () {
33+ local arch=$1
34+ echo ${DOCKER_TAG} -linux-${arch}
35+ }
36+
37+ docker_skydive_builder () {
38+ local arch=$1
39+ local dockerfile=$2
40+
41+ # create docker image of builder and build skydive
42+ local tag=skydive-compile
43+ local image=skydive-compile-build
44+ local uid=$( id -u )
45+ docker build -t $tag \
46+ ${TARGET_ARCH: +--build-arg TARGET_ARCH=${TARGET_ARCH} } \
47+ ${TARGET_GOARCH: +--build-arg TARGET_GOARCH=${TARGET_GOARCH} } \
48+ ${DEBARCH: +--build-arg DEBARCH=${DEBARCH} } \
49+ --build-arg UID=$uid \
50+ -f $DOCKER_DIR /$dockerfile $DOCKER_DIR
51+ docker volume create $GOVENDOR_VOL
52+ docker volume create $GOBUILD_VOL
53+ docker rm $image || true
54+ docker run --name $image \
55+ --env UID=$uid \
56+ --volume $TOPLEVEL_VOL :$TOPLEVEL_DIR \
57+ --volume $GOVENDOR_VOL :$GOVENDOR_DIR \
58+ --volume $GOBUILD_VOL :$GOBUILD_DIR \
59+ $tag
60+
61+ # copy skydive executable our of builder docker image
62+ local src=/root/go/bin/${TARGET_GOARCH: +linux_${TARGET_GOARCH} / } skydive
63+ local dst=$DOCKER_DIR /skydive.$arch
64+ docker cp $image :$src $dst
65+ docker rm $image
66+ }
67+
68+ docker_skydive_target () {
69+ local arch=$1
70+ local dockerfile=$2
71+
72+ # build target skydive docker image
73+ local tag=$( docker_tag ${arch} )
74+ docker build -t ${DOCKER_IMAGE} :$tag \
75+ --label " Version=${VERSION} " \
76+ --build-arg ARCH=$arch \
77+ ${BASE: +--build-arg BASE=${BASE} } \
78+ -f $DOCKER_DIR /$dockerfile $DOCKER_DIR
79+ }
80+
81+ docker_native_build () {
82+ local arch=$1
83+
84+ docker_skydive_builder $arch Dockerfile.compile
85+ docker_skydive_target $arch Dockerfile
86+ }
87+
88+ docker_cross_build () {
89+ local arch=$1
90+
91+ docker_skydive_builder $arch Dockerfile.crosscompile
92+ docker_skydive_target $arch Dockerfile.static
93+ }
94+
2495docker_build () {
2596 for arch in $ARCHES
2697 do
27- flags=" DOCKER_IMAGE=${DOCKER_IMAGE} DOCKER_TAG=${arch} -${DOCKER_TAG} "
2898 case $arch in
2999 amd64)
30- # x86_64 image
31- make docker-build ${flags} ${BASE: +BASE=$BASE }
100+ docker_native_build $arch
32101 ;;
33102 ppc64le)
34- make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=powerpc64le TARGET_GOARCH=$arch DEBARCH=ppc64el BASE=${BASE:- ${arch} / ubuntu}
103+ TARGET_ARCH=powerpc64le TARGET_GOARCH=$arch DEBARCH=ppc64el BASE=${BASE:- ${arch} / ubuntu} docker_cross_build $arch
35104 ;;
36105 arm64)
37- make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=aarch64 TARGET_GOARCH=$arch BASE=${BASE:- aarch64/ ubuntu}
106+ TARGET_ARCH=aarch64 TARGET_GOARCH=$arch DEBARCH= $arch BASE=${BASE:- aarch64/ ubuntu} docker_cross_build $arch
38107 ;;
39108 s390x)
40- make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=$arch TARGET_GOARCH=$arch BASE=${BASE:- ${arch} / ubuntu}
109+ TARGET_ARCH=$arch TARGET_GOARCH=$arch DEBARCH= $arch BASE=${BASE:- ${arch} / ubuntu} docker_cross_build $arch
41110 ;;
42111 * )
43- make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=$arch TARGET_GOARCH=$arch BASE=${BASE:- ${arch} / ubuntu}
112+ TARGET_ARCH=$arch TARGET_GOARCH=$arch DEBARCH= $arch BASE=${BASE:- ${arch} / ubuntu} docker_cross_build $arch
44113 ;;
45114 esac
46115 done
@@ -57,18 +126,28 @@ docker_login() {
57126 set -x
58127}
59128
129+ docker_image () {
130+ local arch=$1
131+ echo ${DOCKER_IMAGE} :$( docker_tag ${arch} )
132+ }
133+
134+ docker_inspect () {
135+ local arch=$1
136+ docker inspect --format=' {{index .RepoDigests 0}}' $( docker_image ${arch} )
137+ }
138+
60139docker_push () {
61140 for arch in $ARCHES
62141 do
63- docker push ${DOCKER_IMAGE} : ${arch} - ${DOCKER_TAG}
142+ docker push $( docker_image ${arch} )
64143 done
65144}
66145
67146docker_manifest () {
68147 digests=" "
69148 for arch in $ARCHES
70149 do
71- digest=$( docker inspect --format= ' {{index .RepoDigests 0}} ' ${DOCKER_IMAGE} : ${ arch} - ${DOCKER_TAG } )
150+ digest=$( docker_inspect ${ arch} )
72151 digests=" ${digests} $digest "
73152 done
74153
@@ -82,7 +161,7 @@ docker_manifest() {
82161
83162 for arch in $ARCHES
84163 do
85- digest=$( docker inspect --format= ' {{index .RepoDigests 0}} ' ${DOCKER_IMAGE} : ${ arch} - ${DOCKER_TAG } )
164+ digest=$( docker_inspect ${ arch} )
86165 docker manifest annotate --arch $arch " ${DOCKER_IMAGE} :${DOCKER_TAG} " $digest
87166 done
88167
0 commit comments