# FIXME: refactor to avoid duplication with the ci.yml file.
name: Failures

on:
  push:
    branches:
      - master
  pull_request:

permissions:
  contents: read

env:
  # Enable backtraces for easier debugging
  RUST_BACKTRACE: 1

jobs:
  build:
    runs-on: ubuntu-24.04

    strategy:
      fail-fast: false
      matrix:
        libgccjit_version:
          - gcc: "libgccjit.so"
            artifacts_branch: "master"
          - gcc: "libgccjit_without_int128.so"
            artifacts_branch: "master-without-128bit-integers"
          - gcc: "libgccjit12.so"
            artifacts_branch: "gcc12"
            extra: "--no-default-features"
            # FIXME(antoyo): we need to set GCC_EXEC_PREFIX so that the linker can find the linker plugin.
            # Not sure why it's not found otherwise.
            env_extra: "TEST_FLAGS='-Cpanic=abort -Zpanic-abort-tests' GCC_EXEC_PREFIX=/usr/lib/gcc/"

    steps:
    - uses: actions/checkout@v4

    # `rustup show` installs from rust-toolchain.toml
    - name: Setup rust toolchain
      run: rustup show

    - name: Setup rust cache
      uses: Swatinem/rust-cache@v2

    - name: Install packages
      run: sudo apt-get install ninja-build ripgrep

    - name: Install libgccjit12
      if: matrix.libgccjit_version.gcc == 'libgccjit12.so'
      run: |
        sudo apt-get update
        sudo apt-get install libgccjit-12-dev

    - name: Setup path to libgccjit
      if: matrix.libgccjit_version.gcc == 'libgccjit12.so'
      run: |
          echo 'gcc-path = "/usr/lib/gcc/x86_64-linux-gnu/12"' > config.toml

    - name: Download artifact
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      run: curl -LO https://github.com/rust-lang/gcc/releases/latest/download/gcc-15.deb

    - name: Setup path to libgccjit
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      run: |
          sudo dpkg --force-overwrite -i gcc-15.deb
          echo 'gcc-path = "/usr/lib"' > config.toml
          
          

    - name: Set env
      run: |
        echo "workspace="$GITHUB_WORKSPACE >> $GITHUB_ENV

    #- name: Cache rust repository
      #uses: actions/cache@v3
      #id: cache-rust-repository
      #with:
        #path: rust
        #key: ${{ runner.os }}-packages-${{ hashFiles('rust/.git/HEAD') }}

    - name: Git config
      run: |
        git config --global user.email "user@example.com"
        git config --global user.name "User"

    - name: Prepare dependencies
      if: matrix.libgccjit_version.gcc == 'libgccjit12.so'
      run: ./y.sh prepare --libgccjit12-patches

    - name: Prepare dependencies
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      run: ./y.sh prepare

    - name: Run tests
      # FIXME: re-enable those tests for libgccjit 12.
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      id: tests
      run: |
        ${{ matrix.libgccjit_version.env_extra }} ./y.sh test --release --clean --build-sysroot --test-failing-rustc ${{ matrix.libgccjit_version.extra }} 2>&1 | tee output_log
        rg --text "test result" output_log >> $GITHUB_STEP_SUMMARY

    - name: Run failing ui pattern tests for ICE
      # FIXME: re-enable those tests for libgccjit 12.
      if: matrix.libgccjit_version.gcc != 'libgccjit12.so'
      id: ui-tests
      run: |
        ${{ matrix.libgccjit_version.env_extra }} ./y.sh test --release --test-failing-ui-pattern-tests ${{ matrix.libgccjit_version.extra }} 2>&1 | tee output_log_ui
        if grep -q "the compiler unexpectedly panicked" output_log_ui; then
          echo "Error: 'the compiler unexpectedly panicked' found in output logs. CI Error!!"
          exit 1
        fi

  # Summary job for the merge queue.
  # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
  success_failures:
    needs: [build]
    # We need to ensure this job does *not* get skipped if its dependencies fail,
    # because a skipped job is considered a success by GitHub. So we have to
    # overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run
    # when the workflow is canceled manually.
    if: ${{ !cancelled() }}
    runs-on: ubuntu-latest
    steps:
      # Manually check the status of all dependencies. `if: failure()` does not work.
      - name: Conclusion
        run: |
          # Print the dependent jobs to see them in the CI log
          jq -C <<< '${{ toJson(needs) }}'
          # Check if all jobs that we depend on (in the needs array) were successful.
          jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
