Comment utiliser Bencher dans GitHub Actions


Depending on your use case, you can set up Continuous Benchmarking in GitHub Actions for your:

Assurez-vous d’avoir crĂ©Ă© un jeton API et de l’avoir dĂ©fini comme un secret de RĂ©fĂ©rentiel nommĂ© BENCHER_API_TOKEN avant de continuer ! Allez Ă  Votre RĂ©po -> ParamĂštres -> Secrets et variables -> Actions -> Nouveau secret de rĂ©fĂ©rentiel. Nommez le secret BENCHER_API_TOKEN et dĂ©finissez la valeur secrĂšte sur votre jeton API.

Dans GitHub Actions, les secrets ne sont pas transmis au runner lorsqu’un workflow est dĂ©clenchĂ© depuis un dĂ©pĂŽt forkĂ©. Par consĂ©quent, vous devrez utiliser une branche du mĂȘme dĂ©pĂŽt lors de l’ajout de l’un des workflows ci-dessous Ă  votre dĂ©pĂŽt avec une pull request. Si vous essayez d’ajouter Bencher avec une pull request Ă  partir d’un fork, alors le secret BENCHER_API_TOKEN ne sera pas disponible. ${{ secrets.BENCHER_API_TOKEN }} sera une chaĂźne vide.

Branche de Base

Un pilier du Benchmarking Statistique Continu est d’avoir une base de rĂ©fĂ©rence historique pour votre branche de base. Cette base de rĂ©fĂ©rence historique peut alors ĂȘtre utilisĂ©e pour dĂ©tecter les rĂ©gressions de performance dans les Pull Requests.

.github/workflows/base_benchmarks.yml
on:
push:
branches: main
jobs:
benchmark_base_branch:
name: Continuous Benchmarking with Bencher
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bencherdev/bencher@main
- name: Track base branch benchmarks with Bencher
run: |
bencher run \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch main \
--testbed ubuntu-latest \
--threshold-measure latency \
--threshold-test t_test \
--threshold-max-sample-size 64 \
--threshold-upper-boundary 0.99 \
--thresholds-reset \
--err \
--adapter json \
--github-actions '${{ secrets.GITHUB_TOKEN }}' \
bencher mock
  1. Créez un fichier workflow GitHub Actions. (ex: .github/workflows/base_benchmarks.yml)
  2. Exécutez sur les événements push vers la branche main. Consultez la documentation GitHub Actions on et la documentation GitHub Actions push pour un aperçu complet. (ex: on: push: branches: main)
  3. Créez un job GitHub Actions. (ex: jobs: benchmark_base_branch)
  4. Définissez le type de machine sur laquelle le job sera exécuté. Consultez la documentation GitHub Actions runs-on pour un aperçu complet. (ex: runs-on: ubuntu-latest)
  5. Récupérez le code source de votre branche de base. (ex: uses: actions/checkout@v4)
  6. Installez le Bencher CLI en utilisant l’Action GitHub. (ex: uses: bencherdev/bencher@main)
  7. Utilisez la sous-commande CLI bencher run pour exécuter vos benchmarks de la branche main. Consultez la sous-commande CLI bencher run pour un aperçu complet. (ex: bencher run)
  8. DĂ©finissez l’option --project sur le slug du Projet. Consultez les documents --project pour plus de dĂ©tails. (ex: --project save-walter-white-1234abcd)
  9. DĂ©finissez l’option --token sur le secret Repository BENCHER_API_TOKEN. Consultez les documents --token pour plus de dĂ©tails. (ex: --token '${{ secrets.BENCHER_API_TOKEN }}')
  10. DĂ©finissez l’option --branch sur le nom de la branche de base. Consultez les documents --branch pour un aperçu complet. (ex: --branch main)
  11. RĂ©glez l’option --testbed sur le nom du Testbed. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Consultez les documents --tested pour plus de dĂ©tails. (ex: --testbed ubuntu-latest)
  12. DĂ©finissez le seuil pour la Branche main, le Testbed ubuntu-latest, et la Mesure latency:
    1. DĂ©finissez l’option --threshold-measure sur la Mesure intĂ©grĂ©e latency gĂ©nĂ©rĂ©e par bencher mock. Consultez les documents --threshold-measure pour plus de dĂ©tails. (ex: --threshold-measure latency)
    2. DĂ©finissez l’option --threshold-test sur un test t de Student (t_test). Consultez les documents --threshold-test pour un aperçu complet. (ex: --threshold-test t_test)
    3. DĂ©finissez l’option --threshold-max-sample-size sur la taille maximale de l’échantillon de 64. Consultez les documents --threshold-max-sample-size pour plus de dĂ©tails. (ex: --threshold-max-sample-size 64)
    4. DĂ©finissez l’option --threshold-upper-boundary sur la Limite SupĂ©rieure de 0.99. Consultez les documents --threshold-upper-boundary pour plus de dĂ©tails. (ex: --threshold-upper-boundary 0.99)
    5. RĂ©glez l’indicateur --thresholds-reset pour que seul le seuil spĂ©cifiĂ© soit actif. Consultez les documents --thresholds-reset pour un aperçu complet. (ex: --thresholds-reset)
  13. RĂ©glez l’indicateur --err pour Ă©chouer la commande si une Alerte est gĂ©nĂ©rĂ©e. Consultez les documents --err pour un aperçu complet. (ex: --err)
  14. DĂ©finissez l’option --adapter sur Bencher Metric Format JSON (json) qui est gĂ©nĂ©rĂ© par bencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex: --adapter json)
  15. RĂ©glez l’option --github-actions sur le jeton d’authentification API GitHub pour publier les rĂ©sultats sous forme de commentaire de VĂ©rifications GitHub en utilisant la variable d’environnement GITHUB_TOKEN de GitHub Actions. Consultez les documents --github-actions pour plus de dĂ©tails. (ex: --github-actions '${{ secrets.GITHUB_TOKEN }}')
  16. Spécifiez les arguments de la commande de benchmark. Consultez la commande de benchmark pour un aperçu complet. (ex: bencher mock)

