HBASE-19420 Backport HBASE-19152 Update refguide 'how to build an RC' and the make_rc.sh script
Removes src.xml used building src tgz via hbase-assembly. Use git archive instead going forward. Updates developer release candidate documentation and the make_rc.sh script. Slight modifications to developer.adoc for branch-1 Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/1dba475d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1dba475d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1dba475d Branch: refs/heads/branch-1.4 Commit: 1dba475da6dbba5c04ca34ba906732368bfa7090 Parents: 5f58e61 Author: Andrew Purtell <apurt...@apache.org> Authored: Mon Dec 4 12:17:15 2017 -0800 Committer: Andrew Purtell <apurt...@apache.org> Committed: Mon Dec 4 18:41:11 2017 -0800 ---------------------------------------------------------------------- dev-support/make_rc.sh | 97 +- hbase-assembly/src/main/assembly/src.xml | 136 --- src/main/asciidoc/_chapters/developer.adoc | 1168 +++++++++++++---------- 3 files changed, 751 insertions(+), 650 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/1dba475d/dev-support/make_rc.sh ---------------------------------------------------------------------- diff --git a/dev-support/make_rc.sh b/dev-support/make_rc.sh index b88a984..19f906f 100755 --- a/dev-support/make_rc.sh +++ b/dev-support/make_rc.sh @@ -28,8 +28,17 @@ set -e -devsupport=`dirname "$0"` -devsupport=`cd "$devsupport">/dev/null; pwd` +# Script checks out a tag, cleans the checkout and then builds src and bin +# tarballs. It then deploys to the apache maven repository. +# Presumes run from git dir. + +# Need a git tag to build. +if [ "$1" = "" ] +then + echo -n "Usage: $0 TAG_TO_PACKAGE" + exit 1 +fi +git_tag=$1 # Set mvn and mvnopts mvn=mvn @@ -41,45 +50,67 @@ if [ "$MAVEN_OPTS" != "" ]; then mvnopts="${MAVEN_OPTS}" fi -# Make a dir to save tgzs in. +# Ensure we are inside a git repo before making progress +# The below will fail if outside git. +git -C . rev-parse + +# Checkout git_tag +git checkout "${git_tag}" + +# Get mvn protject version +#shellcheck disable=SC2016 +version=$(${mvn} -q -N -Dexec.executable="echo" -Dexec.args='${project.version}' exec:exec) +hbase_name="hbase-${version}" + +# Make a dir to save tgzs into. d=`date -u +"%Y%m%dT%H%M%SZ"` -archivedir="$(pwd)/../`basename $0`.$d" -echo "Archive dir ${archivedir}" -mkdir -p "${archivedir}" +output_dir="/${TMPDIR}/$hbase_name.$d" +mkdir -p "${output_dir}" + -function tgz_mover { - mv ./hbase-assembly/target/hbase-*.tar.gz "${archivedir}" +# Build src tgz. +function build_src { + git archive --format=tar.gz --output="${output_dir}/${hbase_name}-src.tar.gz" --prefix="${hbase_name}/" "${git_tag}" } -function deploy { - MAVEN_OPTS="${mvnopts}" ${mvn} clean install -DskipTests -Prelease \ - -Dmaven.repo.local=${archivedir}/repository - MAVEN_OPTS="${mvnopts}" ${mvn} install -DskipTests post-site assembly:single -Prelease \ - -Dmaven.repo.local=${archivedir}/repository - tgz_mover - MAVEN_OPTS="${mvnopts}" ${mvn} deploy -DskipTests -Papache-release -Prelease \ - -Dmaven.repo.local=${archivedir}/repository +# Build bin tgz +function build_bin { + MAVEN_OPTS="${mvnopts}" ${mvn} clean install -DskipTests -Papache-release -Prelease \ + -Dmaven.repo.local=${output_dir}/repository + MAVEN_OPTS="${mvnopts}" ${mvn} install -DskipTests site assembly:single -Papache-release -Prelease \ + -Dmaven.repo.local=${output_dir}/repository + mv ./hbase-assembly/target/hbase-*.tar.gz "${output_dir}" } -# Build src tarball -# run clean separate from assembly:single because it fails to clean shaded modules correctly +# Make sure all clean. +git clean -f -x -d MAVEN_OPTS="${mvnopts}" ${mvn} clean -MAVEN_OPTS="${mvnopts}" ${mvn} install -DskipTests assembly:single \ - -Dassembly.file="$(pwd)/hbase-assembly/src/main/assembly/src.xml" \ - -Prelease -Dmaven.repo.local=${archivedir}/repository - -tgz_mover # Now do the two builds, one for hadoop1, then hadoop2 -deploy - -echo "DONE" -echo "Check the content of ${archivedir}. If good, sign and push to dist.apache.org" -echo " cd ${archivedir}" -echo ' for i in *.tar.gz; do echo $i; gpg --print-mds $i > $i.mds ; done' -echo ' for i in *.tar.gz; do echo $i; gpg --print-md MD5 $i > $i.md5 ; done' -echo ' for i in *.tar.gz; do echo $i; gpg --print-md SHA512 $i > $i.sha ; done' +# Run a rat check. +${mvn} apache-rat:check + +#Build src. +build_src + +# Build bin product +build_bin + +# Deploy to mvn repository +# Depends on build_bin having populated the local repository +# If the below upload fails, you will probably have to clean the partial +# upload from repository.apache.org by 'drop'ping it from the staging +# repository before restart. +MAVEN_OPTS="${mvnopts}" ${mvn} deploy -DskipTests -Papache-release -Prelease \ + -Dmaven.repo.local=${output_dir}/repository + +# Do sha1 and md5 +cd ${output_dir} +for i in *.tar.gz; do echo $i; gpg --print-md SHA512 $i > $i.sha ; done +for i in *.tar.gz; do echo $i; gpg --print-md MD5 $i > $i.md5 ; done + +echo "Check the content of ${output_dir}. If good, sign and push to dist.apache.org" +echo " cd ${output_dir}" echo ' for i in *.tar.gz; do echo $i; gpg --armor --output $i.asc --detach-sig $i ; done' -echo ' rsync -av ${archivedir}/*.gz ${archivedir}/*.mds ${archivedir}/*.asc ~/repos/dist-dev/hbase-VERSION/' +echo ' rsync -av ${output_dir}/*.gz ${output_dir}/*.md5 ${output_dir}/*.sha ${output_dir}/*.asc ${APACHE_HBASE_DIST_DEV_DIR}/${hbase_name}/' echo "Check the content deployed to maven. If good, close the repo and record links of temporary staging repo" -echo "If all good tag the RC" http://git-wip-us.apache.org/repos/asf/hbase/blob/1dba475d/hbase-assembly/src/main/assembly/src.xml ---------------------------------------------------------------------- diff --git a/hbase-assembly/src/main/assembly/src.xml b/hbase-assembly/src/main/assembly/src.xml deleted file mode 100644 index b13967e..0000000 --- a/hbase-assembly/src/main/assembly/src.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0"?> -<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd"> -<!-- -/** - * 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. - */ ---> - - <!--Copies over all you need to build hbase--> - <id>src</id> - <formats> - <format>tar.gz</format> - </formats> - <moduleSets> - <moduleSet> - <!-- Enable access to all projects in the current multimodule build. Eclipse - says this is an error, but builds from the command line just fine. --> - <useAllReactorProjects>true</useAllReactorProjects> - <includes> - <include>org.apache.hbase:hbase-annotations</include> - <include>org.apache.hbase:hbase-archetypes</include> - <include>org.apache.hbase:hbase-assembly</include> - <include>org.apache.hbase:hbase-checkstyle</include> - <include>org.apache.hbase:hbase-client</include> - <include>org.apache.hbase:hbase-common</include> - <include>org.apache.hbase:hbase-examples</include> - <include>org.apache.hbase:hbase-external-blockcache</include> - <include>org.apache.hbase:hbase-hadoop2-compat</include> - <include>org.apache.hbase:hbase-hadoop-compat</include> - <include>org.apache.hbase:hbase-it</include> - <include>org.apache.hbase:hbase-prefix-tree</include> - <include>org.apache.hbase:hbase-procedure</include> - <include>org.apache.hbase:hbase-protocol</include> - <include>org.apache.hbase:hbase-rest</include> - <include>org.apache.hbase:hbase-resource-bundle</include> - <include>org.apache.hbase:hbase-server</include> - <include>org.apache.hbase:hbase-shaded</include> - <include>org.apache.hbase:hbase-shell</include> - <include>org.apache.hbase:hbase-testing-util</include> - <include>org.apache.hbase:hbase-thrift</include> - </includes> - <!-- Include all the sources in the top directory --> - <sources> - <excludeSubModuleDirectories>false</excludeSubModuleDirectories> - <fileSets> - <fileSet> - <includes> - <include>**</include> - </includes> - <!--Make sure this excludes is same as the hbase-hadoop2-compat - excludes below--> - <excludes> - <exclude>target/</exclude> - <exclude>test/</exclude> - <exclude>.classpath</exclude> - <exclude>.project</exclude> - <exclude>.settings/</exclude> - </excludes> - </fileSet> - </fileSets> - </sources> - </moduleSet> - </moduleSets> - <fileSets> - <!--This one is weird. When we assemble src, it'll be default profile which - at the moment is hadoop1. But we should include the hadoop2 compat module - too so can build hadoop2 from src --> - <fileSet> - <directory>${project.basedir}/../hbase-hadoop2-compat</directory> - <outputDirectory>hbase-hadoop2-compat</outputDirectory> - <fileMode>0644</fileMode> - <directoryMode>0755</directoryMode> - <excludes> - <exclude>target/</exclude> - <exclude>test/</exclude> - <exclude>.classpath</exclude> - <exclude>.project</exclude> - <exclude>.settings/</exclude> - </excludes> - </fileSet> - <!--Include dev tools--> - <fileSet> - <directory>${project.basedir}/../dev-support</directory> - <outputDirectory>dev-support</outputDirectory> - <fileMode>0644</fileMode> - <directoryMode>0755</directoryMode> - </fileSet> - <fileSet> - <directory>${project.basedir}/../src</directory> - <outputDirectory>src</outputDirectory> - <fileMode>0644</fileMode> - <directoryMode>0755</directoryMode> - </fileSet> - <!-- Include the top level conf directory --> - <fileSet> - <directory>${project.basedir}/../conf</directory> - <outputDirectory>conf</outputDirectory> - <fileMode>0644</fileMode> - <directoryMode>0755</directoryMode> - </fileSet> - <!-- Include top level bin directory --> - <fileSet> - <directory>${project.basedir}/../bin</directory> - <outputDirectory>bin</outputDirectory> - <fileMode>0755</fileMode> - <directoryMode>0755</directoryMode> - </fileSet> - <fileSet> - <directory>${project.basedir}/..</directory> - <outputDirectory>.</outputDirectory> - <includes> - <include>pom.xml</include> - <include>LICENSE.txt</include> - <include>NOTICE.txt</include> - <include>CHANGES.txt</include> - <include>README.txt</include> - <include>.pylintrc</include> - </includes> - <fileMode>0644</fileMode> - </fileSet> -</fileSets> -</assembly>