|
|
|
@ -13,6 +13,8 @@ var semver = require('semver');
|
|
|
|
|
var gulp = require('gulp');
|
|
|
|
|
var concat = require('gulp-concat');
|
|
|
|
|
|
|
|
|
|
const commandExistsSync = require('command-exists').sync;
|
|
|
|
|
|
|
|
|
|
// Each key in the *sources* variable must be an array of
|
|
|
|
|
// the source files that will be combined into a single
|
|
|
|
|
// file and stored in *outputDir*. Each key in *sources*
|
|
|
|
@ -365,8 +367,148 @@ gulp.task('release-osx64', function(done) {
|
|
|
|
|
archive.finalize();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function post_build(arch, folder) {
|
|
|
|
|
return function post_build_linux(done) {
|
|
|
|
|
if ((arch === 'linux32') || (arch === 'linux64')) {
|
|
|
|
|
const metadata = require('./package.json');
|
|
|
|
|
// Copy Ubuntu launcher scripts to destination dir
|
|
|
|
|
const launcherDir = path.join(folder, metadata.name, arch);
|
|
|
|
|
console.log(`Copy Ubuntu launcher scripts to ${launcherDir}`);
|
|
|
|
|
return gulp.src('assets/linux/**')
|
|
|
|
|
.pipe(gulp.dest(launcherDir));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return done();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Create the dir directory, with write permissions
|
|
|
|
|
function createDirIfNotExists(dir) {
|
|
|
|
|
fs.mkdir(dir, '0775', function(err) {
|
|
|
|
|
if (err && err.code !== 'EEXIST') {
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function release_deb(arch) {
|
|
|
|
|
return function release_deb_proc(done) {
|
|
|
|
|
// Check if dpkg-deb exists
|
|
|
|
|
if (!commandExistsSync('dpkg-deb')) {
|
|
|
|
|
console.warn(`dpkg-deb command not found, not generating deb package for ${arch}`);
|
|
|
|
|
done();
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const deb = require('gulp-debian');
|
|
|
|
|
const LINUX_INSTALL_DIR = '/opt/inav';
|
|
|
|
|
const metadata = require('./package.json');
|
|
|
|
|
|
|
|
|
|
console.log(`Generating deb package for ${arch}`);
|
|
|
|
|
|
|
|
|
|
return gulp.src([path.join(appsDir, metadata.name, arch, '*')])
|
|
|
|
|
.pipe(deb({
|
|
|
|
|
package: metadata.name,
|
|
|
|
|
version: metadata.version,
|
|
|
|
|
section: 'base',
|
|
|
|
|
priority: 'optional',
|
|
|
|
|
architecture: getLinuxPackageArch('deb', arch),
|
|
|
|
|
maintainer: metadata.author,
|
|
|
|
|
description: metadata.description,
|
|
|
|
|
preinst: [`rm -rf ${LINUX_INSTALL_DIR}/${metadata.name}`],
|
|
|
|
|
postinst: [
|
|
|
|
|
`chown root:root ${LINUX_INSTALL_DIR}`,
|
|
|
|
|
`chown -R root:root ${LINUX_INSTALL_DIR}/${metadata.name}`,
|
|
|
|
|
`xdg-desktop-menu install ${LINUX_INSTALL_DIR}/${metadata.name}/${metadata.name}.desktop`,
|
|
|
|
|
],
|
|
|
|
|
prerm: [`xdg-desktop-menu uninstall ${metadata.name}.desktop`],
|
|
|
|
|
depends: ['libgconf-2-4', 'libatomic1'],
|
|
|
|
|
changelog: [],
|
|
|
|
|
_target: `${LINUX_INSTALL_DIR}/${metadata.name}`,
|
|
|
|
|
_out: appsDir,
|
|
|
|
|
_copyright: 'assets/linux/copyright',
|
|
|
|
|
_clean: true,
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function release_rpm(arch) {
|
|
|
|
|
return function release_rpm_proc(done) {
|
|
|
|
|
// Check if rpmbuild exists
|
|
|
|
|
if (!commandExistsSync('rpmbuild')) {
|
|
|
|
|
console.warn(`rpmbuild command not found, not generating rpm package for ${arch}`);
|
|
|
|
|
done();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const buildRpm = require('rpm-builder');
|
|
|
|
|
const NAME_REGEX = /-/g;
|
|
|
|
|
const LINUX_INSTALL_DIR = '/opt/inav';
|
|
|
|
|
const metadata = require('./package.json');
|
|
|
|
|
|
|
|
|
|
console.log(`Generating rpm package for ${arch}`);
|
|
|
|
|
|
|
|
|
|
// The buildRpm does not generate the folder correctly, manually
|
|
|
|
|
createDirIfNotExists(appsDir);
|
|
|
|
|
|
|
|
|
|
const options = {
|
|
|
|
|
name: metadata.name,
|
|
|
|
|
version: metadata.version.replace(NAME_REGEX, '_'), // RPM does not like release candidate versions
|
|
|
|
|
buildArch: getLinuxPackageArch('rpm', arch),
|
|
|
|
|
vendor: metadata.author,
|
|
|
|
|
summary: metadata.description,
|
|
|
|
|
license: 'GNU General Public License v3.0',
|
|
|
|
|
requires: ['libgconf-2-4', 'libatomic1'],
|
|
|
|
|
prefix: '/opt',
|
|
|
|
|
files: [{
|
|
|
|
|
cwd: path.join(appsDir, metadata.name, arch),
|
|
|
|
|
src: '*',
|
|
|
|
|
dest: `${LINUX_INSTALL_DIR}/${metadata.name}`,
|
|
|
|
|
}],
|
|
|
|
|
postInstallScript: [`xdg-desktop-menu install ${LINUX_INSTALL_DIR}/${metadata.name}/${metadata.name}.desktop`],
|
|
|
|
|
preUninstallScript: [`xdg-desktop-menu uninstall ${metadata.name}.desktop`],
|
|
|
|
|
tempDir: path.join(appsDir, `tmp-rpm-build-${arch}`),
|
|
|
|
|
keepTemp: false,
|
|
|
|
|
verbose: false,
|
|
|
|
|
rpmDest: appsDir,
|
|
|
|
|
execOpts: { maxBuffer: 1024 * 1024 * 16 },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
buildRpm(options, function(err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
console.error(`Error generating rpm package: ${err}`);
|
|
|
|
|
}
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getLinuxPackageArch(type, arch) {
|
|
|
|
|
let packArch;
|
|
|
|
|
|
|
|
|
|
switch (arch) {
|
|
|
|
|
case 'linux32':
|
|
|
|
|
packArch = 'i386';
|
|
|
|
|
break;
|
|
|
|
|
case 'linux64':
|
|
|
|
|
if (type === 'rpm') {
|
|
|
|
|
packArch = 'x86_64';
|
|
|
|
|
} else {
|
|
|
|
|
packArch = 'amd64';
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
console.error(`Package error, arch: ${arch}`);
|
|
|
|
|
process.exit(1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return packArch;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function releaseLinux(bits) {
|
|
|
|
|
return function() {
|
|
|
|
|
console.log(`Generating zip package for linux${bits}`);
|
|
|
|
|
var dirname = 'linux' + bits;
|
|
|
|
|
var pkg = require('./package.json');
|
|
|
|
|
var src = path.join(appsDir, pkg.name, dirname);
|
|
|
|
@ -383,8 +525,8 @@ function releaseLinux(bits) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gulp.task('release-linux32', releaseLinux(32));
|
|
|
|
|
gulp.task('release-linux64', releaseLinux(64));
|
|
|
|
|
gulp.task('release-linux32', gulp.series(releaseLinux(32), post_build('linux32', appsDir), release_deb('linux32')));
|
|
|
|
|
gulp.task('release-linux64', gulp.series(releaseLinux(64), post_build('linux64', appsDir), release_deb('linux64'), release_rpm('linux64')));
|
|
|
|
|
|
|
|
|
|
// Create distributable .zip files in ./apps
|
|
|
|
|
gulp.task('release', gulp.series('apps', getPlatforms().map(function(v) { return 'release-' + v; })));
|
|
|
|
|