sqlite-fastrand 0.2.1

A SQLite extension for generating numbers and blobs very quickly
Documentation
name: "Release"
on:
  release:
    types: [published]
  workflow_dispatch:
permissions:
  contents: read
jobs:
  build-ubuntu-extension:
    name: Build ubuntu
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: make loadable-release
      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: sqlite-fastrand-ubuntu
          path: dist/release/fastrand0.so
  build-ubuntu-python:
    runs-on: ubuntu-20.04
    needs: [build-ubuntu-extension]
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-ubuntu
          path: dist/release/
      - uses: actions/setup-python@v3
      - run: pip install wheel
      - run: make python-release
      - run: make datasette-release
      - uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-ubuntu-wheels
          path: dist/release/wheels/*.whl
  build-macos-extension:
    name: Build macos-latest
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: make loadable-release
      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: sqlite-fastrand-macos
          path: dist/release/fastrand0.dylib
  build-macos-python:
    runs-on: macos-latest
    needs: [build-macos-extension]
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-macos
          path: dist/release/
      - uses: actions/setup-python@v3
      - run: pip install wheel
      - run: make python-release
      - run: make datasette-release
      - uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-macos-wheels
          path: dist/release/wheels/*.whl
  build-macos-arm-extension:
    name: Build macos-latest with arm
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: rustup target add aarch64-apple-darwin
      - run: make loadable-release target=aarch64-apple-darwin
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-macos-arm
          path: dist/release/fastrand0.dylib
  build-macos-arm-python:
    runs-on: macos-latest
    needs: [build-macos-arm-extension]
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-macos-arm
          path: dist/release/
      - uses: actions/setup-python@v3
      - run: pip install wheel
      - run: make python-release IS_MACOS_ARM=1
      - run: make datasette-release
      - uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-macos-arm-wheels
          path: dist/release/wheels/*.whl
  build-windows-extension:
    name: Build windows-latest
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: make loadable-release
      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: sqlite-fastrand-windows
          path: dist/release/fastrand0.dll
  build-windows-python:
    runs-on: windows-latest
    needs: [build-windows-extension]
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-windows
          path: dist/release/
      - uses: actions/setup-python@v3
      - run: pip install wheel
      - run: make python-release
      - run: make datasette-release
      - uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-windows-wheels
          path: dist/release/wheels/*.whl
  build-datasette-sqlite-utils:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v3
      - run: pip install wheel build
      - run: make datasette-release sqlite-utils-release
      - uses: actions/upload-artifact@v3
        with:
          name: sqlite-fastrand-datasette-sqlite-utils-wheels
          path: dist/release/wheels/*.whl
  upload-crate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
  upload-extensions:
    name: Upload release assets
    needs:
      [
        build-macos-extension,
        build-macos-arm-extension,
        build-ubuntu-extension,
        build-windows-extension,
      ]
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/download-artifact@v2
      - uses: asg017/upload-spm@main
        id: upload-spm
        with:
          name: sqlite-fastrand
          github-token: ${{ secrets.GITHUB_TOKEN }}
          platforms: |
            linux-x86_64:     sqlite-fastrand-ubuntu/*
            macos-x86_64:     sqlite-fastrand-macos/*
            macos-aarch64:    sqlite-fastrand-macos-arm/*
            windows-x86_64:   sqlite-fastrand-windows/*
  upload_pypi:
    needs:
      [
        build-ubuntu-python,
        build-macos-python,
        build-macos-arm-python,
        build-windows-python,
        build-datasette-sqlite-utils,
      ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-windows-wheels
          path: dist
      - uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-ubuntu-wheels
          path: dist
      - uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-macos-wheels
          path: dist
      - uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-macos-arm-wheels
          path: dist
      - uses: actions/download-artifact@v3
        with:
          name: sqlite-fastrand-datasette-sqlite-utils-wheels
          path: dist
      - uses: pypa/gh-action-pypi-publish@release/v1
        with:
          password: ${{ secrets.PYPI_API_TOKEN }}
          skip_existing: true
  upload-deno:
    name: Upload Deno release assets
    needs:
      [
        build-macos-extension,
        build-macos-arm-extension,
        build-ubuntu-extension,
        build-windows-extension,
      ]
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v2
      - uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const script = require('.github/workflows/upload-deno-assets.js')
            await script({github, context})
  upload-npm:
    needs:
      [
        build-macos-extension,
        build-macos-arm-extension,
        build-ubuntu-extension,
        build-windows-extension,
      ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Download workflow artifacts
        uses: actions/download-artifact@v2
      - run: |
          cp sqlite-fastrand-ubuntu/fastrand0.so npm/sqlite-fastrand-linux-x64/lib/fastrand0.so
          cp sqlite-fastrand-macos/fastrand0.dylib npm/sqlite-fastrand-darwin-x64/lib/fastrand0.dylib
          cp sqlite-fastrand-macos-arm/fastrand0.dylib npm/sqlite-fastrand-darwin-arm64/lib/fastrand0.dylib
          cp sqlite-fastrand-windows/fastrand0.dll npm/sqlite-fastrand-windows-x64/lib/fastrand0.dll
      - name: Install node
        uses: actions/setup-node@v3
        with:
          node-version: "16"
          registry-url: "https://registry.npmjs.org"
      - name: Publish NPM sqlite-fastrand-linux-x64
        working-directory: npm/sqlite-fastrand-linux-x64
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Publish NPM sqlite-fastrand-darwin-x64
        working-directory: npm/sqlite-fastrand-darwin-x64
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Publish NPM sqlite-fastrand-darwin-arm64
        working-directory: npm/sqlite-fastrand-darwin-arm64
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Publish NPM sqlite-fastrand-windows-x64
        working-directory: npm/sqlite-fastrand-windows-x64
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Publish NPM sqlite-fastrand
        working-directory: npm/sqlite-fastrand
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
  upload-gem:
    needs:
      [
        build-macos-extension,
        build-macos-arm-extension,
        build-ubuntu-extension,
        build-windows-extension,
      ]
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/download-artifact@v2
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.2
      - run: |
          rm bindings/ruby/lib/*.{dylib,so,dll} || true
          cp sqlite-fastrand-macos/*.dylib bindings/ruby/lib
          gem -C bindings/ruby build -o x86_64-darwin.gem sqlite_fastrand.gemspec
        env:
          PLATFORM: x86_64-darwin
      - run: |
          rm bindings/ruby/lib/*.{dylib,so,dll} || true
          cp sqlite-fastrand-macos-arm/*.dylib bindings/ruby/lib
          gem -C bindings/ruby build -o arm64-darwin.gem sqlite_fastrand.gemspec
        env:
          PLATFORM: arm64-darwin
      - run: |
          rm bindings/ruby/lib/*.{dylib,so,dll} || true
          cp sqlite-fastrand-ubuntu/*.so bindings/ruby/lib
          gem -C bindings/ruby build -o x86_64-linux.gem sqlite_fastrand.gemspec
        env:
          PLATFORM: x86_64-linux
      - run: |
          rm bindings/ruby/lib/*.{dylib,so,dll} || true
          cp sqlite-fastrand-windows/*.dll bindings/ruby/lib
          gem -C bindings/ruby build -o ${{ env.PLATFORM }}.gem sqlite_fastrand.gemspec
        env:
          PLATFORM: x64-mingw32
      - run: |
          gem push bindings/ruby/x86_64-linux.gem
          gem push bindings/ruby/x86_64-darwin.gem
          gem push bindings/ruby/arm64-darwin.gem
          gem push bindings/ruby/x64-mingw32.gem
        env:
          GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}