From e145c60337828621697f1cb31a71eb741c5bd2e9 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Fri, 22 Apr 2016 18:05:19 +0200 Subject: [PATCH 1/4] scripts: add "release with rkt" This script uses rkt and a fedora image to build release tarballs. --- scripts/release-with-rkt.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 scripts/release-with-rkt.sh diff --git a/scripts/release-with-rkt.sh b/scripts/release-with-rkt.sh new file mode 100755 index 00000000..d234e0c1 --- /dev/null +++ b/scripts/release-with-rkt.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +set -xe + +SRC_DIR="${SRC_DIR:-$PWD}" + +FEDORA_INSTALL="dnf install -y golang tar xz bzip2 gzip sudo iproute" +FEDORA_IMAGE="docker://fedora:23" + +TAG=$(git describe --exact-match --abbrev=0) || TAG=$(git describe) +RELEASE_DIR=release-${TAG} +OUTPUT_DIR=bin + +rm -Rf ${SRC_DIR}/${RELEASE_DIR} +mkdir -p ${SRC_DIR}/${RELEASE_DIR} + +sudo -E rkt run \ + --volume rslvconf,kind=host,source=/etc/resolv.conf \ + --mount volume=rslvconf,target=/etc/resolv.conf \ + --volume src-dir,kind=host,source=$SRC_DIR \ + --mount volume=src-dir,target=/opt/src \ + --interactive \ + --insecure-options=image \ + ${FEDORA_IMAGE} \ + --exec /bin/bash \ + -- -xe -c "\ + ${FEDORA_INSTALL}; cd /opt/src; umask 0022; ./build; ./test || true; \ + for format in txz tbz2 tgz; do \ + FILENAME=CNI-${TAG}.\$format; \ + FILEPATH=${RELEASE_DIR}/\$FILENAME; \ + tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \ + pushd ${RELEASE_DIR}; md5sum \$FILENAME > \$FILENAME.md5; popd; \ + done; \ + chown -R ${UID} ${OUTPUT_DIR} ${RELEASE_DIR}; \ + :" From 4aaffc2069765a9ab0b54bc98198910760b12308 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Sat, 23 Apr 2016 00:12:50 +0200 Subject: [PATCH 2/4] scripts: build static releases and create an ACI * use SHA1 instead of MD5 --- build-static | 32 ++++++++++++++++++++++++++++++ scripts/release-with-rkt.sh | 39 +++++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 15 deletions(-) create mode 100755 build-static diff --git a/build-static b/build-static new file mode 100755 index 00000000..aae17f04 --- /dev/null +++ b/build-static @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -xe + +ORG_PATH="github.com/appc" +REPO_PATH="${ORG_PATH}/cni" + +if [ ! -h gopath/src/${REPO_PATH} ]; then + mkdir -p gopath/src/${ORG_PATH} + ln -s ../../../.. gopath/src/${REPO_PATH} || exit 255 +fi + +export GO15VENDOREXPERIMENT=1 +export GOBIN=${PWD}/bin +export GOPATH=${PWD}/gopath +export CGO_ENABLED=0 + +echo "Building API" +go build ${REPO_PATH}/libcni + +echo "Building reference CLI" +go install --ldflags '-extldflags "-static"' ${REPO_PATH}/cnitool + +echo "Building plugins" + +PLUGINS="plugins/meta/* plugins/main/* plugins/ipam/*" +for d in $PLUGINS; do + if [ -d $d ]; then + plugin=$(basename $d) + echo " " $plugin + go install ${REPO_PATH}/$d + fi +done diff --git a/scripts/release-with-rkt.sh b/scripts/release-with-rkt.sh index d234e0c1..4e889501 100755 --- a/scripts/release-with-rkt.sh +++ b/scripts/release-with-rkt.sh @@ -3,8 +3,10 @@ set -xe SRC_DIR="${SRC_DIR:-$PWD}" -FEDORA_INSTALL="dnf install -y golang tar xz bzip2 gzip sudo iproute" +FEDORA_INSTALL="dnf install -y golang tar xz bzip2 gzip sudo iproute wget" FEDORA_IMAGE="docker://fedora:23" +ACBUILD_URL="https://github.com/appc/acbuild/releases/download/v0.2.2/acbuild.tar.gz" +ACBUILD="acbuild --debug" TAG=$(git describe --exact-match --abbrev=0) || TAG=$(git describe) RELEASE_DIR=release-${TAG} @@ -14,21 +16,28 @@ rm -Rf ${SRC_DIR}/${RELEASE_DIR} mkdir -p ${SRC_DIR}/${RELEASE_DIR} sudo -E rkt run \ - --volume rslvconf,kind=host,source=/etc/resolv.conf \ - --mount volume=rslvconf,target=/etc/resolv.conf \ - --volume src-dir,kind=host,source=$SRC_DIR \ - --mount volume=src-dir,target=/opt/src \ - --interactive \ - --insecure-options=image \ - ${FEDORA_IMAGE} \ - --exec /bin/bash \ - -- -xe -c "\ - ${FEDORA_INSTALL}; cd /opt/src; umask 0022; ./build; ./test || true; \ + --volume rslvconf,kind=host,source=/etc/resolv.conf \ + --mount volume=rslvconf,target=/etc/resolv.conf \ + --volume src-dir,kind=host,source=$SRC_DIR \ + --mount volume=src-dir,target=/opt/src \ + --interactive \ + --insecure-options=image \ + ${FEDORA_IMAGE} \ + --exec /bin/bash \ + -- -xe -c "\ + ${FEDORA_INSTALL}; cd /opt/src; umask 0022; ./build-static; ./test || true; \ for format in txz tbz2 tgz; do \ - FILENAME=CNI-${TAG}.\$format; \ - FILEPATH=${RELEASE_DIR}/\$FILENAME; \ - tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \ - pushd ${RELEASE_DIR}; md5sum \$FILENAME > \$FILENAME.md5; popd; \ + FILENAME=cni-${TAG}.\$format; \ + FILEPATH=${RELEASE_DIR}/\$FILENAME; \ + tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \ done; \ + wget -O - ${ACBUILD_URL} | tar -C /usr/bin -xzvf -; \ + ${ACBUILD} begin; \ + ${ACBUILD} set-name coreos.com/cni; \ + ${ACBUILD} label add version ${TAG}; \ + ${ACBUILD} copy --to-dir ${OUTPUT_DIR} /opt/cni/; \ + ${ACBUILD} write ${RELEASE_DIR}/cni-${TAG}.aci; \ + ${ACBUILD} end; \ + pushd ${RELEASE_DIR}; for f in \$(ls); do sha1sum \$f > \$f.sha1; done; popd; \ chown -R ${UID} ${OUTPUT_DIR} ${RELEASE_DIR}; \ :" From c72dea5a20c9059c6d709a09e869d49edb9f1481 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Thu, 28 Apr 2016 22:40:59 +0200 Subject: [PATCH 3/4] build/release: link all release binaries statically --- build | 9 ++++----- build-static | 32 -------------------------------- scripts/release-with-rkt.sh | 3 ++- 3 files changed, 6 insertions(+), 38 deletions(-) delete mode 100755 build-static diff --git a/build b/build index 2acc8f27..c6d60ff8 100755 --- a/build +++ b/build @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -e +set -xe ORG_PATH="github.com/containernetworking" REPO_PATH="${ORG_PATH}/cni" @@ -14,18 +14,17 @@ export GOBIN=${PWD}/bin export GOPATH=${PWD}/gopath echo "Building API" -go build ${REPO_PATH}/libcni +go build "$@" ${REPO_PATH}/libcni echo "Building reference CLI" -go install ${REPO_PATH}/cnitool +go install "$@" ${REPO_PATH}/cnitool echo "Building plugins" - PLUGINS="plugins/meta/* plugins/main/* plugins/ipam/*" for d in $PLUGINS; do if [ -d $d ]; then plugin=$(basename $d) echo " " $plugin - go install ${REPO_PATH}/$d + go install "$@" ${REPO_PATH}/$d fi done diff --git a/build-static b/build-static deleted file mode 100755 index aae17f04..00000000 --- a/build-static +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -set -xe - -ORG_PATH="github.com/appc" -REPO_PATH="${ORG_PATH}/cni" - -if [ ! -h gopath/src/${REPO_PATH} ]; then - mkdir -p gopath/src/${ORG_PATH} - ln -s ../../../.. gopath/src/${REPO_PATH} || exit 255 -fi - -export GO15VENDOREXPERIMENT=1 -export GOBIN=${PWD}/bin -export GOPATH=${PWD}/gopath -export CGO_ENABLED=0 - -echo "Building API" -go build ${REPO_PATH}/libcni - -echo "Building reference CLI" -go install --ldflags '-extldflags "-static"' ${REPO_PATH}/cnitool - -echo "Building plugins" - -PLUGINS="plugins/meta/* plugins/main/* plugins/ipam/*" -for d in $PLUGINS; do - if [ -d $d ]; then - plugin=$(basename $d) - echo " " $plugin - go install ${REPO_PATH}/$d - fi -done diff --git a/scripts/release-with-rkt.sh b/scripts/release-with-rkt.sh index 4e889501..c5fac8fc 100755 --- a/scripts/release-with-rkt.sh +++ b/scripts/release-with-rkt.sh @@ -7,6 +7,7 @@ FEDORA_INSTALL="dnf install -y golang tar xz bzip2 gzip sudo iproute wget" FEDORA_IMAGE="docker://fedora:23" ACBUILD_URL="https://github.com/appc/acbuild/releases/download/v0.2.2/acbuild.tar.gz" ACBUILD="acbuild --debug" +BUILDFLAGS="-a --ldflags '-extldflags \"-static\"'" TAG=$(git describe --exact-match --abbrev=0) || TAG=$(git describe) RELEASE_DIR=release-${TAG} @@ -25,7 +26,7 @@ sudo -E rkt run \ ${FEDORA_IMAGE} \ --exec /bin/bash \ -- -xe -c "\ - ${FEDORA_INSTALL}; cd /opt/src; umask 0022; ./build-static; ./test || true; \ + ${FEDORA_INSTALL}; cd /opt/src; umask 0022; CGO_ENABLED=0 ./build ${BUILDFLAGS}; ./test || true; \ for format in txz tbz2 tgz; do \ FILENAME=cni-${TAG}.\$format; \ FILEPATH=${RELEASE_DIR}/\$FILENAME; \ From 5fa06a39f0b9936b03119b548e159f29b59cc0f2 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Fri, 6 May 2016 17:50:01 +0200 Subject: [PATCH 4/4] release script: don't run the tests For two reasons: 1. They're not functional within rkt 2. They rebuild the binaries dynamically --- scripts/release-with-rkt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-with-rkt.sh b/scripts/release-with-rkt.sh index c5fac8fc..67702546 100755 --- a/scripts/release-with-rkt.sh +++ b/scripts/release-with-rkt.sh @@ -26,7 +26,7 @@ sudo -E rkt run \ ${FEDORA_IMAGE} \ --exec /bin/bash \ -- -xe -c "\ - ${FEDORA_INSTALL}; cd /opt/src; umask 0022; CGO_ENABLED=0 ./build ${BUILDFLAGS}; ./test || true; \ + ${FEDORA_INSTALL}; cd /opt/src; umask 0022; CGO_ENABLED=0 ./build ${BUILDFLAGS}; \ for format in txz tbz2 tgz; do \ FILENAME=cni-${TAG}.\$format; \ FILEPATH=${RELEASE_DIR}/\$FILENAME; \