Pull Requests

Pour dĂ©tecter les rĂ©gressions de performance dans les demandes de tirage (Pull Requests), vous devez exĂ©cuter vos benchmarks sur les PRs. Si vous ne vous attendez Ă  avoir des PRs de branches Ă  l’intĂ©rieur du mĂȘme dĂ©pĂŽt, vous pouvez simplement crĂ©er un autre flux de travail pour exĂ©cuter on des Ă©vĂ©nements pull_request du mĂȘme dĂ©pĂŽt.

⚠ Cette solution ne fonctionne que si toutes les PRs proviennent du mĂȘme dĂ©pĂŽt ! Voir Pull Requests from Forks ci-dessous.

.github/workflows/pr_benchmarks.yml
on:
pull_request:
types: [opened, reopened, edited, synchronize]
jobs:
benchmark_pr_branch:
name: Continuous Benchmarking PRs with Bencher
# DO NOT REMOVE: For handling Fork PRs see Pull Requests from Forks
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bencherdev/bencher@main
- name: Track PR Benchmarks with Bencher
run: |
bencher run \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch '${{ github.head_ref }}' \
--start-point '${{ github.base_ref }}' \
--start-point-hash '${{ github.event.pull_request.base.sha }}' \
--start-point-clone-thresholds \
--start-point-reset \
--testbed ubuntu-latest \
--err \
--adapter json \
--github-actions '${{ secrets.GITHUB_TOKEN }}' \
bencher mock
  1. Créez un fichier de workflow GitHub Actions. (ex : .github/workflows/pr_benchmarks.yml)

  2. Exécutez sur des événements pull_request :

    • opened - Une demande de tirage a Ă©tĂ© crĂ©Ă©e.
    • reopened - Une demande de tirage prĂ©cĂ©demment fermĂ©e a Ă©tĂ© rouverte.
    • edited - Le titre ou le corps d’une demande de tirage a Ă©tĂ© modifiĂ©, ou la branche de base d’une demande de tirage a Ă©tĂ© changĂ©e.
    • synchronize - La branche tĂȘte d’une demande de tirage a Ă©tĂ© mise Ă  jour. Par exemple, la branche tĂȘte a Ă©tĂ© mise Ă  jour depuis la branche de base ou de nouveaux commits ont Ă©tĂ© poussĂ©s vers la branche tĂȘte.

    Consultez la documentation sur on de GitHub Actions et la documentation sur pull_request de GitHub Actions pour un aperçu complet. (ex : on: pull_request: types: [opened, reopened, edited, synchronize])

  3. Créez un job GitHub Actions. (ex : jobs: benchmark_pr_branch)

  4. ExĂ©cutez sur des Ă©vĂ©nements pull_request si et seulement si la demande de tirage provient du mĂȘme dĂ©pĂŽt. ⚠ NE PAS SUPPRIMER CETTE LIGNE ! Pour gĂ©rer les Fork PRs, voir Pull Requests from Forks ci-dessous. (ex : if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)

  5. DĂ©finissez les permissions pour le GITHUB_TOKEN sur write pour pull-requests. Selon vos paramĂštres GitHub, cela peut ne pas ĂȘtre requis. Mais pour tous les organisations et dĂ©pĂŽts personnels crĂ©Ă©s aprĂšs le 02 fĂ©vrier 2023, c’est le comportement par dĂ©faut. Voir la documentation GitHub pour un aperçu complet. (ex : permissions: pull-requests: write)

  6. DĂ©finissez le type de machine sur lequel le job s’exĂ©cutera. Consultez la documentation sur runs-on de GitHub Actions pour un aperçu complet. (ex : runs-on: ubuntu-latest)

  7. VĂ©rifiez le code source de la branche PR. (ex : uses: actions/checkout@v4)

  8. Installez le Bencher CLI en utilisant l’Action GitHub. (ex : uses: bencherdev/bencher@main)

  9. Utilisez la sous-commande bencher run CLI pour exécuter vos benchmarks de branche de demande de tirage. Voir la sous-commande bencher run CLI pour un aperçu complet. (ex : bencher run)

  10. DĂ©finissez l’option --project sur le slug du Projet. Voir les docs sur --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)

  11. DĂ©finissez l’option --token sur le secret du DĂ©pĂŽt BENCHER_API_TOKEN. Voir les docs sur --token pour plus de dĂ©tails. (ex : --token '${{ secrets.BENCHER_API_TOKEN }}')

  12. DĂ©finissez l’option --branch sur le nom de la branche PR en utilisant le contexte github de GitHub Actions. Voir les docs sur --branch pour un aperçu complet. (ex : --branch '${{ github.head_ref }}')

  13. Définissez le point de départ pour la branche PR :

    1. Définissez --start-point sur le point de départ de la branche PR en utilisant le contexte github de GitHub Actions. Voir les docs sur --start-point pour un aperçu complet. (ex : --start-point '${{ github.base_ref }}')
    2. DĂ©finissez --start-point-hash sur le git hash du point de dĂ©part de la branche PR en utilisant l’évĂ©nement pull_request de GitHub Actions. Voir les docs sur --start-point-hash pour un aperçu complet. (ex : --start-point-hash '${{ github.event.pull_request.base.sha }}')
    3. Définissez le flag --start-point-clone-thresholds pour cloner les Seuils à partir du point de départ. Voir les docs sur --start-point-clone-thresholds pour un aperçu complet. (ex : --start-point-clone-thresholds)
    4. DĂ©finissez le flag --start-point-reset pour toujours rĂ©initialiser la branche PR au point de dĂ©part. Cela permettra d’éviter la dĂ©rive des donnĂ©es de benchmark. Voir les docs sur --start-point-reset pour un aperçu complet. (ex : --start-point-reset)
  14. DĂ©finissez l’option --testbed sur le nom du Testbed. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Voir les docs sur --tested pour plus de dĂ©tails. (ex : --testbed ubuntu-latest)

  15. Définissez le flag --err pour échouer si une alerte est générée. Voir les docs sur --err pour un aperçu complet. (ex : --err)

  16. DĂ©finissez l’option --adapter sur Bencher Metric Format JSON (json) gĂ©nĂ©rĂ© par bencher mock. Voir les adapteurs de harnais de benchmark pour un aperçu complet. (ex : --adapter json)

  17. DĂ©finissez l’option --github-actions sur le token d’authentification API GitHub pour poster les rĂ©sultats en tant que commentaire sur la demande de tirage en utilisant la variable d’environnement GITHUB_TOKEN de GitHub Actions. Voir les docs sur --github-actions pour plus de dĂ©tails. (ex : --github-actions '${{ secrets.GITHUB_TOKEN }}')

  18. Spécifiez les arguments de commande de benchmark. Voir la commande de benchmark pour un aperçu complet. (ex : bencher mock)

