name: functional-test

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
    - name: Free Disk Space (Ubuntu)
      uses: jlumbroso/free-disk-space@main
      with:
        # this might remove tools that are actually needed,
        # if set to "true" but frees about 6 GB
        tool-cache: false
        android: true
        dotnet: true
        haskell: true
        large-packages: false
        docker-images: true
        swap-storage: true
        
    - name: Checkout sources
      uses: actions/checkout@v3
      with:
        submodules: recursive

    - name: Setup Rust (cache & toolchain)
      uses: ./.github/actions/setup-rust

    - name: Build
      run: cargo build --release --verbose

    - name: Set up Python 3.9
      uses: actions/setup-python@v4
      with:
        python-version: '3.9'
        cache: 'pip'

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

    - name: Run tests
      run: |
        cd tests
        uname -a
        python test_all.py

    - name: Save logs for failures
      if: failure()
      uses: actions/upload-artifact@v4
      with:
        name: test_logs
        path: /tmp/zgs_test_*