chore(build): automate cutting a release, publishing to bower and to code.angular.js

This commit is contained in:
Tobias Bosch 2013-12-13 12:49:42 -08:00
parent 03088d6010
commit 8c10db3847
11 changed files with 163 additions and 62 deletions

View file

@ -4,6 +4,7 @@ var path = require('path');
module.exports = function(grunt) {
//grunt plugins
grunt.loadNpmTasks('grunt-bump');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-connect');
@ -268,6 +269,15 @@ module.exports = function(grunt) {
write: {
versionTXT: {file: 'build/version.txt', val: NG_VERSION.full},
versionJSON: {file: 'build/version.json', val: JSON.stringify(NG_VERSION)}
},
bump: {
options: {
files: ['package.json'],
commit: false,
createTag: false,
push: false
}
}
});

0
jenkins_build.sh Executable file → Normal file
View file

View file

@ -36,13 +36,12 @@ module.exports = {
var package = JSON.parse(fs.readFileSync('package.json', 'UTF-8'));
var match = package.version.match(/^([^\-]*)(?:\-(.+))?$/);
var semver = match[1].split('.');
var hash = shell.exec('git rev-parse --short HEAD', {silent: true}).output.replace('\n', '');
var fullVersion = match[1];
if (match[2]) {
fullVersion += '-';
fullVersion += (match[2] == 'snapshot') ? hash : match[2];
fullVersion += (match[2] == 'snapshot') ? getSnapshotSuffix() : match[2];
}
version = {
@ -55,6 +54,12 @@ module.exports = {
};
return version;
function getSnapshotSuffix() {
var jenkinsBuild = process.env.BUILD_NUMBER || 'local';
var hash = shell.exec('git rev-parse --short HEAD', {silent: true}).output.replace('\n', '');
return 'build.'+jenkinsBuild+'+sha.'+hash;
}
},

View file

@ -10,6 +10,7 @@
"devDependencies": {
"grunt": "~0.4.1",
"bower": "~1.2.2",
"grunt-bump": "~0.0.13",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-compress": "~0.5.2",
"grunt-contrib-connect": "~0.5.0",

View file

@ -1,23 +1,18 @@
# Angular Bower Script
Script for updating the Angular bower repos from a code.angularjs.org package
Script for updating the Angular bower repos from current local build.
Requires `node` (for parsing `bower.json`) and `wget` (for fetching the `angular.zip` from `code.angularjs.org`)
Requires `node` (for parsing `bower.json`)
## Instructions
You need to run `./init.sh` the first time you use this script to clone all the repos.
For subsequent updates:
`grunt package`: Build angular locally
```shell
./publish.sh NEW_VERSION
./publish.sh
```
Where `NEW_VERSION` is a version number like `1.2.3`.
## License
MIT

View file

@ -1,28 +0,0 @@
#!/bin/bash
#
# init all of the bower repos
#
set -e # fail if any command fails
REPOS=(
angular \
angular-animate \
angular-cookies \
angular-i18n \
angular-loader \
angular-mocks \
angular-route \
angular-resource \
angular-sanitize \
angular-scenario \
angular-touch \
)
cd `dirname $0`
for repo in "${REPOS[@]}"
do
git clone git@github.com:angular/bower-$repo.git
done

View file

@ -7,12 +7,13 @@
set -e # fail if any command fails
cd `dirname $0`
SCRIPT_DIR=`pwd`
NEW_VERSION=$1
export TMP_DIR=../../tmp
ZIP_FILE=angular-$NEW_VERSION.zip
ZIP_FILE_URL=http://code.angularjs.org/$NEW_VERSION/angular-$NEW_VERSION.zip
ZIP_DIR=angular-$NEW_VERSION
export BUILD_DIR=../../build
NEW_VERSION=$(node -e "console.log(require(process.env.BUILD_DIR+'/version.json').full)" | sed -e 's/\r//g')
REPOS=(
angular \
@ -28,47 +29,45 @@ REPOS=(
angular-touch \
)
#
# download and unzip the file
# clone repos
#
if [ ! -f $ZIP_FILE ]; then
wget $ZIP_FILE_URL
unzip $ZIP_FILE
fi
for repo in "${REPOS[@]}"
do
git clone git@github.com:angular/bower-$repo.git $TMP_DIR/bower-$repo
done
#
# move the files from the zip
# move the files from the build
#
for repo in "${REPOS[@]}"
do
if [ -f $ZIP_DIR/$repo.js ] # ignore i18l
if [ -f $BUILD_DIR/$repo.js ] # ignore i18l
then
cd bower-$repo
cd $TMP_DIR/bower-$repo
git reset --hard HEAD
git checkout master
git fetch --all
git reset --hard origin/master
cd ..
mv $ZIP_DIR/$repo.* bower-$repo/
cd $SCRIPT_DIR
cp $BUILD_DIR/$repo.* $TMP_DIR/bower-$repo/
fi
done
# move i18n files
mv $ZIP_DIR/i18n/*.js bower-angular-i18n/
cp $BUILD_DIR/i18n/*.js $TMP_DIR/bower-angular-i18n/
# move csp.css
mv $ZIP_DIR/angular-csp.css bower-angular
cp $BUILD_DIR/angular-csp.css $TMP_DIR/bower-angular
#
# get the old version number
#
OLD_VERSION=$(node -e "console.log(require('./bower-angular/bower').version)" | sed -e 's/\r//g')
OLD_VERSION=$(node -e "console.log(require(process.env.TMP_DIR+'/bower-angular/bower').version)" | sed -e 's/\r//g')
echo $OLD_VERSION
echo $NEW_VERSION
@ -79,12 +78,12 @@ echo $NEW_VERSION
for repo in "${REPOS[@]}"
do
cd bower-$repo
cd $TMP_DIR/bower-$repo
sed -i '' -e "s/$OLD_VERSION/$NEW_VERSION/g" bower.json
git add -A
git commit -m "v$NEW_VERSION"
git tag v$NEW_VERSION
git push origin master
git push origin v$NEW_VERSION
cd ..
# TODO git push origin master
# TODO git push origin v$NEW_VERSION
cd $SCRIPT_DIR
done

View file

@ -0,0 +1,19 @@
# code.angular.js.org Script
Script for updating code.angularjs.org repo from current local build.
Requires `node` (for parsing `bower.json`)
Note: This should only be run for a release build, not a snapshot build!
## Instructions
`grunt package`: Build angular locally
```shell
./publish.sh
```
## License
MIT

View file

@ -0,0 +1,57 @@
#!/bin/bash
#
# update all the things
#
set -e # fail if any command fails
cd `dirname $0`
SCRIPT_DIR=`pwd`
export TMP_DIR=../../tmp
export REPO_DIR=$TMP_DIR/code.angularjs.org
export BUILD_DIR=../../build
NEW_VERSION=$(node -e "console.log(require(process.env.BUILD_DIR+'/version.json').full)" | sed -e 's/\r//g')
#
# Don't publish snapshot builds!
#
if [[ "$NEW_VERSION" =~ sha ]] ;then
echo "publish to code.angularjs.org is not allowed for snapshot builds"
exit 1;
fi
exit 2
#
# clone
#
git clone git@github.com:angular/code.angularjs.org.git $REPO_DIR
#
# copy the files from the build
#
mkdir $REPO_DIR/$NEW_VERSION
cd $REPO_DIR
git reset --hard HEAD
git checkout master
git fetch --all
git reset --hard origin/master
cd $SCRIPT_DIR
cp -r $BUILD_DIR/* $REPO_DIR/$NEW_VERSION/
#
# commit and push
#
cd $REPO_DIR
git add -A
git commit -m "v$NEW_VERSION"
# TODO git push origin master
cd $SCRIPT_DIR

14
scripts/jenkins/master.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/bash
set -e # fail if any command fails
cd `dirname $0`/../..
# Build
./jenkins_build.sh
# Update code.angularjs.org
VERSION=`cat build/version.txt`
curl http://code.angularjs.org/fetchLatestSnapshot.php?ver=$VERSION
# Push to bower
./scripts/bower/publish.sh

View file

@ -0,0 +1,29 @@
#!/bin/bash
set -e # fail if any command fails
cd `dirname $0`/../..
# bump versions: remove "-snapshot" suffix
sed -i -e 's/"version": "\(.*\)-snapshot"/"version": "\1"/' package.json
# Build
./jenkins_build.sh
VERSION=`cat build/version.txt`
# bump versions: increment version number and add "-snapshot" again
grunt bump:$BUMP_TYPE
sed -i -e 's/"version": "\(.*\)"/"version": "\1-snapshot"/' package.json
# commit, tag and push
git commit -m "chore(release): v%VERSION%"
git tag -m "v%VERSION%" v%VERSION%
# TODO git push
# Update code.angularjs.org
./scripts/code.angularjs.org/publish.sh
# Push to bower
./scripts/bower/publish.sh