Pour nettoyer la branche de PR aprĂšs la fermeture de sa PR, vous pouvez crĂ©er un workflow sĂ©parĂ© pour s’exĂ©cuter on des Ă©vĂ©nements pull_request avec le type closed. Ce workflow archivera la branche de la PR en utilisant la commande bencher archive.

.github/workflows/pr_benchmarks_closed.yml
on:
pull_request:
types: [closed]
jobs:
archive_pr_branch:
name: Archive closed PR branch with Bencher
# DO NOT REMOVE: For handling Fork PRs see Pull Requests from Forks
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bencherdev/bencher@main
- name: Archive closed PR branch with Bencher
run: |
bencher archive \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch '${{ github.head_ref }}'
  1. Créez un fichier workflow GitHub Actions. (ex: .github/workflows/pr_benchmarks_closed.yml)

  2. S’exĂ©cuter sur les Ă©vĂ©nements pull_request:

    • closed - Une pull request a Ă©tĂ© fermĂ©e.

    Voir la documentation GitHub Actions on et la documentation GitHub Actions pull_request pour un aperçu complet. (ex: on: pull_request: types: [closed])

  3. Créez un job GitHub Actions. (ex: jobs: archive_pr_branch)

  4. S’exĂ©cuter sur les Ă©vĂ©nements pull_request uniquement si la pull request provient du mĂȘme dĂ©pĂŽt. ⚠ NE SUPPRIMEZ PAS CETTE LIGNE ! Pour le traitement des PRs provenant de Forks, voir Pull Requests depuis les Forks ci-dessous. (ex: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)

  5. DĂ©finissez les autorisations pour le GITHUB_TOKEN Ă  write pour pull-requests. Selon vos paramĂštres GitHub, cela peut ne pas ĂȘtre nĂ©cessaire. Mais pour tous les organisations et dĂ©pĂŽts personnels crĂ©Ă©s aprĂšs le 02 fĂ©vrier 2023, ceci est le comportement par dĂ©faut. Voir la documentation GitHub pour un aperçu complet. (ex: permissions: pull-requests: write)

  6. DĂ©finissez le type de machine sur lequel le job s’exĂ©cutera. Voir la documentation GitHub Actions runs-on pour un aperçu complet. (ex: runs-on: ubuntu-latest)

  7. Validez le code source de la branche PR. (ex: uses: actions/checkout@v4)

  8. Installez le Bencher CLI en utilisant l’Action GitHub. (ex: uses: bencherdev/bencher@main)

  9. Utilisez la sous-commande CLI bencher archive pour archiver la branche PR. (ex: bencher archive)

  10. DĂ©finissez l’option --project sur le slug du Projet. Voir les docs --project pour plus de dĂ©tails. (ex: --project save-walter-white-1234abcd)

  11. DĂ©finissez l’option --token sur le secret du dĂ©pĂŽt BENCHER_API_TOKEN. Voir les docs --token pour plus de dĂ©tails. (ex: --token '${{ secrets.BENCHER_API_TOKEN }}')

  12. DĂ©finissez l’option --branch sur le nom de la branche PR en utilisant le contexte github des GitHub Actions. (ex: --branch '${{ github.head_ref }}')


