From beeb23ded2b530186592058a84dbb911a240b06e Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 01:03:38 +0200 Subject: [PATCH 1/7] Add VERSION file --- VERSION | 1 + 1 file changed, 1 insertion(+) create mode 100644 VERSION diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..77d6f4ca --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.0 From f5e1866f67272f0d82fb148ac403de93ef9f6439 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 01:03:52 +0200 Subject: [PATCH 2/7] Add build_docker.sh --- build_docker.sh | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 build_docker.sh diff --git a/build_docker.sh b/build_docker.sh new file mode 100755 index 00000000..53c315ca --- /dev/null +++ b/build_docker.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -o nounset +set -o errexit +set -o pipefail + +# Compute repo's dir +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +IMAGE_PREFIX="karalabe/xgo" + +function build_image() { + local folder=$1 + local name=$2 + local version=$3 + + bash -c "cd ${folder} && docker build -t ${name}:${version} ." +} + +function get_version() { + cat "${DIR}/VERSION" +} + +# subdirs returns a list of directories in a folder +function subdirs() { + local folder=$1 + bash -c "cd ${folder} && ls -d */" | sed 's/\/$//' +} + +function main() { + # Get ver + local version=$(get_version) + + echo "Building base" + build_image "${DIR}/docker/base" "${IMAGE_PREFIX}-base" "${version}" + + for goVersion in $(subdirs "${DIR}/docker" | grep -v base | sed 's/^go-//'); do + echo + echo "Building ${goVersion}" + build_image "${DIR}/go-${goVersion}" "${IMAGE_PREFIX}-${goVersion}" "${version}" + done +} + +# Run main +main From 7f4f322e017955a3dd8b12552f86d24e849456b0 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 01:47:05 +0200 Subject: [PATCH 3/7] build_docker.sh: Use versioned base when building sub images --- build_docker.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/build_docker.sh b/build_docker.sh index 53c315ca..c57f6cee 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -17,6 +17,16 @@ function build_image() { bash -c "cd ${folder} && docker build -t ${name}:${version} ." } +function build_image_file() { + local dockerfile=$1 + local name=$2 + local version=$3 + + local fixed_dockerfile=$(cat ${dockerfile} | sed -E "s/FROM (.*)$/FROM \\1:${version}/") + + bash -c "echo '${fixed_dockerfile}' | docker build -t ${name}:${version} -" +} + function get_version() { cat "${DIR}/VERSION" } @@ -37,7 +47,7 @@ function main() { for goVersion in $(subdirs "${DIR}/docker" | grep -v base | sed 's/^go-//'); do echo echo "Building ${goVersion}" - build_image "${DIR}/go-${goVersion}" "${IMAGE_PREFIX}-${goVersion}" "${version}" + build_image_file "${DIR}/docker/go-${goVersion}/Dockerfile" "${IMAGE_PREFIX}-${goVersion}" "${version}" done } From 550f3bb891c6dbfcb34608dbb06e4dcd7c0abc5f Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 22:31:12 +0200 Subject: [PATCH 4/7] build_docker.sh: simplify build commands --- build_docker.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build_docker.sh b/build_docker.sh index c57f6cee..5050d9c6 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -14,7 +14,7 @@ function build_image() { local name=$2 local version=$3 - bash -c "cd ${folder} && docker build -t ${name}:${version} ." + docker build -t ${name}:${version} ${folder} } function build_image_file() { @@ -24,7 +24,7 @@ function build_image_file() { local fixed_dockerfile=$(cat ${dockerfile} | sed -E "s/FROM (.*)$/FROM \\1:${version}/") - bash -c "echo '${fixed_dockerfile}' | docker build -t ${name}:${version} -" + echo "${fixed_dockerfile}" | docker build -t "${name}:${version}" - } function get_version() { @@ -49,6 +49,8 @@ function main() { echo "Building ${goVersion}" build_image_file "${DIR}/docker/go-${goVersion}/Dockerfile" "${IMAGE_PREFIX}-${goVersion}" "${version}" done + # Wait for all tasks to be finished + wait } # Run main From ac7d87f092ce564b35a458d3112831141b64dfaa Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 22:32:40 +0200 Subject: [PATCH 5/7] build_docker.sh: run builds in parallel --- build_docker.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/build_docker.sh b/build_docker.sh index 5050d9c6..bef0ed30 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -44,10 +44,14 @@ function main() { echo "Building base" build_image "${DIR}/docker/base" "${IMAGE_PREFIX}-base" "${version}" - for goVersion in $(subdirs "${DIR}/docker" | grep -v base | sed 's/^go-//'); do + # Run builds in parallel + local N=4 + local i=0 + for goVersion in $(subdirs "${DIR}/docker" | grep -v base | grep "1.6" | sed 's/^go-//'); do + ((i=i%N)); ((i++==0)) && wait echo echo "Building ${goVersion}" - build_image_file "${DIR}/docker/go-${goVersion}/Dockerfile" "${IMAGE_PREFIX}-${goVersion}" "${version}" + build_image_file "${DIR}/docker/go-${goVersion}/Dockerfile" "${IMAGE_PREFIX}-${goVersion}" "${version}" & done # Wait for all tasks to be finished wait From d4586df9b619e5af3225a136d2af28d4e117c84c Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 22:34:08 +0200 Subject: [PATCH 6/7] build_docker.sh: Build latest image after others --- build_docker.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build_docker.sh b/build_docker.sh index bef0ed30..aec128a0 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -47,7 +47,7 @@ function main() { # Run builds in parallel local N=4 local i=0 - for goVersion in $(subdirs "${DIR}/docker" | grep -v base | grep "1.6" | sed 's/^go-//'); do + for goVersion in $(subdirs "${DIR}/docker" | grep -v base | grep -v "latest" | sed 's/^go-//'); do ((i=i%N)); ((i++==0)) && wait echo echo "Building ${goVersion}" @@ -55,6 +55,10 @@ function main() { done # Wait for all tasks to be finished wait + + # Build go-latest last (since it depends on earlier builds) + echo "Building latest" + build_image_file "${DIR}/docker/go-latest/Dockerfile" "${IMAGE_PREFIX}-latest" "${version}" } # Run main From 9eb3dadb916e3ca96aade060751b06301f8fc84d Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sat, 2 Jul 2016 22:43:01 +0200 Subject: [PATCH 7/7] build_docker.sh: Build .x versions after others --- build_docker.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/build_docker.sh b/build_docker.sh index aec128a0..19aa5dd5 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -37,6 +37,10 @@ function subdirs() { bash -c "cd ${folder} && ls -d */" | sed 's/\/$//' } +function go_versions() { + subdirs "${DIR}/docker" | grep -v base | grep -v latest | sed 's/^go-//' +} + function main() { # Get ver local version=$(get_version) @@ -47,7 +51,7 @@ function main() { # Run builds in parallel local N=4 local i=0 - for goVersion in $(subdirs "${DIR}/docker" | grep -v base | grep -v "latest" | sed 's/^go-//'); do + for goVersion in $(go_versions | grep -v ".x"); do ((i=i%N)); ((i++==0)) && wait echo echo "Building ${goVersion}" @@ -56,7 +60,15 @@ function main() { # Wait for all tasks to be finished wait + # Build .x versions (quick and easy to build since they simply refer to other images) + for goVersion in $(go_versions | grep ".x"); do + echo + echo "Building ${goVersion}" + build_image_file "${DIR}/docker/go-${goVersion}/Dockerfile" "${IMAGE_PREFIX}-${goVersion}" "${version}" + done + # Build go-latest last (since it depends on earlier builds) + echo echo "Building latest" build_image_file "${DIR}/docker/go-latest/Dockerfile" "${IMAGE_PREFIX}-latest" "${version}" }