sample skeleton application with dojo toolkit & arcgis js api v 4.30
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

414 lines
11 KiB

#!/usr/bin/env bash
set -e
usage() {
echo "Usage: $0 [-c] [-t] [-b branch] version"
echo
echo "-b Branch to archive. Defaults to 'master'."
echo "-t Include themes repo in release."
echo "-c Build CDN release as well."
exit 1
}
while getopts ctb:u: OPTION; do
case $OPTION in
c)
CDN=1
shift 1
OPTIND=1
;;
b)
BRANCH=$OPTARG
shift 2
OPTIND=1
;;
t)
THEMES=1
shift 1
OPTIND=1
;;
\?)
echo "Invalid option -$OPTARG"
exit 1
;;
:)
echo "Missing argument for -$OPTARG"
exit 1
;;
esac
done
# Version should be something like 0.9.0-beta or 0.9.0. See http://semver.org.
VERSION=$1
OLDIFS=$IFS
IFS="."
PRE_VERSION=($VERSION)
IFS=$OLDIFS
if [[ ${PRE_VERSION[2]} == *-* ]]; then
PRE_VERSION="${PRE_VERSION[0]}.${PRE_VERSION[1]}.$((PRE_VERSION[2]))-pre"
elif [[ ${PRE_VERSION[2]} -eq 0 ]]; then
PRE_VERSION="${PRE_VERSION[0]}.$((PRE_VERSION[1] + 1)).0-pre"
else
PRE_VERSION="${PRE_VERSION[0]}.${PRE_VERSION[1]}.$((PRE_VERSION[2] + 1))-pre"
fi
BRANCH=${BRANCH=master}
# Name used for directory and tar/zip file of prebuilt version
BUILD_NAME=dojo-release-$VERSION
# Name used for directory and tar/zip file of source version
SOURCE_NAME=$BUILD_NAME-src
# Name used for tar/zip file of demos
DEMOS_NAME=$BUILD_NAME-demos
# Name used for tarball of temporary archive for downloads.dojotoolkit.org
OUTPUT_NAME=release-$VERSION
# Name used for directory and zip file of CDN version
CDN_NAME=$VERSION
# Name used for directory and zip archive for archive.dojotoolkit.org
CDN_OUTPUT_NAME=$VERSION-cdn
# Build scripts directory (own directory)
UTIL_DIR=$(cd $(dirname $0) && pwd)
# Directory where all build operations will be rooted
ROOT_DIR=$UTIL_DIR/build
###########
# NOTE: OUTPUT_DIR, SOURCE_DIR, and CDN_OUTPUT_DIR *must* be children of ROOT_DIR for certain operations to work
# properly. They must also use $*_NAME variables as the last directory part too.
###########
# Directory into which final output for downloads.dojotoolkit.org is placed
OUTPUT_DIR=$ROOT_DIR/$OUTPUT_NAME
# Directory into which Dojo source is checked out
SOURCE_DIR=$ROOT_DIR/$SOURCE_NAME
# Directory where source Dojo build scripts exist
SOURCE_BUILD_DIR=$SOURCE_DIR/util/buildscripts
# Directory into which the source Dojo writes built data
SOURCE_RELEASE_DIR=$SOURCE_DIR/release
# Directory into which the source CDN writes built data for CDN
CDN_OUTPUT_DIR=$ROOT_DIR/$CDN_OUTPUT_NAME
# Repositories that are a part of the Dojo Toolkit
if [ $THEMES ]; then
ALL_REPOS="demos dijit dojo dojox dijit-themes util"
# Dojo 1.10-
else
ALL_REPOS="demos dijit dojo dojox util"
fi
zip="zip -dd -ds 1m -rq"
if [ $(echo $(zip -dd test 2>&1) |grep -c "one action") -eq 1 ]; then
# Zip 2.3 does not support progress output
zip="zip -rq"
fi
tar="tar --checkpoint=1000 --checkpoint-action=dot"
ant=~/.ant/bin/ant
if [ "$VERSION" == "" ]; then
usage
exit 1
fi
if [ -d $SOURCE_DIR -o -d $OUTPUT_DIR ]; then
echo "Existing build directories detected at $ROOT_DIR"
echo "Aborted."
exit 1
fi
echo "This is an internal Dojo release script. You probably meant to run build.sh!"
echo "If you want to create Dojo version $VERSION from branch $BRANCH, press 'y'."
echo "The source version will be updated to $PRE_VERSION after the build."
echo "(You will have an opportunity to abort pushing upstream later on if something"
echo "goes wrong.)"
read -s -n 1
if [ "$REPLY" != "y" ]; then
echo "Aborted."
exit 0
fi
if [ ! -d $ROOT_DIR ]; then
mkdir $ROOT_DIR
fi
mkdir $SOURCE_DIR
mkdir $OUTPUT_DIR
VERSION_EXISTS=0
for REPO in $ALL_REPOS; do
# Clone pristine copies of the repository for the desired branch instead of trying to copy a local repo
# which might be outdated, on a different branch, or containing other unpushed/uncommitted code
git clone --recursive --single-branch --branch=$BRANCH git@github.com:dojo/$REPO.git $SOURCE_DIR/$REPO
cd $SOURCE_DIR/$REPO
set +e
git checkout $VERSION > /dev/null 2>&1
if [ $? -eq 0 ]; then
set -e
echo "Tag $VERSION already exists for $REPO; using existing tag"
VERSION_EXISTS=1
continue
fi
set -e
REVISION=$(git log -n 1 --format='%h')
VERSION_FILES=
if [ -f "package.json" ]; then
VERSION_FILES=package.json
fi
if [ -f "bower.json" ]; then
VERSION_FILES="$VERSION_FILES bower.json"
fi
if [ $REPO == "dojo" ]; then
# Dojo 1.7+
if [ -f "_base/kernel.js" ]; then
VERSION_FILES="$VERSION_FILES _base/kernel.js"
# Dojo 1.6-
elif [ -f "_base/_loader/bootstrap.js" ]; then
VERSION_FILES="$VERSION_FILES _base/_loader/bootstrap.js"
fi
fi
if [ $REPO == "util" ]; then
for FILENAME in doh/package.json doh/_rhinoRunner.js doh/mobileRunner.html doh/runner.html doh/_nodeRunner.js; do
if [ -f $FILENAME ]; then
VERSION_FILES="$VERSION_FILES $FILENAME"
fi
done
if [ -f "build/version.js" ]; then
VERSION_FILES="$VERSION_FILES build/version.js"
fi
fi
if [ -n "$VERSION_FILES" ]; then
for FILENAME in $VERSION_FILES; do
java -jar $UTIL_DIR/../shrinksafe/js.jar $UTIL_DIR/changeVersion.js $VERSION $REVISION $FILENAME
done
# These will be pushed later, once it is confirmed the build was successful, in order to avoid polluting
# the origin repository with failed build commits and tags
git commit -m "Updating metadata for $VERSION" $VERSION_FILES
fi
git tag -a -m "Release $VERSION" $VERSION
if [ -n "$VERSION_FILES" ]; then
for FILENAME in $VERSION_FILES; do
java -jar $UTIL_DIR/../shrinksafe/js.jar $UTIL_DIR/changeVersion.js $PRE_VERSION "" $FILENAME
done
git commit -m "Updating source version to $PRE_VERSION" $VERSION_FILES
fi
git checkout $VERSION
done
cd $ROOT_DIR
# Archive all source except for demos, which are provided separately so people do not have to download them
# with the source
echo -n "Archiving source..."
$zip $OUTPUT_DIR/$SOURCE_NAME.zip $SOURCE_NAME/ -x "*/.git" -x "*/.git/*" -x "$SOURCE_NAME/demos/*"
$tar --exclude="$SOURCE_NAME/demos" --exclude-vcs -zcf $OUTPUT_DIR/$SOURCE_NAME.tar.gz $SOURCE_NAME/
echo "Done"
# Temporarily rename $SOURCE_NAME ($SOURCE_DIR) to $BUILD_NAME to archive demos backwards-compatibly
mv $SOURCE_NAME $BUILD_NAME
echo -n "Archiving demos..."
$zip $OUTPUT_DIR/$DEMOS_NAME.zip $BUILD_NAME/demos/ -x "*/.git" -x "*/.git/*"
$tar --exclude-vcs -zcf $OUTPUT_DIR/$DEMOS_NAME.tar.gz $BUILD_NAME/demos/
mv $BUILD_NAME $SOURCE_NAME
echo "Done"
# Create the built release archive using the checked out release code
cd $SOURCE_BUILD_DIR
echo "Building release..."
./build.sh action=release profile=standard version=$VERSION releaseName=$BUILD_NAME cssOptimize=comments.keepLines optimize=shrinksafe.keepLines insertAbsMids=1 mini=true
cd $SOURCE_RELEASE_DIR
echo -n "Archiving release..."
$zip $OUTPUT_DIR/$BUILD_NAME.zip $BUILD_NAME/
$tar -zcf $OUTPUT_DIR/$BUILD_NAME.tar.gz $BUILD_NAME/
echo "Done"
# For backwards-compatibility, Dojo Base is also copied for direct download
cp $BUILD_NAME/dojo/dojo.js* $OUTPUT_DIR
# Second build with tests that is kept unarchived and placed directly on downloads.dojotoolkit.org
rm -rf $SOURCE_RELEASE_DIR
cd $SOURCE_BUILD_DIR
echo "Building downloads release..."
./build.sh action=release profile=standard version=$VERSION releaseName=$BUILD_NAME cssOptimize=comments.keepLines optimize=shrinksafe.keepLines insertAbsMids=1 copyTests=true mini=false
mv $SOURCE_RELEASE_DIR/$BUILD_NAME $OUTPUT_DIR
rmdir $SOURCE_RELEASE_DIR
echo "Done"
if [ $CDN ]; then
mkdir $CDN_OUTPUT_DIR
# Only this super-specific Ant version works!
if [ ! -d ~/.ant ]; then
mkdir ~/.ant
cd ~/.ant
echo "Installing ant 1.7.1 to ~/.ant..."
curl http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz |tar --strip-components=1 -zx
echo "Done"
fi
echo "Building CDN release..."
# Build all locales
cd $SOURCE_BUILD_DIR/cldr
sed -i -e '/<property name="locales"/d' build.xml
$ant clean
# On first run of Ant, build.xml does some bad stuff that requires running ant twice
set +e
set -o pipefail
TMPFILE=$(mktemp)
$ant 2>&1 | tee $TMPFILE
EXITCODE=$?
set -e
set +o pipefail
if [ $EXITCODE -gt 0 ]; then
if [ $(grep -c "please re-run" $TMPFILE) -gt 0 ]; then
$ant
else
rm $TMPFILE
exit 1
fi
fi
rm $TMPFILE
unset TMPFILE EXITCODE
cd $SOURCE_BUILD_DIR
# Dojo 1.7+
if [ -f "profiles/cdn.profile.js" ]; then
./build.sh action=release profile=standard profile=cdn version=$VERSION releaseName=$CDN_NAME cssOptimize=comments.keepLines optimize=closure layerOptimize=closure stripConsole=normal copyTests=false mini=true
# Dojo 1.6
else
java -classpath ../shrinksafe/js.jar:../shrinksafe/shrinksafe.jar org.mozilla.javascript.tools.shell.Main build.js profile=standard version=$VERSION releaseName=$CDN_NAME cssOptimize=comments.keepLines optimize=shrinksafe layerOptimize=shrinksafe stripConsole=normal copyTests=false mini=true action=release loader=xdomain xdDojoPath="//ajax.googleapis.com/ajax/libs/dojo/$VERSION" xdDojoScopeName=window[\(typeof\(djConfig\)\!\=\"undefined\"\&\&djConfig.scopeMap\&\&djConfig.scopeMap[0][1]\)\|\|\"dojo\"]
fi
mv $SOURCE_RELEASE_DIR/$CDN_NAME $CDN_OUTPUT_DIR
rmdir $SOURCE_RELEASE_DIR
echo "Done"
echo -n "Generating CDN checksums..."
cd $CDN_OUTPUT_DIR
$zip $CDN_NAME.zip $CDN_NAME/
sha1sum $CDN_NAME.zip > sha1.txt
cd $CDN_OUTPUT_DIR/$CDN_NAME
find . -type f -exec sha1sum {} >> ../sha1.txt +
echo "Done"
cd $ROOT_DIR
echo -n "Creating CDN archive..."
$tar -cf $CDN_OUTPUT_NAME.tar $CDN_OUTPUT_NAME/
echo "Done"
cd $ROOT_DIR
fi
cd $OUTPUT_DIR
# Checksums, because who doesn't love checksums?!
md5=$(which md5 md5sum 2>/dev/null || true)
if [ -x $md5 ]; then
echo -n "Generating release checksums..."
for FILENAME in *.zip *.gz *.js; do
$md5 $FILENAME > $FILENAME.md5
echo -n "."
done
echo "Done"
else
echo "MD5 utility missing; cannot generate checksums"
fi
# Archive file for download.dojotoolkit.org
cd $ROOT_DIR
echo -n "Creating downloads archive..."
$tar -cf $OUTPUT_NAME.tar $OUTPUT_NAME/
echo "Done"
echo "Build complete."
# Confirmaton
if [ $VERSION_EXISTS -eq 1 ]; then
echo "Please confirm build success, then press 'y' key to clean up archives"
echo "and upload, or any other key to bail."
else
echo "Please confirm build success, then press 'y' key to clean up archives, push"
echo "tags, and upload, or any other key to bail."
fi
read -p "> "
if [ "$REPLY" != "y" ]; then
echo "Aborted."
exit 0
fi
# Flush archives
echo -n "Cleaning up archives..."
rm -rf $OUTPUT_DIR
if [ $CDN ]; then
rm -rf $CDN_OUTPUT_DIR
fi
echo "Done"
if [ $VERSION_EXISTS -eq 1 ]; then
echo "Skipping tag push, since tags already exist"
else
for REPO in $ALL_REPOS; do
cd $SOURCE_DIR/$REPO
echo "Pushing to repo $REPO"
git push origin $BRANCH
git push origin --tags
done
fi
echo "Release is now built and tagged. There rest from here is paperwork."
cd $ROOT_DIR
echo "Copying archive to downloads.dojotoolkit.org..."
cp $OUTPUT_NAME.tar /srv/www/vhosts.d/download.dojotoolkit.org
cd /srv/www/vhosts.d/download.dojotoolkit.org && tar -xf $OUTPUT_NAME.tar && rm $OUTPUT_NAME.tar
cd $ROOT_DIR
if [ $CDN ]; then
echo "Copying cdn to archive.dojotoolkit.org..."
cp $CDN_OUTPUT_NAME.tar /srv/www/vhosts.d/archive.dojotoolkit.org/cdn
cd /srv/www/vhosts.d/archive.dojotoolkit.org/cdn && tar -xf $CDN_OUTPUT_NAME.tar && rm $CDN_OUTPUT_NAME.tar
fi
cd $ROOT_DIR
echo "Upload complete. download.dojotoolkit.org should be automatically udpated. archive.dojotoolkit.org/cdn"
echo "This site should be automagically updated: download.dojotoolkit.org"
echo "CDNs can be found here: archive.dojotoolkit.org/cdn"
echo "To deploy to dojotoolkit.org, make sure appropriate changes are done and merged to master, then redeploy."