2.0.0 release fixes (#815)
[dygraphs.git] / scripts / release.sh
1 #!/bin/bash
2 # This script "releases" a version of dygraphs.
3
4 if [ $# -ne 1 ]; then
5 echo "Usage: $0 X.Y.Z" >&2
6 exit 1
7 fi
8
9 VERSION=$1
10 echo $VERSION | egrep '\d+\.\d+\.\d+' > /dev/null
11 if [ $? -ne 0 ]; then
12 echo "Version must be of the form 1.2.3 (got '$VERSION')" >&2
13 exit 1
14 fi
15
16 # Make sure this is being run from a release branch with the correct name.
17 branch=$(git rev-parse --abbrev-ref HEAD)
18 if [ $branch != "release-$VERSION" ]; then
19 echo "Must be on a branch named 'release-$VERSION' (found '$branch')" >&2
20 exit 1
21 fi
22
23 git status | grep 'working directory clean' > /dev/null
24 if [ $? -ne 0 ]; then
25 echo "Must release with a clean working directory. Commit your changes." >&2
26 exit 1
27 fi
28
29 grep "$VERSION" package.json
30 if [ $? -ne 0 ]; then
31 echo "Version in package.json doesn't match command line argument." >&2
32 exit 1
33 fi
34
35 grep "$VERSION" releases.json
36 if [ $? -ne 0 ]; then
37 echo "Version $VERSION does not appear in releases.json." >&2
38 exit 1
39 fi
40
41 set -o errexit
42 npm run build
43 npm run test
44 set +o errexit
45
46 # Push a permanent copy of documentation & generated files to a versioned copy
47 # of the site. This is where the downloadable files are generated.
48 # TODO(danvk): make sure this actually generates the downloadable files!
49 echo "Pushing docs and generated files to dygraphs.com/$VERSION"
50 ./push-to-web.sh dygraphs.com:dygraphs.com/$VERSION
51 if [ $? -ne 0 ]; then
52 echo "Push to web failed" >&2
53 exit 1
54 fi
55
56 set -o errexit
57
58 COMMIT=$(git rev-parse HEAD)
59 echo "Tagging commit $COMMIT as version $VERSION"
60 git tag -a "v$VERSION" -m "Release of version $VERSION"
61 git push --tags
62
63 echo "Release was successful!"
64 echo "Pushing the new version to dygraphs.com..."
65 ./push-to-web.sh dygraphs.com:dygraphs.com
66
67 echo "Success!\n"
68
69 # Discourage users from working on the "releases" branch.
70 git checkout master