name: Benchmarks

on:
  workflow_dispatch: {}
  schedule:
    - cron: '0 0 * * *'

jobs:
  check_changes:
    runs-on: ubuntu-latest
    name: Check latest commit
    outputs:
      should_run: ${{steps.should_run.outputs.should_run}}
    steps:
      - uses: actions/checkout@v4
      - name: print latest_commit
        run: echo ${{github.sha}}
      - id: should_run
        continue-on-error: true
        name: check latest commit is less than a day
        if: github.event_name == 'schedule'
        run: test -z $(git rev-list --after="24 hours" ${{github.sha}}) && echo "::set-output name=should_run::false"

  benchmark:
    needs: check_changes
    if: needs.check_changes.outputs.should_run != 'false'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: dtolnay/rust-toolchain@nightly
    - run: cargo bench --package rune-benches -- --output-format bencher | tee output.txt
    - uses: actions/cache@v4
      with:
        path: ./cache
        key: ${{ runner.os }}-benchmark
    - uses: rhysd/github-action-benchmark@v1
      with:
        tool: 'cargo'
        output-file-path: output.txt
        github-token: ${{secrets.GITHUB_TOKEN}}
        auto-push: true
