Skip to content

Commit

Permalink
Merge pull request #100 from azmy60/add-electron-build
Browse files Browse the repository at this point in the history
Add electron build workflow
  • Loading branch information
carlopi authored Jul 15, 2024
2 parents 11fc6fb + f228565 commit 13104d4
Show file tree
Hide file tree
Showing 4 changed files with 381 additions and 0 deletions.
293 changes: 293 additions & 0 deletions .github/workflows/Electron.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,293 @@
name: Electron
on:
push:
pull_request:
workflow_dispatch:
repository_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }}
cancel-in-progress: false

env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
AWS_ACCESS_KEY_ID: ${{secrets.S3_DUCKDB_NODE_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.S3_DUCKDB_NODE_KEY}}
AWS_DEFAULT_REGION: us-east-1

jobs:
set-up-npm:
name: Set up NPM
runs-on: ubuntu-20.04
env:
DUCKDB_NODE_BUILD_CACHE: 0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Setup NPM
shell: bash
run: ./scripts/node_version.sh upload
env:
DUCKDB_NODE_BUILD_CACHE: 0 # create a standalone package
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

# From `npm show electron time --json` and https://www.electronjs.org/docs/latest/tutorial/electron-timelines
set-up-electron-versions:
name: Set up Electron version
runs-on: ubuntu-20.04
outputs:
matrix: ${{ steps.setup.outputs.matrix }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- id: setup
run: |
echo "matrix=$(jq -c '[.[] | select(.electron == ("18.3.15", "22.3.27"))]' < scripts/electron-versions.json)" >> $GITHUB_OUTPUT
- name: Check
run: |
jq . <<< '${{ steps.setup.outputs.matrix }}'
linux-electron:
name: Electron Linux
runs-on: ubuntu-20.04
needs: [set-up-npm, set-up-electron-versions]
env:
TARGET_ARCH: ${{ matrix.target_arch }}
DUCKDB_NODE_BUILD_CACHE: 0
strategy:
matrix:
version: ${{ fromJSON(needs.set-up-electron-versions.outputs.matrix) }}
target_arch: [ x64, arm64 ]

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

# Default Python (3.12) doesn't have support for distutils
- uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Update apt
shell: bash
run: |
sudo apt-get update -y
- name: Install requirements
shell: bash
run: |
sudo apt-get install -y git ninja-build make gcc-multilib g++-multilib wget libssl-dev
- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}
save: ${{ ( github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-node' ) && startsWith(matrix.version.node, '19') }}

- name: Setup
shell: bash
run: ./scripts/node_version.sh
env:
DUCKDB_NODE_BUILD_CACHE: 0 # create a standalone package
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Validate Docs
run: npx jsdoc-to-markdown --files lib/*.js >> $GITHUB_STEP_SUMMARY
env:
npm_config_yes: true

- name: Electron ${{ matrix.version.electron }}
shell: bash
run: ./scripts/node_build.sh ${{ matrix.version.node }}
env:
ELECTRON_VERSION: ${{ matrix.version.electron }}

osx-electron-arm64:
name: Electron OSX
runs-on: macos-14
needs: set-up-npm
strategy:
matrix:
version: ${{ fromJSON(needs.set-up-electron-versions.outputs.matrix) }}
target_arch: [ arm64 ]

env:
TARGET_ARCH: ${{ matrix.target_arch }}
DUCKDB_NODE_BUILD_CACHE: 0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

# Default Python (3.12) doesn't have support for distutils
- uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}-${{ matrix.target_arch }}
save: ${{ ( github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-node' ) && startsWith(matrix.version.node, '19') }}

- name: Downgrade curl # fixes a bug with the brew curl that lead to failed downloads
shell: bash
run: |
brew uninstall --ignore-dependencies curl
which curl
- name: Setup
shell: bash
run: ./scripts/node_version.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Electron ${{ matrix.version.electron }}
shell: bash
run: ./scripts/node_build.sh 18
env:
ELECTRON_VERSION: ${{ matrix.version.electron }}

osx-electron-x64:
name: Electron OSX
runs-on: macos-13
needs: set-up-npm
strategy:
matrix:
version: ${{ fromJSON(needs.set-up-electron-versions.outputs.matrix) }}
target_arch: [ x64 ]

env:
TARGET_ARCH: ${{ matrix.target_arch }}
DUCKDB_NODE_BUILD_CACHE: 0
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

# Default Python (3.12) doesn't have support for distutils
- uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}-${{ matrix.target_arch }}
save: ${{ ( github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-node' ) && startsWith(matrix.version.node, '19') }}

- name: Downgrade curl # fixes a bug with the brew curl that lead to failed downloads
shell: bash
run: |
brew uninstall --ignore-dependencies curl
which curl
- name: Setup
shell: bash
run: ./scripts/node_version.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Electron ${{ matrix.version.electron }}
shell: bash
run: ./scripts/node_build.sh 18
env:
ELECTRON_VERSION: ${{ matrix.version.electron }}

win-electron:
name: node.js Windows
runs-on: windows-latest
needs: set-up-npm
continue-on-error: ${{ !startsWith(matrix.version.node, '18') && !startsWith(matrix.version.node, '20') && !startsWith(matrix.version.node, '21') }}
env:
npm_config_msvs_version: 2019

strategy:
matrix:
target_arch: [ arm64 ]
version: ${{ fromJSON(needs.set-up-electron-versions.outputs.matrix) }}

steps:
# Default Python (3.12) doesn't have support for distutils
- uses: actions/setup-python@v4
with:
python-version: '3.11'

- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18

- name: Versions
shell: bash
run: |
systeminfo
node -v
npm -v
- name: Windows Build Tools
shell: bash
run: |
choco install visualstudio2019-workload-vctools -y
- name: Node Version
shell: bash
run: ./scripts/node_version.sh
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}

- name: Setup Ccache
uses: hendrikmuhs/ccache-action@main
with:
key: ${{ github.job }}-${{ matrix.version.node }}
save: ${{ github.ref == 'refs/heads/main' || github.repository != 'duckdb/duckdb-node' }}
variant: sccache

- name: Electron
shell: bash
run: ./scripts/node_build_win.sh
env:
ELECTRON_VERSION: ${{ matrix.version.electron }}

test_matrix:
needs:
- linux-electron
- osx-electron-arm64
- osx-electron-x64
- win-electron
strategy:
matrix:
os: [windows-latest, ubuntu-latest, ubuntu-22.04, ubuntu-20.04, windows-2019, macos-12, macos-13, macos-14]
version: [20]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.version }}

- uses: actions/checkout@v3
with:
sparse-checkout: examples

- name: Install duckdb
run: |
npm install duckdb@next
- name: Run minor test
shell: bash
run: |
node examples/example.js
64 changes: 64 additions & 0 deletions scripts/electron-versions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
[
{ "electron": "18.3.15", "node": "16.13" },
{ "electron": "19.0.17", "node": "16.14" },
{ "electron": "19.1.9", "node": "16.14" },
{ "electron": "20.0.3", "node": "16.15" },
{ "electron": "20.1.4", "node": "16.15" },
{ "electron": "20.2.0", "node": "16.15" },
{ "electron": "20.3.12", "node": "16.15" },
{ "electron": "21.0.1", "node": "16.16" },
{ "electron": "21.1.1", "node": "16.16" },
{ "electron": "21.2.3", "node": "16.16" },
{ "electron": "21.3.5", "node": "16.16" },
{ "electron": "21.4.4", "node": "16.16" },
{ "electron": "22.0.3", "node": "16.17" },
{ "electron": "22.1.0", "node": "16.17" },
{ "electron": "22.2.1", "node": "16.17" },
{ "electron": "22.3.27", "node": "16.17" },
{ "electron": "23.0.0", "node": "18.12" },
{ "electron": "23.1.4", "node": "18.12" },
{ "electron": "23.2.4", "node": "18.12" },
{ "electron": "23.3.13", "node": "18.12" },
{ "electron": "24.0.0", "node": "18.14" },
{ "electron": "24.1.3", "node": "18.14" },
{ "electron": "24.2.0", "node": "18.14" },
{ "electron": "24.3.1", "node": "18.14" },
{ "electron": "24.4.1", "node": "18.14" },
{ "electron": "24.5.1", "node": "18.14" },
{ "electron": "24.6.5", "node": "18.14" },
{ "electron": "24.7.1", "node": "18.14" },
{ "electron": "24.8.8", "node": "18.14" },
{ "electron": "25.0.1", "node": "18.15" },
{ "electron": "25.1.1", "node": "18.15" },
{ "electron": "25.2.0", "node": "18.15" },
{ "electron": "25.3.2", "node": "18.15" },
{ "electron": "25.4.0", "node": "18.15" },
{ "electron": "25.5.0", "node": "18.15" },
{ "electron": "25.6.0", "node": "18.15" },
{ "electron": "25.7.0", "node": "18.15" },
{ "electron": "25.8.4", "node": "18.15" },
{ "electron": "25.9.8", "node": "18.15" },
{ "electron": "26.0.0", "node": "18.16" },
{ "electron": "26.1.0", "node": "18.16" },
{ "electron": "26.2.4", "node": "18.16" },
{ "electron": "26.3.0", "node": "18.16" },
{ "electron": "26.4.3", "node": "18.16" },
{ "electron": "26.5.0", "node": "18.16" },
{ "electron": "26.6.10", "node": "18.16" },
{ "electron": "27.0.4", "node": "18.17" },
{ "electron": "27.1.3", "node": "18.17" },
{ "electron": "27.2.4", "node": "18.17" },
{ "electron": "27.3.11", "node": "18.17" },
{ "electron": "28.0.0", "node": "18.18" },
{ "electron": "28.1.4", "node": "18.18" },
{ "electron": "28.2.10", "node": "18.18" },
{ "electron": "28.3.3", "node": "18.18" },
{ "electron": "29.0.1", "node": "20.9" },
{ "electron": "29.1.6", "node": "20.9" },
{ "electron": "29.2.0", "node": "20.9" },
{ "electron": "29.3.3", "node": "20.9" },
{ "electron": "29.4.3", "node": "20.9" },
{ "electron": "30.0.9", "node": "20.11" },
{ "electron": "30.1.2", "node": "20.11" },
{ "electron": "31.0.2", "node": "20.14" }
]
12 changes: 12 additions & 0 deletions scripts/node_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ] && [[ "$TARGET_ARCH" == "arm6
export CXX=aarch64-linux-gnu-g++
fi

if [ -n "$ELECTRON_VERSION" ] ; then
# Electron's version.
export npm_config_target="$ELECTRON_VERSION"
# The architecture of your machine
export npm_config_arch="$TARGET_ARCH"
export npm_config_target_arch="$TARGET_ARCH"
# Download headers for Electron.
export npm_config_disturl=https://electronjs.org/headers
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
fi

npm install --build-from-source --target_arch="$TARGET_ARCH"

./node_modules/.bin/node-pre-gyp reveal --target_arch="$TARGET_ARCH"
Expand Down
12 changes: 12 additions & 0 deletions scripts/node_build_win.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ which node

make clean

if [ -n "$ELECTRON_VERSION" ] ; then
# Electron's version.
export npm_config_target="$ELECTRON_VERSION"
# The architecture of your machine
export npm_config_arch="$TARGET_ARCH"
export npm_config_target_arch="$TARGET_ARCH"
# Download headers for Electron.
export npm_config_disturl=https://electronjs.org/headers
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
fi

npm install --build-from-source
# no tests on releases
if [[ ! "$GITHUB_REF" =~ ^(refs/tags/v.+)$ ]] ; then
Expand Down

0 comments on commit 13104d4

Please sign in to comment.