# Copyright 2019-2023 Tauri Programme within The Commons Conservancy # SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: MIT name: publish cli.js env: DEBUG: napi:* APP_NAME: cli MACOSX_DEPLOYMENT_TARGET: '10.13' on: workflow_dispatch: inputs: releaseId: description: 'ID of the cli.js release' required: true repository_dispatch: types: [publish-clijs] defaults: run: working-directory: tooling/cli/node/ jobs: build: strategy: fail-fast: false matrix: settings: - host: macos-latest target: x86_64-apple-darwin architecture: x64 build: | yarn build:release strip -x *.node - host: windows-latest build: yarn build:release target: x86_64-pc-windows-msvc architecture: x64 - host: windows-latest build: yarn build:release --target i686-pc-windows-msvc target: i686-pc-windows-msvc architecture: x64 - host: ubuntu-18.04 target: x86_64-unknown-linux-gnu docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian build: | cd tooling/cli/node yarn build:release --target x86_64-unknown-linux-gnu strip *.node - host: ubuntu-18.04 target: x86_64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: | cd tooling/cli/node yarn build:release strip *.node - host: macos-latest target: aarch64-apple-darwin build: | yarn build:release --target=aarch64-apple-darwin strip -x *.node - host: ubuntu-18.04 target: aarch64-unknown-linux-gnu docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 build: | cd tooling/cli/node yarn build:release --target aarch64-unknown-linux-gnu aarch64-unknown-linux-gnu-strip *.node - host: ubuntu-18.04 architecture: x64 target: armv7-unknown-linux-gnueabihf setup: | sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y build: | yarn build:release --target=armv7-unknown-linux-gnueabihf arm-linux-gnueabihf-strip *.node - host: ubuntu-18.04 architecture: x64 target: aarch64-unknown-linux-musl docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine build: | cd tooling/cli/node rustup target add aarch64-unknown-linux-musl yarn build:release --target aarch64-unknown-linux-musl /aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node #- host: windows-latest # architecture: x64 # target: aarch64-pc-windows-msvc # build: yarn build:release --target aarch64-pc-windows-msvc name: stable - ${{ matrix.settings.target }} - node@16 runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 if: ${{ !matrix.settings.docker }} with: node-version: 16 check-latest: true cache: yarn cache-dependency-path: 'tooling/cli/node/yarn.lock' architecture: ${{ matrix.settings.architecture }} - name: Install uses: actions-rs/toolchain@v1 if: ${{ !matrix.settings.docker }} with: profile: minimal override: true toolchain: stable target: ${{ matrix.settings.target }} - uses: Swatinem/rust-cache@v1 with: key: ${{ matrix.settings.target }} working-directory: 'tooling/cli/' if: ${{ matrix.settings.docker }} - name: Setup toolchain run: ${{ matrix.settings.setup }} if: ${{ matrix.settings.setup }} shell: bash - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Build in docker uses: addnab/docker-run-action@v3 if: ${{ matrix.settings.docker }} with: image: ${{ matrix.settings.docker }} options: --user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/root/.cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/root/.cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/root/.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@v3 with: name: bindings-${{ matrix.settings.target }} path: tooling/cli/node/${{ env.APP_NAME }}.*.node if-no-files-found: error # build-freebsd: # runs-on: macos-10.15 # name: Build FreeBSD # steps: # - uses: actions/checkout@v3 # - name: Build # id: build # uses: vmactions/freebsd-vm@v0.1.6 # env: # DEBUG: napi:* # RUSTUP_HOME: /usr/local/rustup # CARGO_HOME: /usr/local/cargo # RUSTUP_IO_THREADS: 1 # with: # envs: DEBUG RUSTUP_HOME CARGO_HOME RUSTUP_IO_THREADS # usesh: true # mem: 3000 # prepare: | # pkg install -y curl node14 python2 # curl -qL https://www.npmjs.com/install.sh | sh # npm install -g yarn # curl https://sh.rustup.rs -sSf --output rustup.sh # sh rustup.sh -y --profile minimal --default-toolchain stable # export PATH="/usr/local/cargo/bin:$PATH" # echo "~~~~ rustc --version ~~~~" # rustc --version # echo "~~~~ node -v ~~~~" # node -v # echo "~~~~ yarn --version ~~~~" # yarn --version # run: | # export PATH="/usr/local/cargo/bin:$PATH" # pwd # ls -lah # whoami # env # freebsd-version # cd ./tooling/cli/node/ # yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 # yarn build:release # strip -x *.node # rm -rf node_modules # rm -rf ../target # - name: Upload artifact # uses: actions/upload-artifact@v3 # with: # name: bindings-freebsd # path: tooling/cli/node/${{ env.APP_NAME }}.*.node # if-no-files-found: error test-macOS-windows-binding: name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} needs: - build strategy: fail-fast: false matrix: settings: - host: macos-latest target: 'x86_64-apple-darwin' - host: windows-latest target: x86_64-pc-windows-msvc node: - '14' - '16' - '18' runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} check-latest: true cache: yarn cache-dependency-path: 'tooling/cli/node/yarn.lock' - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Download artifacts uses: actions/download-artifact@v3 with: name: bindings-${{ matrix.settings.target }} path: 'tooling/cli/node/' - name: List packages run: ls -R . shell: bash - name: Test bindings run: yarn test test-linux-x64-gnu-binding: name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} needs: - build strategy: fail-fast: false matrix: node: - '14' - '16' - '18' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} check-latest: true cache: yarn cache-dependency-path: 'tooling/cli/node/yarn.lock' - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Download artifacts uses: actions/download-artifact@v3 with: name: bindings-x86_64-unknown-linux-gnu path: 'tooling/cli/node/' - name: List packages run: ls -R . shell: bash - name: install system dependencies run: | sudo apt-get update sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev - name: Test bindings run: yarn test test-linux-x64-musl-binding: name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }} needs: - build strategy: fail-fast: false matrix: node: - '14' - '16' - '18' runs-on: ubuntu-latest container: image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} check-latest: true cache: yarn cache-dependency-path: 'tooling/cli/node/yarn.lock' - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Download artifacts uses: actions/download-artifact@v3 with: name: bindings-x86_64-unknown-linux-musl path: 'tooling/cli/node/' - name: List packages run: ls -R . shell: bash - name: Install system dependencies run: | apk add openssl-dev musl-dev glib-dev cairo-dev pkgconfig gdk-pixbuf-dev webkit2gtk-dev curl libappindicator-dev gtk+3.0-dev - name: Setup and run tests run: | yarn tauri --help ls -la # TODO: fix this test: https://github.com/tauri-apps/tauri/runs/5145729140?check_suite_focus=true#step:9:704 #- name: Setup and run tests # run: | # rustup install stable # rustup default stable # yarn test # ls -la test-linux-arm-bindings: name: Test bindings on ${{ matrix.image }} - node@${{ matrix.node }} needs: - build strategy: fail-fast: false matrix: node: - '14' - '16' - '18' image: - ghcr.io/napi-rs/napi-rs/nodejs:aarch64-16 - ghcr.io/napi-rs/napi-rs/nodejs:armhf-16 runs-on: ubuntu-latest steps: - run: docker run --rm --privileged multiarch/qemu-user-static:register --reset working-directory: ${{ github.workspace }} - uses: actions/checkout@v3 - name: List packages run: ls -R . shell: bash - name: Install dependencies run: yarn install --ignore-scripts --ignore-platform --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Download aarch64-gnu artifacts uses: actions/download-artifact@v3 with: name: bindings-aarch64-unknown-linux-gnu path: 'tooling/cli/node/' - name: Download armv7-gnueabihf artifacts uses: actions/download-artifact@v3 with: name: bindings-armv7-unknown-linux-gnueabihf path: 'tooling/cli/node/' # TODO: actually run test, blocked by https://github.com/rust-lang/cargo/issues/8719 - uses: addnab/docker-run-action@v3 with: image: ${{ matrix.image }} options: '-v ${{ github.workspace }}:/build -w /build -e RUSTUP_HOME=/usr/local/rustup -e CARGO_HOME=/usr/local/cargo' shell: bash run: | set -e export PATH=/usr/local/cargo/bin/:/usr/local/fnm:$PATH apt-get update DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install --no-install-recommends -y unzip webkit2gtk-4.0 libayatana-appindicator3-dev bash curl https://sh.rustup.rs -sSf | bash -s -- -y curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "/usr/local/fnm" --skip-shell eval "$(fnm env --use-on-cd)" fnm install ${{ matrix.node }} fnm use ${{ matrix.node }} cd tooling/cli/node yarn tauri --help ls -la publish: name: Publish runs-on: ubuntu-latest needs: #- build-freebsd - test-macOS-windows-binding - test-linux-x64-gnu-binding - test-linux-x64-musl-binding #- test-linux-arm-bindings steps: - uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: 16 check-latest: true cache: yarn cache-dependency-path: 'tooling/cli/node/yarn.lock' - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 - name: Download all artifacts uses: actions/download-artifact@v3 with: path: tooling/cli/node/artifacts - name: Move artifacts run: yarn artifacts - name: List packages run: ls -R ./npm shell: bash - name: Publish run: | echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc npm publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} RELEASE_ID: ${{ github.event.client_payload.releaseId || github.event.inputs.releaseId }}