1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-20 14:55:15 +03:00
betaflight-configurator/gulpfile.js
sebastianp 805ec6063a Added Windows and Mac icons files
Build native Mac and Windows apps. Shamelessly stolen from iNAV, thanks!

NW.js requires us to disable pointer events on the inline images,
otherwise the drag/drop events are generated for the images rather
than for the html elements representing OSD items.
2017-11-04 18:27:33 +11:00

242 lines
No EOL
8 KiB
JavaScript

'use strict';
var child_process = require('child_process');
var fs = require('fs');
var path = require('path');
var archiver = require('archiver');
var del = require('del');
var NwBuilder = require('nw-builder');
var gulp = require('gulp');
var concat = require('gulp-concat');
var runSequence = require('run-sequence');
var distDir = './dist/';
var appsDir = './apps/';
function get_task_name(key) {
return 'build-' + key.replace(/([A-Z])/g, function ($1) { return "-" + $1.toLowerCase(); });
}
gulp.task('clean', function () { return del(['./dist/**'], { force: true }); });
// Real work for dist task. Done in another task to call it via
// run-sequence.
gulp.task('dist-build', [], function () {
var distSources = [
// CSS files
'./main.css',
'./tabs/power.css',
'./tabs/firmware_flasher.css',
'./tabs/onboard_logging.css',
'./tabs/receiver.css',
'./tabs/cli.css',
'./tabs/servos.css',
'./tabs/adjustments.css',
'./tabs/configuration.css',
'./tabs/auxiliary.css',
'./tabs/pid_tuning.css',
'./tabs/transponder.css',
'./tabs/gps.css',
'./tabs/led_strip.css',
'./tabs/sensors.css',
'./tabs/osd.css',
'./tabs/motors.css',
'./tabs/receiver_msp.css',
'./tabs/logging.css',
'./tabs/landing.css',
'./tabs/setup_osd.css',
'./tabs/help.css',
'./tabs/failsafe.css',
'./tabs/ports.css',
'./tabs/setup.css',
'./css/opensans_webfontkit/fonts.css',
'./css/dropdown-lists/css/style_lists.css',
'./css/font-awesome/css/font-awesome.min.css',
'./js/libraries/flightindicators.css',
'./js/libraries/jbox/jBox.css',
'./js/libraries/jbox/themes/NoticeBorder.css',
'./js/libraries/jbox/themes/ModalBorder.css',
'./js/libraries/jbox/themes/TooltipDark.css',
'./js/libraries/jbox/themes/TooltipBorder.css',
'./js/libraries/jquery.nouislider.pips.min.css',
'./js/libraries/switchery/switchery.css',
'./js/libraries/jquery.nouislider.min.css',
'./node_modules/jquery-ui-npm/jquery-ui.min.css',
'./node_modules/jquery-ui-npm/jquery-ui.theme.min.css',
'./node_modules/jquery-ui-npm/jquery-ui.structure.min.css',
// JavaScript
'./js/libraries/q.js',
'./js/libraries/jquery-2.1.4.min.js',
'./js/libraries/jquery-ui-1.11.4.min.js',
'./js/libraries/d3.min.js',
'./js/libraries/jquery.nouislider.all.min.js',
'./js/libraries/three/three.min.js',
'./js/libraries/three/Projector.js',
'./js/libraries/three/CanvasRenderer.js',
'./js/libraries/jquery.flightindicators.js',
'./js/libraries/semver.js',
'./js/libraries/jbox/jBox.min.js',
'./js/libraries/switchery/switchery.js',
'./js/libraries/bluebird.min.js',
'./js/libraries/jquery.ba-throttle-debounce.min.js',
'./js/libraries/inflection.min.js',
'./js/injected_methods.js',
'./js/data_storage.js',
'./js/workers/hex_parser.js',
'./js/fc.js',
'./js/port_handler.js',
'./js/port_usage.js',
'./js/serial.js',
'./js/gui.js',
'./js/huffman.js',
'./js/default_huffman_tree.js',
'./js/model.js',
'./js/serial_backend.js',
'./js/msp/MSPCodes.js',
'./js/msp.js',
'./js/msp/MSPHelper.js',
'./js/backup_restore.js',
'./js/peripherals.js',
'./js/protocols/stm32.js',
'./js/protocols/stm32usbdfu.js',
'./js/localization.js',
'./js/boards.js',
'./js/RateCurve.js',
'./js/Features.js',
'./js/Beepers.js',
'./tabs/adjustments.js',
'./tabs/auxiliary.js',
'./tabs/cli.js',
'./tabs/configuration.js',
'./tabs/failsafe.js',
'./tabs/firmware_flasher.js',
'./tabs/gps.js',
'./tabs/help.js',
'./tabs/landing.js',
'./tabs/led_strip.js',
'./tabs/logging.js',
'./tabs/map.js',
'./tabs/motors.js',
'./tabs/onboard_logging.js',
'./tabs/osd.js',
'./tabs/pid_tuning.js',
'./tabs/ports.js',
'./tabs/power.js',
'./tabs/receiver.js',
'./tabs/receiver_msp.js',
'./tabs/sensors.js',
'./tabs/servos.js',
'./tabs/setup.js',
'./tabs/setup_osd.js',
'./tabs/transponder.js',
'./main.js',
// everything else
'./package.json', // For NW.js
'./manifest.json', // For Chrome app
'./eventPage.js',
'./*.html',
'./tabs/*.html',
'./images/**/*',
'./_locales/**/*',
'./css/font-awesome/fonts/*',
'./css/opensans_webfontkit/*.{eot,svg,ttf,woff,woff2}',
'./resources/*.json',
'./resources/models/*',
'./resources/osd/*.mcm',
'./resources/motor_order/*.svg',
];
return gulp.src(distSources, { base: '.' })
.pipe(gulp.dest(distDir));
});
gulp.task('dist', function () {
return runSequence('clean', 'dist-build');
});
// Create app directories in ./apps
gulp.task('apps', ['dist'], function (done) {
var builder = new NwBuilder({
files: './dist/**/*',
buildDir: appsDir,
platforms: ['osx64', 'win32'], // 'linux64' not working currently.
flavor: 'normal',
macIcns: './images/bf_icon.icns',
macPlist: { 'CFBundleDisplayName': 'Betaflight Configurator'},
winIco: './images/bf_icon.ico',
});
builder.on('log', console.log);
builder.build(function (err) {
if (err) {
console.log("Error building NW apps:" + err);
done();
return;
}
// Package apps as .zip files
done();
});
});
function get_release_filename(platform, ext) {
var pkg = require('./package.json');
return 'Betaflight-Configurator_' + platform + '_' + pkg.version + '.' + ext;
}
gulp.task('release-windows', function () {
var pkg = require('./package.json');
var src = path.join(appsDir, pkg.name, 'win32');
var output = fs.createWriteStream(path.join(appsDir, get_release_filename('win32', 'zip')));
var archive = archiver('zip', {
zlib: { level: 9 }
});
archive.on('warning', function (err) { throw err; });
archive.on('error', function (err) { throw err; });
archive.pipe(output);
archive.directory(src, 'Betaflight Configurator');
return archive.finalize();
});
gulp.task('release-linux', function () {
var pkg = require('./package.json');
var src = path.join(appsDir, pkg.name, 'linux64');
var output = fs.createWriteStream(path.join(appsDir, get_release_filename('linux64', 'zip')));
var archive = archiver('zip', {
zlib: { level: 9 }
});
archive.on('warning', function (err) { throw err; });
archive.on('error', function (err) { throw err; });
archive.pipe(output);
archive.directory(src, 'Betaflight Configurator');
return archive.finalize();
});
gulp.task('release-macos', function () {
var pkg = require('./package.json');
var src = path.join(appsDir, pkg.name, 'osx64', pkg.name + '.app');
// Check if we want to sign the .app bundle
if (process.env.CODESIGN_IDENTITY) {
var sign_cmd = 'codesign --verbose --force --sign "' + process.env.CODESIGN_IDENTITY + '" ' + src;
child_process.execSync(sign_cmd);
}
var output = fs.createWriteStream(path.join(appsDir, get_release_filename('macOS', 'zip')));
var archive = archiver('zip', {
zlib: { level: 9 }
});
archive.on('warning', function (err) { throw err; });
archive.on('error', function (err) { throw err; });
archive.pipe(output);
console.log("Archiving MacOS app at " + src);
archive.directory(src, 'Betaflight Configurator.app');
return archive.finalize();
});
// Create distributable .zip files in ./apps
gulp.task('release', function () {
// TODO: Linux
return runSequence('apps', 'release-macos', 'release-windows');
});
gulp.task('default', ['apps']);