hyper-function-core 0.1.1

Hyper Function
Documentation
name: Node CI
env:
  DEBUG: napi:*
  MACOSX_DEPLOYMENT_TARGET: "10.13"
on:
  push:
    paths:
      - "node/**/*"
jobs:
  build:
    if: "!contains(github.event.head_commit.message, 'skip ci')"
    strategy:
      fail-fast: false
      matrix:
        settings:
          - host: macos-latest
            target: x86_64-apple-darwin
            architecture: x64
            build: |
              yarn build
              strip -x *.node
          - host: windows-latest
            build: yarn build
            target: x86_64-pc-windows-msvc
            architecture: x64
          - host: windows-latest
            build: |
              yarn build --target i686-pc-windows-msvc
            target: i686-pc-windows-msvc
            architecture: x86
          - host: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            architecture: x64
            docker: |
              docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian
              docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-debian builder
            build: |
              docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd)/../core:/core -v $(pwd):/build -w /build builder yarn build --target x86_64-unknown-linux-gnu && strip *.node
          - host: ubuntu-latest
            target: x86_64-unknown-linux-musl
            architecture: x64
            docker: |
              docker pull $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine
              docker tag $DOCKER_REGISTRY_URL/napi-rs/napi-rs/nodejs-rust:lts-alpine builder
            build: docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd)/../core:/core -v $(pwd):/build -w /build builder yarn build && strip *.node
          - host: macos-latest
            target: aarch64-apple-darwin
            build: |
              yarn build --target=aarch64-apple-darwin
              strip -x *.node
          # - host: ubuntu-latest
          #   architecture: x64
          #   target: aarch64-unknown-linux-gnu
          #   setup: |
          #     sudo apt-get update
          #     sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu -y
          #   build: |
          #     yarn build --target=aarch64-unknown-linux-gnu
          #     aarch64-linux-gnu-strip *.node
          # - host: ubuntu-latest
          #   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 --target=armv7-unknown-linux-gnueabihf
          #     arm-linux-gnueabihf-strip *.node
          # - host: ubuntu-latest
          #   architecture: x64
          #   target: aarch64-linux-android
          #   build: |
          #     export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
          #     export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
          #     export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++"
          #     export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}"
          #     yarn build --target aarch64-linux-android
          #     ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip *.node
          # - host: ubuntu-latest
          #   architecture: x64
          #   target: armv7-linux-androideabi
          #   build: |
          #     export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
          #     export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
          #     export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++"
          #     export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}"
          #     yarn build --target armv7-linux-androideabi
          #     ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip *.node
          # - host: ubuntu-latest
          #   architecture: x64
          #   target: aarch64-unknown-linux-musl
          #   downloadTarget: aarch64-unknown-linux-musl
          #   docker: |
          #     docker pull ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
          #     docker tag ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine builder
          #   build: |
          #     docker run --rm -v ~/.cargo/git:/root/.cargo/git -v ~/.cargo/registry:/root/.cargo/registry -v $(pwd)/../core:/core -v $(pwd):/build -w /build builder sh -c "yarn build --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 --target aarch64-pc-windows-msvc
    name: stable - ${{ matrix.settings.target }} - node@16
    runs-on: ${{ matrix.settings.host }}
    defaults:
      run:
        working-directory: node
    steps:
      - uses: actions/checkout@v2
      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          check-latest: true
          cache: yarn
          cache-dependency-path: node/yarn.lock
          architecture: ${{ matrix.settings.architecture }}
      - name: Install
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          override: true
          toolchain: stable
          target: ${{ matrix.settings.target }}
      - name: Generate Cargo.lock
        run: cargo generate-lockfile

      - name: Cache cargo registry
        uses: actions/cache@v2
        with:
          path: ~/.cargo/registry
          key: ${{ matrix.settings.target }}-node@16-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo index
        uses: actions/cache@v2
        with:
          path: ~/.cargo/git
          key: ${{ matrix.settings.target }}-node@16-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache NPM dependencies
        uses: actions/cache@v2
        with:
          path: node/node_modules
          key: npm-cache-${{ matrix.settings.target }}-node@16-${{ hashFiles('node/yarn.lock') }}

      - name: Pull latest image
        run: ${{ matrix.settings.docker }}
        env:
          DOCKER_REGISTRY_URL: ghcr.io
        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
        run: ${{ matrix.settings.build }}
        shell: bash
      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: bindings-${{ matrix.settings.target }}
          path: node/core.*.node
          if-no-files-found: error
  publish:
    name: Publish
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: node
    needs:
      - build
      # - build-freebsd
      # - test-macOS-windows-binding
      # - test-linux-x64-gnu-binding
      # - test-linux-x64-musl-binding
      # - test-linux-aarch64-gnu-binding
      # - test-linux-aarch64-musl-binding
      # - test-linux-arm-gnueabihf-binding
    steps:
      - uses: actions/checkout@v2
      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16
          check-latest: true
          cache: yarn
          cache-dependency-path: node/yarn.lock
      - name: Cache NPM dependencies
        uses: actions/cache@v2
        with:
          path: node/node_modules
          key: npm-cache-ubuntu-latest-${{ hashFiles('node/yarn.lock') }}
          restore-keys: |
            npm-cache-
      - 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@v2
        with:
          path: node/artifacts
      - name: Move out artifacts
        run: mv artifacts/**/*.node . && rm -rf artifacts

      - name: Build js
        run: yarn build:js

      - name: Publish
        run: |
          echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
          yarn publish --access=public --registry=registry.npmjs.org --non-interactive
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        if: ${{ contains(github.event.head_commit.message, 'release(node)') }}

      - name: Build artifact
        run: yarn pack -f hfn.tgz
      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: hfn.tgz
          path: node/hfn.tgz