Demandes de Tirage depuis des Fourches

Si vous envisagez d’accepter des demandes de tirage depuis des fourches, comme c’est souvent le cas dans les projets open source publics, alors vous devrez gĂ©rer les choses un peu diffĂ©remment. Pour des raisons de sĂ©curitĂ©, des secrets tels que votre BENCHER_API_TOKEN et le GITHUB_TOKEN ne sont pas disponibles dans les GitHub Actions pour les PRs de fourches. Ainsi, si un contributeur externe ouvre une PR depuis une fourche, l’exemple ci-dessus ne fonctionnera pas. Consultez cette analyse de GitHub Security Lab et cet article de blog sur la prĂ©vention des pwn requests pour un aperçu complet.

Voici la maniĂšre sĂ»re et suggĂ©rĂ©e pour ajouter le benchmarking continu aux demandes de tirage de fourches. Cela nĂ©cessite deux workflows distincts. Le premier workflow exĂ©cute et met en cache les rĂ©sultats du benchmark dans le contexte pull_request. Aucun secret tel que votre BENCHER_API_TOKEN et le GITHUB_TOKEN n’y est disponible. Ensuite, un second workflow tĂ©lĂ©charge les rĂ©sultats des benchmarks mis en cache dans le contexte workflow_run et les tĂ©lĂ©charge vers Bencher. Cela fonctionne car workflow_run s’exĂ©cute dans le contexte de la branche par dĂ©faut du dĂ©pĂŽt, oĂč des secrets tels que votre BENCHER_API_TOKEN et le GITHUB_TOKEN sont disponibles. Le numĂ©ro de la demande de tirage, la branche principale et la branche de base utilisĂ©es dans le workflow initial pull_request doivent Ă©galement ĂȘtre explicitement passĂ©s dans le workflow workflow_run car ils ne sont pas disponibles lĂ -bas. Ces workflows ne s’exĂ©cuteront que s’ils existent sur la branche par dĂ©faut. Voir utilisation des donnĂ©es du workflow dĂ©clencheur pour un aperçu complet.

