Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
c7ba42b
Add new build system electron-forge
Dexus Apr 4, 2025
df4da30
Only Build once not 2 times
Dexus Apr 29, 2025
361d8f4
enable linux deb, rpm and flatpack
Dexus Apr 29, 2025
cad0d7b
fix menu performance
Dexus Apr 29, 2025
c44e9e3
disable "purge" re-install
Dexus Apr 29, 2025
3ea947d
x
Dexus Apr 30, 2025
ae57a05
velopack don't add none arch binaries
Dexus Apr 30, 2025
9f9ca6b
some more deb infos
Dexus Apr 30, 2025
aa5b44a
x
Dexus Apr 30, 2025
8eeb5b9
x2
Dexus Apr 30, 2025
bd6c8d6
x3
Dexus Apr 30, 2025
2bbea0e
x4
Dexus Apr 30, 2025
795245e
x5
Dexus Apr 30, 2025
187f4ca
x6
Dexus Apr 30, 2025
8f9abeb
x7
Dexus Apr 30, 2025
198b9c0
x8
Dexus Apr 30, 2025
973efa0
x9
Dexus Apr 30, 2025
44107ec
x10
Dexus Apr 30, 2025
3b804a8
x11
Dexus Apr 30, 2025
af5e6de
x12
Dexus Apr 30, 2025
c435de0
x13
Dexus Apr 30, 2025
e6e907e
x14
Dexus Apr 30, 2025
9649397
x15
Dexus Apr 30, 2025
9f9c1ee
x16
Dexus Apr 30, 2025
5258af1
x17
Dexus Apr 30, 2025
8d07c75
x18
Dexus Apr 30, 2025
b05a70f
x19
Dexus Apr 30, 2025
6f524a3
x20
Dexus Apr 30, 2025
7f4e0de
x21
Dexus Apr 30, 2025
e4c76c4
x22
Dexus Apr 30, 2025
6b0a3fb
x23
Dexus Apr 30, 2025
b025e37
x24
Dexus Apr 30, 2025
df7b66b
x25
Dexus Apr 30, 2025
1a645e9
x26
Dexus Apr 30, 2025
7641b3a
x27
Dexus Apr 30, 2025
5ee1699
x28
Dexus Apr 30, 2025
4232f24
x29
Dexus Apr 30, 2025
3285ffb
x30
Dexus Apr 30, 2025
280e371
x31
Dexus Apr 30, 2025
3fa06b5
x32
Dexus Apr 30, 2025
e95f6df
x33
Dexus May 1, 2025
b509bf9
x34
Dexus May 1, 2025
9fe8d87
x35
Dexus May 1, 2025
da8be9c
x36
Dexus May 1, 2025
dacc19c
x37
Dexus May 1, 2025
27c1468
x38
Dexus May 1, 2025
b0dd160
x39
Dexus May 1, 2025
4098821
x40
Dexus May 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
579 changes: 550 additions & 29 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

44 changes: 44 additions & 0 deletions .github/workflows/build_old.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: build (old version)

on:
workflow_dispatch:
push:
# enable next line to limit branches to run
branches: ["main"]
pull_request:
# enable next line to limit branches to run
# branches: [ "main" ]

jobs:
build:
strategy:
matrix:
node-version: [20.x, 22.x]
os: [windows-2022, ubuntu-22.04]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

# not needed currently, but leaving here for future use
# - uses: actions/setup-python@v4
# with:
# python-version: '2.7.18'

- name: boost
if: startsWith(matrix.os,'ubuntu')
run: sudo apt-get update && sudo apt-get install -yq libboost-dev

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Build
run: |
npm install
npm run build
- name: Package
run: |
npm run dist
160 changes: 160 additions & 0 deletions .github/workflows/linux-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: Linux Build

on:
workflow_call:
inputs:
build_number:
required: true
type: string
prebuilds_only:
required: true
type: string
secrets:
APPLE_API_KEY:
required: false
APPLE_API_KEY_ID:
required: false
APPLE_API_ISSUER:
required: false
APPLE_TEAM_PREFIX:
required: false

