Comment utiliser Bencher dans GitHub Actions


Selon votre cas d’usage, vous pouvez configurer le benchmarking continu dans GitHub Actions pour votre :

🐰 Assurez-vous d’avoir crĂ©Ă© un jeton d’API et de l’avoir dĂ©fini comme un secret de dĂ©pĂŽt (Repository) nommĂ© BENCHER_API_TOKEN avant de continuer ! Naviguez vers Votre dĂ©pĂŽt -> ParamĂštres -> Secrets et variables -> Actions -> Nouveau secret de dĂ©pĂŽt. Nommez le secret BENCHER_API_TOKEN et dĂ©finissez la valeur du secret Ă  votre jeton d’API.

Branche de Base

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

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 \
--adapter json \
--err \
bencher mock
  1. Créer un fichier workflow GitHub Actions. (ex : .github/workflows/base_benchmarks.yml)
  2. Exécuter lors des événements push vers la branche main. Voir la documentation GitHub Actions on et GitHub Actions push pour un aperçu complet. (ex : on: push: branches: main)
  3. Créer un job GitHub Actions. (ex : jobs: benchmark_base_branch)
  4. Définir le type de machine sur lequel le job sera exécuté. Voir la documentation GitHub Actions runs-on pour un aperçu complet. (ex : runs-on: ubuntu-latest)
  5. Extraire le code source de votre branche de base. (ex : uses: actions/checkout@v4)
  6. Installer le CLI Bencher en utilisant l’action GitHub. (ex : uses: bencherdev/bencher@main)
  7. Utiliser la sous-commande CLI bencher run pour exécuter les benchmarks de votre branche main. Voir la sous-commande CLI bencher run pour un aperçu complet. (ex : bencher run)
  8. DĂ©finir l’option --project sur le slug du projet. Voir la documentation --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)
  9. DĂ©finir l’option --token sur le secret Repository BENCHER_API_TOKEN. Voir la documentation --token pour plus de dĂ©tails. (ex : --token '${{ secrets.BENCHER_API_TOKEN }}')
  10. DĂ©finir l’option --branch sur le nom de la branche. Voir la sĂ©lection de branche pour un aperçu complet. (ex : --branch main)
  11. DĂ©finir l’option --testbed sur le nom du banc d’essai. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Voir la documentation --testbed pour plus de dĂ©tails. (ex : --testbed ubuntu-latest)
  12. DĂ©finir l’option --adapter sur l’adaptateur de harnais de benchmark souhaitĂ©. Voir les adaptateurs de harnais de benchmark pour un aperçu complet. (ex : --adapter json)
  13. Définir le drapeau --err pour échouer la commande si une alerte est générée. Voir Seuils & Alertes pour un aperçu complet. (ex : --err)
  14. Spécifier les arguments de la commande de benchmark. Voir commande de benchmark pour un aperçu complet. (ex : bencher mock)

Demandes de Tirage (Pull Requests)

Afin de dĂ©tecter les rĂ©gressions de performance dans les Demandes de Tirage, vous aurez besoin d’exĂ©cuter vos benchmarks sur les PRs. Si vous attendez uniquement des PRs provenant de branches du mĂȘme dĂ©pĂŽt, alors vous pouvez simplement crĂ©er un autre workflow pour exĂ©cuter on les Ă©vĂ©nements pull_request provenant du mĂȘme dĂ©pĂŽt.