.github/workflows/fork_pr_benchmarks_run.yml
name: Run Benchmarks
on:
pull_request:
types: [opened, reopened, edited, synchronize]
jobs:
benchmark_fork_pr_branch:
name: Run Fork PR Benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Mock Benchmarking
run: |
/bin/echo '{ "bencher::mock_0": { "latency": { "value": 1.0 } } }' > benchmark_results.json
- name: Upload Benchmark Results
uses: actions/upload-artifact@v4
with:
name: benchmark_results.json
path: ./benchmark_results.json
- name: Upload GitHub Pull Request Event
uses: actions/upload-artifact@v4
with:
name: event.json
path: ${{ github.event_path }}
  1. Créez un premier fichier workflow GitHub Actions. (ex : .github/workflows/fork_pr_benchmarks_run.yml)

  2. Nommez ce workflow afin qu’il puisse ĂȘtre rĂ©fĂ©rencĂ© par le deuxiĂšme workflow. (ex : name: Run Benchmarks)

  3. Exécutez sur les événements pull_request :

    • opened - Une pull request a Ă©tĂ© crĂ©Ă©e.
    • reopened - Une pull request prĂ©cĂ©demment fermĂ©e a Ă©tĂ© rĂ©ouverte.
    • edited - Le titre ou le corps d’une pull request a Ă©tĂ© modifiĂ©, ou la branche de base d’une pull request a Ă©tĂ© changĂ©e.
    • synchronize - La branche head d’une pull request a Ă©tĂ© mise Ă  jour. Par exemple, la branche head a Ă©tĂ© mise Ă  jour Ă  partir de la branche de base ou de nouveaux commits ont Ă©tĂ© poussĂ©s vers la branche head.

    Voir la documentation GitHub Actions on et la documentation GitHub Actions pull_request pour un aperçu complet. (ex : on: pull_request: types: [opened, reopened, edited, synchronize])

  4. Créez un job GitHub Actions. (ex : jobs: benchmark_fork_pr_branch)

  5. DĂ©finissez le type de machine sur lequel le job s’exĂ©cutera. Voir la documentation GitHub Actions runs-on pour un aperçu complet. (ex : runs-on: ubuntu-latest)

  6. Récupérez le code source de la branche fork PR. (ex : uses: actions/checkout@v4)

  7. Exécutez vos benchmarks et enregistrez les résultats dans un fichier. (ex : /bin/echo '{ ... }' > benchmark_results.json)

  8. TĂ©lĂ©chargez le fichier de rĂ©sultats des benchmarks en tant qu’artifact. (ex : uses: actions/upload-artifact@v4)

  9. TĂ©lĂ©chargez l’objet d’évĂ©nement pull_request en tant qu’artifact. (ex : uses: actions/upload-artifact@v4)

