name: CI Pipeline

on:
  push:
    branches:
      - '**'
  pull_request:
    branches:
      - '**'
  release:
    types:
      - created

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, ctype, common, zip

      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y git libpq-dev libzip-dev zip make wget gnupg

      - name: Install Phive
        run: |
          wget -O phive.phar https://phar.io/releases/phive.phar
          wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc
          gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79
          gpg --verify phive.phar.asc phive.phar
          chmod +x phive.phar
          sudo mv phive.phar /usr/local/bin/phive

      - name: Install PHPAB
        run: sudo phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C

      - name: Build project
        run: make redist

      - name: Find NCC build directory
        id: find-ncc-dir
        run: echo "NCC_DIR=$(find build/ -type d -name 'ncc_*' | head -n 1)" >> $GITHUB_ENV

      - name: Upload NCC build directory
        uses: actions/upload-artifact@v3
        with:
          name: ncc-build
          path: ${{ env.NCC_DIR }}

      - name: Create redist.zip
        run: zip -r redist.zip ${{ env.NCC_DIR }}

      - name: Upload redist.zip
        uses: actions/upload-artifact@v3
        with:
          name: redist-zip
          path: redist.zip

      - name: Build Debian package
        run: make deb

      - name: Find Debian package
        id: find-deb
        run: echo "DEB_FILE=$(find build/ -type f -name '*.deb' | head -n 1)" >> $GITHUB_ENV

      - name: Upload Debian package
        uses: actions/upload-artifact@v3
        with:
          name: ncc-deb
          path: ${{ env.DEB_FILE }}

  test-install:
    runs-on: ubuntu-latest
    needs: build

    steps:
      - name: Download NCC build directory
        uses: actions/download-artifact@v3
        with:
          name: ncc-build
          path: build

      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, ctype, common, zip

      - name: Test NCC installation
        run: |
          ls -l build
          sudo php build/INSTALL --auto

  upload-release:
    runs-on: ubuntu-latest
    needs: build
    if: github.event_name == 'release' && github.event.action == 'created'
    permissions: write-all

    steps:
      - name: Download redist.zip
        uses: actions/download-artifact@v3
        with:
          name: redist-zip
          path: .

      - name: Download Debian package
        uses: actions/download-artifact@v3
        with:
          name: ncc-deb
          path: .

      - name: Set DEB_FILE environment variable
        run: echo "DEB_FILE=$(find . -type f -name '*.deb' | head -n 1)" >> $GITHUB_ENV

      - name: Upload redist.zip to release
        uses: softprops/action-gh-release@v1
        with:
          files: redist.zip
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Upload ncc.deb to release
        uses: softprops/action-gh-release@v1
        with:
          files: ${{ env.DEB_FILE }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}