GitHub Actions에서 Bencher 사용하기
당신의 사용 사례에 따라, GitHub Actions에서 지속적 벤치마킹을 설정할 수 있습니다:
진행하기 전에 프로젝트 API 키를 생성하고, 이를 BENCHER_API_KEY이라는 저장소 비밀로 설정했는지 확인하세요!
Your Repo -> Settings -> Secrets and variables -> Actions -> New repository secret로 이동합니다.
비밀 이름을 BENCHER_API_KEY으로 지정하고 비밀값을 프로젝트 API 키로 설정하세요.
GitHub Actions에서,
비밀은 포크된 리포지토리에서 워크플로우가 트리거될 때 실행자에게 전달되지 않습니다.
따라서 아래의 워크플로 중 하나를 저장소에 풀 리퀘스트로 추가할 때는 같은 저장소의 브랜치를 사용해야 합니다.
포크로부터 풀 리퀘스트로 Bencher를 추가하면,
BENCHER_API_KEY 비밀은 사용 가능하지 않습니다.
${{ secrets.BENCHER_API_KEY }}는 빈 문자열이 될 것입니다.
기본 브랜치
통계적 지속 벤치마킹의 초석은 기본 브랜치에 대한 역사적 기준선을 보유하는 것입니다. 이 역사적 기준선은 풀 리퀘스트에서 성능 저하를 감지하는 데 사용될 수 있습니다.
on: push: branches: main
jobs: benchmark_base_branch: name: Continuous Benchmarking with Bencher permissions: checks: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: bencherdev/bencher@main - name: Track base branch benchmarks with Bencher run: | bencher run \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --branch main \ --testbed ubuntu-latest \ --threshold-measure latency \ --threshold-test t_test \ --threshold-max-sample-size 64 \ --threshold-upper-boundary 0.99 \ --thresholds-reset \ --error-on-alert \ --adapter json \ --github-actions '${{ secrets.GITHUB_TOKEN }}' \ bencher mock- GitHub Actions
workflow파일을 생성하세요. (예:.github/workflows/base_benchmarks.yml) main브랜치에 대한push이벤트에서 실행하세요. 전체 개요는 GitHub Actionson문서 및 GitHub Actionspush문서를 참조하세요. (예:on: push: branches: main)- GitHub Actions
job을 생성하세요. (예:jobs: benchmark_base_branch) GITHUB_TOKEN의 권한을 설정하십시오checks에 대해write로 설정합니다. (예:permissions: checks: write)- 작업이 실행될 머신의 유형을 설정하세요.
전체 개요는 GitHub Actions
runs-on문서를 참조하세요. (예:runs-on: ubuntu-latest) - 기본 브랜치 소스 코드를 체크아웃하세요.
(예:
uses: actions/checkout@v6) - GitHub Action을 사용하여 Bencher CLI를 설치하세요.
(예:
uses: bencherdev/bencher@main) bencher runCLI 서브 커맨드를 사용하여main브랜치 벤치마크를 실행하세요. 전체 개요는bencher runCLI 서브 커맨드를 참조하세요. (예:bencher run)--project옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789)--key옵션을BENCHER_API_KEY레포지토리 비밀로 설정하세요. 자세한 내용은--key문서를 참조하세요. (예:--key '${{ secrets.BENCHER_API_KEY }}')--branch옵션을 기본 브랜치 이름으로 설정하세요. 전체 개요는--branch문서를 참조하세요. (예:--branch main)--testbed옵션을 테스트베드 이름으로 설정하세요. 이는 아마도runs-on에 선택된 머신과 일치해야 합니다. 자세한 내용은--tested문서를 참조하세요. (예:--testbed ubuntu-latest)main브랜치,ubuntu-latest테스트베드,latency측정을 위한 임계값을 설정하세요:--threshold-measure옵션을bencher mock에 의해 생성된 기본latency측정값으로 설정하세요. 자세한 내용은--threshold-measure문서를 참조하세요. (예:--threshold-measure latency)--threshold-test옵션을 Student의 t-test (t_test)로 설정하세요. 전체 개요는--threshold-test문서를 참조하세요. (예:--threshold-test t_test)--threshold-max-sample-size옵션을 최대 샘플 크기64로 설정하세요. 자세한 내용은--threshold-max-sample-size문서를 참조하세요. (예:--threshold-max-sample-size 64)--threshold-upper-boundary옵션을0.99의 상한으로 설정하세요. 자세한 내용은--threshold-upper-boundary문서를 참조하세요. (예:--threshold-upper-boundary 0.99)--thresholds-reset플래그를 설정하여 지정된 임계값만 활성 상태가 되도록 하세요. 전체 개요는--thresholds-reset문서를 참조하세요. (예:--thresholds-reset)
- 알림이 생성되면 명령을 실패하도록
--error-on-alert플래그를 설정하세요. 전체 개요는--error-on-alert문서를 참조하세요. (예:--error-on-alert) - Bencher Metric Format JSON (
json)에 대해--adapter옵션을 설정하세요. 이 형식은bencher mock에 의해 생성됩니다. 전체 개요는 벤치마크 하니스 어댑터를 참조하세요. (예:--adapter json) - GitHub Checks 댓글로 결과를 게시하기 위해 GitHub Actions
GITHUB_TOKEN환경 변수를 사용하여 GitHub API 인증 토큰을--github-actions옵션에 설정하세요. 자세한 내용은--github-actions문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}') - 벤치마크 명령 인수를 지정하세요.
전체 개요는 벤치마크 명령를 참조하세요.
(예:
bencher mock)
Pull Requests
성능 성능 회귀를 감지하려면 PR에서 벤치마크를 실행해야 합니다. 만약 PR들이 동일한 저장소에서만 있다고 가정한다면, 단순히 같은 저장소에서 pull_request 이벤트를 트리거하도록 하는 또 다른 워크플로우를 생성할 수 있습니다.
⚠️ 이 솔루션은 모든 PR이 동일한 저장소에서 온 경우에만 작동합니다! 아래의 포크에서의 Pull Requests를 참조하십시오.
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: checks: write pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: bencherdev/bencher@main - name: Track PR Benchmarks with Bencher run: | bencher run \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --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 \ --error-on-alert \ --adapter json \ --github-actions '${{ secrets.GITHUB_TOKEN }}' \ bencher mock-
GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/pr_benchmarks.yml) -
pull_request이벤트에서 실행합니다:opened- Pull request가 생성되었습니다.reopened- 이전에 닫혔던 pull request가 다시 열렸습니다.edited- pull request의 제목이나 본문이 편집되었거나 pull request의 기본 브랜치가 변경되었습니다.synchronize- pull request의 헤드 브랜치가 업데이트되었습니다. 예를 들어, 헤드 브랜치가 기본 브랜치에서 업데이트되었거나 새로운 커밋이 헤드 브랜치로 푸쉬되었습니다.
전체 개요는 GitHub Actions
on문서 및 GitHub Actionspull_request문서를 참조하세요. (예:on: pull_request: types: [opened, reopened, edited, synchronize]) -
GitHub Actions
job을 생성합니다. (예:jobs: benchmark_pr_branch) -
pull request가 동일한 저장소에서 온 경우에만
pull_request이벤트에서 실행합니다. ⚠️ 이 라인을 제거하지 마십시오! 포크 PR 처리에 관해서는 아래의 포크에서의 Pull Requests를 참조하세요. (예:if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) -
GITHUB_TOKEN의 권한을 설정하여checks및pull-requests에write를 부여합니다. GitHub 설정에 따라 이 작업이 필요하지 않을 수 있습니다. 그러나 2023년 2월 2일 이후에 생성된 모든 조직 및 개인 저장소의 경우 기본 동작입니다. 전체 개요는 GitHub 문서를 참조하세요. (예:permissions: checks: write pull-requests: write) -
작업을 실행할 머신의 유형을 설정합니다. 전체 개요는 GitHub Actions
runs-on문서를 참조하세요. (예:runs-on: ubuntu-latest) -
PR 브랜치의 소스 코드를 체크아웃합니다. (예:
uses: actions/checkout@v6) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main) -
PR 브랜치 벤치마크를 실행하기 위해
bencher runCLI 서브커맨드를 사용합니다. 전체 개요는bencher runCLI 서브커맨드를 참조하세요. (예:bencher run) -
--project옵션을 프로젝트 슬러그로 설정합니다. 더 많은 세부 사항은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789) -
--key옵션을BENCHER_API_KEY레포지토리 시크릿으로 설정합니다. 더 많은 세부 사항은--key문서를 참조하세요. (예:--key '${{ secrets.BENCHER_API_KEY }}') -
GitHub Actions
GITHUB_HEAD_REF기본 환경 변수를 사용하여 PR 브랜치 이름을--branch옵션으로 설정합니다. 전체 개요는--branch문서를 참조하세요. (예:--branch "$GITHUB_HEAD_REF") -
PR 브랜치의 시작점을 설정합니다:
- GitHub Actions
GITHUB_BASE_REF기본 환경 변수을 사용하여 PR 브랜치 시작점으로--start-point옵션을 설정합니다. 전체 개요는--start-point문서를 참조하세요. (예:--start-point "$GITHUB_BASE_REF") - PR 브랜치 시작점
git해시값을 사용하여--start-point-hash옵션을 설정합니다. GitHub Actionspull_request이벤트를 사용하여. 전체 개요는--start-point-hash문서를 참조하세요. (예:--start-point-hash '${{ github.event.pull_request.base.sha }}') - 시작점에서 임계값을 복제하도록
--start-point-clone-thresholds플래그를 설정합니다. 전체 개요는--start-point-clone-thresholds문서를 참조하세요. (예:--start-point-clone-thresholds) - 항상 PR 브랜치를 시작점으로 재설정하도록
--start-point-reset플래그를 설정합니다. 이는 벤치마크 데이터 드리프트를 방지합니다. 전체 개요는--start-point-reset문서를 참조하세요. (예:--start-point-reset)
- GitHub Actions
-
--testbed옵션을 테스트베드 이름으로 설정합니다. 이는runs-on에서 선택한 머신과 일치해야 합니다. 더 많은 세부 사항은--testbed문서를 참조하세요. (예:--testbed ubuntu-latest) -
알림이 생성되면 명령어를 실패시키도록
--error-on-alert플래그를 설정합니다. 전체 개요는--error-on-alert문서를 참조하세요. (예:--error-on-alert) -
bencher mock에 의해 생성된 Bencher Metric Format JSON (json)에--adapter옵션을 설정합니다. 전체 개요는 벤치마크 하네스 어댑터를 참조하세요. (예:--adapter json) -
GitHub Actions
GITHUB_TOKEN환경 변수을 사용하여 결과를 GitHub Check 및 Pull Request 댓글로 게시하는 GitHub API 인증 토큰에--github-actions옵션을 설정합니다. 더 많은 세부 사항은--github-actions문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}') -
벤치마크 명령어 인수를 지정합니다. 전체 개요는 벤치마크 명령어를 참조하세요. (예:
bencher mock)
PR이 닫힌 후 PR 브랜치를 정리하려면 closed 타입의 pull_request 이벤트에서 실행할 별도의 워크플로를 생성할 수 있습니다. 이 워크플로는 bencher archive 명령을 사용하여 PR 브랜치를 아카이브합니다.
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 runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: bencherdev/bencher@main - name: Archive closed PR branch with Bencher run: | bencher archive \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --branch "$GITHUB_HEAD_REF"-
GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/pr_benchmarks_closed.yml) -
pull_request이벤트에서 실행하십시오:closed- 풀 리퀘스트가 닫혔습니다.
전체 개요는 GitHub Actions
on문서 및 GitHub Actionspull_request문서를 참조하십시오. (예:on: pull_request: types: [closed]) -
GitHub Actions
job을 생성하십시오. (예:jobs: archive_pr_branch) -
풀 리퀘스트가 동일한 저장소에서 온 경우에만
pull_request이벤트에서 실행하십시오. ⚠️ 이 줄을 제거하지 마십시오! 포크 PR 처리에 대해서는 아래 포크로부터 풀 리퀘스트를 참조하십시오. (예:if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) -
잡을 실행할 머신의 유형을 설정하십시오. 전체 개요는 GitHub Actions
runs-on문서를 참조하십시오. (예:runs-on: ubuntu-latest) -
PR 브랜치 소스 코드를 체크아웃합니다. (예:
uses: actions/checkout@v6) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main) -
PR 브랜치를 아카이브하기 위해
bencher archiveCLI 서브커맨드를 사용하십시오. (예:bencher archive) -
프로젝트 슬러그로
--project옵션을 설정하십시오. 자세한 내용은--project문서를 참조하십시오. (예:--project project-abc4567-wxyz123456789) -
--key옵션을BENCHER_API_KEY저장소 시크릿으로 설정하십시오. 자세한 내용은--key문서를 참조하십시오. (예:--key '${{ secrets.BENCHER_API_KEY }}') -
GitHub Actions
GITHUB_HEAD_REF기본 환경 변수를 사용하여 PR 브랜치 이름으로--branch옵션을 설정하십시오. (예:--branch "$GITHUB_HEAD_REF")
포크로부터의 풀 리퀘스트
공개 오픈 소스 프로젝트에서 일반적으로 발생하는 것처럼 포크로부터의 풀 리퀘스트를 수락할 계획이라면
조금 다르게 처리해야 합니다.
보안상의 이유로, 포크 PR에서는 BENCHER_API_KEY과 GITHUB_TOKEN과 같은 비밀이 GitHub Actions에서 사용할 수 없습니다.
즉, 외부 기여자가 포크로부터 PR을 열면 위의 예제는 작동하지 않습니다.
전체 개요를 보려면 GitHub Security Lab 글 작성
및 블로그 게시물
을 참조하십시오.
포크 풀 리퀘스트에 지속적인 벤치마킹을 추가하는 안전하고 권장되는 방법입니다.
두 개의 별도 워크플로우가 필요합니다.
첫 번째 워크플로우는 pull_request 컨텍스트에서 벤치마크 결과를 실행하고 캐시합니다.
여기에는 BENCHER_API_KEY과 GITHUB_TOKEN 같은 비밀은 사용할 수 없습니다.
그런 다음 두 번째 워크플로우는 workflow_run 컨텍스트에서 캐시된 벤치마크 결과를 다운로드하여 Bencher에 업로드합니다.
이 방법은 workflow_run이 저장소의 기본 브랜치 컨텍스트에서 실행되기 때문에
BENCHER_API_KEY과 GITHUB_TOKEN 같은 비밀이 사용 가능하기 때문입니다.
초기의 pull_request 워크플로우에서 사용된 풀 리퀘스트 번호, 헤드 브랜치, 그리고 베이스 브랜치도
명시적으로 workflow_run 워크플로우에 전달되어야 합니다.
이 워크플로우는 기본 브랜치에 있을 때만 실행됩니다.
전체 개요는 트리거링 워크플로우에서 데이터 사용하기를 참조하십시오.
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@v6 - 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 }}-
첫 번째 GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/fork_pr_benchmarks_run.yml) -
두 번째 워크플로에서 참조할 수 있도록 이 워크플로의 이름을 지정합니다. (예:
name: Run Benchmarks) -
pull_request이벤트에 대해 실행합니다:opened- 풀 리퀘스트가 생성되었습니다.reopened- 이전에 닫힌 풀 리퀘스트가 다시 열렸습니다.edited- 풀 리퀘스트의 제목 또는 본문이 편집되었거나, 풀 리퀘스트의 기본 분기가 변경되었습니다.synchronize- 풀 리퀘스트의 헤드 분기가 업데이트되었습니다. 예를 들어, 기본 분기로부터 헤드 분기가 업데이트되거나 새로운 커밋이 헤드 분기로 푸시되었습니다.
전체 개요는 GitHub Actions
on문서 및 GitHub Actionspull_request문서를 참조하세요. (예:on: pull_request: types: [opened, reopened, edited, synchronize]) -
GitHub Actions
job을 생성합니다. (예:jobs: benchmark_fork_pr_branch) -
잡을 실행할 머신의 유형을 설정합니다. 전체 개요는 GitHub Actions
runs-on문서 를 참조하세요. (예:runs-on: ubuntu-latest) -
포크 PR 브랜치의 소스 코드를 체크아웃합니다. (예:
uses: actions/checkout@v6) -
벤치마크를 실행하고 결과를 파일에 저장합니다. (예:
/bin/echo '{ ... }' > benchmark_results.json) -
벤치마크 결과 파일을 아티팩트로 업로드합니다. (예:
uses: actions/upload-artifact@v4) -
pull_request이벤트 객체를 아티팩트로 업로드합니다. (예:uses: actions/upload-artifact@v4)
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' permissions: checks: write pull-requests: write 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.pull_request.head.ref); core.exportVariable("PR_HEAD_SHA", prEvent.pull_request.head.sha); 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 project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --branch "$PR_HEAD" \ --hash "$PR_HEAD_SHA" \ --start-point "$PR_BASE" \ --start-point-hash "$PR_BASE_SHA" \ --start-point-clone-thresholds \ --start-point-reset \ --testbed ubuntu-latest \ --error-on-alert \ --adapter json \ --github-actions '${{ secrets.GITHUB_TOKEN }}' \ --ci-number "$PR_NUMBER" \ --file "$BENCHMARK_RESULTS"- 첫 번째 GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/fork_pr_benchmarks_track.yml) - 이 워크플로우의 이름을 두 번째 워크플로우로 지정합니다.
(예:
name: Track Benchmarks with Bencher) - 두 워크플로우를
workflow_run이벤트와 연결합니다. (예:on: workflow_run: ...) - GitHub Actions
job을 만듭니다. (예:jobs: track_fork_pr_branch) - 이전 워크플로우의 결론이 성공일 경우에만 이 작업을 실행합니다
GitHub Actions
workflow_run이벤트. (예:if: github.event.workflow_run.conclusion == 'success') GITHUB_TOKEN에 대한 권한을checks및pull-requests에 대해write로 설정합니다. GitHub 설정에 따라, 이 작업이 필요하지 않을 수 있습니다. 하지만 2023년 2월 2일 이후에 생성된 모든 조직과 개인 저장소에서는 이 동작이 기본입니다. 전체 개요는 GitHub 문서를 참조하세요. (예:permissions: checks: write pull-requests: write)- 작업이 실행될 머신 유형을 설정합니다.
전체 개요는 GitHub Actions
runs-ondocumentation을 참조하세요. (예:runs-on: ubuntu-latest) - 벤치마크 결과와
pull_request이벤트 객체 파일 이름을 환경 변수로 설정합니다. (예:env: ...) - 캐시된 벤치마크 결과와
pull_request이벤트를 다운로드합니다 GitHub Actionaction-download-artifact를 사용하여. (예:uses: dawidd6/action-download-artifact@v6) pull_request이벤트에서 필요한 데이터를 중간 환경 변수로 내보냅니다. (예:core.exportVariable(...))- GitHub Action을 사용하여 Bencher CLI를 설치합니다.
(예:
uses: bencherdev/bencher@main) bencher runCLI 하위 명령을 사용하여 포크 풀 브랜치의 벤치마크를 추적합니다.bencher runCLI 하위 명령의 전체 개요를 참조하세요. (예:bencher run)--project옵션을 프로젝트 슬러그로 설정합니다. 더 자세한 내용은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789)--key옵션을BENCHER_API_KEYRepository 시크릿으로 설정합니다. 더 자세한 내용은--key문서를 참조하세요. (예:--key '${{ secrets.BENCHER_API_KEY }}')--branch옵션을 포크 PR 브랜치 이름으로 설정합니다 중간 환경 변수를 사용하여. 전체 개요는--branch문서를 참조하세요. (예:--branch "$PR_HEAD")--hash옵션을 포크 PR 브랜치의git해시로 설정합니다 중간 환경 변수를 사용하여. 전체 개요는--hash문서를 참조하세요. (예:--hash "$PR_HEAD_SHA")- 포크 PR 브랜치의 시작점을 설정합니다:
--start-point옵션을 포크 PR 브랜치 시작점으로 설정합니다 중간 환경 변수를 사용하여. 전체 개요는--start-point문서를 참조하세요. (예:--start-point "$PR_BASE")--start-point-hash옵션을 포크 PR 브랜치 시작점의git해시로 설정합니다 중간 환경 변수를 사용하여. 전체 개요는--start-point-hash문서를 참조하세요. (예:--start-point-hash "$PR_BASE_SHA")--start-point-clone-thresholds플래그를 설정하여 시작점에서 임계값을 복제합니다. 전체 개요는--start-point-clone-thresholds문서를 참조하세요. (예:--start-point-clone-thresholds)- 포크 PR 브랜치를 항상 시작점으로 재설정하기 위해
--start-point-reset플래그를 설정합니다. 이는 벤치마크 데이터 드리프트를 방지합니다. 전체 개요는--start-point-reset문서를 참조하세요. (예:--start-point-reset)
--testbed옵션을 테스트베드 이름으로 설정합니다. 이는runs-on에서 선택한 머신과 일치해야 합니다. 더 자세한 내용은--tested문서를 참조하세요. (예:--testbed ubuntu-latest)- 경고가 생성되면 명령을 실패 처리하는
--error-on-alert플래그를 설정합니다. 전체 개요는--error-on-alert문서를 참조하세요. (예:--error-on-alert) bencher mock에 의해 생성된 Bencher Metric Format JSON (json)으로--adapter옵션을 설정합니다. 전체 개요는 benchmark harness adapters를 참조하세요. (예:--adapter json)- GitHub API 인증 토큰을 사용하여 결과를 GitHub Check 및 Pull Request 주석으로 게시하기 위해
--github-actions옵션을 설정합니다 GitHub ActionsGITHUB_TOKEN환경 변수를 사용하여. 더 자세한 내용은--github-actions문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}') --ci-number옵션을 중간 환경 변수를 사용하여 풀 리퀘스트 번호로 설정합니다. 더 자세한 내용은--ci-number문서를 참조하세요. (예:--ci-number "$PR_NUMBER")--file옵션을 벤치마크 결과 파일 경로로 설정합니다. 전체 개요는 benchmark command를 참조하세요. (예:--file "$BENCHMARK_RESULTS")
포크 PR 브랜치를 PR이 종료된 후 정리하려면,
pull_request_target 이벤트 중 closed 타입으로 실행되는 별도의 워크플로를 생성할 수 있습니다.
이 워크플로는 bencher archive 명령어를 사용하여 포크 PR 브랜치를 아카이브합니다.
on: pull_request_target: types: [closed]
jobs: archive_fork_pr_branch: name: Archive closed fork PR branch with Bencher runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: bencherdev/bencher@main - name: Archive closed fork PR branch with Bencher run: | bencher archive \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --branch "$GITHUB_HEAD_REF"-
GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/fork_pr_benchmarks_closed.yml) -
pull_request_target이벤트에서 실행하십시오:closed- 풀 리퀘스트가 종료되었습니다.
전체 개요는 GitHub Actions
on문서 및 GitHub Actionspull_request_target문서를 참조하십시오. (예:on: pull_request_target: types: [closed]) -
GitHub Actions
job을 생성합니다. (예:jobs: archive_pr_branch) -
작업이 실행될 머신 유형을 설정하십시오. 전체 개요는 GitHub Actions
runs-on문서를 참조하십시오. (예:runs-on: ubuntu-latest) -
PR 브랜치 소스 코드를 체크아웃합니다. (예:
uses: actions/checkout@v6) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main) -
PR 브랜치를 아카이브하기 위해
bencher archiveCLI 서브커맨드를 사용합니다. (예:bencher archive) -
--project옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은--project문서를 참조하십시오. (예:--project project-abc4567-wxyz123456789) -
--key옵션을BENCHER_API_KEY저장소 시크릿으로 설정합니다. 자세한 사항은--key문서를 참조하십시오. (예:--key '${{ secrets.BENCHER_API_KEY }}') -
GitHub Actions
GITHUB_HEAD_REF기본 환경 변수를 사용하여 PR 브랜치 이름을--branch옵션으로 설정합니다. (예:--branch "$GITHUB_HEAD_REF")
베어 메탈에서의 Pull Requests
GitHub Actions에는 Self-Hosted 러너가 있지만, 이를 사용하려면 노이즈가 많은 GitHub Actions Runner 바이너리를 사용해야 합니다. Bencher Bare Metal은 목적에 맞게 설계된 저노이즈 벤치마크 러너를 사용하여 전용 베어 메탈 하드웨어 플릿에서 벤치마크를 실행합니다. 또한 Bencher Bare Metal은 포크에서 온 PR을 지원하지만, GitHub Actions Runner는 지원하지 않습니다.
Bencher Bare Metal로 전환한 뒤에는, Bencher를 기다리는 동안 GitHub Actions 작업을 계속 실행해 두고 싶지 않을 것입니다. 이를 해결하기 위해 Bencher는 분할 워크플로를 사용하여 GitHub Actions가 Bencher Bare Metal Job을 비동기적으로 기다릴 수 있게 합니다.
다음 예시는 동일한 저장소 내의 브랜치에서 사용하기 위한 것입니다. 포크 PR에서 베어 메탈 벤치마킹을 하려면 위의 포크에서의 Pull Requests 워크플로와 이 패턴을 함께 사용하세요.
on: pull_request: types: [opened, reopened, edited, synchronize]
jobs: submit_pr_benchmarks: name: Submit PR Benchmarks to Bencher Bare Metal # 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: checks: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: bencherdev/bencher@main - name: Submit PR Benchmarks with Bencher run: | bencher run \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --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 \ --adapter json \ --image project-abc4567-wxyz123456789:latest \ --detach \ --github-actions '${{ secrets.GITHUB_TOKEN }}' \ --ci-callback-token '${{ secrets.BENCHER_CALLBACK_TOKEN }}' \ bencher mock- 첫 번째 GitHub Actions
workflow파일을 생성합니다. (예:.github/workflows/pr_bare_metal_benchmarks.yml) - 위의 Pull Requests처럼
pull_request이벤트에서 실행합니다. (예:on: pull_request: types: [opened, reopened, edited, synchronize]) - GitHub Actions
job을 생성합니다. (예:jobs: submit_pr_benchmarks) - pull request가 동일한 저장소에서 온 경우에만
pull_request이벤트에서 실행합니다. ⚠️ 이 라인을 제거하지 마십시오! 포크 PR 처리에 관해서는 위의 포크에서의 Pull Requests를 참조하세요. (예:if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) GITHUB_TOKEN의 권한을 설정하여checks에write를 부여합니다. 첫 번째 워크플로는 GitHub Check를 시작하고 댓글은 게시하지 않습니다. (예:permissions: checks: write)- 작업을 실행할 머신의 유형을 설정합니다.
Job을 제출하기만 하므로 작은 머신으로 충분합니다.
(예:
runs-on: ubuntu-latest) - PR 브랜치의 소스 코드를 체크아웃합니다.
(예:
uses: actions/checkout@v6) - GitHub Action을 사용하여 Bencher CLI를 설치합니다.
(예:
uses: bencherdev/bencher@main) - PR 브랜치 벤치마크를 제출하기 위해
bencher runCLI 서브커맨드를 사용합니다. 전체 개요는bencher runCLI 서브커맨드를 참조하세요. (예:bencher run) --project옵션을 프로젝트 슬러그로 설정합니다. 더 많은 세부 사항은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789)--key옵션을BENCHER_API_KEY레포지토리 시크릿으로 설정합니다. 더 많은 세부 사항은--key문서를 참조하세요. (예:--key '${{ secrets.BENCHER_API_KEY }}')- GitHub Actions
GITHUB_HEAD_REF기본 환경 변수를 사용하여 PR 브랜치 이름을--branch옵션으로 설정합니다. 전체 개요는--branch문서를 참조하세요. (예:--branch "$GITHUB_HEAD_REF") - 위의 Pull Requests처럼 PR 브랜치의 시작점을 설정합니다.
전체 개요는
--start-point문서를 참조하세요. (예:--start-point "$GITHUB_BASE_REF") --adapter옵션을bencher mock이 생성하는 Bencher Metric Format JSON (json)으로 설정합니다. 전체 개요는 벤치마크 하니스 어댑터를 참조하세요. (예:--adapter json)--image옵션을 베어 메탈 이미지로 설정합니다. 전체 개요는--image문서를 참조하세요. (예:--image project-abc4567-wxyz123456789:latest)- Job을 제출하자마자 종료하도록
--detach플래그를 설정합니다. 더 많은 세부 사항은--detach문서를 참조하세요. (예:--detach) - GitHub Actions
GITHUB_TOKEN환경 변수를 사용하여 GitHub Check를 시작할 GitHub API 인증 토큰으로--github-actions옵션을 설정합니다. 더 많은 세부 사항은--github-actions문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}') - Job이 끝났을 때 Bencher가
repository_dispatch이벤트를 보낼 수 있도록--ci-callback-token옵션을BENCHER_CALLBACK_TOKEN레포지토리 시크릿으로 설정합니다. 더 많은 세부 사항은--ci-callback-token문서를 참조하세요. (예:--ci-callback-token '${{ secrets.BENCHER_CALLBACK_TOKEN }}') - 이미지 안에서 실행할 벤치마크 명령을 지정합니다.
이미지에 엔트리포인트가 있으면 명령은 그 엔트리포인트에 전달됩니다(
--entrypoint옵션 참조). 전체 개요는 벤치마크 명령을 참조하세요. (예:bencher mock)
on: repository_dispatch: types: [bencher_run]
jobs: attach_pr_benchmarks: name: Post PR Benchmark Results from Bencher Bare Metal permissions: checks: write pull-requests: write runs-on: ubuntu-latest steps: - uses: bencherdev/bencher@main - name: Post PR Benchmark Results with Bencher env: JOB_UUID: ${{ github.event.client_payload.bencher.job }} run: | bencher run \ --project project-abc4567-wxyz123456789 \ --key '${{ secrets.BENCHER_API_KEY }}' \ --job "$JOB_UUID" \ --error-on-alert \ --github-actions '${{ secrets.GITHUB_TOKEN }}'- 기본 브랜치에 두 번째 GitHub Actions
workflow파일을 생성합니다. GitHub는repository_dispatch워크플로를 기본 브랜치에서만 실행하므로, 이 파일이 그곳에 있기 전까지는 첫 번째 워크플로가 시작한 GitHub Check가 진행 중으로 남습니다. (예:.github/workflows/pr_bare_metal_benchmarks_attach.yml) bencher_run유형의repository_dispatch이벤트에서 실행합니다. 전체 개요는 GitHub Actionson문서 및 GitHub Actionsrepository_dispatch문서를 참조하세요. (예:on: repository_dispatch: types: [bencher_run])- GitHub Actions
job을 생성합니다. (예:jobs: attach_pr_benchmarks) GITHUB_TOKEN의 권한을 설정하여checks및pull-requests에write를 부여합니다. (예:permissions: checks: write pull-requests: write)- 작업을 실행할 머신의 유형을 설정합니다.
Job은 이미 끝났으므로 이 작업은 결과를 게시하기만 합니다.
(예:
runs-on: ubuntu-latest) - GitHub Action을 사용하여 Bencher CLI를 설치합니다.
체크아웃은 필요하지 않습니다.
(예:
uses: bencherdev/bencher@main) - GitHub의 스크립트 인젝션 가이드에 따라, 이벤트의 Job UUID는
run:에 직접 넣지 말고 중간 환경 변수를 통해 전달합니다. (예:env: JOB_UUID: ${{ github.event.client_payload.bencher.job }}) - Job에 연결하기 위해
bencher runCLI 서브커맨드를 사용합니다. 전체 개요는bencher runCLI 서브커맨드를 참조하세요. (예:bencher run) --project옵션을 프로젝트 슬러그로 설정합니다. 저장소에 프로젝트가 둘 이상이면github.event.client_payload.bencher.project도 같은 방식으로 환경 변수를 통해 전달하고 따옴표로 감싸세요(예:--project "$PROJECT_SLUG"). 더 많은 세부 사항은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789)--key옵션을BENCHER_API_KEY레포지토리 시크릿으로 설정합니다. 더 많은 세부 사항은--key문서를 참조하세요. (예:--key '${{ secrets.BENCHER_API_KEY }}')--job옵션을 따옴표로 감싼 Job UUID로 설정합니다. 전체 개요는--job문서를 참조하세요. (예:--job "$JOB_UUID")- 경고가 생성되면 명령이 실패하도록
--error-on-alert플래그를 설정합니다. 이벤트는 데이터만 전달하므로,--ci-only-on-alert와--ci-public-links처럼 결과를 게시하는 방식을 정하는 옵션도 여기, 두 번째 워크플로에 둡니다. 전체 개요는--error-on-alert문서를 참조하세요. (예:--error-on-alert) - GitHub Actions
GITHUB_TOKEN환경 변수를 사용하여 결과를 GitHub Check와 pull request 댓글로 게시할 GitHub API 인증 토큰으로--github-actions옵션을 설정합니다. 여기에서 명시적으로 지정한--ci-number또는--ci-id가 이벤트보다 우선합니다. 더 많은 세부 사항은--github-actions문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}')
🐰 축하합니다! GitHub Actions에서 Bencher를 사용하는 방법을 배웠습니다! 🎉