feat: Add support for multiple Linux build targets arm, and update No… #41
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| env: | |
| DEBUG: napi:* | |
| APP_NAME: webview | |
| MACOSX_DEPLOYMENT_TARGET: "10.13" | |
| CARGO_INCREMENTAL: "1" | |
| CARGO_TERM_COLOR: always | |
| permissions: | |
| contents: write | |
| id-token: write | |
| "on": | |
| push: | |
| branches: | |
| - main | |
| tags-ignore: | |
| - "**" | |
| paths-ignore: | |
| - "**/*.md" | |
| - LICENSE | |
| - "**/*.gitignore" | |
| - .editorconfig | |
| - docs/** | |
| pull_request: null | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - host: macos-latest | |
| target: x86_64-apple-darwin | |
| build: bun run build --target x86_64-apple-darwin | |
| - host: windows-latest | |
| build: bun run build --target x86_64-pc-windows-msvc | |
| target: x86_64-pc-windows-msvc | |
| - host: windows-latest | |
| build: bun run build --target i686-pc-windows-msvc | |
| target: i686-pc-windows-msvc | |
| - host: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| build: | | |
| sudo apt-get update | |
| sudo apt-get install -y pkg-config libwebkit2gtk-4.1-dev libsoup-3.0-dev libglib2.0-dev libcairo2-dev libpango1.0-dev libatk1.0-dev libgdk-pixbuf2.0-dev libgtk-3-dev | |
| npm install | |
| npm run build -- --target x86_64-unknown-linux-gnu | |
| - host: ubuntu-latest | |
| target: i686-unknown-linux-gnu | |
| build: | | |
| sudo dpkg --add-architecture i386 | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-multilib g++-multilib pkg-config libwebkit2gtk-4.1-dev:i386 libsoup-3.0-dev:i386 libglib2.0-dev:i386 libcairo2-dev:i386 libpango1.0-dev:i386 libatk1.0-dev:i386 libgdk-pixbuf2.0-dev:i386 libgtk-3-dev:i386 | |
| rustup target add i686-unknown-linux-gnu | |
| npm install | |
| export PKG_CONFIG_ALLOW_CROSS=1 | |
| export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig | |
| export RUSTFLAGS="-L /usr/lib/i386-linux-gnu" | |
| npm run build -- --target i686-unknown-linux-gnu | |
| - host: macos-latest | |
| target: aarch64-apple-darwin | |
| build: | | |
| export PKG_CONFIG_ALLOW_CROSS=1 | |
| bun run build --target aarch64-apple-darwin | |
| - host: ubuntu-latest | |
| target: aarch64-unknown-linux-gnu | |
| build: | | |
| set -e | |
| # Add arm64 architecture | |
| sudo dpkg --add-architecture arm64 | |
| sudo apt-get update | |
| # Install cross-compiler toolchain and arm64 deps | |
| sudo apt-get install -y --no-install-recommends \ | |
| gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \ | |
| pkg-config curl ca-certificates \ | |
| libwebkit2gtk-4.1-dev:arm64 \ | |
| libsoup-3.0-dev:arm64 \ | |
| libglib2.0-dev:arm64 \ | |
| libcairo2-dev:arm64 \ | |
| libpango1.0-dev:arm64 \ | |
| libatk1.0-dev:arm64 \ | |
| libgdk-pixbuf2.0-dev:arm64 \ | |
| libgtk-3-dev:arm64 | |
| # Install Node.js 24 | |
| curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash - | |
| sudo apt-get install -y nodejs | |
| # Verify Node.js version | |
| echo "Node.js version: $(node --version)" | |
| # Update rust and add target | |
| rustup update stable && rustup default stable | |
| rustup target add aarch64-unknown-linux-gnu | |
| npm install | |
| # Configure zig cross-compilation environment | |
| export PKG_CONFIG_ALLOW_CROSS=1 | |
| export CC="zig cc -target aarch64-linux-gnu.2.28" | |
| export CXX="zig c++ -target aarch64-linux-gnu.2.28" | |
| export AR="zig ar" | |
| export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=zig | |
| export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig | |
| export RUSTFLAGS="-L /usr/lib/aarch64-linux-gnu" | |
| npm run build -- --target aarch64-unknown-linux-gnu | |
| - host: ubuntu-latest | |
| target: armv7-unknown-linux-gnueabihf | |
| build: | | |
| set -e | |
| # Add armhf architecture | |
| sudo dpkg --add-architecture armhf | |
| sudo apt-get update | |
| # Install cross-compiler toolchain and armhf deps | |
| sudo apt-get install -y --no-install-recommends \ | |
| gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \ | |
| pkg-config curl ca-certificates \ | |
| libwebkit2gtk-4.1-dev:armhf \ | |
| libsoup-3.0-dev:armhf \ | |
| libglib2.0-dev:armhf \ | |
| libcairo2-dev:armhf \ | |
| libpango1.0-dev:armhf \ | |
| libatk1.0-dev:armhf \ | |
| libgdk-pixbuf2.0-dev:armhf \ | |
| libgtk-3-dev:armhf | |
| # Install Node.js 24 | |
| curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash - | |
| sudo apt-get install -y nodejs | |
| # Verify Node.js version | |
| echo "Node.js version: $(node --version)" | |
| # Update rust and add target | |
| rustup update stable && rustup default stable | |
| rustup target add armv7-unknown-linux-gnueabihf | |
| npm install | |
| # Configure zig cross-compilation environment | |
| export PKG_CONFIG_ALLOW_CROSS=1 | |
| export CC="zig cc -target arm-linux-gnueabihf -mcpu=generic+v7a" | |
| export CXX="zig c++ -target arm-linux-gnueabihf -mcpu=generic+v7a" | |
| export AR="zig ar" | |
| export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=zig | |
| export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig | |
| export RUSTFLAGS="-L /usr/lib/arm-linux-gnueabihf" | |
| npm run build -- --target armv7-unknown-linux-gnueabihf | |
| - host: ubuntu-latest | |
| target: aarch64-linux-android | |
| build: bun run build --target aarch64-linux-android | |
| - host: ubuntu-latest | |
| target: armv7-linux-androideabi | |
| build: bun run build --target armv7-linux-androideabi | |
| - host: windows-latest | |
| target: aarch64-pc-windows-msvc | |
| build: bun run build --target aarch64-pc-windows-msvc | |
| name: stable - ${{ matrix.settings.target }} - node@24 | |
| runs-on: ${{ matrix.settings.host }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup bun | |
| uses: oven-sh/setup-bun@v2 | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| bun-version: latest | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| node-version: 24 | |
| - name: Install | |
| uses: dtolnay/rust-toolchain@stable | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| toolchain: stable | |
| targets: ${{ matrix.settings.target }} | |
| - name: Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| .cargo-cache | |
| target/ | |
| key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | |
| - uses: goto-bus-stop/setup-zig@v2 | |
| if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'aarch64-unknown-linux-gnu' }} | |
| with: | |
| version: 0.13.0 | |
| - name: Setup toolchain | |
| run: ${{ matrix.settings.setup }} | |
| if: ${{ matrix.settings.setup && !matrix.settings.docker }} | |
| shell: bash | |
| - name: Install dependencies | |
| run: bun install | |
| if: ${{ !matrix.settings.docker }} | |
| - name: Build in docker | |
| uses: addnab/docker-run-action@v3 | |
| if: ${{ matrix.settings.docker }} | |
| with: | |
| image: ${{ matrix.settings.docker }} | |
| options: "--user 0:0 ${{ matrix.settings.docker_platform && format('--platform {0}', matrix.settings.docker_platform) || '' }} -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo-cache/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo-cache/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build" | |
| run: ${{ matrix.settings.build }} | |
| - name: Build | |
| run: ${{ matrix.settings.build }} | |
| if: ${{ !matrix.settings.docker }} | |
| shell: bash | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bindings-${{ matrix.settings.target }} | |
| path: ${{ env.APP_NAME }}.*.node | |
| if-no-files-found: error | |
| # build-freebsd: | |
| # runs-on: ubuntu-latest | |
| # name: Build FreeBSD | |
| # steps: | |
| # - uses: actions/checkout@v4 | |
| # - name: Build | |
| # id: build | |
| # uses: cross-platform-actions/action@v0.25.0 | |
| # env: | |
| # DEBUG: napi:* | |
| # RUSTUP_IO_THREADS: 1 | |
| # with: | |
| # operating_system: freebsd | |
| # version: '14.0' | |
| # memory: 8G | |
| # cpu_count: 3 | |
| # environment_variables: 'DEBUG RUSTUP_IO_THREADS' | |
| # shell: bash | |
| # run: | | |
| # sudo pkg install -y -f curl node libnghttp2 npm pkg-config | |
| # sudo npm install -g bun --ignore-scripts | |
| # curl https://sh.rustup.rs -sSf --output rustup.sh | |
| # sh rustup.sh -y --profile minimal --default-toolchain beta | |
| # source "$HOME/.cargo/env" | |
| # echo "~~~~ rustc --version ~~~~" | |
| # rustc --version | |
| # echo "~~~~ node -v ~~~~" | |
| # node -v | |
| # echo "~~~~ bun --version ~~~~" | |
| # bun --version | |
| # pwd | |
| # ls -lah | |
| # whoami | |
| # env | |
| # freebsd-version | |
| # bun install | |
| # bun run build | |
| # rm -rf node_modules | |
| # rm -rf target | |
| # rm -rf .bun/cache | |
| # - name: Upload artifact | |
| # uses: actions/upload-artifact@v4 | |
| # with: | |
| # name: bindings-freebsd | |
| # path: ${{ env.APP_NAME }}.*.node | |
| # if-no-files-found: error | |
| publish: | |
| name: Publish | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build | |
| # - build-freebsd | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| - name: Install dependencies | |
| run: bun install | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Move artifacts | |
| run: bun run artifacts | |
| - name: List packages | |
| run: ls -R ./npm | |
| shell: bash | |
| - name: Publish | |
| run: | | |
| npm config set provenance true | |
| if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; | |
| then | |
| echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
| npm publish --access public | |
| elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; | |
| then | |
| echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
| npm publish --tag next --access public | |
| else | |
| echo "Not a release, skipping publish" | |
| fi | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |