From 11a8c3e0355c13959b65dfae4762e05140e3d84f Mon Sep 17 00:00:00 2001 From: Adam Feuer Date: Wed, 15 Jul 2020 10:20:00 -0700 Subject: [PATCH] checkrelease.sh now tries to build sim:nsh Squashed commit of the following: commit 2b7e2ef927462f492b94ce0f8f1ae248a4ff1609 Author: Adam Feuer Date: Wed Jul 15 10:15:37 2020 -0700 remove duplicate method from bad merge commit 31846cfcb5c61804ede3a31159c58dc9e627761e Author: Adam Feuer Date: Tue Jul 14 14:20:36 2020 -0700 fix --dir option by doing cp "$DIRECTORY"/* . - instead of cp "$DIRECTORY" . commit 01d23a1a0bbaaf74f26c0589705b1f4a41c755bf Author: Adam Feuer Date: Tue Jul 7 15:08:59 2020 -0700 changes from xiaoxiang781216 - remove verbose option - simplify commit 3db107e6fdebfbf9b2afa16bfe89c846d1ec7352 Author: Adam Feuer Date: Tue Jul 14 10:39:42 2020 -0700 simplify wget invocation; add slash to all URLS commit fa6b14a649cd311e8316368992a709460823e756 Author: Adam Feuer Date: Tue Jul 14 10:19:26 2020 -0700 quitting directly after unknown argument - with usage - also removed unneeded echo - as per PR feedback commit bfda65a347a85959d516f05ba579b5539e953816 Author: Adam Feuer Date: Mon Jul 13 13:44:42 2020 -0700 streamline argument processing as per PR feedback commit b6a8d77ef8000a9be71d044aa929b309e8baca72 Author: Adam Feuer Date: Thu Jul 9 21:47:51 2020 -0700 PR feedback changes - many commit abf89d2ec28b0386d3dc4117e449c2f5893fca54 Author: Adam Feuer Date: Tue Jul 7 18:22:20 2020 -0700 added --gpg-output / -G flag - to see GPG output commit f0711df27e5eca2d1b9499d8c7532fc75cb0bc39 Author: Adam Feuer Date: Tue Jul 7 18:13:14 2020 -0700 quiet wget; check URL exists before downloading commit 9bc97e7c0dfe0d392e39f11419081cf48db3b8fd Author: Adam Feuer Date: Tue Jul 7 15:08:59 2020 -0700 checkrelease.sh script now builds sim:nsh Squashed commit of the following: commit 80d270b4d50ec10d912e7a67a0e86efe8ca95e98 Author: Adam Feuer Date: Tue Jul 7 15:06:48 2020 -0700 checkrelease script can use url, release, or dir commit 6a7e8e3210d671d6aa2c60bd8a50701839924cf4 Author: Adam Feuer Date: Tue Jul 7 11:06:28 2020 -0700 try to build sim:nsh commit 2cf777e062b99c8b3cb7184f55d1f82769c8f989 Author: Adam Feuer Date: Tue Jul 7 10:21:31 2020 -0700 improved success and error messaging --- tools/checkrelease.sh | 187 +++++++++++++++++++++++++++++------------- 1 file changed, 129 insertions(+), 58 deletions(-) diff --git a/tools/checkrelease.sh b/tools/checkrelease.sh index 5677836bdc..99e328119f 100755 --- a/tools/checkrelease.sh +++ b/tools/checkrelease.sh @@ -19,114 +19,185 @@ # ############################################################################# -set -e +RETURN_CODE=0 BASE_URL="https://dist.apache.org/repos/dist/dev/incubator/nuttx" -TEMPDIR="dist.apache.org" -ORIGINAL_DIR="$(pwd)" -trap "{ cd $ORIGINAL_DIR; rm -rf $TEMPDIR; }" EXIT +TEMPDIR="/tmp/nuttx-checkrelease" + +function validate_url() { + if [[ `wget -S --spider $1 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then echo "true"; fi +} function download_release() { - wget -r -np -R "index.html*" -P . --cut-dirs 7 "$URL" - cd "$TEMPDIR" + rm -rf "$TEMPDIR" + mkdir "$TEMPDIR" + cd "$TEMPDIR" + + if [[ -n "$URL" ]]; then + if [[ $(validate_url "$URL") ]]; then + echo "Downloading release files from $URL" + wget -q -r -nd -np "$URL" + else + echo "The $URL given doesn't return HTTP 200 OK return code— exiting." + exit 1 + fi + else + cp -r "$DIRECTORY"/* . + fi } function check_sha512() { - # check release sha512 RELEASE_FILE=$1 echo "Checking $RELEASE_FILE sha512..." - sha512sum -c "$RELEASE_FILE.sha512" + output="$(sha512sum -c $RELEASE_FILE.sha512)" 2>&1 + return_value=$? + if [ $return_value -eq 0 ]; then + echo " OK: $RELEASE_FILE sha512 hash matches." + else + RETURN_CODE=1 + echo "$output" + echo " - $RELEASE_FILE sha512 hash does not match." + fi + echo } function check_gpg() { - # check nuttx sha512 and gpg RELEASE_FILE=$1 echo "Checking $RELEASE_FILE GPG signature:" - gpg --verify "$RELEASE_FILE.asc" "$RELEASE_FILE" + gpg --verify $RELEASE_FILE.asc $RELEASE_FILE + return_value=$? + if [ $return_value -eq 0 ]; then + echo " OK: $RELEASE_FILE gpg signature matches." + else + RETURN_CODE=1 + echo " - Error checking $RELEASE_FILE gpg signature." + fi echo } function check_required_files() { - # check nuttx for required files - RELEASE_FILE=$1 - RELEASE_DIR=$2 - rm -rf "$RELEASE_DIR" - tar xf "$RELEASE_FILE" - ERROR=0 + RELEASE_DIR=$1 + MISSING_FILE=0 + echo "Checking $RELEASE_FILE for required files:" if [ ! -f "$RELEASE_DIR/LICENSE" ]; then - echo "LICENSE file not present." - ERROR=1 + echo " - LICENSE file not present." + MISSING_FILE=1 fi if [ ! -f "$RELEASE_DIR/NOTICE" ]; then - echo "NOTICE file not present." - ERROR=1 + echo " - NOTICE file not present." + MISSING_FILE=1 fi if [ ! -f "$RELEASE_DIR/README.txt" ]; then - echo "README.txt file not present." - ERROR=1 + echo " - README.txt file not present." + MISSING_FILE=1 fi if [ ! -f "$RELEASE_DIR/DISCLAIMER-WIP" ]; then - echo "DISCLAIMER-WIP file not present." - ERROR=1 + echo " - DISCLAIMER-WIP file not present." + MISSING_FILE=1 fi - if [ 0 -eq $ERROR ]; then - echo "OK: All required files exist." + if [ 0 -eq $MISSING_FILE ]; then + echo " OK: all required files exist in $RELEASE_DIR." + else + RETURN_CODE=$MISSING_FILE fi + echo } function check_nuttx() { - # check nuttx sha512 and gpg RELEASE_FILE="$(ls *.tar.gz|head -1)" - check_sha512 "$RELEASE_FILE" + RELEASE_DIR="nuttx" + check_sha512 "$RELEASE_FILE" check_gpg "$RELEASE_FILE" - check_required_files "$RELEASE_FILE" "nuttx" - mv "$RELEASE_FILE" .. + tar xf "$RELEASE_FILE" + check_required_files "$RELEASE_DIR" } function check_nuttx_apps() { - # check nuttx-apps sha512 and gpg RELEASE_FILE="$(ls *.tar.gz|head -2| tail -1)" + RELEASE_DIR="apps" check_sha512 "$RELEASE_FILE" check_gpg "$RELEASE_FILE" - check_required_files "$RELEASE_FILE" "apps" - mv "$RELEASE_FILE" .. + tar xf "$RELEASE_FILE" + check_required_files "$RELEASE_DIR" +} + +function check_sim_nsh_build() { + RELEASE_DIR="nuttx" + echo "Trying to build $RELEASE_DIR sim:nsh..." + cd "$RELEASE_DIR" + output=$(make distclean; ./tools/configure.sh sim:nsh; make) 2>&1 + return_value=$? + if [ $return_value -eq 0 ]; then + echo " OK: we were able to build sim:nsh." + else + RETURN_CODE=1 + echo "$output" + echo " - Error building sim:nsh." + fi + echo } function usage() { - echo "Usage: $0 " - echo " Given release name or release full URL, downloads all files in" - echo " in that directory (which should include nuttx and nuttx-apps" - echo " sha512, asc, and tar.gz files), checks the release SHA512 and GPG " - echo " signatures, and checks the unpacked directories for required " - echo " files. Creates a temporary directory to do its work in." + echo "Usage: $0 [--url ] [--release ] [--tempdir ]" + echo " Given release full URL, release name, or a local directory, downloads or copies" + echo " all files in that directory (which for a release should include nuttx and nuttx-apps, sha512, " + echo " asc, and tar.gz files), checks the release SHA512 and GPG signatures, checks the unpacked " + echo " directories for required files, and tries to build NuttX for sim:nsh." + echo + echo " If tempdir is specified, it will be removed and recreated; if it is not specified, /tmp/nuttx-checkrelease" + echo " is used." echo - echo " nuttx and nuttx-apps tar.gz files are left in the current" - echo " directory." - echo echo "Examples:" echo - echo " $0 9.1.0-RC1" - echo " $0 https://dist.apache.org/repos/dist/dev/incubator/nuttx/9.1.0-RC1/" + echo " $0 --release 9.1.0-RC1" + echo " $0 --url https://dist.apache.org/repos/dist/dev/incubator/nuttx/9.1.0-RC1/" + echo " $0 --dir ./some-dir-that-has-nuttx-and-apps" echo } -if [ "-h" == "$1" ]; then +URL="" +DIRECTORY="" + +while [[ $# -gt 0 ]] +do + case $1 in + -U|--url) + shift + URL="$1/" + ;; + -R|--release) + shift + RELEASE="$1" + URL="$BASE_URL/$RELEASE/" + ;; + -D|--dir) + shift + DIRECTORY="$(readlink -f $1)" + ;; + -T|--tempdir) + shift + TEMPDIR="$(readlink -f $1)" + ;; + -h|--help) usage exit 0 -fi + ;; + *) # unknown option + usage + exit 1 + ;; + esac + shift +done -if [ -z "$1" ]; then - usage - exit 0 -fi - -ARG=$1 -if [[ "$ARG" =~ ^"http".* ]]; then - URL="$1/" -else - URL="$BASE_URL/$1/" +if [[ (-z "$URL") && (-z "$DIRECTORY") ]]; then + usage + exit 1 fi download_release -check_nuttx -check_nuttx_apps +check_nuttx +check_nuttx_apps +check_sim_nsh_build + +exit $RETURN_CODE