Binder/buildlinuxappimage.js

152 lines
3.6 KiB
JavaScript

const fs = require('node:fs');
const process = require("node:process");
const {execSync, exec} = require('node:child_process')
const binderPortable = "out/Binder-linux-x64";
const excludeList = `"libatk-1.0.so.0
libatk-bridge-2.0.so.0,
libatspi.so.0,
libavahi-client.so.3,
libavahi-common.so.3,
libblkid.so.1,
libbsd.so.0,
libcairo-gobject.so.2,
libcairo.so.2,
libcups.so.2,
libdatrie.so.1,
libdbus-1.so.3,
libepoxy.so.0,
libffi.so.6,
libgcrypt.so.20,
libgdk-3.so.0,
libgdk_pixbuf-2.0.so.0,
libgio-2.0.so.0,
libglib-2.0.so.0,
libgmodule-2.0.so.0,
libgnutls.so.30,
libgobject-2.0.so.0,
libgraphite2.so.3,
libgssapi_krb5.so.2,
libgtk-3.so.0,
libhogweed.so.4,
libidn2.so.0,
libk5crypto.so.3,
libkeyutils.so.1,
libkrb5.so.3,
libkrb5support.so.0,
liblz4.so.1,
liblzma.so.5,
libmount.so.1,
libnettle.so.6,
libnspr4.so,
libnss3.so,
libnssutil3.so,
libpango-1.0.so.0,
libpangocairo-1.0.so.0,
libpangoft2-1.0.so.0,
libpcre.so.3,
libpixman-1.so.0,
libplc4.so,
libplds4.so,
libpng16.so.16,
libselinux.so.1,
libsmime3.so,
libsystemd.so.0,
libtasn1.so.6,
libunistring.so.2,
libwayland-client.so.0,
libwayland-cursor.so.0,
libwayland-egl.so.1,
libwayland-server.so.0,
libXau.so.6,
libxcb-render.so.0,
libxcb-shm.so.0,
libXcomposite.so.1,
libXcursor.so.1,
libXdamage.so.1,
libXdmcp.so.6,
libXext.so.6,
libXfixes.so.3,
libXinerama.so.1,
libXi.so.6"`
function addIconToAppDir(resolution)
{
var theDir = "out/AppDir/usr/share/icons/hicolor/" + resolution + "x" + resolution + "/apps";
var theDestPath = theDir + "/binder.png"
var srcPath = "icons/icon" + resolution + ".png";
fs.mkdirSync(theDir, {recursive: true});
fs.copyFileSync(srcPath, theDestPath);
}
function constructAppImage(versionString)
{
try
{
fs.rmSync("out/AppDir", {recursive: true, force: true});
}
catch
{
//pass
}
fs.mkdirSync("out/AppDir/usr/bin", {recursive: true});
//this is a fucking mess wtf
fs.renameSync(binderPortable, "out/AppDir/usr/bin");
//fs.mkdirSync("out/AppDir/usr/lib", {recursive: true});
fs.mkdirSync("out/AppDir/usr/share/applications", {recursive: true});
fs.copyFileSync("AppRun", "out/AppDir/AppRun");
//Appimagetool seems to be fine with just the appimage at the AppDir level but
// I don't know the specifics and it looks like linuxdeployqt leaves it in bother
// places so lets just do that to be safe
fs.copyFileSync("Binder.desktop", "out/AppDir/usr/share/applications/Binder.desktop");
fs.copyFileSync("Binder.desktop", "out/AppDir/Binder.desktop");
fs.copyFileSync("Binder.desktop", "out/AppDir/Binder.desktop");
//Also it wants a specific icon
fs.copyFileSync( "icons/icon256.png", "out/AppDir/binder.png");
addIconToAppDir(16);
addIconToAppDir(24);
addIconToAppDir(32);
addIconToAppDir(48);
addIconToAppDir(64);
addIconToAppDir(96);
addIconToAppDir(128);
addIconToAppDir(256);
fs.mkdirSync("out/AppDir/usr/share/icons/hicolor/scalable", {recursive: true});
fs.copyFileSync("icons/icon.svg", "out/AppDir/usr/share/icons/hicolor/scalable/binder.svg");
//Do this or deal with a weird character in the output
versionString = versionString.trim();
console.log("version tag: " + versionString);
const newEnv = {...process.env, VERSION: versionString, ARCH: "x86_64"};
console.log("Using environment variables: " + JSON.stringify(newEnv));
process.chdir('out');
execSync("appimagetool AppDir", {env: newEnv});
}
async function doTheDo()
{
console.log("Henlo wurl :3c");
//console.log("Package ver: " + process.env.npm_package_version);
constructAppImage(process.env.npm_package_version);
}
doTheDo();