name: CI (GitHub)
on:
  - push
  - pull_request
permissions: {}
jobs:
  CI:
    permissions:
      contents: write # for npx prebuild to make release
    name: ${{ matrix.container || matrix.os }} - Node.js ${{ matrix.nodejs_version }} ${{ matrix.nodejs_arch }} ${{ matrix.prebuild && '- prebuild' }}
    runs-on: ${{ matrix.os }}
    container: ${{ matrix.container }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-22.04
            container: centos:7
            nodejs_version: 14
            prebuild: true
          - os: ubuntu-22.04
            container: centos:7
            nodejs_version: 16
          - os: ubuntu-22.04
            container: rockylinux:8
            nodejs_version: 18
          - os: ubuntu-22.04
            container: node:14-alpine3.12
            prebuild: true
          - os: ubuntu-22.04
            container: node:16-alpine3.12
          - os: ubuntu-22.04
            container: node:18-alpine3.14
          - os: macos-11
            nodejs_version: 14
            prebuild: true
            nodejs_arch: x64
          - os: macos-11
            nodejs_version: 16
            nodejs_arch: x64
          - os: macos-11
            nodejs_version: 18
            nodejs_arch: x64
          - os: windows-2019
            nodejs_version: 14
            nodejs_arch: x86
            prebuild: true
          - os: windows-2019
            nodejs_version: 16
            nodejs_arch: x86
          - os: windows-2019
            nodejs_version: 18
            nodejs_arch: x86
          - os: windows-2019
            nodejs_version: 14
            nodejs_arch: x64
            prebuild: true
          - os: windows-2019
            nodejs_version: 16
            nodejs_arch: x64
          - os: windows-2019
            nodejs_version: 18
            nodejs_arch: x64
    steps:
      - name: Dependencies (Linux glibc)
        if: contains(matrix.container, 'centos')
        run: |
          curl -sL https://rpm.nodesource.com/setup_${{ matrix.nodejs_version }}.x | bash -
          yum install -y centos-release-scl
          yum install -y devtoolset-11-gcc-c++ make git python3 nodejs fontconfig google-noto-sans-fonts
          echo "/opt/rh/devtoolset-11/root/usr/bin" >> $GITHUB_PATH
      - name: Dependencies (Rocky Linux glibc)
        if: contains(matrix.container, 'rockylinux')
        run: |
          curl -sL https://rpm.nodesource.com/setup_${{ matrix.nodejs_version }}.x | bash -
          dnf install -y gcc-toolset-11-gcc-c++ make git python3 nodejs fontconfig google-noto-sans-fonts
          echo "/opt/rh/gcc-toolset-11/root/usr/bin" >> $GITHUB_PATH
      - name: Dependencies (Linux musl)
        if: contains(matrix.container, 'alpine')
        run: apk add build-base git python3 font-noto --update-cache
      - name: Dependencies (Python 3.10 - macOS, Windows)
        if: contains(matrix.os, 'macos') || contains(matrix.os, 'windows')
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - name: Dependencies (Node.js - macOS, Windows)
        if: contains(matrix.os, 'macos') || contains(matrix.os, 'windows')
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.nodejs_version }}
          architecture: ${{ matrix.nodejs_arch }}
      - name: Checkout
        uses: actions/checkout@v3
      - name: Fix working directory ownership
        if: matrix.container
        run: chown root.root .
      - name: Install
        run: npm install --build-from-source --unsafe-perm
      - name: Test
        run: npm test
      - name: Prebuild
        if: matrix.prebuild && startsWith(github.ref, 'refs/tags/')
        env:
          prebuild_upload: ${{ secrets.GITHUB_TOKEN }}
        run: npx prebuild --runtime napi --target 7
