#!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # Creates a HBase release candidate. The script will update versions, tag the branch, # build HBase binary packages and documentation, and upload maven artifacts to a staging # repository. There is also a dry run mode where only local builds are performed, and # nothing is uploaded to the ASF repos. # # Run with "-h" for options. For example, running below will do all # steps above using the 'rm' dir under Downloads as workspace: # # $ ./do-release-docker.sh -d ~/Downloads/rm # # The scripts in this directory came originally from spark [1]. They were then # modified to suite the hbase context. These scripts supercedes the old # ../make_rc.sh script for making release candidates because what is here is more # comprehensive doing more steps of the RM process as well as running in a # container so the RM build environment can be a constant. # # It: # * Tags release # * Sets version to the release version # * Sets version to next SNAPSHOT version. # * Builds, signs, and hashes all artifacts. # * Pushes release tgzs to the dev dir in a apache dist. # * Pushes to repository.apache.org staging. # # The entry point is here, in the do-release-docker.sh script. # # 1. https://github.com/apache/spark/tree/master/dev/create-release # set -e # Set this to build other hbase repos: e.g. PROJECT=hbase-operator-tools export PROJECT="${PROJECT:-hbase}" SELF="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=SCRIPTDIR/release-util.sh . "$SELF/release-util.sh" function usage { local NAME NAME="$(basename "${BASH_SOURCE[0]}")" cat < 0 )); then error "Arguments can only be provided with option flags, invalid args: $*" fi if [ -z "$WORKDIR" ] || [ ! -d "$WORKDIR" ]; then error "Work directory (-d) must be defined and exist. Run with -h for help." fi if [ -d "$WORKDIR/output" ]; then read -r -p "Output directory already exists. Overwrite and continue? [y/n] " ANSWER if [ "$ANSWER" != "y" ]; then error "Exiting." fi fi cd "$WORKDIR" rm -rf "$WORKDIR/output" mkdir "$WORKDIR/output" get_release_info # Place all RM scripts and necessary data in a local directory that must be defined in the command # line. This directory is mounted into the image. Its WORKDIR, the arg passed with -d. for f in "$SELF"/*; do if [ -f "$f" ]; then cp "$f" "$WORKDIR" fi done GPG_KEY_FILE="$WORKDIR/gpg.key" fcreate_secure "$GPG_KEY_FILE" $GPG --passphrase "$GPG_PASSPHRASE" --export-secret-key --armor "$GPG_KEY" > "$GPG_KEY_FILE" run_silent "Building hbase-rm image with tag $IMGTAG..." "docker-build.log" \ docker build -t "hbase-rm:$IMGTAG" --build-arg UID=$UID "$SELF/hbase-rm" # Write the release information to a file with environment variables to be used when running the # image. ENVFILE="$WORKDIR/env.list" fcreate_secure "$ENVFILE" function cleanup { rm -f "$ENVFILE" rm -f "$GPG_KEY_FILE" } trap cleanup EXIT cat > "$ENVFILE" <> "$ENVFILE" JAVA_VOL=(--volume "$JAVA:/opt/hbase-java") fi echo "Building $RELEASE_TAG; output will be at $WORKDIR/output" cmd=(docker run -ti \ --env-file "$ENVFILE" \ --volume "$WORKDIR:/opt/hbase-rm" \ "${JAVA_VOL[@]}" \ "hbase-rm:$IMGTAG") echo "${cmd[*]}" "${cmd[@]}"