mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-25 17:25:14 +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
23
assets/linux/copyright
Normal file
23
assets/linux/copyright
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: INAV Configurator
|
||||||
|
Source: https://github.com/iNavFlight/inav-configurator
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: Copyright 2022 The INAV open source project
|
||||||
|
License: GPL-3
|
||||||
|
|
||||||
|
License: GPL-3
|
||||||
|
This program is free software: you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation, either version 3 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
.
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General Public License
|
||||||
|
can be found in `/usr/share/common-licenses/GPL-3'.
|
BIN
assets/linux/icon/inav_icon_128.png
Normal file
BIN
assets/linux/icon/inav_icon_128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
BIN
assets/linux/icon/inav_icon_english_128.png
Normal file
BIN
assets/linux/icon/inav_icon_english_128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
8
assets/linux/inav-configurator.desktop
Normal file
8
assets/linux/inav-configurator.desktop
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=INAV Configurator
|
||||||
|
Comment=Crossplatform configuration tool for the INAV flight control system
|
||||||
|
Exec=/opt/inav/inav-configurator/inav-configurator
|
||||||
|
Icon=/opt/inav/inav-configurator/icon/inav_icon_128.png
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Utility
|
146
gulpfile.js
146
gulpfile.js
|
@ -13,6 +13,8 @@ var semver = require('semver');
|
||||||
var gulp = require('gulp');
|
var gulp = require('gulp');
|
||||||
var concat = require('gulp-concat');
|
var concat = require('gulp-concat');
|
||||||
|
|
||||||
|
const commandExistsSync = require('command-exists').sync;
|
||||||
|
|
||||||
// Each key in the *sources* variable must be an array of
|
// Each key in the *sources* variable must be an array of
|
||||||
// the source files that will be combined into a single
|
// the source files that will be combined into a single
|
||||||
// file and stored in *outputDir*. Each key in *sources*
|
// file and stored in *outputDir*. Each key in *sources*
|
||||||
|
@ -365,8 +367,148 @@ gulp.task('release-osx64', function(done) {
|
||||||
archive.finalize();
|
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) {
|
function releaseLinux(bits) {
|
||||||
return function() {
|
return function() {
|
||||||
|
console.log(`Generating zip package for linux${bits}`);
|
||||||
var dirname = 'linux' + bits;
|
var dirname = 'linux' + bits;
|
||||||
var pkg = require('./package.json');
|
var pkg = require('./package.json');
|
||||||
var src = path.join(appsDir, pkg.name, dirname);
|
var src = path.join(appsDir, pkg.name, dirname);
|
||||||
|
@ -383,8 +525,8 @@ function releaseLinux(bits) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gulp.task('release-linux32', releaseLinux(32));
|
gulp.task('release-linux32', gulp.series(releaseLinux(32), post_build('linux32', appsDir), release_deb('linux32')));
|
||||||
gulp.task('release-linux64', releaseLinux(64));
|
gulp.task('release-linux64', gulp.series(releaseLinux(64), post_build('linux64', appsDir), release_deb('linux64'), release_rpm('linux64')));
|
||||||
|
|
||||||
// Create distributable .zip files in ./apps
|
// Create distributable .zip files in ./apps
|
||||||
gulp.task('release', gulp.series('apps', getPlatforms().map(function(v) { return 'release-' + v; })));
|
gulp.task('release', gulp.series('apps', getPlatforms().map(function(v) { return 'release-' + v; })));
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"archiver": "^2.0.3",
|
"archiver": "^2.0.3",
|
||||||
"bluebird": "3.4.1",
|
"bluebird": "3.4.1",
|
||||||
|
"command-exists": "^1.2.8",
|
||||||
"del": "^3.0.0",
|
"del": "^3.0.0",
|
||||||
"fs": "0.0.1-security",
|
"fs": "0.0.1-security",
|
||||||
"graceful-fs": "^4.2.0",
|
"graceful-fs": "^4.2.0",
|
||||||
|
@ -44,7 +45,9 @@
|
||||||
"xml2js": "^0.4.19"
|
"xml2js": "^0.4.19"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"gulp-debian": "^0.1.9",
|
||||||
"nw-builder": "^3.5.7",
|
"nw-builder": "^3.5.7",
|
||||||
|
"rpm-builder": "^1.2.1",
|
||||||
"semver": "6.3.0"
|
"semver": "6.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue