🏡 index : quine-global/hyper.git

name: Node CI
on:
  push:
    branches:
  workflow_dispatch:
defaults:
  run:
    shell: bash

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

env:
  NODE_VERSION: 22.22.2
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#  CSC_LINK: ${{ secrets.MAC_CERT_P12_BASE64 }}
#  CSC_KEY_PASSWORD: ${{ secrets.MAC_CERT_P12_PASSWORD }}
#  WIN_CSC_LINK: ${{ secrets.WIN_CERT_P12_BASE64 }}
#  WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CERT_P12_PASSWORD }}
#  APPLE_ID: ${{ secrets.APPLE_ID }}
#  APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }}

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@v6.4.0
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Enable pnpm
        uses: pnpm/action-setup@v6

      - name: Install dependencies
        run: pnpm install --frozen-lockfile

      - name: Lint
        run: pnpm run lint:ci

  build-ubuntu:
    name: Build Ubuntu
    runs-on: ubuntu-latest
    concurrency:
      group: build-ubuntu-${{ github.ref }}
      cancel-in-progress: false
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Build
        uses: ./.github/actions/build
        env:
          NODE_VERSION: ${{ env.NODE_VERSION }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: ${{ env.NODE_VERSION }}
          matrix-os: ubuntu-latest
          matrix-name: ubuntu
          upload-artifact: false

  build-macos:
    name: Build macOS
    runs-on: macos-latest
    concurrency:
      group: build-macos-${{ github.ref }}
      cancel-in-progress: false
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Build
        uses: ./.github/actions/build
        env:
          NODE_VERSION: ${{ env.NODE_VERSION }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: ${{ env.NODE_VERSION }}
          matrix-os: macos-latest
          matrix-name: macos
          upload-artifact: false

  build-windows:
    name: Build Windows
    runs-on: windows-latest
    concurrency:
      group: build-win-${{ github.ref }}
      cancel-in-progress: false
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Build
        uses: ./.github/actions/build
        env:
          NODE_VERSION: ${{ env.NODE_VERSION }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: ${{ env.NODE_VERSION }}
          matrix-os: windows-latest
          matrix-name: win
          upload-artifact: false

  # ARM Linux:

  build-linux-armv7l:
    name: Build Linux ARMv7l
    # qemu-user-static, used here and by arm-runner-action, is not packaged on Ubuntu 26.04
    runs-on: ubuntu-24.04
    concurrency:
      group: build-linux-armv7l-${{ github.ref }}
      cancel-in-progress: false
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Set up QEMU and binfmt
        run: |
          # Install qemu-user-static
          sudo apt-get update
          sudo apt-get install -y qemu-user-static binfmt-support python3-setuptools
          
          # Install distutils for node-gyp
          sudo apt-get install -y python3-distutils || sudo apt-get install -y python3-dev python-is-python3


          # Download and install binfmt configurations
          wget https://github.com/qemu/qemu/raw/master/scripts/qemu-binfmt-conf.sh
          chmod +x qemu-binfmt-conf.sh
          sudo ./qemu-binfmt-conf.sh --qemu-path /usr/bin --qemu-suffix -static --debian

          # Import the binfmt configurations
          sudo update-binfmts --import qemu-arm
          sudo update-binfmts --import qemu-aarch64

          # Verify they exist
          ls -la /proc/sys/fs/binfmt_misc/qemu-arm* || true

      - name: Build ARMv7l
        uses: ./.github/actions/build-linux-arm
        env:
          NODE_VERSION: ${{ env.NODE_VERSION }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: ${{ env.NODE_VERSION }}
          matrix-name: armv7l
          matrix-cpu: cortex-a8
          matrix-image: raspios_lite:latest
          upload-artifact: false

  build-linux-arm64:
    name: Build Linux ARM64
    # qemu-user-static, used here and by arm-runner-action, is not packaged on Ubuntu 26.04
    runs-on: ubuntu-24.04
    concurrency:
      group: build-linux-arm64-${{ github.ref }}
      cancel-in-progress: false
    steps:
      - name: Checkout code
        uses: actions/checkout@v6.0.3

      - name: Build ARM64
        uses: ./.github/actions/build-linux-arm
        env:
          NODE_VERSION: ${{ env.NODE_VERSION }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: ${{ env.NODE_VERSION }}
          matrix-name: arm64
          matrix-cpu: cortex-a53
          matrix-image: raspios_lite_arm64:latest
          upload-artifact: false