diff --git a/.github/workflows/release-matrix.yml b/.github/workflows/release-matrix.yml index 288abcb..981cf59 100644 --- a/.github/workflows/release-matrix.yml +++ b/.github/workflows/release-matrix.yml @@ -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 }} diff --git a/Dockerfile b/Dockerfile index 54b108e..036b6c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/docs/README.md b/docs/README.md index a80e8c1..dab0de0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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 diff --git a/modules/build.ts b/modules/build.ts index bd6681a..9161b25 100644 --- a/modules/build.ts +++ b/modules/build.ts @@ -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; +} \ No newline at end of file diff --git a/package.json b/package.json index 61443ce..e8b9758 100644 --- a/package.json +++ b/package.json @@ -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" } }