.github/workflows/fork_pr_benchmarks_track.yml
name: Track Benchmarks with Bencher
on:
workflow_run:
workflows: [Run Benchmarks]
types: [completed]
jobs:
track_fork_pr_branch:
if: github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
env:
BENCHMARK_RESULTS: benchmark_results.json
PR_EVENT: event.json
steps:
- name: Download Benchmark Results
uses: dawidd6/action-download-artifact@v6
with:
name: ${{ env.BENCHMARK_RESULTS }}
run_id: ${{ github.event.workflow_run.id }}
- name: Download PR Event
uses: dawidd6/action-download-artifact@v6
with:
name: ${{ env.PR_EVENT }}
run_id: ${{ github.event.workflow_run.id }}
- name: Export PR Event Data
uses: actions/github-script@v6
with:
script: |
let fs = require('fs');
let prEvent = JSON.parse(fs.readFileSync(process.env.PR_EVENT, {encoding: 'utf8'}));
core.exportVariable("PR_HEAD", `${prEvent.number}/merge`);
core.exportVariable("PR_BASE", prEvent.pull_request.base.ref);
core.exportVariable("PR_BASE_SHA", prEvent.pull_request.base.sha);
core.exportVariable("PR_NUMBER", prEvent.number);
- uses: bencherdev/bencher@main
- name: Track Benchmarks with Bencher
run: |
bencher run \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch '${{ env.PR_HEAD }}' \
--start-point '${{ env.PR_BASE }}' \
--start-point-hash '${{ env.PR_BASE_SHA }}' \
--start-point-clone-thresholds \
--start-point-reset \
--testbed ubuntu-latest \
--err \
--adapter json \
--github-actions '${{ secrets.GITHUB_TOKEN }}' \
--ci-number '${{ env.PR_NUMBER }}' \
--file "$BENCHMARK_RESULTS"
  1. Créez un premier fichier workflow GitHub Actions. (ex : .github/workflows/fork_pr_benchmarks_track.yml)
  2. Nommez ce workflow second workflow. (ex : name: Track Benchmarks with Bencher)
  3. Chainez les deux workflows avec l’évĂ©nement workflow_run. (ex : on: workflow_run: ...)
  4. Créez un job GitHub Actions. (ex : jobs: track_fork_pr_branch)
  5. ExĂ©cutez ce job uniquement si la conclusion du workflow prĂ©cĂ©dent a Ă©tĂ© un succĂšs en utilisant l’évĂ©nement workflow_run de GitHub Actions. (ex : if: github.event.workflow_run.conclusion == 'success')
  6. DĂ©finissez le type de machine sur laquelle le job s’exĂ©cutera. Consultez la documentation GitHub Actions runs-on pour un aperçu complet. (ex : runs-on: ubuntu-latest)
  7. Configurez les rĂ©sultats des benchmarks et les noms des fichiers d’objet d’évĂ©nement pull_request en tant que variables d’environnement. (ex : env: ...)
  8. TĂ©lĂ©chargez les rĂ©sultats des benchmarks en cache et l’évĂ©nement pull_request en utilisant l’action GitHub action-download-artifact. (ex : uses: dawidd6/action-download-artifact@v6)
  9. Exportez les donnĂ©es nĂ©cessaires de l’évĂ©nement pull_request en tant que variables d’environnement. (ex : core.exportVariable(...))
  10. Installez le Bencher CLI en utilisant l’Action GitHub. (ex : uses: bencherdev/bencher@main)
  11. Utilisez la sous-commande CLI bencher run pour suivre vos benchmarks de branche de pull de fork. Consultez la sous-commande CLI le bencher run pour un aperçu complet. (ex : bencher run)
  12. DĂ©finissez l’option --project sur le slug du projet. Consultez les docs --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)
  13. DĂ©finissez l’option --token sur le secret Repository BENCHER_API_TOKEN. Consultez les docs --token pour plus de dĂ©tails. (ex : --token '${{ secrets.BENCHER_API_TOKEN }}')
  14. DĂ©finissez l’option --branch sur le nom de la branche PR de fork en utilisant [le contexte github de GitHub Actions][github actions context]. Consultez les docs --branch pour un aperçu complet. (ex : --branch '${{ env.PR_HEAD }}')
  15. DĂ©finissez le Point de DĂ©part pour la Branche PR de fork :
    1. DĂ©finissez l’option --start-point sur le point de dĂ©part de la Branche PR de fork en utilisant [le contexte github de GitHub Actions][github actions context]. Consultez les docs --start-point pour un aperçu complet. (ex : --start-point '${{ env.PR_BASE }}')
    2. DĂ©finissez l’option --start-point-hash sur le git hash du point de dĂ©part de la Branche PR de fork en utilisant l’évĂ©nement pull_request de GitHub Actions. Consultez les docs --start-point-hash pour un aperçu complet. (ex : --start-point-hash '${{ env.PR_BASE_SHA }}')
    3. Définissez le drapeau --start-point-clone-thresholds pour cloner les Seuils à partir du point de départ. Consultez les docs --start-point-clone-thresholds pour un aperçu complet. (ex : --start-point-clone-thresholds)
    4. DĂ©finissez le drapeau --start-point-reset pour toujours rĂ©initialiser la Branche PR de fork au point de dĂ©part. Cela empĂȘchera la dĂ©rive des donnĂ©es de benchmark. Consultez les docs --start-point-reset pour un aperçu complet. (ex : --start-point-reset)
  16. DĂ©finissez l’option --testbed sur le nom du Testbed. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Consultez les docs --testbed pour plus de dĂ©tails. (ex : --testbed ubuntu-latest)
  17. Définissez le drapeau --err pour échouer la commande si une Alerte est générée. Consultez les docs --err pour un aperçu complet. (ex : --err)
  18. DĂ©finissez l’option --adapter sur le Format de MĂ©tadonnĂ©es Bencher JSON (json) gĂ©nĂ©rĂ© par bencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex : --adapter json)
  19. DĂ©finissez l’option --github-actions sur le token d’authentification API GitHub pour publier les rĂ©sultats en tant que commentaire sur le Pull Request en utilisant la variable d’environnement GITHUB_TOKEN de GitHub Actions. Consultez les docs --github-actions pour plus de dĂ©tails. (ex : --github-actions '${{ secrets.GITHUB_TOKEN }}')
  20. DĂ©finissez l’option --ci-number sur le numĂ©ro du pull request. Consultez les docs --ci-number pour plus de dĂ©tails. (ex : --ci-number '${{ env.PR_NUMBER }}')
  21. DĂ©finissez l’option --file sur le chemin d’accĂšs du fichier de rĂ©sultats de benchmark. Consultez la commande benchmark pour un aperçu complet. (ex : --file "$BENCHMARK_RESULTS")

