name: Rust Build

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build-x86_64:
    runs-on: ubuntu-latest

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

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '18'

    - name: Install dependencies and build webui
      run: |
        cd webui
        npm install
        npm run build
        rustup target add x86_64-pc-windows-msvc

    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    - name: Build Rust project for x86_64
      run: cargo build --release --target x86_64-unknown-linux-gnu

    - name: Archive production artifacts for x86_64
      uses: actions/upload-artifact@v3
      with:
        name: Linux_x86_64
        path: target/x86_64-unknown-linux-gnu/release/ew

  build-aarch64:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        arch: [aarch64]

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

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '18'

    - name: Install dependencies and build webui
      run: |
        cd webui
        npm install
        npm run build
        cd ..

    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    - name: Build Rust project for aarch64
      run: cargo build --release

    - name: Archive production artifacts for aarch64
      uses: actions/upload-artifact@v3
      with:
        name: Linux_aarch64
        path: target/release/ew

  build-windows:
    runs-on: windows-latest

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

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '18'

    - name: Install dependencies and build webui
      run: |
        cd webui
        npm install
        npm run build
        cd ..
        rustup target add x86_64-pc-windows-msvc

    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true

    - name: Build Rust project for Windows
      run: cargo build --release --target x86_64-pc-windows-msvc

    - name: Archive production artifacts for Windows
      uses: actions/upload-artifact@v3
      with:
        name: Windows_x86_64
        path: target\x86_64-pc-windows-msvc\release\ew.exe
