diff options
Diffstat (limited to 'hack')
| -rwxr-xr-x | hack/build-images.sh | 26 | ||||
| -rw-r--r-- | hack/hooks/README.md | 37 | ||||
| -rw-r--r-- | hack/hooks/verify_generated_modules/README.md | 19 | ||||
| -rwxr-xr-x | hack/hooks/verify_generated_modules/pre-commit | 55 | ||||
| -rwxr-xr-x | hack/push-release.sh | 56 | 
5 files changed, 149 insertions, 44 deletions
diff --git a/hack/build-images.sh b/hack/build-images.sh index f6210e239..6e6d360bf 100755 --- a/hack/build-images.sh +++ b/hack/build-images.sh @@ -7,10 +7,10 @@ set -o pipefail  STARTTIME=$(date +%s)  source_root=$(dirname "${0}")/.. -prefix="openshift/openshift-ansible" +prefix="openshift/origin-ansible"  version="latest"  verbose=false -options="" +options="-f images/installer/Dockerfile"  help=false  for args in "$@" @@ -44,10 +44,10 @@ if [ "$help" = true ]; then    echo "Options: "    echo "  --prefix=PREFIX"    echo "  The prefix to use for the image names." -  echo "  default: openshift/openshift-ansible" +  echo "  default: openshift/origin-ansible"    echo    echo "  --version=VERSION" -  echo "  The version used to tag the image" +  echo "  The version used to tag the image (can be a comma-separated list)"    echo "  default: latest"    echo     echo "  --no-cache" @@ -62,25 +62,33 @@ if [ "$help" = true ]; then    exit 0  fi +  if [ "$verbose" = true ]; then    set -x  fi  BUILD_STARTTIME=$(date +%s)  comp_path=$source_root/ -docker_tag=${prefix}:${version} + +# turn comma-separated versions into -t args for docker build +IFS=',' read -r -a version_arr <<< "$version" +docker_tags=() +for tag in "${version_arr[@]}"; do +  docker_tags+=("-t" "${prefix}:${tag}") +done +  echo  echo -echo "--- Building component '$comp_path' with docker tag '$docker_tag' ---" -docker build ${options} -t $docker_tag $comp_path -BUILD_ENDTIME=$(date +%s); echo "--- $docker_tag took $(($BUILD_ENDTIME - $BUILD_STARTTIME)) seconds ---" +echo "--- Building component '$comp_path' with docker tag(s) '$version' ---" +docker build ${options} "${docker_tags[@]}" $comp_path +BUILD_ENDTIME=$(date +%s); echo "--- ${version} took $(($BUILD_ENDTIME - $BUILD_STARTTIME)) seconds ---"  echo  echo  echo  echo  echo "++ Active images" -docker images | grep ${prefix} | grep ${version} | sort +docker images | grep ${prefix} | sort  echo diff --git a/hack/hooks/README.md b/hack/hooks/README.md new file mode 100644 index 000000000..ef870540a --- /dev/null +++ b/hack/hooks/README.md @@ -0,0 +1,37 @@ +# OpenShift-Ansible Git Hooks + +## Introduction + +This `hack` sub-directory holds +[git commit hooks](https://www.atlassian.com/git/tutorials/git-hooks#conceptual-overview) +you may use when working on openshift-ansible contributions. See the +README in each sub-directory for an overview of what each hook does +and if the hook has any specific usage or setup instructions. + +## Usage + +Basic git hook usage is simple: + +1) Copy (or symbolic link) the hook to the `$REPO_ROOT/.git/hooks/` directory +2) Make the hook executable (`chmod +x $PATH_TO_HOOK`) + +## Multiple Hooks of the Same Type + +If you want to install multiple hooks of the same type, for example: +multiple `pre-commit` hooks, you will need some kind of *hook +dispatcher*. For an example of an easy to use hook dispatcher check +out this gist by carlos-jenkins: + +* [multihooks.py](https://gist.github.com/carlos-jenkins/89da9dcf9e0d528ac978311938aade43) + +## Contributing Hooks + +If you want to contribute a new hook there are only a few criteria +that must be met: + +* The hook **MUST** include a README describing the purpose of the hook +* The README **MUST** describe special setup instructions if they are required +* The hook **MUST** be in a sub-directory of this directory +* The hook file **MUST** be named following the standard git hook +  naming pattern (i.e., pre-commit hooks **MUST** be called +  `pre-commit`) diff --git a/hack/hooks/verify_generated_modules/README.md b/hack/hooks/verify_generated_modules/README.md new file mode 100644 index 000000000..093fcf76a --- /dev/null +++ b/hack/hooks/verify_generated_modules/README.md @@ -0,0 +1,19 @@ +# Verify Generated Modules + +Pre-commit hook for verifying that generated library modules match +their EXPECTED content. Library modules are generated from fragments +under the `roles/lib_(openshift|utils)/src/` directories. + +If the attempted commit modified files under the +`roles/lib_(openshift|utils)/` directories this script will run the +`generate.py --verify` command. + +This script will **NOT RUN** if module source fragments are modified +but *not part of the commit*. I.e., you can still make commits if you +modified module fragments AND other files but are *not comitting the +the module fragments*. + +# Setup Instructions + +Standard installation procedure. Copy the hook to the `.git/hooks/` +directory and ensure it is executable. diff --git a/hack/hooks/verify_generated_modules/pre-commit b/hack/hooks/verify_generated_modules/pre-commit new file mode 100755 index 000000000..8a319fd7e --- /dev/null +++ b/hack/hooks/verify_generated_modules/pre-commit @@ -0,0 +1,55 @@ +#!/bin/sh + +###################################################################### +# Pre-commit hook for verifying that generated library modules match +# their EXPECTED content. Library modules are generated from fragments +# under the 'roles/lib_(openshift|utils)/src/' directories. +# +# If the attempted commit modified files under the +# 'roles/lib_(openshift|utils)/' directories this script will run the +# 'generate.py --verify' command. +# +# This script will NOT RUN if module source fragments are modified but +# not part of the commit. I.e., you can still make commits if you +# modified module fragments AND other files but are not comitting the +# the module fragments. + +# Did the commit modify any source module files? +CHANGES=`git diff-index --stat --cached HEAD | grep -E '^ roles/lib_(openshift|utils)/src/(class|doc|ansible|lib)/'` +RET_CODE=$? +ABORT=0 + +if [ "${RET_CODE}" -eq "0" ]; then +    # Modifications detected. Run the verification scripts. + +    # Which was it? +    if $(echo $CHANGES | grep -q 'roles/lib_openshift/'); then +	echo "Validating lib_openshift..." +	./roles/lib_openshift/src/generate.py --verify +	if [ "${?}" -ne "0" ]; then +	    ABORT=1 +	fi +    fi + +    if $(echo $CHANGES | grep -q 'roles/lib_utils/'); then +	echo "Validating lib_utils..." +	./roles/lib_utils/src/generate.py --verify +	if [ "${?}" -ne "0" ]; then +	    ABORT=1 +	fi +    fi + +    if [ "${ABORT}" -eq "1" ]; then +	cat <<EOF + +ERROR: Module verification failed. Generated files do not match fragments. + +Choices to continue: +  1) Run './roles/lib_(openshift|utils)/src/generate.py' from the root of +     the repo to regenerate the files +  2) Skip verification with '--no-verify' option to 'git commit' +EOF +    fi +fi + +exit $ABORT diff --git a/hack/push-release.sh b/hack/push-release.sh index 8639143af..1f41ab179 100755 --- a/hack/push-release.sh +++ b/hack/push-release.sh @@ -1,55 +1,41 @@  #!/bin/bash -# This script pushes all of the built images to a registry. +# This script pushes a built image to a registry.  # -# Set OS_PUSH_BASE_REGISTRY to prefix the destination images +# Set OS_PUSH_BASE_REGISTRY to prefix the destination images e.g. +# OS_PUSH_BASE_REGISTRY="docker.io/"  # +# Set OS_PUSH_TAG with a comma-separated list for pushing same image +# to multiple tags e.g. +# OS_PUSH_TAG="latest,v3.6"  set -o errexit  set -o nounset  set -o pipefail -STARTTIME=$(date +%s) -OS_ROOT=$(dirname "${BASH_SOURCE}")/.. +starttime=$(date +%s) -PREFIX="${PREFIX:-openshift/openshift-ansible}" +# image name without repo or tag. +image="${PREFIX:-openshift/origin-ansible}" -# Go to the top of the tree. -cd "${OS_ROOT}" +# existing local tag on the image we want to push +source_tag="${OS_TAG:-latest}" -# Allow a release to be repushed with a tag -tag="${OS_PUSH_TAG:-}" -if [[ -n "${tag}" ]]; then -  tag=":${tag}" -else -  tag=":latest" -fi - -# Source tag -source_tag="${OS_TAG:-}" -if [[ -z "${source_tag}" ]]; then -  source_tag="latest" -fi - -images=( -  ${PREFIX} -) +# Enable retagging a build with one or more tags for push +IFS=',' read -r -a push_tags <<< "${OS_PUSH_TAG:-latest}" +registry="${OS_PUSH_BASE_REGISTRY:-}" +# force push if available  PUSH_OPTS=""  if docker push --help | grep -q force; then    PUSH_OPTS="--force"  fi -if [[ "${OS_PUSH_BASE_REGISTRY-}" != "" || "${tag}" != "" ]]; then -  set -e -  for image in "${images[@]}"; do -    docker tag "${image}:${source_tag}" "${OS_PUSH_BASE_REGISTRY-}${image}${tag}" -  done -  set +e -fi - -for image in "${images[@]}"; do -  docker push ${PUSH_OPTS} "${OS_PUSH_BASE_REGISTRY-}${image}${tag}" +set -x +for tag in "${push_tags[@]}"; do +  docker tag "${image}:${source_tag}" "${registry}${image}:${tag}" +  docker push ${PUSH_OPTS} "${registry}${image}:${tag}"  done +set +x -ret=$?; ENDTIME=$(date +%s); echo "$0 took $(($ENDTIME - $STARTTIME)) seconds"; exit "$ret" +endtime=$(date +%s); echo "$0 took $(($endtime - $starttime)) seconds"; exit 0  | 