jobs:
build:
env:
UPDATE_FEED_OWNER: deepnest-next
UPDATE_FEED_REPOSITORY: deepnest
BUILD_NUMBER: ${{ inputs.build_number }}
PREBUILDS_ONLY: ${{ inputs.prebuilds_only }}

strategy:
matrix:
os: ["ubuntu-22.04", "ubuntu-24.04", "ubuntu-24.04-arm"]
arch: ["x64", "arm64"]
exclude:
- os: "ubuntu-22.04"
arch: "arm64"
- os: "ubuntu-24.04-arm"
arch: "x64"
- os: "ubuntu-24.04"
arch: "arm64"
fail-fast: true

runs-on: ${{ matrix.os }}

steps:
- name: Github checkout
uses: actions/checkout@v4

- name: Install distribution dependencies
shell: bash
run: |
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install -y flatpak flatpak-builder elfutils snapd libgl1 libglx-mesa0;
sudo apt-get install -y dpkg-dev debhelper fakeroot ;
flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo ;
flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo ;
flatpak update --appstream -y;
flatpak install -y --user flathub org.freedesktop.Sdk//24.08;
flatpak install -y --user flathub org.freedesktop.Platform//24.08;
sudo apt-get install -y flatpak flatpak-builder elfutils ;
git config --global --add protocol.file.allow always
#sudo snap install snapcraft --classic;
#sudo snap install core22 --classic;

- name: Setup Node (v22)
uses: actions/setup-node@v4
with:
# https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-data
cache: "npm"
node-version: "22"
cache-dependency-path: '**/package-lock.json'

- name: Install dependencies
shell: bash
run: |
npm install -g npm@latest
npm ci

- name: Build (${{ matrix.arch }})
uses: DeineAgenturUG/retry@6278ba3ea01ddc52e75d82766fca6cf4d35835cd
with:
timeout_minutes: 60
max_attempts: 3
retry_wait_seconds: 120
command: |
mkdir -p out/make/
npm run make -- --arch ${{ matrix.arch }}
find ./out -type f
shell: bash
env:
CI: "true"
BUILD_NUMBER: ${{ inputs.build_number }}
MAKER_ARCH: ${{ matrix.arch }}

# TODO: add AppImage for linux if we can get snap and/or flatpak to work

- name: Prepare minimal debian/control
run: |
PKG=$(node -p "require('./package.json').name")
VER=$(node -p "require('./package.json').version")
ARCH=amd64
mkdir -p debian
cat > debian/control <<EOF
Source: $PKG
Section: utils
Priority: optional
Maintainer: CI Runner <ci@github.com>
Standards-Version: 4.5.0
Package: $PKG
Version: $VER
Architecture: $ARCH
Description: Temporäres Control für dpkg-shlibdeps
EOF

- name: Scan shared-library dependencies
id: scan
run: |
# alle ausführbaren Dateien sammeln
files=$(find out/ -type f \( -executable -o -name '*.node' \))
# dpkg-shlibdeps erzeugt standardmäßig eine "Depends:"-Zeile
deps=$(dpkg-shlibdeps $files -O | sed 's/^[[:space:]]*Depends: //')
# in Datei schreiben
echo "Depends: $deps" > control-deps.txt
# als Schritt-Output verfügbar machen
echo "DEPS=$deps" >> $GITHUB_OUTPUT

- name: Scan SONAME-Abhängigkeiten (.so-Libraries)
run: |
files=$(find out/ -type f \( -executable -o -name '*.node' \))
echo "# SONAME Abhängigkeiten pro Binary" > so-deps.txt
for f in $files; do
echo "## $f" >> so-deps.txt
# listet SONAME → Pfad der Library
ldd "$f" | grep "=>" | awk '{print $1 " -> " $3}' >> so-deps.txt
echo "" >> so-deps.txt
done

