# Generated from xtask::workflows::compare_perf
# Rebuild with `cargo xtask workflows`.
name: compare_perf
on:
  workflow_dispatch:
    inputs:
      head:
        description: head
        required: true
        type: string
      base:
        description: base
        required: true
        type: string
      crate_name:
        description: crate_name
        type: string
        default: ''
jobs:
  run_perf:
    runs-on: namespace-profile-16x32-ubuntu-2204
    steps:
    - name: steps::checkout_repo
      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
      with:
        clean: false
    - name: steps::setup_cargo_config
      run: |
        mkdir -p ./../.cargo
        cp ./.cargo/ci-config.toml ./../.cargo/config.toml
    - name: steps::setup_linux
      run: ./script/linux
    - name: steps::download_wasi_sdk
      run: ./script/download-wasi-sdk
    - name: compare_perf::run_perf::install_hyperfine
      uses: taiki-e/install-action@b4f2d5cb8597b15997c8ede873eb6185efc5f0ad
    - name: steps::git_checkout
      run: git fetch origin "$REF_NAME" && git checkout "$REF_NAME"
      env:
        REF_NAME: ${{ inputs.base }}
    - name: compare_perf::run_perf::cargo_perf_test
      run: |2-

                    if [ -n "$CRATE_NAME" ]; then
                        cargo perf-test -p "$CRATE_NAME" -- --json="$REF_NAME";
                    else
                        cargo perf-test -p vim -- --json="$REF_NAME";
                    fi
      env:
        REF_NAME: ${{ inputs.base }}
        CRATE_NAME: ${{ inputs.crate_name }}
    - name: steps::git_checkout
      run: git fetch origin "$REF_NAME" && git checkout "$REF_NAME"
      env:
        REF_NAME: ${{ inputs.head }}
    - name: compare_perf::run_perf::cargo_perf_test
      run: |2-

                    if [ -n "$CRATE_NAME" ]; then
                        cargo perf-test -p "$CRATE_NAME" -- --json="$REF_NAME";
                    else
                        cargo perf-test -p vim -- --json="$REF_NAME";
                    fi
      env:
        REF_NAME: ${{ inputs.head }}
        CRATE_NAME: ${{ inputs.crate_name }}
    - name: compare_perf::run_perf::compare_runs
      run: cargo perf-compare --save=results.md "$BASE" "$HEAD"
      env:
        BASE: ${{ inputs.base }}
        HEAD: ${{ inputs.head }}
    - name: '@actions/upload-artifact results.md'
      uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
      with:
        name: results.md
        path: results.md
        if-no-files-found: error
    - name: steps::cleanup_cargo_config
      if: always()
      run: |
        rm -rf ./../.cargo
defaults:
  run:
    shell: bash -euxo pipefail {0}
