diff options
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/build-all-docker-images | 239 | ||||
| -rwxr-xr-x | tools/build-docker-image | 180 | ||||
| -rw-r--r-- | tools/gen-source-tar.sh | 49 | ||||
| -rwxr-xr-x | tools/update-build-links | 12 | ||||
| -rwxr-xr-x | tools/validate-links.sh | 8 |
5 files changed, 0 insertions, 488 deletions
diff --git a/tools/build-all-docker-images b/tools/build-all-docker-images deleted file mode 100755 index dfd970426..000000000 --- a/tools/build-all-docker-images +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env bash -# Depends on bash 4 and gawk - -TOPDIR=$(git rev-parse --show-toplevel) -# Work in a temp dir so that developers can continue working while a build is -# in progress -WORKDIR=$(mktemp -d /tmp/kolla-workdir.XXXXXXXXXX) -# Remove $WORKDIR otherwise $TOPDIR is copied *inside* of it -rm -rf $WORKDIR -cp -aL "$TOPDIR" $WORKDIR -DOCKERDIR="$WORKDIR/docker" - -declare -A dependency -declare -A img_dirs -declare -A status - -function info { - [[ -n $1 ]] && printf "%s\n" "$1" -} - -function success { - [[ -n $1 ]] && printf "\033[00;32m%s\033[00m\n" "$1" -} - -function warn { - [[ -n $1 ]] && printf "\033[00;31m%s\033[00m\n" "$1" -} - -function set_defaults { - PREFIX=centos-rdo- - NAMESPACE=kollaglue - [ -f $WORKDIR/.buildconf ] && . $WORKDIR/.buildconf - [ -n "${FORCE_PREFIX}" ] && PREFIX="${FORCE_PREFIX}" -} - -function has_changed { - local image=$1 - # Rebuild everything unless given git revision - # We don't really care about the order of the $FROM and $TO parameters, all - # we need is the list of changed files between the revisions, or HEAD if - # only one of them is specified - [[ -z $FROM && -z $TO ]] || git diff --name-only $FROM $TO | grep -q "${img_dirs[$image]#$WORKDIR/}" -} - -function requires_build { - local image=$1 - local dep=${dependency[$image]} - # An image requires a built if it meets the following conditions: - # - it has instructions to build the image - # - it hasn't been processed yet - # - its dependency was rebuilt or its build instruction was modified - [[ ${img_dirs[$image]} && -z ${status[$image]} ]] && \ - ([[ ${status[$dep]} == "rebuilt" ]] || has_changed $image) -} - -function build_image { - local dir=$1 - printf "\n" - if [ -x "$dir/build" ]; then - info "Building image in $dir" - if $dir/build $ARGS --no-use-released-parent; then - success "Successfully built image in $dir" - status[$image]="rebuilt" - else - warn "Failed to build image in $dir" - status[$image]="fail" - fi - else - warn "Image $image does not provide build script" - status[$image]="fail" - fi -} - -function init_image { - local img_dir=$1 - - set_defaults - [ -f $WORKDIR/.buildconf ] && . $WORKDIR/.buildconf - [ -f $img_dir/.buildconf ] && . $img_dir/.buildconf - [ -n "$FORCE_NAMESPACE" ] && NAMESPACE=$FORCE_NAMESPACE - [ -n "${REGISTRY}" ] && NAMESPACE="${REGISTRY}/${NAMESPACE}" - - local image="${NAMESPACE:+${NAMESPACE}/}${PREFIX}${img_dir##*/}" - local base_image=$(cat $img_dir/Dockerfile | gawk 'match($0, /^\s*FROM\s+(\S+)/, matches) {print matches[1]}' ) - base_image=${base_image//%%KOLLA_NAMESPACE%%/$NAMESPACE} - base_image=${base_image//%%KOLLA_PREFIX%%/$PREFIX} - base_image=${base_image//:%%KOLLA_TAG%%/} - - img_dirs[$image]=$img_dir - dependency[$image]=$base_image - - # Restore defaults to minimize risk of side effects - set_defaults -} - -function process_image { - local image=$1 - if [ -n "${dependency[$image]}" ]; then - process_image ${dependency[$image]} - fi - if requires_build $image; then - build_image ${img_dirs[$image]} - fi - if [ -z "${status[$image]}" ]; then - status[$image]="up-to-date" - fi -} - -function print_summary { - printf "\nSummary\n=======\n" - for image in "${!status[@]}"; do - case "${status[$image]}" in - ("fail") warn "Failed to process $image" ;; - ("rebuilt") success "Rebuilt $image" ;; - (*) info "$image: ${status[$image]}" ;; - esac - done -} - -function print_parseable_summary { - printf "{" - for image in "${!status[@]}"; do - printf "'$image':'${status[$image]}'," - done - printf "}" -} - -function interrupted { - info "Interrupted..." - print_summary - rm -rf $WORKDIR - exit 1 -} - -function usage { - read -r -d '' HELP <<EOF -A wrapper to build-docker-image that build all images in order. - -Options: - ---prefix <image_prefix> ---from <git-revision> ---to <git-revision> - -$($WORKDIR/tools/build-docker-image --help) -EOF - printf "%s\n" "${HELP/$WORKDIR\/tools\/build-docker-image/$0}" -} - -trap 'interrupted' INT - - -ARGS=$@ -PARSED_ARGS=$(getopt -q -o hr:n:t: -l help,prefix:,namespace:,release,tag:,private-registry:,from:,to:,testmode -- "$@") - -eval set -- "$PARSED_ARGS" - -while :; do - case "$1" in - - (--help|-h) usage - exit 0 - ;; - - (--prefix) shift - FORCE_PREFIX="$1" - ;; - - (--namespace|-n) - shift - FORCE_NAMESPACE="$1" - ;; - - (--release) - RELEASE_SPECIFIED=1 - ;; - - (--tag|-t) - shift - TAG_SPECIFIED=1 - ;; - - (--private-registry|-r) - shift - REGISTRY="$1" - ;; - - (--from) - shift - FROM="$1" - ARGS=${ARGS/\-\-from*$FROM/} - ;; - - (--to) - shift - TO="$1" - ARGS=${ARGS/\-\-to*$TO/} - ;; - - (--testmode) - TESTMODE=1 - ARGS=${ARGS/\-\-testmode/} - ;; - - (--) break - ;; - - esac - - shift -done - -set_defaults - -# BASE == centos, fedora, ubuntu, etc. -BASE=$(echo "${PREFIX}" | cut -d- -f1) -# TYPE == binary, source, rdo -TYPE=$(echo "${PREFIX}" | cut -d- -f2) - -# Ensure a tag is specified otherwise build may fail when changing git branch -# The release tag is automatically appended when --release flag is used. -if [[ $RELEASE_SPECIFIED != 1 ]] && [[ $TAG_SPECIFIED != 1 ]]; then - TAG=$(git rev-parse --short HEAD) - ARGS+=" --tag $TAG" -fi - -# Do a first pass to find images to build and their dependencies -for dockerfile in $(find "${DOCKERDIR}/${BASE}/${TYPE}" -name Dockerfile); do - init_image $(dirname $dockerfile) -done - -# Process all images -for image in "${!img_dirs[@]}"; do - process_image $image -done - -print_summary -[ -n "$TESTMODE" ] && print_parseable_summary -rm -rf $WORKDIR diff --git a/tools/build-docker-image b/tools/build-docker-image deleted file mode 100755 index f7c7995e1..000000000 --- a/tools/build-docker-image +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/bash - -TOPDIR=$(git rev-parse --show-toplevel) -IMGDIR="$(cd "$(dirname "$0")" && pwd)" - -. $TOPDIR/tools/validate-docker-execute - -RELEASE_NAMESPACE=kollaglue -NAMESPACE=kollaglue -PREFIX=centos-rdo- -TAG=$(git rev-parse --short HEAD) -RELEASE_TAG=latest -MAX_TRIES=1 - -usage () { - cat <<EOF -Usage: $0 [options] - -Options: - ---prefix <image_prefix> ---private-registry, -r <registry_address[:port]> ---namespace, -n <namespace> ---tag, -t <tag> ---push, -p ---force-rm, -f ---no-cache, -N ---pull, -u ---release ---no-use-released-parent ---retry <number_of_retries> -EOF -} - -[ -f $TOPDIR/.buildconf ] && . $TOPDIR/.buildconf -[ -f $IMGDIR/.buildinfo ] && . $IMGDIR/.buildinfo -[ -f $IMGDIR/.buildconf ] && . $IMGDIR/.buildconf - -ARGS=$(getopt -o hr:n:t:pfuN -l help,prefix:,namespace:,push,pull,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent,retry: -- "$@") || { usage >&2; exit 2; } - -eval set -- "$ARGS" - -while :; do - case "$1" in - - (--help|-h) usage - exit 0 - ;; - - (--prefix) shift - FORCE_PREFIX="$1" - ;; - - (--release) MODE=release - NAMESPACE=$RELEASE_NAMESPACE - TAG=$RELEASE_TAG - ;; - - (--tag|-t) shift - TAG="$1" - ;; - - (--push|-p) PUSH=1 - ;; - - (--pull|-u) BUILDFLAGS="${BUILDFLAGS} --pull=true" - ;; - - (--force-rm|-f) - BUILDFLAGS="${BUILDFLAGS} --force-rm=true" - ;; - - (--no-cache|-N) - BUILDFLAGS="${BUILDFLAGS} --no-cache" - ;; - - (--private-registry|-r) - shift - REGISTRY="$1" - ;; - - (--namespace|-n) - shift - NAMESPACE="$1" - ;; - - (--no-use-released-parent) - USE_CURRENT_TAG=1 - ;; - - (--retry) - shift - MAX_TRIES=$((MAX_TRIES + $1)) - ;; - - (--) break - ;; - - esac - - shift -done - -if [[ $USE_CURRENT_TAG = 1 ]]; then - PARENT_TAG=$TAG -else - PARENT_TAG=$RELEASE_TAG -fi - -if [ "$NAMESPACE" = "$RELEASE_NAMESPACE" ] \ - && [ "$TAG" = "$RELEASE_TAG" ] \ - && ! [ "$MODE" = "release" ]; then - - echo "ERROR: use --release to build a release image" >&2 - exit 1 -fi - -if [[ -n "${PREFIX}" && -n "${FORCE_PREFIX}" ]]; then - PREFIX="${FORCE_PREFIX}" -fi - - -if [[ -n $REGISTRY ]]; then - NAMESPACE="${REGISTRY}/${NAMESPACE}" -fi - -IMAGE="${PREFIX}${IMGDIR##*/}" -FULLIMAGE="${NAMESPACE}/${IMAGE}${TAG:+:${TAG}}" - -cat <<EOF -====================================================================== -$FULLIMAGE -====================================================================== - -EOF - -if [ "$MODE" = "release" ]; then - echo "*** YOU ARE BUILDING A RELEASE IMAGE ***" - echo -fi - -TMPDIR=$(mktemp -d /tmp/kolla-build.XXXXXXXXXX) -cp -aL $IMGDIR/* $TMPDIR -# Use an extension for in-place editing for portability, as GNU and BSD -# versions of sed behave differently otherwise -sed -i.bak "s|%%KOLLA_NAMESPACE%%|${NAMESPACE}|g" $TMPDIR/Dockerfile -sed -i.bak "s|%%KOLLA_PREFIX%%|${PREFIX}|g" $TMPDIR/Dockerfile -sed -i.bak "s|%%KOLLA_TAG%%|${PARENT_TAG}|g" $TMPDIR/Dockerfile - -if [[ "${SOURCE_INSTALL_AVAILABLE}" == "1" ]]; then - . ${TOPDIR}/tools/gen-source-tar.sh -fi - -TRY=0 -while [ $((MAX_TRIES - 1)) -gt $TRY ]; do - if docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then - break - else - echo "WARNING: failed to build $FULLIMAGE, retrying..." - TRY=$((TRY + 1)) - fi -done - -if ! docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then - echo "ERROR: failed to build $FULLIMAGE" - exit 1 -fi - -rm -rf $TMPDIR - -echo "Built: $FULLIMAGE" - -if [ "$PUSH" = 1 ]; then - if ! docker push "$FULLIMAGE"; then - echo "ERROR: failed to push $FULLIMAGE" - exit 1 - fi - - echo "Pushed: $FULLIMAGE" -fi diff --git a/tools/gen-source-tar.sh b/tools/gen-source-tar.sh deleted file mode 100644 index 6f3a6eb20..000000000 --- a/tools/gen-source-tar.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -set -e - -: ${SOURCE_INSTALL_METHOD:=curl} -: ${GIT_REF:=master} -: ${LOCAL_SOURCE:=/tmp/${COMPONENT}} - -function fetch_source_from_uri { - curl ${TARBALL_URI} -o ${TMPDIR}/${COMPONENT}.tar -} - -function fetch_source_from_git { - # NOTE(pbourke): do a shallow clone to master only, unless a specific ref is - # required - if [ -z ${GIT_REF} ]; then - git clone --depth=1 ${CLONE_FROM} ${TMPDIR}/${COMPONENT} - else - git clone ${CLONE_FROM} ${TMPDIR}/${COMPONENT} - git --git-dir ${TMPDIR}/${COMPONENT}/.git \ - --work-tree ${TMPDIR}/${COMPONENT}/ \ - checkout ${GIT_REF} - fi - tar -cf ${TMPDIR}/${COMPONENT}.tar -C ${TMPDIR} ${COMPONENT} -} - -function fetch_source_from_local { - tar -cf ${TMPDIR}/${COMPONENT}.tar \ - -C $(dirname ${LOCAL_SOURCE}) ${COMPONENT} -} - -case ${SOURCE_INSTALL_METHOD} in - curl) - fetch_source_from_uri - ;; - git) - fetch_source_from_git - ;; - local) - fetch_source_from_local - ;; - *) - cat << EOF -Unknown install method '${SOURCE_INSTALL_METHOD}'. Please check the value of -\$SOURCE_INSTALL_METHOD in .buildconf -EOF - exit 1 - ;; -esac diff --git a/tools/update-build-links b/tools/update-build-links deleted file mode 100755 index 76c4df3ef..000000000 --- a/tools/update-build-links +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") -cd "$(dirname "$REAL_PATH")/.." - -find docker -name Dockerfile | while read dockerfile; do - dir=${dockerfile%/*} - link=$(python -c 'import os,sys; print os.path.relpath(sys.argv[1], sys.argv[2])' \ - $PWD/tools/build-docker-image $dir) - ln -sf $link $dir/build -done - diff --git a/tools/validate-links.sh b/tools/validate-links.sh deleted file mode 100755 index 671120dd5..000000000 --- a/tools/validate-links.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") -cd "$(dirname "$REAL_PATH")/.." - -if find . -type l -exec test ! -e {} \; -print | egrep '.*'; then - exit 1 -fi |
