name: Test and Prebuild
on: [push]
jobs:
  build-test-macos:
    #if: startsWith(github.ref, 'refs/tags/')
    env:
      LMDB_DATA_V1: ${{ contains(github.ref, '-v1') }}
    runs-on: macos-12
    steps:
      - uses: actions/checkout@v3
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - uses: denoland/setup-deno@v1
        with:
          deno-version: v1.x
      - run: python3 -m pip install setuptools
      - run: npm install
      - run: npm run build
      #- run: npm run deno-test
      - run: npm test
        if: ${{ !contains(github.ref, '-v1') }}
      - run: npm run prebuild-macos
        if: startsWith(github.ref, 'refs/tags/')
      - run: npm run prebuild-macos
        if: startsWith(github.ref, 'refs/tags/')
        env:
          PREBUILD_ARCH: arm64
      - run: tar --create --format ustar --verbose --file=prebuild-darwin.tar -C prebuilds .
        if: startsWith(github.ref, 'refs/tags/')
      - name: Prebuild
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: prebuild-darwin.tar
  build-test-win32:
    #if: startsWith(github.ref, 'refs/tags/')
    env:
      LMDB_DATA_V1: ${{ contains(github.ref, '-v1') }}
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm install
      - run: npm run build
      - run: npm test
        if: ${{ !contains(github.ref, '-v1') }}
      - run: npm run prebuild-win32
      - run: tar --create --verbose --file=prebuild-win32.tar -C prebuilds .
        if: startsWith(github.ref, 'refs/tags/')
      - name: Prebuild
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: prebuild-win32.tar
  build-centos-7:
    if: startsWith(github.ref, 'refs/tags/')
    env:
      LMDB_DATA_V1: ${{ contains(github.ref, '-v1') }}
      ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true # workaround for terrible checkout bug: https://github.com/actions/checkout/issues/1809
      ACTIONS_RUNNER_FORCED_INTERNAL_NODE_VERSION: node16
      ACTIONS_RUNNER_FORCE_ACTIONS_NODE_VERSION: node16
    runs-on: ubuntu-20.04
    container: quay.io/pypa/manylinux2014_x86_64
    steps:
      - uses: actions/checkout@v3
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: yum update -y && yum install -y python3
      - run: curl https://raw.githubusercontent.com/kriszyp/musl-bins/main/aarch64-linux-musl-cross.tgz --insecure --output aarch64-linux-musl-cross.tgz
      - run: tar -xf aarch64-linux-musl-cross.tgz && pwd && ls
      - run: curl https://raw.githubusercontent.com/kriszyp/musl-bins/main/armv7l-linux-musleabihf-cross.tgz --insecure --output armv7l-linux-musleabihf-cross.tgz
      - run: tar -xf armv7l-linux-musleabihf-cross.tgz && pwd && ls
      - run: curl https://raw.githubusercontent.com/kriszyp/musl-bins/main/x86_64-linux-musl-native.tgz --insecure --output x86_64-linux-musl-native.tgz
      - run: tar -xf x86_64-linux-musl-native.tgz && pwd && ls
      - run: npm install
      - run: npm run prebuild-libc-musl
        if: startsWith(github.ref, 'refs/tags/')
        env:
          PREBUILD_LIBC: musl
          PREBUILD_ARCH: arm64
          CC: ${PWD}/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc
          CXX: ${PWD}/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++
      - run: npm run prebuild-libc-musl
        if: startsWith(github.ref, 'refs/tags/')
        env:
          PREBUILD_LIBC: musl
          PREBUILD_ARCH: arm
          PREBUILD_ARMV: 7
          CC: ${PWD}/armv7l-linux-musleabihf-cross/bin/armv7l-linux-musleabihf-gcc
          CXX: ${PWD}/armv7l-linux-musleabihf-cross/bin/armv7l-linux-musleabihf-g++
      - run: npm run prebuild-libc-musl
        if: startsWith(github.ref, 'refs/tags/')
        env:
          PREBUILD_LIBC: musl
          PREBUILD_ARCH: x64
          CC: ${PWD}/x86_64-linux-musl-native/bin/x86_64-linux-musl-gcc
          CXX: ${PWD}/x86_64-linux-musl-native/bin/x86_64-linux-musl-g++
      - run: npm run prebuild-libc
      - run: ls prebuilds/linux-x64
      #- run: cp prebuilds/linux-x64/node.abi93.glibc.node prebuilds/linux-x64/node.abi92.glibc.node
      #- run: npm run prebuildify
      #  env:
      #    ENABLE_FAST_API_CALLS: true
      - run: npm run build-js
      - run: chmod 777 test
      - run: npm test
        if: ${{ !contains(github.ref, '-v1') }}
      - run: tar --create --verbose --file=prebuild-linux.tar -C prebuilds .
      - name: Prebuild
        if: startsWith(github.ref, 'refs/tags/')
        uses: softprops/action-gh-release@v1
        with:
          files: prebuild-linux.tar
  test-deno:
    if: ${{ !contains(github.ref, '-v1') }}
    runs-on: ubuntu-20.04
    container: node:18
    steps:
      - run: echo "LMDB_DATA_V1 is $LMDB_DATA_V1"
      - uses: actions/checkout@v3
      - uses: denoland/setup-deno@v1
        with:
          deno-version: v1.x
      #- run: sudo apt-get update
      #- run: sudo apt-get install python
      - run: npm install
      - run: npm run build
      - run: chmod 777 test
      #- run: npm run deno-test
      - run: npm test
        env:
          TEST_CJS: true
  build-linux-arm:
    #if: startsWith(github.ref, 'refs/tags/')
    env:
      LMDB_DATA_V1: ${{ contains(github.ref, '-v1') }}
    runs-on: ubuntu-20.04
    #container: quay.io/pypa/manylinux_2_24_x86_64
    steps:
      - run: sudo apt-get update
      - run: sudo apt-get install -y gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf g++-aarch64-linux-gnu g++-arm-linux-gnueabihf
      - run: ldd --version ldd
      - uses: actions/checkout@v3
      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm install
      - run: npm run prebuild-libc
        if: startsWith(github.ref, 'refs/tags/')
        env:
          PREBUILD_ARCH: arm64
          CC: aarch64-linux-gnu-gcc
          CXX: aarch64-linux-gnu-g++
      - run: npm run prebuild-libc-arm7
        env:
          PREBUILD_ARCH: arm
          PREBUILD_ARMV: 7
          CC: arm-linux-gnueabihf-gcc
          CXX: arm-linux-gnueabihf-g++
      - run: tar --create --verbose --file=prebuild-linux-arm.tar -C prebuilds .
      - name: Prebuild
        if: startsWith(github.ref, 'refs/tags/')
        uses: softprops/action-gh-release@v1
        with:
          files: prebuild-linux-arm.tar