⚠ Cette solution fonctionne uniquement si toutes les PRs proviennent du mĂȘme dĂ©pĂŽt ! Voir Demandes de Tirage depuis des Forks ci-dessous.

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 }}' \
--branch-start-point '${{ github.base_ref }}' \
--branch-start-point-hash '${{ github.event.pull_request.base.sha }}' \
--testbed ubuntu-latest \
--adapter json \
--err \
--github-actions '${{ secrets.GITHUB_TOKEN }}' \
bencher mock
  1. Créez un fichier workflow pour GitHub Actions. (ex : .github/workflows/pr_benchmarks.yml)

  2. Exécutez on les é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Ă© Ă©ditĂ©, ou la branche de base d’une demande de tirage a Ă©tĂ© changĂ©e.
    • synchronize - La branche ‘head’ d’une demande de tirage a Ă©tĂ© mise Ă  jour. Par exemple, la branche ‘head’ a Ă©tĂ© mise Ă  jour depuis la branche de base ou de nouveaux commits ont Ă©tĂ© poussĂ©s vers la branche ‘head’.

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

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

  4. ExĂ©cutez on les Ă©vĂ©nements pull_request si et seulement si la demande de tirage provient du mĂȘme dĂ©pĂŽt. ⚠ NE SUPPRIMEZ PAS CETTE LIGNE ! Pour gĂ©rer les PRs de Forks, voir Demandes de Tirage depuis des 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 Ă  write pour pull-requests. Selon vos paramĂštres GitHub, cela peut ne pas ĂȘtre requis. Mais pour toutes les organisations et les repos 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 sera exécuté. Voir la documentation runs-on GitHub Actions pour un aperçu complet. (ex : runs-on: ubuntu-latest)

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

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

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

  10. DĂ©finissez l’option --project sur le slug du Projet. Voir la documentation --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 la documentation --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 Actions github. Voir la sĂ©lection de branche pour un aperçu complet. (ex : --branch '${{ github.head_ref }}')

  13. DĂ©finissez l’option --branch-start-point sur le point de dĂ©part de la branche de base PR en utilisant le contexte GitHub Actions github. Voir le point de dĂ©part de la sĂ©lection de branche pour un aperçu complet. (ex : --branch-start-point '${{ github.base_ref }}')

  14. DĂ©finissez l’option --branch-start-point-hash sur le hash du point de dĂ©part de la branche de base PR en utilisant l’évĂ©nement GitHub Actions pull_request. Voir le hash du point de dĂ©part de la sĂ©lection de branche pour un aperçu complet. (ex : --branch-start-point-hash '${{ github.event.pull_request.base.sha }}')

  15. DĂ©finissez l’option --testbed sur le nom du Testbed. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Voir la documentation --testbed pour plus de dĂ©tails. (ex : --testbed ubuntu-latest)

  16. DĂ©finissez l’option --adapter sur l’adaptateur de harnais de benchmarks dĂ©sirĂ©. Voir les adaptateurs de harnais de benchmarks pour un aperçu complet. (ex : --adapter json)

  17. Définissez le drapeau --err pour échouer la commande si une Alerte est générée. Voir Seuils & Alertes pour un aperçu complet. (ex : --err)

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

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


Les Pull Requests provenant de Forks

Si vous prĂ©voyez d’accepter les pull requests provenant de forks, 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Ă©, les secrets tels que votre BENCHER_API_TOKEN et le GITHUB_TOKEN ne sont pas disponibles dans GitHub Actions pour les PR de forks. C’est-Ă -dire que si un contributeur externe ouvre une PR Ă  partir d’un fork, l’exemple ci-dessus ne fonctionnera pas. Il y a deux options pour les PR de forks :

Voir ce rapport du GitHub Security Lab et ce billet de blog sur la prévention des pwn requests pour un aperçu complet.

Benchmark de PR Fork et Upload depuis la Branche par DĂ©faut

Ceci est la maniĂšre sĂ»re et suggĂ©rĂ©e d’ajouter un Benchmarking Continu aux pull requests des forks. Cela nĂ©cessite deux workflows sĂ©parĂ©s. Le premier workflow exĂ©cute et met en cache les rĂ©sultats des benchmarks dans le contexte pull_request. Aucun secret tel que votre BENCHER_API_TOKEN et le GITHUB_TOKEN ne sont disponibles lĂ . Ensuite, un second workflow tĂ©lĂ©charge les rĂ©sultats des benchmarks mis en cache dans le contexte workflow_run et les tĂ©lĂ©verse Ă  Bencher. Cela fonctionne parce que workflow_run s’exĂ©cute dans le contexte de la branche par dĂ©faut du dĂ©pĂŽt, oĂč les secrets comme votre BENCHER_API_TOKEN et le GITHUB_TOKEN sont disponibles. Le numĂ©ro de la pull request, la branche de tĂȘte et la branche de base utilisĂ©s dans le workflow pull_request initial doivent Ă©galement ĂȘtre explicitement transmis au workflow workflow_run car ils ne sont pas disponibles lĂ . Ces workflows ne s’exĂ©cuteront que s’ils sont prĂ©sents sur la branche par dĂ©faut. Voir utiliser les donnĂ©es du workflow dĂ©clencheur pour un aperçu complet.

