diff --git a/Gruntfile.js b/Gruntfile.js index 8771b85eb..160db85d5 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -8,26 +8,32 @@ module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), exec: { - get_nwjs_for_pkg: { - command: 'if [ ! -d ./cache/0.19.4/osx64/nwjs.app ]; then mkdir -p ./cache/0.19.4/osx64; curl https://dl.nwjs.io/v0.19.5-mas-beta/nwjs-mas-v0.19.5-osx-x64.zip --output ./cache/nwjs.zip; unzip ./cache/nwjs.zip -d ./cache; cp -R ./cache/nwjs-mas-v0.19.5-osx-x64/nwjs.app ./cache/0.19.4/osx64/; fi' - }, - create_others_dist: { - command: 'sh webkitbuilds/create-others-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' - }, - create_dmg_dist: { - command: 'sh webkitbuilds/create-dmg-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' - }, - create_pkg_dist: { - command: 'sh webkitbuilds/create-pkg-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' - }, - sign_desktop_dist: { - command: 'sh webkitbuilds/sign-desktop-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>"' - }, appConfig: { command: 'node ./util/buildAppConfig.js' }, - externalServices: { - command: 'node ./util/buildExternalServices.js' + android_studio: { + command: ' open -a open -a /Applications/Android\\ Studio.app platforms/android', + }, + build_android_debug: { + command: 'cordova prepare android && cordova build android --debug', + }, + build_android_release: { + command: 'cordova prepare android && cordova build android --release', + }, + build_ios_debug: { + command: 'cordova prepare ios && cordova build ios --debug', + options: { + maxBuffer: 3200 * 1024 + } + }, + build_ios_release: { + command: 'cordova prepare ios && cordova build ios --release', + options: { + maxBuffer: 1600 * 1024 + } + }, + chrome: { + command: 'make -C chrome-app ' }, clean: { command: 'rm -Rf bower_components node_modules' @@ -38,8 +44,35 @@ module.exports = function(grunt) { coveralls: { command: 'cat coverage/report-lcov/lcov.info |./node_modules/coveralls/bin/coveralls.js' }, - chrome: { - command: 'make -C chrome-app ' + create_dmg_dist: { + command: 'sh webkitbuilds/create-dmg-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' + }, + create_others_dist: { + command: 'sh webkitbuilds/create-others-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' + }, + create_pkg_dist: { + command: 'sh webkitbuilds/create-pkg-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>" "<%= pkg.nameCaseNoSpace %>" "<%= pkg.title %>"' + }, + externalServices: { + command: 'node ./util/buildExternalServices.js' + }, + get_nwjs_for_pkg: { + command: 'if [ ! -d ./cache/0.19.5-pkg/osx64/nwjs.app ]; then cd ./cache; curl https://dl.nwjs.io/v0.19.5-mas-beta/nwjs-mas-v0.19.5-osx-x64.zip --output nwjs.zip; unzip nwjs.zip; mkdir -p ./0.19.5-pkg/osx64; cp -R ./nwjs-mas-v0.19.5-osx-x64/nwjs.app ./0.19.5-pkg/osx64/; fi' + }, + log_android: { + command: 'adb logcat | grep chromium', + }, + run_android: { + command: 'cordova run android --device', + }, + sign_android: { + // When the build log outputs "Built the following apk(s):", it seems to need the filename to start with "android-release". + // It looks like it simply lists all apk files starting with "android-release" + command: 'rm -f platforms/android/build/outputs/apk/android-release-signed-*.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && zipalign -v 4 platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/bitcoin-com-wallet-<%= pkg.fullVersion %>-android-signed-aligned.apk', + stdin: true, + }, + sign_desktop_dist: { + command: 'sh webkitbuilds/sign-desktop-dist.sh "<%= pkg.name %>" "<%= pkg.fullVersion %>"' }, wpinit: { command: 'make -C cordova wp-init', @@ -47,40 +80,9 @@ module.exports = function(grunt) { wpcopy: { command: 'make -C cordova wp-copy', }, - iosdebug: { - command: 'npm run build:ios', - }, - ios: { - command: 'npm run build:ios-release', - }, xcode: { - command: 'npm run open:ios', - }, - androiddebug: { - command: 'npm run build:android', - }, - android: { - command: 'npm run build:android-release', - }, - androidrun: { - command: 'npm run run:android && npm run log:android', - }, - androidbuild: { - command: 'cd cordova/project && cordova build android --release', - }, - androidsign: { - command: 'rm -f cordova/project/platforms/android/build/outputs/apk/android-release-signed-aligned.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar cordova/project/platforms/android/build/outputs/apk/android-release-signed.apk cordova/project/platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && ../android-sdk-macosx/build-tools/27.0.1/zipalign -v 4 cordova/project/platforms/android/build/outputs/apk/android-release-signed.apk cordova/project/platforms/android/build/outputs/apk/android-release-signed-aligned.apk ', - stdin: true, - }, - desktopsign: { - cmd: 'gpg -u E0AE67E7 --output webkitbuilds/others/<%= pkg.title %>-linux.zip.sig --detach-sig webkitbuilds/others/<%= pkg.title %>-linux.zip ; gpg -u E0AE67E7 --output webkitbuilds/others/<%= pkg.title %>.exe.sig --detach-sig webkitbuilds/others/<%= pkg.title %>.exe' - }, - desktopverify: { - cmd: 'gpg --verify webkitbuilds/<%= pkg.title %>-linux.zip.sig webkitbuilds/<%= pkg.title %>-linux.zip; gpg --verify webkitbuilds/<%= pkg.title %>.exe.sig webkitbuilds/<%= pkg.title %>.exe' - }, - osxsign: { - cmd: 'gpg -u E0AE67E7 --output webkitbuilds/<%= pkg.title %>.dmg.sig --detach-sig webkitbuilds/<%= pkg.title %>.dmg' - }, + command: 'open platforms/ios/*.xcodeproj', + } }, watch: { options: { @@ -348,30 +350,48 @@ module.exports = function(grunt) { grunt.registerTask('wp', ['prod', 'exec:wp']); grunt.registerTask('wp-copy', ['default', 'exec:wpcopy']); grunt.registerTask('wp-init', ['default', 'exec:wpinit']); - grunt.registerTask('ios', ['exec:ios']); - grunt.registerTask('ios-debug', ['exec:iosdebug']); - grunt.registerTask('ios-run', ['exec:xcode']); grunt.registerTask('cordovaclean', ['exec:cordovaclean']); - grunt.registerTask('android-debug', ['exec:androiddebug', 'exec:androidrun']); - grunt.registerTask('android', ['exec:android']); - grunt.registerTask('android-release', ['prod', 'exec:android', 'exec:androidsign']); - grunt.registerTask('desktopsign', ['exec:desktopsign', 'exec:desktopverify']); + + // Build all + grunt.registerTask('build-app-release', ['build-mobile-release', 'build-desktop-release']); + + /** + * Mobile app + */ + + // Build mobile app + grunt.registerTask('build-mobile-release', ['build-ios-release', 'build-android-release']); + + // Build ios + grunt.registerTask('start-ios', ['exec:build_ios_debug', 'exec:xcode']); + grunt.registerTask('build-ios-debug', ['exec:build_ios_debug']); + grunt.registerTask('build-ios-release', ['prod', 'exec:build_ios_release']); + + // Build android + grunt.registerTask('start-android', ['build-android-debug', 'exec:run_android']); + grunt.registerTask('build-android-debug', ['exec:build_android_debug']); + grunt.registerTask('build-android-release', ['prod', 'exec:build_android_release', 'sign-android']); + grunt.registerTask('sign-android', ['exec:sign_android']); + + /** + * Desktop app + */ // Build desktop - grunt.registerTask('desktop-build', ['desktop-others', 'desktop-osx-dmg', 'desktop-osx-pkg']); + grunt.registerTask('build-desktop', ['build-desktop-others', 'build-desktop-osx-dmg', 'build-desktop-osx-pkg']); // Build desktop win64 & linux64 - grunt.registerTask('desktop-others', ['prod', 'nwjs:others', 'copy:linux', 'exec:create_others_dist']); + grunt.registerTask('build-desktop-others', ['prod', 'nwjs:others', 'copy:linux', 'exec:create_others_dist']); // Build desktop osx pkg - grunt.registerTask('desktop-osx-pkg', ['prod', 'exec:get_nwjs_for_pkg', 'nwjs:pkg', 'exec:create_pkg_dist']); + grunt.registerTask('build-desktop-osx-pkg', ['prod', 'exec:get_nwjs_for_pkg', 'nwjs:pkg', 'exec:create_pkg_dist']); // Build desktop osx dmg - grunt.registerTask('desktop-osx-dmg', ['prod', 'nwjs:dmg', 'exec:create_dmg_dist']); + grunt.registerTask('build-desktop-osx-dmg', ['prod', 'nwjs:dmg', 'exec:create_dmg_dist']); // Sign desktop - grunt.registerTask('desktop-sign', ['exec:sign_desktop_dist']); + grunt.registerTask('sign-desktop', ['exec:sign_desktop_dist']); // Release desktop - grunt.registerTask('desktop-release', ['desktop-build', 'desktop-sign']); + grunt.registerTask('build-desktop-release', ['build-desktop', 'sign-desktop']); }; diff --git a/README.md b/README.md index 56ae84eab..75ced5808 100644 --- a/README.md +++ b/README.md @@ -113,14 +113,14 @@ npm run start:desktop Before building the release version for a platform, run the `clean-all` command to delete any untracked files in your current working directory. (Be sure to stash any uncommited changes you've made.) This guarantees consistency across builds for the current state of this repository. -The `final` commands build the production version of the app, and bundle it with the release version of the platform being built. +The `build:*-release` commands build the production version of the app, and bundle it with the release version of the platform being built. ### Android ```sh npm run clean-all npm run apply:bitcoincom -npm run final:android +npm run build:android-release ``` ### iOS @@ -128,7 +128,7 @@ npm run final:android ```sh npm run clean-all npm run apply:bitcoincom -npm run final:ios +npm run build:ios-release ``` ### Desktop (Linux, macOS, and Windows) @@ -136,7 +136,7 @@ npm run final:ios ```sh npm run clean-all npm run apply:bitcoincom -npm run final:desktop +npm run build:desktop-release ``` ## About The Bitcoin.com Wallet diff --git a/app-template/package-template.json b/app-template/package-template.json index c42ef81b4..200c269f6 100644 --- a/app-template/package-template.json +++ b/app-template/package-template.json @@ -87,46 +87,52 @@ "bitcoincashjs-fork": "^1.0.3" }, "scripts": { - "postinstall": "bower install", - "start": "npm run build:www && ionic serve --nolivereload --nogulp -s --address 0.0.0.0", - "start:chrome": "npm run build:www && ionic serve --nolivereload --nogulp -s --address 0.0.0.0 --browser \"google chrome\"", - "start:ios": "npm run build:www && npm run build:ios && npm run open:ios", - "start:android": "npm run build:www && npm run build:android && npm run run:android", - "start:windows": "npm run build:www && npm run build:windows", - "start:desktop": "npm start", - "watch": "grunt watch", + "apply:bitcoincom": "npm i fs-extra && cd app-template && node apply.js bitcoincom && npm i && cordova prepare && cd ../ && ./fix-asn1.sh", + + "build:app-release": "grunt build-app-release", + + "build:mobile-release": "grunt build-mobile-release", + "build:desktop-release": "grunt build-desktop-release", + + "build:android-debug": "grunt build-android-debug", + "build:android-release": "grunt build-android-release", + + "build:ios-debug": "grunt build-ios-debug", + "build:ios-release": "grunt build-ios-release", + + "build:desktop": "grunt build-desktop", + "build:osx-pkg": "grunt build-desktop-osx-pkg", + "build:osx-dmg": "grunt build-desktop-osx-dmg", + "build:others": "grunt build-desktop-others", + + "build:windows": "cordova prepare windows && cordova build windows -- --arch=\"ARM\"", + "build:windows-release": "cordova prepare windows && cordova build windows --release --arch=\"ARM\"", "build:www": "grunt", "build:www-release": "grunt prod", - "build:ios": "cordova prepare ios && cordova build ios --debug", - "build:android": "cordova prepare android && cordova build android --debug", - "build:windows": "cordova prepare windows && cordova build windows -- --arch=\"ARM\"", - "build:ios-release": "cordova prepare ios && cordova build ios --release", - "build:android-release": "cordova prepare android && cordova build android --release", - "build:windows-release": "cordova prepare windows && cordova build windows --release --arch=\"ARM\"", - "build:desktop-release": "grunt desktop-release", - "build:desktop": "grunt desktop-build", - "build:osx-pkg": "grunt desktop-osx-pkg", - "build:osx-dmg": "grunt desktop-osx-dmg", - "build:others": "grunt desktop-others", - "sign:desktop": "grunt desktop-sign", - "open:ios": "open platforms/ios/*.xcodeproj", - "open:android": "open -a open -a /Applications/Android\\ Studio.app platforms/android", - "final:www": "npm run build:www-release", - "final:ios": "npm run final:www && npm run build:ios-release && npm run open:ios", - "final:android": "npm run final:www && npm run build:android-release && npm run sign:android && npm run run:android-release", - "final:windows": "npm run final:www && npm run build:windows-release", - "final:desktop": "npm run final:www && npm run build:desktop-release", - "run:android": "cordova run android --device", - "run:android-release": "cordova run android --device --release", - "log:android": "adb logcat | grep chromium", - "sign:android": "rm -f platforms/android/build/outputs/apk/android-release-signed-aligned.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && zipalign -v 4 platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-signed-aligned.apk", - "apply:copay": "npm i fs-extra && cd app-template && node apply.js copay && npm i && cordova prepare", - "apply:bitpay": "npm i fs-extra && cd app-template && node apply.js bitpay && npm i && cordova prepare", - "apply:bitcoincom": "npm i fs-extra && cd app-template && node apply.js bitcoincom && npm i && cordova prepare && cd ../ && ./fix-asn1.sh", - "test": "karma start test/karma.conf.js --single-run", + "clean": "trash platforms && trash plugins && cordova prepare", + "clean-all": "git clean -dfx", + + "log:android": "adb logcat | grep chromium", + + "open:android": "grunt exec:android_studio", + "open:ios": "grunt exec:xcode", + + "postinstall": "bower install", + + "sign:android": "grunt sign-android", + "sign:desktop": "grunt sign-desktop", + + "start": "npm run build:www && ionic serve --nolivereload --nogulp -s --address 0.0.0.0", + "start:chrome": "npm run build:www && ionic serve --nolivereload --nogulp -s --address 0.0.0.0 --browser \"google chrome\"", + "start:android": "grunt start-android", + "start:android-log": "grunt start-android && npm run log:android", + "start:ios": "grunt start-ios", + "start:windows": "npm run build:www && npm run build:windows", + + "test": "karma start test/karma.conf.js --single-run", "unstage-package": "git reset package.json", - "clean-all": "git clean -dfx" + "watch": "grunt watch" }, "devDependencies": { "cordova": "^6.3.1",