mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-24 16:55:22 +03:00
deb and rpm builders added
This commit is contained in:
parent
f53d2b166b
commit
ccdf737538
6 changed files with 178 additions and 2 deletions
146
gulpfile.js
146
gulpfile.js
|
@ -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; })));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue