updated build workflow and added checksum generator

This commit is contained in:
stratumadev 2025-10-09 15:18:48 +02:00
parent 5acf56efc5
commit 5a85d9d195
4 changed files with 148 additions and 35 deletions

View file

@ -1,32 +0,0 @@
# This workflow will build a Node project with Docker
name: build and push docker image
on:
release:
types: [published]
workflow_dispatch:
jobs:
build-node:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
if: ${{ github.ref == 'refs/heads/master' }}
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker images
uses: docker/build-push-action@v2.9.0
with:
github-token: ${{ github.token }}
push: ${{ github.ref == 'refs/heads/master' }}
tags: |
"multidl/multi-downloader-nx:latest"
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View file

@ -6,6 +6,127 @@ on:
jobs:
build:
strategy:
matrix:
include:
# WINDOWS
- os: ubuntu-latest
build_type: windows
build_arch: x64
gui: cli
- os: macos-latest
build_type: windows
build_arch: arm64
gui: cli
- os: ubuntu-latest
build_type: windows
build_arch: x64
gui: gui
- os: macos-latest
build_type: windows
build_arch: arm64
gui: gui
# MACOS
- os: ubuntu-latest
build_type: macos
build_arch: x64
gui: cli
- os: macos-latest
build_type: macos
build_arch: arm64
gui: cli
- os: ubuntu-latest
build_type: macos
build_arch: x64
gui: gui
- os: macos-latest
build_type: macos
build_arch: arm64
gui: gui
# LINUX
- os: ubuntu-latest
build_type: linux
build_arch: x64
gui: cli
- os: macos-latest
build_type: linux
build_arch: arm64
gui: cli
- os: ubuntu-latest
build_type: android
build_arch: armv7
gui: cli
- os: ubuntu-latest
build_type: linux
build_arch: x64
gui: gui
- os: macos-latest
build_type: linux
build_arch: arm64
gui: gui
- os: ubuntu-latest
build_type: android
build_arch: armv7
gui: gui
# ALPINE
- os: ubuntu-latest
build_type: alpine
build_arch: x64
gui: cli
- os: macos-latest
build_type: alpine
build_arch: arm64
gui: cli
- os: ubuntu-latest
build_type: alpine
build_arch: x64
gui: gui
- os: macos-latest
build_type: alpine
build_arch: arm64
gui: gui
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: pnpm/action-setup@v2
with:
version: latest
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 22
check-latest: true
- name: Install Node modules
run: |
pnpm install
- name: Get name and version from package.json
run: |
test -n $(node -p -e "require('./package.json').name") &&
test -n $(node -p -e "require('./package.json').version") &&
echo PACKAGE_NAME=$(node -p -e "require('./package.json').name") >> $GITHUB_ENV &&
echo PACKAGE_VERSION=$(node -p -e "require('./package.json').version") >> $GITHUB_ENV || exit 1
- name: Make build
run: pnpm run build-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ matrix.gui }}
- name: Upload release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_name: multi-downloader-nx-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ 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 }}
- name: Upload SHA256 checksum
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ github.event.release.upload_url }}
asset_name: multi-downloader-nx-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ matrix.gui }}.7z.sha256
asset_path: ./lib/_builds/multi-downloader-nx-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ matrix.gui }}.7z.sha256
asset_content_type: text/plain
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-arm64:
strategy:
matrix:
build_type: [linux, macos, windows]
@ -33,7 +154,7 @@ jobs:
echo PACKAGE_NAME=$(node -p -e "require('./package.json').name") >> $GITHUB_ENV &&
echo PACKAGE_VERSION=$(node -p -e "require('./package.json').version") >> $GITHUB_ENV || exit 1
- name: Make build
run: pnpm run build-${{ matrix.build_type }}-${{ matrix.gui }}
run: pnpm run build-${{ matrix.build_type }}-${{ matrix.build_arch }}-${{ matrix.gui }}
- name: Upload release
uses: actions/upload-release-asset@v1
with:

View file

@ -1,4 +1,5 @@
// build requirements
import crypto from 'crypto';
import fs from 'fs-extra';
import pkg from '../package.json';
import modulesCleanup from 'removeNPMAbsolutePaths';
@ -67,6 +68,7 @@ async function buildBinary(buildType: BuildTypes, gui: boolean) {
if (build.errors?.length > 0) console.error(build.errors);
if (build.warnings?.length > 0) console.warn(build.warnings);
// Compiling single executable
const buildConfig = [`${buildsDir}/index.cjs`, '--target', nodeVer + buildType, '--output', `${buildDir}/${pkg.short_name}`, '--public', '--compress', 'GZip'];
console.info(`[Build] Build configuration: ${buildFull}`);
try {
@ -75,6 +77,8 @@ async function buildBinary(buildType: BuildTypes, gui: boolean) {
console.info(e);
process.exit(1);
}
// Moving required default files/folders into build dir
fs.mkdirSync(`${buildDir}/config`);
fs.mkdirSync(`${buildDir}/videos`);
fs.mkdirSync(`${buildDir}/widevine`);
@ -95,7 +99,27 @@ async function buildBinary(buildType: BuildTypes, gui: boolean) {
if (fs.existsSync(`${buildsDir}/${buildFull}.7z`)) {
fs.removeSync(`${buildsDir}/${buildFull}.7z`);
}
console.info(`[Build] Build completed`);
// Zipping
console.info(`[Zip] Zipping build...`);
execSync(`7z a -t7z "${buildsDir}/${buildFull}.7z" "${buildDir}"`, { stdio: [0, 1, 2] });
console.info(`[Zip] Zipping completed`);
// Checksum
const zipPath = path.join(buildsDir, `${buildFull}.7z`);
const hashPath = path.join(buildsDir, `${buildFull}.7z.sha256`);
console.info(`[Checksum] Generating SHA256 checksum...`);
const hash = crypto.createHash('sha256');
const stream = fs.createReadStream(zipPath);
const checksum = await new Promise<string>((resolve, reject) => {
stream.on('data', (chunk) => hash.update(chunk));
stream.on('end', () => resolve(hash.digest('hex')));
stream.on('error', reject);
});
fs.writeFileSync(hashPath, `${checksum} ${path.basename(zipPath)}\n`);
console.info(`[Checksum] Checksum created: ${hashPath}`);
console.info(`[Checksum] SHA256: ${checksum}`);
}
function getFriendlyName(buildString: string): string {

View file

@ -108,21 +108,21 @@
"build-windows-arm64-cli": "pnpm run prebuild-cli && cd lib && node modules/build windows-arm64",
"build-linux-x64-cli": "pnpm run prebuild-cli && cd lib && node modules/build linuxstatic-x64",
"build-linux-arm64-cli": "pnpm run prebuild-cli && cd lib && node modules/build linuxstatic-arm64",
"build-linux-armv7-cli": "pnpm run prebuild-cli && cd lib && node modules/build linuxstatic-armv7",
"build-macos-x64-cli": "pnpm run prebuild-cli && cd lib && node modules/build macos-x64",
"build-macos-arm64-cli": "pnpm run prebuild-cli && cd lib && node modules/build macos-arm64",
"build-alpine-x64-cli": "pnpm run prebuild-cli && cd lib && node modules/build alpine-x64",
"build-alpine-arm64-cli": "pnpm run prebuild-cli && cd lib && node modules/build alpine-arm64",
"build-android-cli": "pnpm run prebuild-cli && cd lib && node modules/build linuxstatic-armv7",
"prebuild-gui": "pnpm run tsc",
"build-windows-x64-gui": "pnpm run prebuild-gui && cd lib && node modules/build windows-x64 true",
"build-windows-arm64-gui": "pnpm run prebuild-gui && cd lib && node modules/build windows-arm64 true",
"build-linux-x64-gui": "pnpm run prebuild-gui && cd lib && node modules/build linuxstatic-x64 true",
"build-linux-arm64-gui": "pnpm run prebuild-gui && cd lib && node modules/build linuxstatic-arm64 true",
"build-linux-armv7-gui": "pnpm run prebuild-gui && cd lib && node modules/build linuxstatic-armv7 true",
"build-macos-x64-gui": "pnpm run prebuild-gui && cd lib && node modules/build macos-x64 true",
"build-macos-arm64-gui": "pnpm run prebuild-gui && cd lib && node modules/build macos-arm64 true",
"build-alpine-x64-gui": "pnpm run prebuild-gui && cd lib && node modules/build alpine-x64 true",
"build-alpine-arm64-gui": "pnpm run prebuild-gui && cd lib && node modules/build alpine-arm64 true",
"build-android-gui": "pnpm run prebuild-gui && cd lib && node modules/build linuxstatic-armv7 true",
"test-x64": "pnpm run pretest && cd lib && node modules/build windows-x64 && node modules/build macos-x64 && node modules/build linuxstatic-x64 && node modules/build alpine-x64 && node modules/build linuxstatic-armv7",
"test-arm64": "pnpm run pretest && cd lib && node modules/build windows-arm64 && node modules/build macos-arm64 && node modules/build linuxstatic-arm64 && node modules/build alpine-x64"
}