Pour nettoyer la branche de PR du fork aprÚs la fermeture de sa PR, vous pouvez créer un workflow distinct pour exécuter des événements on pull_request avec le type closed. Ce workflow archivera la branche de PR du fork en utilisant la commande bencher archive.

.github/workflows/fork_pr_benchmarks_closed.yml
on:
pull_request:
types: [closed]
jobs:
archive_fork_pr_branch:
name: Archive closed fork PR branch with Bencher
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bencherdev/bencher@main
- name: Archive closed fork PR branch with Bencher
run: |
bencher archive \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch '${{ github.head_ref }}'
  1. Créez un fichier de workflow GitHub Actions. (ex : .github/workflows/fork_pr_benchmarks_closed.yml)

  2. Exécutez lors des événements pull_request :

    • closed - Une pull request a Ă©tĂ© fermĂ©e.

    Consultez la documentation on de GitHub Actions et la documentation pull_request de GitHub Actions pour un aperçu complet. (ex : on: pull_request: types: [closed])

  3. Créez un job GitHub Actions. (ex : jobs: archive_pr_branch)

  4. Configurez les permissions pour le GITHUB_TOKEN Ă  write pour pull-requests. Selon vos paramĂštres GitHub, cela peut ne pas ĂȘtre nĂ©cessaire. Mais pour toutes les organisations et dĂ©pĂŽts personnels crĂ©Ă©s aprĂšs le 02 fĂ©vrier 2023, c’est le comportement par dĂ©faut. Consultez la documentation GitHub pour un aperçu complet. (ex : permissions: pull-requests: write)

  5. DĂ©finissez le type de machine sur laquelle le job s’exĂ©cutera. Consultez la documentation runs-on de GitHub Actions pour un aperçu complet. (ex : runs-on: ubuntu-latest)

  6. Récupérez le code source de la branche PR. (ex : uses: actions/checkout@v4)

  7. Installez le CLI Bencher en utilisant l’Action GitHub. (ex : uses: bencherdev/bencher@main)

  8. Utilisez la sous-commande bencher archive CLI pour archiver la branche PR. (ex : bencher archive)

  9. DĂ©finissez l’option --project sur le slug du projet. Consultez la documentation --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)

  10. Configurez l’option --token sur le secret Repository BENCHER_API_TOKEN. Consultez la documentation --token pour plus de dĂ©tails. (ex : --token '${{ secrets.BENCHER_API_TOKEN }}')

  11. Configurez l’option --branch sur le nom de la branche PR en utilisant le contexte github de GitHub Actions. (ex : --branch '${{ github.head_ref }}')



🐰 FĂ©licitations ! Vous avez appris comment utiliser Bencher dans GitHub Actions ! 🎉


Continuez : Vue d’ensemble du Benchmarking ➡

đŸ€– Ce document a Ă©tĂ© automatiquement gĂ©nĂ©rĂ© par OpenAI GPT-4. Il peut ne pas ĂȘtre prĂ©cis et peut contenir des erreurs. Si vous trouvez des erreurs, veuillez ouvrir une issue sur GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Sat, October 12, 2024 at 12:40:00 PM UTC