From 89a49451624239f765c9cd4585329f0442e3a8d2 Mon Sep 17 00:00:00 2001 From: blavenie <benoit.lavenier@e-is.pro> Date: Mon, 13 Jun 2016 17:15:39 +0200 Subject: [PATCH] - prepare next release 0.1.17 - Add gulp task for deployment to playstore - Add release deployment script --- .gitignore | 1 + config.xml | 103 +++++++++---------- gulpfile.js | 34 ++++++ hooks/after_build/090_deploy_to_playstore.js | 68 ++++++++++++ package.json | 3 +- release.sh | 10 ++ scripts/afterBuild.js | 23 ----- www/js/config.js | 2 +- 8 files changed, 167 insertions(+), 77 deletions(-) create mode 100755 hooks/after_build/090_deploy_to_playstore.js create mode 100644 release.sh delete mode 100644 scripts/afterBuild.js diff --git a/.gitignore b/.gitignore index 71e1d6be..8ed8afb5 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ www/lib/angular-moment www/lib/moment www/lib/waves www/dist +hooks/playstore-config.json diff --git a/config.xml b/config.xml index deb1d45d..e3fc2fbf 100644 --- a/config.xml +++ b/config.xml @@ -3,12 +3,12 @@ xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="fr.duniter.cesium" - version="0.1.16" - android-versionCode="4" + version="0.1.17" + android-versionCode="5" > <name>Cesium</name> <description> - A webapp client for Duniter + An simple App for Duniter </description> <author email="contact@duniter.fr" href="http://www.duniter.fr"> Duniter team @@ -29,53 +29,52 @@ <feature name="StatusBar"> <param name="ios-package" onload="true" value="CDVStatusBar" /> </feature> - <platform name="android"> - <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" /> - <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" /> - <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" /> - <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" /> - <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" /> - <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" /> - <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" /> - <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" /> - <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" /> - <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" /> - <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" /> - <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" /> - <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" /> - <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" /> - <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" /> - <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" /> - <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" /> - <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" /> - </platform> - <platform name="ios"> - <icon height="57" src="resources/ios/icon/icon.png" width="57" /> - <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" /> - <icon height="40" src="resources/ios/icon/icon-40.png" width="40" /> - <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" /> - <icon height="50" src="resources/ios/icon/icon-50.png" width="50" /> - <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" /> - <icon height="60" src="resources/ios/icon/icon-60.png" width="60" /> - <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" /> - <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" /> - <icon height="72" src="resources/ios/icon/icon-72.png" width="72" /> - <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" /> - <icon height="76" src="resources/ios/icon/icon-76.png" width="76" /> - <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" /> - <icon height="29" src="resources/ios/icon/icon-small.png" width="29" /> - <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" /> - <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" /> - <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" /> - <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" /> - <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" /> - <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" /> - <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" /> - <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" /> - <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" /> - <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" /> - <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" /> - <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" /> - </platform> - <hook type="after_build" src="scripts/afterBuild.js" /> + <platform name="android"> + <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" /> + <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" /> + <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" /> + <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" /> + <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" /> + <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" /> + <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" /> + <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" /> + <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" /> + <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" /> + <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" /> + <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" /> + <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" /> + <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" /> + <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" /> + <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" /> + <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" /> + <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" /> + </platform> + <platform name="ios"> + <icon height="57" src="resources/ios/icon/icon.png" width="57" /> + <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" /> + <icon height="40" src="resources/ios/icon/icon-40.png" width="40" /> + <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" /> + <icon height="50" src="resources/ios/icon/icon-50.png" width="50" /> + <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" /> + <icon height="60" src="resources/ios/icon/icon-60.png" width="60" /> + <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" /> + <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" /> + <icon height="72" src="resources/ios/icon/icon-72.png" width="72" /> + <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" /> + <icon height="76" src="resources/ios/icon/icon-76.png" width="76" /> + <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" /> + <icon height="29" src="resources/ios/icon/icon-small.png" width="29" /> + <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" /> + <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" /> + <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" /> + <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" /> + <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" /> + <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" /> + <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" /> + <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" /> + <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" /> + <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" /> + <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" /> + <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" /> + </platform> </widget> diff --git a/gulpfile.js b/gulpfile.js index c35ec637..78d1a95e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,6 +4,7 @@ var gulp = require('gulp'); var gutil = require('gulp-util'); var bower = require('bower'); var concat = require('gulp-concat'); +var path = require("path"); var sass = require('gulp-sass'); var minifyCss = require('gulp-minify-css'); var rename = require('gulp-rename'); @@ -292,3 +293,36 @@ gulp.task('build:web', ['zip:web'], function(done) { './tmp' ]); }); + +gulp.task('deploy:android', function (done) { + var config = require('./hooks/playstore-config.json'); + + if(!config) { + gutil.log(gutil.colors.red("ERROR => Could not load `./hooks/playstore-config.json` file!")); + return done(); + } + if(!config.client_email || !config.private_key) { + gutil.log(gutil.colors.red("ERROR => Could not found 'client_email' or 'private_key' in 'hooks/playstore-config.json' file.")); + return done(); + } + + var publisher = require('playup')(config); + + var apkFileLocation = path.join('.', 'platforms', 'android', 'build', 'outputs', 'apk', 'android-release.apk'); + console.log('Publishing APK file [' + apkFileLocation + '] to playstore...'); + + publisher.upload(apkFileLocation, { + track: 'production', + recentChanges: { + 'fr-FR': 'New stable release' + } + }) + .then(function (data) { + console.log(' > APK has been deployed to playstore !'); + done(); + }) + .catch(function(err){ + console.log(err); + done(); + }); +}); diff --git a/hooks/after_build/090_deploy_to_playstore.js b/hooks/after_build/090_deploy_to_playstore.js new file mode 100755 index 00000000..ff766da6 --- /dev/null +++ b/hooks/after_build/090_deploy_to_playstore.js @@ -0,0 +1,68 @@ +#!/usr/bin/env node +"use strict"; +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var path = require("path"); + +var cmd = process.env.CORDOVA_CMDLINE; +var rootdir = process.argv[2]; +var argv = require('yargs').argv; + +var skip = true; +if (cmd.indexOf("--release") > -1 || cmd.indexOf("--useref") > -1) { + skip = false; +} + +if (rootdir && !skip) { + + // go through each of the platform directories that have been prepared + var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []); + + for(var x=0; x<platforms.length; x++) { + + var platform = platforms[x].trim().toLowerCase(); + var platformRoot = path.join(rootdir, 'platforms', platform); + + // Deploy for Android + if(platform == 'android') { + + var apkFileLocation = path.join(platformRoot, 'build/outputs/apk/android-release.apk'); + + console.log('Publishing APK file [' + apkFileLocation + '] to playstore...'); + + var config = JSON.parse(fs.readFileSync('../playstore-config.json', 'utf8')); + + if(!config) { + gutil.log(gutil.colors.red("ERROR => Could not load `hooks/playstore-config.json` file!")); + return; + } + if(!config.client_email || !config.private_key) { + gutil.log(gutil.colors.red("ERROR => Could not found 'client_email' or 'private_key' in 'hooks/playstore-config.json' file.")); + return; + } + + var publisher = require('playup')(config); + + publisher.upload(apkFileLocation, + { + track: 'production', + recentChanges: { + 'fr-FR': 'New stable release' + } + }) + .then(function (data) { + console.log(' > APK file successfully deployed to Playstore !'); + }) + .catch(function(err) { + console.log('ERROR while publsihing to playtore: \n' + err); + }) + + } + + else { + // TODO : deploy other for platforms + } + + } +} + diff --git a/package.json b/package.json index 6a651a0e..6e364d0b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cesium", - "version": "0.1.16", + "version": "0.1.17", "description": "A webapp client for Duniter network", "dependencies": { "delete-empty": "^0.1.3", @@ -40,6 +40,7 @@ "ionic-minify": "^2.0.8", "jshint": "^2.9.2", "mv": "^2.1.1", + "playup": "^1.0.2", "shelljs": "^0.3.0", "yargs": "^4.3.1" }, diff --git a/release.sh b/release.sh new file mode 100644 index 00000000..1a74fcc7 --- /dev/null +++ b/release.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +gulp default --env default + +ionic build android --release + +gulp build:web + + + diff --git a/scripts/afterBuild.js b/scripts/afterBuild.js deleted file mode 100644 index 3bf6bcdf..00000000 --- a/scripts/afterBuild.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = function(ctx) { - // make sure android platform is part of build - if (ctx.opts.platforms.indexOf('android') < 0) { - return; - } - var fs = ctx.requireCordovaModule('fs'), - path = ctx.requireCordovaModule('path'), - deferral = ctx.requireCordovaModule('q').defer(); - - var platformRoot = path.join(ctx.opts.projectRoot, 'platforms/android'); - var apkFileLocation = path.join(platformRoot, 'build/outputs/apk/android-debug.apk'); - - fs.stat(apkFileLocation, function(err,stats) { - if (err) { - deferral.reject('Operation failed'); - } else { - console.log('Size of ' + apkFileLocation + ' is ' + stats.size +' bytes'); - deferral.resolve(); - } - }); - - return deferral.promise; -}; diff --git a/www/js/config.js b/www/js/config.js index a3bb9fc0..87a536af 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -14,7 +14,7 @@ angular.module("cesium.config", []) "TIMEOUT": 4000, "DEBUG": false, "VERSION": "0.1.16", - "BUILD_DATE": "2016-06-13T13:42:57.980Z" + "BUILD_DATE": "2016-06-13T13:50:48.101Z" }) ; \ No newline at end of file -- GitLab