name: Run and Cache 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/run_fork_pr_benchmarks.yml)

  2. Nommez ce workflow pour qu’il puisse ĂȘtre rĂ©fĂ©rencĂ© par le second workflow. (ex: name: ExĂ©cuter et Mettre en Cache les Benchmarks)

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

    • opened - Une pull request a Ă©tĂ© crĂ©Ă©e.
    • reopened - Une pull request fermĂ©e prĂ©cĂ©demment a Ă©tĂ© rouverte.
    • 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 de tĂȘte d’une pull request a Ă©tĂ© mise Ă  jour. Par exemple, la branche de tĂȘte a Ă©tĂ© mise Ă  jour depuis la branche de base ou de nouveaux commits ont Ă©tĂ© poussĂ©s vers la branche de tĂȘte.

    Voir la documentation GitHub Actions on et 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 sera exécuté. 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 de la PR fork. (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Ă©versez le fichier des rĂ©sultats des benchmarks en tant qu’artefact. (ex: uses: actions/upload-artifact@v4)

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

name: Track Benchmarks with Bencher
on:
workflow_run:
workflows: [Run and Cache 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: actions/github-script@v6
with:
script: |
async function downloadArtifact(artifactName) {
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == artifactName
})[0];
if (!matchArtifact) {
core.setFailed(`Failed to find artifact: ${artifactName}`);
}
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/${artifactName}.zip`, Buffer.from(download.data));
}
await downloadArtifact(process.env.BENCHMARK_RESULTS);
await downloadArtifact(process.env.PR_EVENT);
- name: Unzip Benchmark Results
run: |
unzip $BENCHMARK_RESULTS.zip
unzip $PR_EVENT.zip
- 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 }}' \
--branch-start-point '${{ env.PR_BASE }}' \
--branch-start-point-hash '${{ env.PR_BASE_SHA }}' \
--testbed ubuntu-latest \
--adapter json \
--err \
--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/track_fork_pr_benchmarks.yml)
  2. Nommez ce workflow second workflow. (ex: name: Suivre les Benchmarks avec Bencher)
  3. ChaĂźnez 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 travail uniquement si la conclusion du workflow prĂ©cĂ©dent Ă©tait un succĂšs en utilisant l’évĂ©nement GitHub Actions workflow_run. (ex: if: github.event.workflow_run.conclusion == 'success')
  6. Définissez le type de machine sur lequel le job sera exécuté. Voir la documentation GitHub Actions runs-on pour un aperçu complet. (ex: runs-on: ubuntu-latest)
  7. DĂ©finissez les noms de fichiers des rĂ©sultats des benchmarks et de l’objet de l’évĂ©nement pull_request comme variables d’environnement. (ex: env: ...)
  8. TĂ©lĂ©chargez les rĂ©sultats des benchmarks mis en cache et l’évĂ©nement pull_request. (ex: uses: actions/github-script@v6)
  9. Extrayez les rĂ©sultats des benchmarks mis en cache et l’évĂ©nement pull_request. (ex: unzip ...)
  10. Exportez les donnĂ©es nĂ©cessaires de l’évĂ©nement pull_request en tant que variables d’environnement. (ex: core.exportVariable(...))
  11. Installez le CLI Bencher en utilisant l’action GitHub. (ex: uses: bencherdev/bencher@main)
  12. Utilisez la sous-commande CLI bencher run pour suivre les benchmarks de votre branche de pull request fork. Voir la sous-commande CLI bencher run pour un aperçu complet. (ex: bencher run)
  13. DĂ©finissez l’option --project sur le slug du projet. Voir la documentation de l’option --project pour plus de dĂ©tails. (ex: --project save-walter-white-1234abcd)
  14. DĂ©finissez l’option --token sur le secret Repository BENCHER_API_TOKEN. Voir la documentation de l’option --token pour plus de dĂ©tails. (ex: --token '${{ secrets.BENCHER_API_TOKEN }}')
  15. DĂ©finissez l’option --branch sur le numĂ©ro formatĂ© de la PR fork en utilisant l’évĂ©nement GitHub Actions pull_request. Voir la sĂ©lection de la branche pour un aperçu complet. (ex: --branch '${{ env.PR_HEAD }}')
  16. DĂ©finissez l’option --branch-start-point sur le point de dĂ©part de la branche de base de la PR fork en utilisant l’évĂ©nement GitHub Actions pull_request. Voir la sĂ©lection du point de dĂ©part de la branche pour un aperçu complet. (ex: --branch-start-point '${{ env.PR_BASE }}')
  17. DĂ©finissez l’option --branch-start-point-hash sur le hash du point de dĂ©part de la branche de base de la PR fork en utilisant l’évĂ©nement GitHub Actions pull_request. Voir la sĂ©lection du hash du point de dĂ©part de la branche pour un aperçu complet. (ex: --branch-start-point-hash '${{ env.PR_BASE_SHA }}')
  18. DĂ©finissez l’option --testbed sur le nom du banc d’essai. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Voir la documentation de l’option --testbed pour plus de dĂ©tails. (ex: --testbed ubuntu-latest)
  19. DĂ©finissez l’option --adapter sur l’adaptateur de harnais de benchmarks souhaitĂ©. Voir les adaptateurs de harnais de benchmarks pour un aperçu complet. (ex: --adapter json)
  20. Définissez le drapeau --err pour faire échouer la commande si une alerte est générée. Voir Seuil & Alertes pour un aperçu complet. (ex: --err)
  21. DĂ©finissez l’option --github-actions sur le jeton d’authentification de l’API GitHub pour publier les rĂ©sultats en tant que commentaire sur la Pull Request en utilisant la variable d’environnement GitHub Actions GITHUB_TOKEN. Voir la documentation de l’option --github-actions pour plus de dĂ©tails. (ex: --github-actions '${{ secrets.GITHUB_TOKEN }}')
  22. DĂ©finissez l’option --ci-number sur le numĂ©ro de la pull request. Voir la documentation de l’option --ci-number pour plus de dĂ©tails. (ex: --ci-number '${{ env.PR_NUMBER }}')
  23. DĂ©finissez l’option --file sur le chemin du fichier des rĂ©sultats des benchmarks. Voir la commande de benchmark pour un aperçu complet. (ex: --file "$BENCHMARK_RESULTS")

Comparer les PR de forks avec la branche cible et avec des réviseurs requis

Afin de garantir que le code provenant d’une pull request de fork est sĂ©curisĂ©, cette Action GitHub vĂ©rifie si le fork provient d’un autre dĂ©pĂŽt. Si le fork provient d’un autre dĂ©pĂŽt, alors il devra ĂȘtre rĂ©visĂ©.

⚠ Il est trĂšs, trĂšs important de rĂ©viser minutieusement chaque PR de fork avant approbation ! Ne pas le faire pourrait rĂ©sulter en une demande de piratage !

Si vous préférez ne pas avoir cela sur la conscience, voir [Comparer les PR de forks et télécharger depuis la branche par défaut][benchmark fork pr and upload from default branch] ci-dessus.

Pour configurer ce workflow, vous devez crĂ©er deux [environnements GitHub Actions][github actions environments]. Naviguez vers Votre dĂ©pĂŽt -> ParamĂštres -> Environnements -> Nouvel environnement. CrĂ©ez deux nouveaux environnements, interne et externe. L’environnement interne ne devrait avoir aucune RĂšgle de protection de dĂ©ploiement. Cependant, l’environnement externe devrait avoir des RĂ©viseurs requis dĂ©finis pour ceux ayant la confiance de rĂ©viser les PR de forks avant d’effectuer des benchmarks. Voir [ce billet de blog][iterative.ai blog] pour un aperçu complet.

Cette configuration fonctionne car pull_request_target s’exĂ©cute dans le contexte de la branche cible de la pull request, oĂč des secrets tels que votre BENCHER_API_TOKEN et le GITHUB_TOKEN sont disponibles. Par consĂ©quent, ce workflow ne s’exĂ©cutera que s’il existe sur la branche cible. Evitez de dĂ©finir des secrets comme variables d’environnement, tels que GITHUB_TOKEN et BENCHER_API_TOKEN. Passez plutĂŽt explicitement vos secrets Ă  bencher run.

on:
pull_request_target:
types: [opened, reopened, edited, synchronize]
jobs:
fork_pr_requires_review:
environment: ${{ (github.event.pull_request.head.repo.full_name == github.repository && 'internal') || 'external' }}
runs-on: ubuntu-latest
steps:
- run: true
benchmark_fork_pr_branch:
needs: fork_pr_requires_review
name: Continuous Benchmarking Fork PRs with Bencher
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
- uses: bencherdev/bencher@main
- name: Track Fork PR Benchmarks with Bencher
run: |
bencher run \
--project save-walter-white-1234abcd \
--token '${{ secrets.BENCHER_API_TOKEN }}' \
--branch '${{ github.event.number }}/merge' \
--branch-start-point '${{ github.base_ref }}' \
--branch-start-point-hash '${{ github.event.pull_request.base.sha }}' \
--testbed ubuntu-latest \
--adapter json \
--err \
--github-actions '${{ secrets.GITHUB_TOKEN }}' \
bencher mock
  1. Créez un fichier de workflow GitHub Actions. (ex : .github/workflows/pr_target_benchmarks.yml)

  2. 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Ă© rouverte.
    • 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 tĂȘte d’une pull request 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 sur la branche tĂȘte.

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

  3. Créez un premier job GitHub Actions pour vérifier si le workflow requiert une révision. (ex : jobs: fork_pr_requires_review)

  4. DĂ©finissez l’environnement Ă  interne si et seulement si la pull request vient du mĂȘme dĂ©pĂŽt. Autrement, dĂ©finissez l’environnement Ă  externe, ce qui nĂ©cessitera une approbation d’un rĂ©viseur pour continuer. ⚠ NE SUPPRIMEZ PAS CETTE LIGNE ! (ex : environment: ${{ (github.event.pull_request.head.repo.full_name == github.repository && 'interne') || 'externe' }})

  5. Créez un second job GitHub Actions pour exécuter vos benchmarks. (ex : benchmark_fork_pr_branch)

  6. Faites en sorte que le job benchmark_fork_pr_branch nĂ©cessite le job fork_pr_requires_review pour s’exĂ©cuter. ⚠ NE SUPPRIMEZ PAS CETTE LIGNE ! Voir la [documentation needs de GitHub Actions][github actions needs] pour un aperçu complet. (ex : needs: fork_pr_requires_review)

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

  8. VĂ©rifiez le code source de la PR du fork. Puisque pull_request_target s’exĂ©cute dans le contexte de la branche cible de la pull request, vous devez toujours checkout la branche de la pull request. (ex : uses: actions/checkout@v4)

    • SpĂ©cifiez le dĂ©pĂŽt de la PR du fork (ex : repository: ${{ github.event.pull_request.head.repo.full_name }})
    • SpĂ©cifiez le hash de la PR du fork (ex : ref: ${{ github.event.pull_request.head.sha }})
    • Ne persistez pas votre identifiant git (ex : persist-credentials: false)
  9. Installez le CLI Bencher en utilisant [l’Action GitHub][bencher cli github action]. (ex : uses: bencherdev/bencher@main)

  10. Utilisez la sous-commande CLI bencher run pour exécuter les benchmarks de votre branche de pull request de fork. Voir [la sous-commande CLI bencher run][bencher run] pour un aperçu complet. (ex : bencher run)

  11. DĂ©finissez l’option --project sur le slug du Projet. Voir [la doc --project][project option] pour plus de dĂ©tails. (ex : —project save-walter-white-1234abcd`)

  12. DĂ©finissez l’option --token sur le secret de dĂ©pĂŽt BENCHER_API_TOKEN. Voir [la doc --token][token option] pour plus de dĂ©tails. (ex : --token '${{ secrets.BENCHER_API_TOKEN }}')

  13. DĂ©finissez l’option --branch sur le numĂ©ro de PR de fork formatĂ© en utilisant [l’évĂšnement pull_request de GitHub Actions][github action pull_request]. Voir [la sĂ©lection de branche][branch selection branch] pour un aperçu complet. (ex : --branch '${{ github.event.number }}/merge')

  14. DĂ©finissez l’option --branch-start-point sur le point de dĂ©part de la branche de base de la PR de fork en utilisant [le contexte github de GitHub Actions][github actions context]. Voir [la sĂ©lection de point de dĂ©part de branche][branch selection start point] pour un aperçu complet. (ex : --branch-start-point '${{ github.base_ref }}')

  15. DĂ©finissez l’option --branch-start-point-hash sur le hash du point de dĂ©part de la branche de base de la PR de fork en utilisant [l’évĂšnement pull_request de GitHub Actions][github action pull_request]. Voir [la sĂ©lection du hash du point de dĂ©part de branche][branch selection start point hash] pour un aperçu complet. (ex : --branch-start-point-hash '${{ github.event.pull_request.base.sha }}')

  16. DĂ©finissez l’option --testbed sur le nom du banc d’essai. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans runs-on. Voir [la doc --testbed][testbed option] pour plus de dĂ©tails. (ex : --testbed ubuntu-latest)

  17. DĂ©finissez l’option --adapter sur l’adaptateur souhaitĂ© pour le harnais de benchmark. Voir [les adaptateurs de harnais de benchmark][adapters] pour un aperçu complet. (ex : --adapter json)

  18. DĂ©finissez l’indicateur --err pour faire Ă©chouer la commande si une alerte est gĂ©nĂ©rĂ©e. Voir [Seuils & Alertes][alerts] pour un aperçu complet. (ex : --err)

  19. DĂ©finissez l’option --github-actions sur le jeton d’authentification de l’API GitHub pour publier les rĂ©sultats en tant que commentaire sur la Pull Request en utilisant [la variable d’environnement GITHUB_TOKEN de GitHub Actions][github token]. Voir [la doc --github-actions][github actions option] pour plus de dĂ©tails. (ex : --github-actions '${{ secrets.GITHUB_TOKEN }}')

  20. Spécifiez les arguments de la commande de benchmark. Voir [la commande de benchmark][command argument] pour un aperçu complet. (ex : bencher mock)



🐰 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: Mon, April 1, 2024 at 7:00:00 AM UTC