- name: Show detected dependencies
run: |
echo "=== Debian Depends ==="
cat control-deps.txt
echo
echo "=== SONAME Abhängigkeiten ==="
cat so-deps.txt

- name: Upload dependencies artifact
uses: actions/upload-artifact@v4
with:
name: debian-dependencies-${{ matrix.os }}-${{ matrix.arch }}
retention-days: 1
path: |
control-deps.txt
so-deps.txt

- name: Upload artifacts (${{ matrix.arch }})
uses: actions/upload-artifact@v4
with:
name: dist-${{ matrix.os }}-${{ matrix.arch }}
retention-days: 1
path: |
out/make/
170 changes: 170 additions & 0 deletions .github/workflows/macos-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
name: macOS Build

on:
workflow_call:
inputs:
build_number:
required: true
type: string
prebuilds_only:
required: true
type: string
secrets:
APPLE_MAC_CERT:
required: true
APPLE_MAC_CERT_PASS:
required: true
APPLE_KEYCHAIN:
required: true
APPLE_KEYCHAIN_PASS:
required: true
APPLE_API_KEY:
required: true
APPLE_API_KEY_ID:
required: true
APPLE_API_ISSUER:
required: true
APPLE_TEAM_PREFIX:
required: true
APPLE_DEVELOPER_ID_APPLICATION:
required: true
APPLE_DEVELOPER_ID_INSTALLER:
required: true
APPLE_MAS_IDENTITY:
required: true
APPLE_MAS_INSTALLER_IDENTITY:
required: true
APPLE_PROVISIONING_PROFILE:
required: true

jobs:
build:
env:
UPDATE_FEED_OWNER: deepnest-next
UPDATE_FEED_REPOSITORY: deepnest
BUILD_NUMBER: ${{ inputs.build_number }}
PREBUILDS_ONLY: ${{ inputs.prebuilds_only }}

strategy:
matrix:
os: ["macos-latest", "macos-13"]
arch: ["x64", "arm64"]
target: ["", "mas"]
exclude:
- os: "macos-13"
arch: "arm64"
- os: "macos-latest"
arch: "x64"
- os: "macos-13"
target: "mas"
fail-fast: true

runs-on: ${{ matrix.os }}

steps:
- name: Github checkout
uses: actions/checkout@v4

- name: Install distribution dependencies
shell: bash
run: |
brew install python-setuptools;

- name: Setup macOS keychain and signing certificates
shell: bash
run: |
# Create temporary keychain
security create-keychain -p "$APPLE_KEYCHAIN_PASS" "$APPLE_KEYCHAIN_PATH"
security set-keychain-settings -lut 3600 "$APPLE_KEYCHAIN_PATH"
security unlock-keychain -p "$APPLE_KEYCHAIN_PASS" "$APPLE_KEYCHAIN_PATH"
security default-keychain -s "$APPLE_KEYCHAIN_PATH"

# Import signing certificate (using one p12 for both app and installer)
echo -n "$APPLE_MAC_CERT" | base64 --decode -o "$CERTIFICATE_PATH"
security import "$CERTIFICATE_PATH" -P "$APPLE_SIGN_CERT_PASS" -T /usr/bin/codesign -T /usr/bin/productbuild -T /usr/sbin/installer -k "$APPLE_KEYCHAIN_PATH"
security set-key-partition-list -S apple-tool:,apple:,codesign:,installer: -s -k "$APPLE_KEYCHAIN_PASS" "$APPLE_KEYCHAIN_PATH"
rm $CERTIFICATE_PATH

# Import API key for notarization
echo -n "${{ secrets.APPLE_API_KEY }}" | base64 --decode -o "$NOTARIZATION_KEY_PATH"

