github.com/kjdelisle/consul@v1.4.5/build-support/scripts/build-docker.sh (about)

     1  #!/bin/bash
     2  SCRIPT_NAME="$(basename ${BASH_SOURCE[0]})"
     3  pushd $(dirname ${BASH_SOURCE[0]}) > /dev/null
     4  SCRIPT_DIR=$(pwd)
     5  pushd ../.. > /dev/null
     6  SOURCE_DIR=$(pwd)
     7  popd > /dev/null
     8  pushd ../functions > /dev/null
     9  FN_DIR=$(pwd)
    10  popd > /dev/null
    11  popd > /dev/null
    12  
    13  source "${SCRIPT_DIR}/functions.sh"
    14  
    15  function usage {
    16  cat <<-EOF
    17  Usage: ${SCRIPT_NAME} (consul|ui|ui-legacy|static-assets) [<options ...>]
    18  
    19  Description:
    20     This script will build the various Consul components within docker containers
    21     and copy all the relevant artifacts out of the containers back to the source.
    22  
    23  Options:
    24     -i | --image      IMAGE       Alternative Docker image to run the build within.
    25                                 
    26     -s | --source     DIR         Path to source to build.
    27                                   Defaults to "${SOURCE_DIR}"
    28                                   
    29     -r | --refresh                Enables refreshing the docker image prior to building.
    30     
    31     -h | --help                   Print this help text.
    32  EOF
    33  }
    34  
    35  function err_usage {
    36     err "$1"
    37     err ""
    38     err "$(usage)"
    39  }
    40  
    41  function main {
    42     declare    image=
    43     declare    sdir="${SOURCE_DIR}"
    44     declare -i refresh=0
    45     declare    command=""
    46     
    47     while test $# -gt 0
    48     do
    49        case "$1" in
    50           -h | --help )
    51              usage
    52              return 0
    53              ;;
    54           -i | --image )
    55              if test -z "$2"
    56              then
    57                 err_usage "ERROR: option -i/--image requires an argument"
    58                 return 1
    59              fi
    60              
    61              image="$2"
    62              shift 2
    63              ;;
    64           -s | --source )
    65              if test -z "$2"
    66              then
    67                 err_usage "ERROR: option -s/--source requires an argument"
    68                 return 1
    69              fi
    70              
    71              if ! test -d "$2"
    72              then
    73                 err_usage "ERROR: '$2' is not a directory and not suitable for the value of -s/--source"
    74                 return 1
    75              fi
    76              
    77              sdir="$2"
    78              shift 2
    79              ;;
    80           -r | --refresh )
    81              refresh=1
    82              shift
    83              ;;
    84           consul | ui | ui-legacy | static-assets )
    85              command="$1"
    86              shift
    87              ;;
    88           * )
    89              err_usage "ERROR: Unknown argument '$1'"
    90              return 1
    91              ;;
    92        esac
    93     done
    94     
    95     if test -z "${command}"
    96     then
    97        err_usage "ERROR: No command specified"
    98        return 1
    99     fi
   100     
   101     case "${command}" in 
   102        consul )
   103           if is_set "${refresh}"
   104           then
   105              status_stage "==> Refreshing Consul build container image"
   106              export GO_BUILD_TAG="${image:-${GO_BUILD_CONTAINER_DEFAULT}}"
   107              refresh_docker_images "${sdir}" go-build-image || return 1
   108           fi
   109           status_stage "==> Building Consul"
   110           build_consul "${sdir}" "" "${image}" || return 1
   111           ;;
   112        static-assets )
   113           if is_set "${refresh}"
   114           then
   115              status_stage "==> Refreshing Consul build container image"
   116              export GO_BUILD_TAG="${image:-${GO_BUILD_CONTAINER_DEFAULT}}"
   117              refresh_docker_images "${sdir}" go-build-image || return 1
   118           fi
   119           status_stage "==> Building Static Assets"
   120           build_assetfs "${sdir}" "${image}" || return 1
   121           ;;
   122        ui )
   123           if is_set "${refresh}"
   124           then
   125              status_stage "==> Refreshing UI build container image"
   126              export UI_BUILD_TAG="${image:-${UI_BUILD_CONTAINER_DEFAULT}}"
   127              refresh_docker_images "${sdir}" ui-build-image || return 1
   128           fi
   129           status_stage "==> Building UI"
   130           build_ui "${sdir}" "${image}" || return 1
   131           status "==> UI Built with Version: $(ui_version ${sdir}/pkg/web_ui/v2/index.html), Logo: $(ui_logo_type ${sdir}/pkg/web_ui/v2/index.html)"
   132           ;;
   133        ui-legacy )
   134           if is_set "${refresh}"
   135           then
   136              status_stage "==> Refreshing Legacy UI build container image"
   137              export UI_LEGACY_BUILD_TAG="${image:-${UI_LEGACY_BUILD_CONTAINER_DEFAULT}}"
   138              refresh_docker_images "${sdir}" ui-legacy-build-image || return 1
   139           fi
   140           status_stage "==> Building UI"
   141           build_ui_legacy "${sdir}" "${image}" || return 1
   142           ;;
   143        * )
   144           err_usage "ERROR: Unknown command: '${command}'"
   145           return 1
   146           ;;
   147     esac
   148     
   149     return 0
   150  }
   151  
   152  main "$@"
   153  exit $?