name: Build AbysiusCodium

on:
  push:
    branches: [main, develop]
    tags: ['v*']
  pull_request:
    branches: [main]
  workflow_dispatch:
    inputs:
      vscode_tag:
        description: 'VS Code upstream tag to build from'
        required: true
        default: '1.121.0'

env:
  MS_VSCODE_TAG: ${{ github.event.inputs.vscode_tag || '1.121.0' }}
  NODE_VERSION: '20.18.0'

jobs:
  build-linux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        arch: [x64, arm64, armhf]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Install build dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            libx11-dev libxkbfile-dev libsecret-1-dev \
            fakeroot rpm dpkg-dev debhelper \
            gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
            gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

      - name: Build Extension
        run: |
          cd extensions/abysius-ai
          npm ci
          npm run compile

      - name: Build AbysiusCodium
        run: |
          chmod +x build/build.sh
          ./build/build.sh --platform linux --arch ${{ matrix.arch }} --tag ${{ env.MS_VSCODE_TAG }}

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: abysius-codium-linux-${{ matrix.arch }}
          path: releases/*
          if-no-files-found: warn

  build-darwin:
    runs-on: macos-latest
    strategy:
      matrix:
        arch: [x64, arm64]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Build Extension
        run: |
          cd extensions/abysius-ai
          npm ci
          npm run compile

      - name: Build AbysiusCodium
        run: |
          chmod +x build/build.sh
          ./build/build.sh --platform darwin --arch ${{ matrix.arch }} --tag ${{ env.MS_VSCODE_TAG }}

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: abysius-codium-darwin-${{ matrix.arch }}
          path: releases/*
          if-no-files-found: warn

  build-windows:
    runs-on: windows-latest
    strategy:
      matrix:
        arch: [x64, arm64]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Build Extension
        run: |
          cd extensions\abysius-ai
          npm ci
          npm run compile

      - name: Build AbysiusCodium
        shell: bash
        run: |
          bash build/build.sh --platform win32 --arch ${{ matrix.arch }} --tag ${{ env.MS_VSCODE_TAG }}

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: abysius-codium-win32-${{ matrix.arch }}
          path: releases/*
          if-no-files-found: warn

  release:
    needs: [build-linux, build-darwin, build-windows]
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/v')
    steps:
      - name: Download all artifacts
        uses: actions/download-artifact@v4
        with:
          path: releases
          pattern: abysius-codium-*

      - name: Create Release
        uses: softprops/action-gh-release@v2
        with:
          files: releases/**/*
          generate_release_notes: true
          draft: true
          prerelease: ${{ contains(github.ref, '-alpha') || contains(github.ref, '-beta') || contains(github.ref, '-rc') }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
