name: coverage

on:
  schedule:
    - cron: "0 8 * * *"
  workflow_dispatch:

env:
  RUSTFLAGS: "-C instrument-coverage"

jobs:
  coverage:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust: [stable]
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4.1.7

    - name: Environment
      run: bin/environment.sh

    - name: Install Prerequisites
      run: bin/install_prerequisites_ubuntu.sh

    - name: Install Rust
      run: bin/install_rust.sh

    - name: Install Grcov
      run: bin/install_grcov.sh

    - name: Build
      run: cargo build

    - name: Test Prerequisites
      run: bin/test/test_prerequisites.sh

    - name: Run Coverage
      run: bin/coverage_run.sh

    - name: Init git bot context
      uses: crazy-max/ghaction-import-gpg@v6.1.0
      with:
        gpg_private_key: ${{ secrets.HURL_BOT_GPG_PRIVATE_KEY }}
        passphrase: ${{ secrets.HURL_BOT_GPG_PRIVATE_KEY_PASSPHRASE }}
        git_committer_name: "hurl-bot"
        git_committer_email: "bot@hurl.dev"
        git_user_signingkey: true
        git_commit_gpgsign: true

    - name: Deploy GitHub Pages
      uses: peaceiris/actions-gh-pages@v4.0.0
      with:
        personal_token: ${{ secrets.HURL_BOT_TOKEN }}
        user_name: 'hurl-bot'
        user_email: 'bot@hurl.dev'
        publish_branch: github-pages
        publish_dir: target/coverage
        destination_dir: coverage

    - name: Archive Artifacts
      uses: actions/upload-artifact@v4.3.6
      if: ${{ always() }}
      with:
        name: coverage
        path: |
          target/coverage
          *.profraw
