Skip to content

Commit

Permalink
chore(dist): improve validate-release.sh (#329)
Browse files Browse the repository at this point in the history

---------

Co-authored-by: imbajin <jin@apache.org>
  • Loading branch information
javeme and imbajin authored Mar 11, 2024
1 parent 0f574cf commit e2e0ffb
Showing 1 changed file with 90 additions and 82 deletions.
172 changes: 90 additions & 82 deletions dist/validate-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,45 @@
# 3. Compile the source package & run server & toolchain
# 4. Run server & toolchain in binary package

URL_PREFIX="https://dist.apache.org/repos/dist/dev/incubator/hugegraph/"
# if we don't want to exit after '|', remove "-o pipefail"
set -euxo pipefail

# release version (input by committer)
RELEASE_VERSION=$1
JAVA_VERSION=$2
RELEASE_VERSION=$1 # like 1.2.0
JAVA_VERSION=$2 # like 11
USER=$3

# this URL is only valid during the release process
SVN_URL_PREFIX="https://dist.apache.org/repos/dist/dev/incubator/hugegraph"

# git release branch (check it carefully)
#GIT_BRANCH="release-${RELEASE_VERSION}"

RELEASE_VERSION=${RELEASE_VERSION:?"Please input the release version behind script"}
RELEASE_VERSION=${RELEASE_VERSION:?"Please input the release version, like 1.2.0"}
USER=${USER:-"imbajin"}
WORK_DIR=$(
cd "$(dirname "$0")" || exit
cd "$(dirname "$0")"
pwd
)

cd "${WORK_DIR}" || exit
cd "${WORK_DIR}"
echo "Current work dir: $(pwd)"

################################
# Step 1: Download SVN Sources #
################################
rm -rf "$WORK_DIR"/dist/"$RELEASE_VERSION"
svn co ${URL_PREFIX}/"$RELEASE_VERSION" "$WORK_DIR"/dist/"$RELEASE_VERSION"
rm -rf "${WORK_DIR}/dist/${RELEASE_VERSION}"
mkdir -p "${WORK_DIR}/dist/${RELEASE_VERSION}"
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"
svn co "${SVN_URL_PREFIX}/${RELEASE_VERSION}" .

##################################################
# Step 2: Check Environment & Import Public Keys #
##################################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
shasum --version 1>/dev/null
gpg --version 1>/dev/null

shasum --version 1>/dev/null || exit
gpg --version 1>/dev/null || exit

wget https://downloads.apache.org/incubator/hugegraph/KEYS || exit
wget https://downloads.apache.org/incubator/hugegraph/KEYS
echo "Import KEYS:" && gpg --import KEYS
# TODO: how to trust all public keys in gpg list, currently only trust the first one
echo -e "5\ny\n" | gpg --batch --command-fd 0 --edit-key $USER trust
Expand All @@ -65,18 +72,18 @@ done
########################################
# Step 3: Check SHA512 & GPG Signature #
########################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

for i in *.tar.gz; do
echo "$i"
shasum -a 512 --check "$i".sha512 || exit
eval gpg "${GPG_OPT}" --verify "$i".asc "$i" || exit
shasum -a 512 --check "$i".sha512
eval gpg "${GPG_OPT}" --verify "$i".asc "$i"
done

####################################
# Step 4: Validate Source Packages #
####################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

CATEGORY_X="\bGPL|\bLGPL|Sleepycat License|BSD-4-Clause|\bBCL\b|JSR-275|Amazon Software License|\bRSAL\b|\bQPL\b|\bSSPL|\bCPOL|\bNPL1|Creative Commons Non-Commercial"
CATEGORY_B="\bCDDL1|\bCPL|\bEPL|\bIPL|\bMPL|\bSPL|OSL-3.0|UnRAR License|Erlang Public License|\bOFL\b|Ubuntu Font License Version 1.0|IPA Font License Agreement v1.0|EPL2.0|CC-BY"
Expand All @@ -89,9 +96,10 @@ for i in *src.tar.gz; do
echo "The package name $i should include incubating" && exit 1
fi

tar xzvf "$i" || exit
pushd "$(basename "$i" .tar.gz)" || exit
echo "Start to check the package content: $(basename "$i" .tar.gz)"
tar -xzvf "$i"
MODULE_DIR=$(basename "$i" .tar.gz)
pushd ${MODULE_DIR}
echo "Start to check the package content: ${MODULE_DIR}"

# 4.2: check the directory include "NOTICE" and "LICENSE" file and "DISCLAIMER" file
if [[ ! -f "LICENSE" ]]; then
Expand Down Expand Up @@ -147,68 +155,68 @@ for i in *src.tar.gz; do
# 4.8: test compile the packages
if [[ $JAVA_VERSION == 8 && "$i" =~ "computer" ]]; then
echo "skip computer module in java8"
popd || exit
popd
continue
fi
# TODO: consider using commands that are entirely consistent with building binary packages
mvn package -DskipTests -Papache-release -ntp -e || exit
mvn package -DskipTests -Papache-release -ntp -e
ls -lh

popd || exit
popd
done

###########################################
# Step 5: Run Compiled Packages In Server #
# Step 5: Run Compiled Packages of Server #
###########################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

ls -lh
pushd ./*hugegraph-incubating*src/hugegraph-server/*hugegraph*"${RELEASE_VERSION}" || exit
bin/init-store.sh || exit
pushd ./*hugegraph-incubating*src/hugegraph-server/*hugegraph*"${RELEASE_VERSION}"
bin/init-store.sh
sleep 3
bin/start-hugegraph.sh || exit
popd || exit
bin/start-hugegraph.sh
popd

#######################################################################
# Step 6: Run Compiled Packages In ToolChain (Loader & Tool & Hubble) #
# Step 6: Run Compiled Packages of ToolChain (Loader & Tool & Hubble) #
#######################################################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

pushd ./*toolchain*src || exit
pushd ./*toolchain*src
ls -lh
pushd ./*toolchain*"${RELEASE_VERSION}" || exit
pushd ./*toolchain*"${RELEASE_VERSION}"
ls -lh

# 6.1: load some data first
echo "test loader"
pushd ./*loader*"${RELEASE_VERSION}" || exit
pushd ./*loader*"${RELEASE_VERSION}"
bin/hugegraph-loader.sh -f ./example/file/struct.json -s ./example/file/schema.groovy \
-g hugegraph || exit
popd || exit
-g hugegraph
popd

# 6.2: try some gremlin query & api in tool
echo "test tool"
pushd ./*tool*"${RELEASE_VERSION}" || exit
bin/hugegraph gremlin-execute --script 'g.V().count()' || exit
bin/hugegraph task-list || exit
bin/hugegraph backup -t all --directory ./backup-test || exit
popd || exit
pushd ./*tool*"${RELEASE_VERSION}"
bin/hugegraph gremlin-execute --script 'g.V().count()'
bin/hugegraph task-list
bin/hugegraph backup -t all --directory ./backup-test
popd

# 6.3: start hubble and connect to server
echo "test hubble"
pushd ./*hubble*"${RELEASE_VERSION}" || exit
pushd ./*hubble*"${RELEASE_VERSION}"
# TODO: add hubble doc & test it
cat conf/hugegraph-hubble.properties
bin/start-hubble.sh || exit
bin/stop-hubble.sh || exit
popd || exit
bin/start-hubble.sh
bin/stop-hubble.sh
popd

popd || exit
popd || exit
popd
popd
# stop server
pushd ./*hugegraph-incubating*src/hugegraph-server/*hugegraph*"${RELEASE_VERSION}" || exit
bin/stop-hugegraph.sh || exit
popd || exit
pushd ./*hugegraph-incubating*src/hugegraph-server/*hugegraph*"${RELEASE_VERSION}"
bin/stop-hugegraph.sh
popd

# clear source packages
#rm -rf ./*src*
Expand All @@ -217,7 +225,7 @@ popd || exit
####################################
# Step 7: Validate Binary Packages #
####################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

for i in *.tar.gz; do
if [[ "$i" == *-src.tar.gz ]]; then
Expand All @@ -232,10 +240,11 @@ for i in *.tar.gz; do
echo "The package name $i should include incubating" && exit 1
fi

tar xzvf "$i" || exit
pushd "$(basename "$i" .tar.gz)" || exit
tar -xzvf "$i"
MODULE_DIR=$(basename "$i" .tar.gz)
pushd ${MODULE_DIR}
ls -lh
echo "Start to check the package content: $(basename "$i" .tar.gz)"
echo "Start to check the package content: ${MODULE_DIR}"

# 7.2: check root dir include "NOTICE"/"LICENSE"/"DISCLAIMER" files & "licenses" dir
if [[ ! -f "LICENSE" ]]; then
Expand Down Expand Up @@ -268,57 +277,56 @@ for i in *.tar.gz; do
echo "The package $i shouldn't include empty file: $EMPTY_FILE is empty" && exit 1
done

popd || exit
popd
done

# TODO: skip the following steps by comparing the artifacts built from source packages with binary packages
#########################################
# Step 8: Run Binary Packages In Server #
# Step 8: Run Binary Packages of Server #
#########################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

pushd ./*hugegraph-incubating*"${RELEASE_VERSION}" || exit
bin/init-store.sh || exit
sleep 30
bin/start-hugegraph.sh || exit
popd || exit
pushd ./*hugegraph-incubating*"${RELEASE_VERSION}"
bin/init-store.sh
sleep 3
bin/start-hugegraph.sh
popd

#####################################################################
# Step 9: Run Binary Packages In ToolChain (Loader & Tool & Hubble) #
# Step 9: Run Binary Packages of ToolChain (Loader & Tool & Hubble) #
#####################################################################
cd "$WORK_DIR"/dist/"$RELEASE_VERSION" || exit
cd "${WORK_DIR}/dist/${RELEASE_VERSION}"

pushd ./*toolchain*"${RELEASE_VERSION}" || exit
pushd ./*toolchain*"${RELEASE_VERSION}"
ls -lh

# 9.1: load some data first
echo "test loader"
pushd ./*loader*"${RELEASE_VERSION}" || exit
bin/hugegraph-loader.sh -f ./example/file/struct.json -s ./example/file/schema.groovy \
-g hugegraph || exit
popd || exit
pushd ./*loader*"${RELEASE_VERSION}"
bin/hugegraph-loader.sh -f ./example/file/struct.json -s ./example/file/schema.groovy -g hugegraph
popd

# 9.2: try some gremlin query & api in tool
echo "test tool"
pushd ./*tool*"${RELEASE_VERSION}" || exit
bin/hugegraph gremlin-execute --script 'g.V().count()' || exit
bin/hugegraph task-list || exit
bin/hugegraph backup -t all --directory ./backup-test || exit
popd || exit
pushd ./*tool*"${RELEASE_VERSION}"
bin/hugegraph gremlin-execute --script 'g.V().count()'
bin/hugegraph task-list
bin/hugegraph backup -t all --directory ./backup-test
popd

# 9.3: start hubble and connect to server
echo "test hubble"
pushd ./*hubble*"${RELEASE_VERSION}" || exit
pushd ./*hubble*"${RELEASE_VERSION}"
# TODO: add hubble doc & test it
cat conf/hugegraph-hubble.properties
bin/start-hubble.sh || exit
bin/stop-hubble.sh || exit
popd || exit
bin/start-hubble.sh
bin/stop-hubble.sh
popd

popd || exit
popd
# stop server
pushd ./*hugegraph-incubating*"${RELEASE_VERSION}" || exit
bin/stop-hugegraph.sh || exit
popd || exit
pushd ./*hugegraph-incubating*"${RELEASE_VERSION}"
bin/stop-hugegraph.sh
popd

echo "Finish validate, please check all steps manually again!"

0 comments on commit e2e0ffb

Please sign in to comment.