Rework Building

Should now be more modular, at the cost of human-readable names. It can now be used to build android versions, alpine versions, as well as arm for each supported platform
This commit is contained in:
AnimeDL 2024-02-05 21:21:06 -08:00
parent 103b17f449
commit 03e3c96f3c
5 changed files with 40 additions and 31 deletions

View file

@ -8,9 +8,10 @@ jobs:
build:
strategy:
matrix:
build_type: [ ubuntu, macos, windows ]
build_type: [ linux, macos, windows ]
build_arch: [ x64 ]
gui: [ gui, cli ]
runs-on: ${{ matrix.build_type }}-latest
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
@ -38,7 +39,7 @@ jobs:
with:
upload_url: ${{ github.event.release.upload_url }}
asset_name: multi-downloader-nx-${{ matrix.build_type }}-${{ matrix.gui }}.7z
asset_path: ./lib/_builds/multi-downloader-nx-${{ matrix.build_type }}64-${{ matrix.gui }}.7z
asset_path: ./lib/_builds/multi-downloader-nx-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ matrix.gui }}.7z
asset_content_type: application/x-7z-compressed
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -15,13 +15,13 @@ RUN echo 'ffmpeg: "./bin/ffmpeg/ffmpeg"\nmkvmerge: "./bin/mkvtoolnix/mkvmerge"'
RUN npm install -g pnpm
RUN pnpm i
RUN pnpm run build-ubuntu-gui
RUN pnpm run build-linux-gui
# Move build to new Clean Image
FROM node
WORKDIR "/app"
COPY --from=builder /app/lib/_builds/multi-downloader-nx-ubuntu64-gui ./
COPY --from=builder /app/lib/_builds/multi-downloader-nx-linux64-gui ./
# Install mkvmerge and ffmpeg

View file

@ -75,7 +75,7 @@ Afterwards run `pnpm run tsc false [true if you want gui, false otherwise]`.
If you want the `js` files you are done. Just `cd` into the `lib` folder, and run `node index.js --help` to get started with the CLI, or run `node gui.js` to run the GUI
If you want to package the application, run pnpm run build-`{platform}`-`{type}` where `{platform}` is the operating system (currently the choices are windows, ubuntu, macos, and arm) and `{type}` is cli or gui.
If you want to package the application, run pnpm run build-`{platform}`-`{type}` where `{platform}` is the operating system (currently the choices are windows, linux, macos, alpine, android, and arm) and `{type}` is cli or gui.
## DRM Decryption

View file