# Create _assets directory if it doesn't exist and generate provisioning profile
mkdir -p _assets
if [[ "${{ matrix.target }}" == "mas" ]]; then
echo -n "${{ secrets.APPLE_PROVISIONING_PROFILE }}" | base64 --decode -o "_assets/embedded.provisionprofile"
fi
security find-identity "$APPLE_KEYCHAIN_PATH" -v > /dev/null || true
security find-identity -p codesigning "$APPLE_KEYCHAIN_PATH" -v > /dev/null || true
security find-identity -p installer "$APPLE_KEYCHAIN_PATH" -v > /dev/null || true
env:
NOTARIZATION_KEY_PATH: "${{ runner.temp }}/AuthKey_${{ secrets.APPLE_API_KEY_ID }}.p8"
CERTIFICATE_PATH: "${{ runner.temp }}/signing_cert.p12"
APPLE_MAC_CERT: ${{ secrets.APPLE_MAC_CERT }}
APPLE_SIGN_CERT_PASS: ${{ secrets.APPLE_MAC_CERT_PASS }}
APPLE_KEYCHAIN: ${{ secrets.APPLE_KEYCHAIN }}
APPLE_KEYCHAIN_PATH: "${{ runner.temp }}/${{ secrets.APPLE_KEYCHAIN }}.keychain-db"
APPLE_KEYCHAIN_PASS: ${{ secrets.APPLE_KEYCHAIN_PASS }}
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}

- name: Replace AppIdentifierPrefix in plist files
shell: bash
run: |
# Find all entitlements plist files and replace the placeholder
find _assets -name "entitlements*.plist" -exec sed -i '' "s/\$(AppIdentifierPrefix)/${{secrets.APPLE_TEAM_PREFIX}}/g" {} \;

- name: Setup Node (v22)
uses: actions/setup-node@v4
with:
cache: "npm"
node-version: "22"
cache-dependency-path: '**/package-lock.json'

- name: Install dependencies
shell: bash
run: |
npm install -g npm@latest
npm ci
npm install -D appdmg

- name: Build (${{ matrix.arch }})
uses: DeineAgenturUG/retry@6278ba3ea01ddc52e75d82766fca6cf4d35835cd
with:
timeout_minutes: 60
max_attempts: 3
retry_wait_seconds: 120
command: |
mkdir -p out/make/
if [[ "${{ matrix.target }}" == "mas" && ("${{ matrix.os }}" == "macos-13" || "${{ matrix.os }}" == "macos-latest") ]]; then
npm run make -- --arch ${{ matrix.arch }} || find ./out -type f
if [[ "${{ matrix.os }}" == "macos-latest" ]]; then
# For macOS 13, we need to use the universal build for the MAS
# because it doesn't support arm64 builds.
npm run make -- --arch universal --platform mas || find ./out -type f
fi
else
npm run make -- --arch ${{ matrix.arch }}
fi
find ./out -type f
shell: bash
env:
NOTARIZATION_KEY_PATH: "${{ runner.temp }}/AuthKey_${{ secrets.APPLE_API_KEY_ID }}.p8"
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_KEYCHAIN_PATH: "${{ runner.temp }}/${{ secrets.APPLE_KEYCHAIN }}.keychain-db"
APPLE_DEVELOPER_ID_APPLICATION: ${{ secrets.APPLE_DEVELOPER_ID_APPLICATION }}
APPLE_DEVELOPER_ID_INSTALLER: ${{ secrets.APPLE_DEVELOPER_ID_INSTALLER }}
APPLE_MAS_IDENTITY: ${{ secrets.APPLE_MAS_IDENTITY }}
APPLE_MAS_INSTALLER_IDENTITY: ${{ secrets.APPLE_MAS_INSTALLER_IDENTITY }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
CI: "true"
BUILD_NUMBER: ${{ inputs.build_number }}
MAKER_ARCH: ${{ matrix.arch }}
MAKER_PLATFORM: ${{ matrix.target == 'mas' && 'mas' || '' }}

- name: Upload artifacts (${{ matrix.arch }})
uses: actions/upload-artifact@v4
with:
name: dist-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.target == 'mas' && '-mas' || '' }}
retention-days: 1
path: |
out/make/
Loading