diff --git a/.gitignore b/.gitignore index a39ab0b3e4..1aa8fc6a55 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.pyc -/build +/build/ /examples/*.html.png /examples/example-list.js /examples/example-list.xml /node_modules/ +/dist/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000..cdb35d22d6 --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +*.pyc +/build/ +/examples/*.html.png +/examples/example-list.js +/examples/example-list.xml diff --git a/package.json b/package.json index 8a053a7333..ae546f8db8 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "start": "node tasks/serve.js", "test": "node tasks/test.js" }, + "main": "dist/ol.js", "repository": { "type": "git", "url": "git://github.com/openlayers/ol3.git" diff --git a/tasks/build.js b/tasks/build.js index d89eea0966..bbdbee0a72 100644 --- a/tasks/build.js +++ b/tasks/build.js @@ -176,9 +176,9 @@ function concatenate(paths, callback) { callback(new Error(msg)); } else { var parts = umdWrapper.split('%output%'); - var src = 'var CLOSURE_NO_DEPS = true;\n' + - parts[0] + + var src = parts[0] + 'var goog = this.goog = {};\n' + + 'this.CLOSURE_NO_DEPS = true;\n' + results.join('\n') + 'OPENLAYERS.ol = ol;\n' + parts[1]; diff --git a/tasks/publish.sh b/tasks/publish.sh new file mode 100755 index 0000000000..faf24b502a --- /dev/null +++ b/tasks/publish.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +# +# Run this script to publish a new version of the library to npm. This requires +# that you have a clean working directory and have created a tag that matches +# the version number in package.json. +# +set -o errexit + +# +# All profiles to be built. Must correspond to .json files in the config +# directory. +# +PROFILES="ol ol-debug" + +# +# Destination directory for builds. +# +BUILDS=dist + +# +# URL for canonical repo. +# +REMOTE=https://github.com/openlayers/ol3.git + +# +# Display usage and exit. +# +display_usage() { + cat <<-EOF + + Usage: ${1} + + To publish a new release, update the version number in package.json and + create a tag for the release. + + The tag name must match the version number prefixed by a "v" (for example, + version 3.2.1 would be tagged v3.2.1). + + The tag must be pushed to ${REMOTE} before the release can be published. + +EOF +} + +# +# Exit if the current working tree is not clean. +# +assert_clean() { + source `git --exec-path`/git-sh-setup && \ + require_clean_work_tree "publish" "Please commit or stash them." +} + +# +# Exit if the requested version doesn't match package.json. +# +assert_version_match() { + v=`grep -o '"version":.*' package.json | sed 's/"version": *"\(.*\)",/\1/'` + if test "${1}" != "${v}"; then + echo "Version mismatch: requested '${1}', but package.json specifies '${v}'" + exit 1 + fi +} + +# +# Build all of the distribution profiles. +# +build_profiles() { + for p in ${@}; do + echo building ${BUILDS}/${p}.js + node ./tasks/build.js config/${p}.json ${BUILDS}/${p}.js + done +} + +# +# Check out the provided tag. This ensures that the tag has been pushed to +# the canonical remote. +# +checkout_tag() { + git fetch ${REMOTE} refs/tags/v${1}:refs/tags/v${1} + git checkout refs/tags/v${1} +} + +# +# Build all profiles and publish. +# +main() { + root=$(cd -P -- "$(dirname -- "${0}")" && pwd -P)/.. + cd ${root} + assert_clean + checkout_tag ${1} + assert_version_match ${1} + rm -rf ${BUILDS} + build_profiles ${PROFILES} + npm publish +} + +if test ${#} -ne 1; then + display_usage ${0} + exit 1 +else + main ${1} +fi