@ -9,7 +9,7 @@ import { console } from './log';
const buildsDir = './_builds';
const nodeVer = 'node18-';
type BuildTypes = `${'ubuntu'|'windows'|'macos'|'arm'}64`
type BuildTypes = `${'windows'|'macos'|'linux'|'linuxstatic'|'alpine'}-${'x64'|'arm64'}`|'linuxstatic-armv7'
(async () => {
const buildType = process.argv[2] as BuildTypes;
@ -21,16 +21,23 @@ type BuildTypes = `${'ubuntu'|'windows'|'macos'|'arm'}64`
// main
async function buildBinary(buildType: BuildTypes, gui: boolean) {
const buildStr = 'multi-downloader-nx';
const acceptableBuilds = ['windows64','ubuntu64','macos64'];
const acceptablePlatforms = ['windows','linux','linuxstatic','macos','alpine'];
const acceptableArchs = ['x64','arm64'];
const acceptableBuilds: string[] = ['linuxstatic-armv7'];
for (const platform of acceptablePlatforms) {
for (const arch of acceptableArchs) {
acceptableBuilds.push(platform+'-'+arch);
}
}
if(!acceptableBuilds.includes(buildType)){
console.error('[ERROR] unknown build type!');
console.error('Unknown build type!');
process.exit(1);
}
await modulesCleanup('.');
if(!fs.existsSync(buildsDir)){
fs.mkdirSync(buildsDir);
}
const buildFull = `${buildStr}-${buildType}-${gui ? 'gui' : 'cli'}`;
const buildFull = `${buildStr}-${getFriendlyName(buildType)}-${gui ? 'gui' : 'cli'}`;
const buildDir = `${buildsDir}/${buildFull}`;
if(fs.existsSync(buildDir)){
fs.removeSync(buildDir);
@ -38,7 +45,7 @@ async function buildBinary(buildType: BuildTypes, gui: boolean) {
fs.mkdirSync(buildDir);
const buildConfig = [
gui ? 'gui.js' : 'index.js',
'--target', nodeVer + getTarget(buildType),
'--target', nodeVer + buildType,
'--output', `${buildDir}/${pkg.short_name}`,
];
console.info(`[Build] Build configuration: ${buildFull}`);
@ -70,15 +77,12 @@ async function buildBinary(buildType: BuildTypes, gui: boolean) {
execSync(`7z a -t7z "${buildsDir}/${buildFull}.7z" "${buildDir}"`,{stdio:[0,1,2]});
}
function getTarget(bt: string) : string {
switch(bt){
case 'windows64':
return 'windows-x64';
case 'ubuntu64':
return 'linux-x64';
case 'macos64':
return 'macos-x64';
default:
return 'windows-x64';
function getFriendlyName(buildString: string): string {
if (buildString.includes('armv7')) {
return 'android';
}
}
if (buildString.includes('linuxstatic')) {
buildString = buildString.replace('linuxstatic', 'linux');
}
return buildString;
}

View file

@ -97,18 +97,22 @@
"docs": "ts-node modules/build-docs.ts",
"tsc": "ts-node tsc.ts",
"prebuild-cli": "pnpm run tsc false false",
"build-windows-cli": "pnpm run prebuild-cli && cd lib && node modules/build windows64",
"build-ubuntu-cli": "pnpm run prebuild-cli && cd lib && node modules/build ubuntu64",
"build-arm-cli": "pnpm run prebuild-cli && cd lib && node modules/build arm64",
"build-macos-cli": "pnpm run prebuild-cli && cd lib && node modules/build macos64",
"build-windows-cli": "pnpm run prebuild-cli && cd lib && node modules/build windows-x64",
"build-linux-cli": "pnpm run prebuild-cli && cd lib && node modules/build linux-x64",
"build-arm-cli": "pnpm run prebuild-cli && cd lib && node modules/build linux-arm64",
"build-macos-cli": "pnpm run prebuild-cli && cd lib && node modules/build macos-x64",
"build-alpine-cli": "pnpm run prebuild-cli && cd lib && node modules/build alpine-x64",
"build-android-cli": "pnpm run prebuild-cli && cd lib && node modules/build linuxstatic-armv7",
"prebuild-gui": "pnpm run tsc",
"build-windows-gui": "pnpm run prebuild-gui && cd lib && node modules/build windows64 true",
"build-ubuntu-gui": "pnpm run prebuild-gui && cd lib && node modules/build ubuntu64 true",
"build-arm-gui": "pnpm run prebuild-gui && cd lib && node modules/build arm64 true",
"build-macos-gui": "pnpm run prebuild-gui && cd lib && node modules/build macos64 true",
"build-windows-gui": "pnpm run prebuild-gui && cd lib && node modules/build windows-x64 true",
"build-linux-gui": "pnpm run prebuild-gui && cd lib && node modules/build linux-x64 true",
"build-arm-gui": "pnpm run prebuild-gui && cd lib && node modules/build linux-arm64 true",
"build-macos-gui": "pnpm run prebuild-gui && cd lib && node modules/build macos-x64 true",
"build-alpine-gui": "pnpm run prebuild-gui && cd lib && node modules/build alpine-x64 true",
"build-android-gui": "pnpm run prebuild-gui && cd lib && node modules/build linuxstatic-armv7 true",
"eslint": "eslint *.js modules",
"eslint-fix": "eslint *.js modules --fix",
"pretest": "pnpm run tsc",
"test": "pnpm run pretest && cd lib && node modules/build windows64 && node modules/build ubuntu64 && node modules/build macos64"
"test": "pnpm run pretest && cd lib && node modules/build windows-x64 && node modules/build linux-x64 && node modules/build macos-x64 && node modules/build alpine-x64"
}
}