GitHub Actions에서 Bencher 사용하기


사용 사례에 따라 다음에 대해 GitHub Actions에서 지속적인 벤치마킹을 설정할 수 있습니다:

🐰 API 토큰을 생성했는지 확인하고 계속하기 전에 BENCHER_API_TOKEN이라는 이름의 리포지토리 비밀로 설정했는지 확인하세요! Your Repo -> Settings -> Secrets and variables -> Actions -> New repository secret으로 이동하세요. 비밀 이름을 BENCHER_API_TOKEN로 설정하고 비밀 값에 API 토큰을 설정하세요.

기본 브랜치

통계적 지속적 벤치마킹의 핵심은 기본 브랜치에 대한 역사적 기준선을 가지고 있는 것입니다. 이 역사적 기준선은 풀 리퀘스트에서 성능 회귀를 탐지하는 데 사용할 수 있습니다.

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. GitHub Actions workflow 파일을 생성하세요. (예: .github/workflows/base_benchmarks.yml)
  2. main 브랜치로의 push 이벤트에 대해 실행하세요. GitHub Actions on 문서GitHub Actions push 문서를 참조하여 전체 개요를 확인하세요. (예: on: push: branches: main)
  3. GitHub Actions job을 생성하세요. (예: jobs: benchmark_base_branch)
  4. 작업이 실행될 기기의 유형을 설정하세요. GitHub Actions runs-on 문서를 참조하여 전체 개요를 확인하세요. (예: runs-on: ubuntu-latest)
  5. 기본 브랜치 소스 코드를 체크아웃하세요. (예: uses: actions/checkout@v4)
  6. GitHub Action을 사용하여 Bencher CLI를 설치하세요. (예: uses: bencherdev/bencher@main)
  7. bencher run CLI 서브커맨드를 사용하여 main 브랜치 벤치마크를 실행하세요. the bencher run CLI 서브커맨드를 참조하여 전체 개요를 확인하세요. (예: bencher run)
  8. --project 옵션을 프로젝트 슬러그로 설정하세요. the --project 문서를 참조하여 더 자세히 알아보세요. (예: --project save-walter-white-1234abcd)
  9. --token 옵션을 BENCHER_API_TOKEN Repository 비밀로 설정하세요. the --token 문서를 참조하여 더 자세히 알아보세요. (예: --token '${{ secrets.BENCHER_API_TOKEN }}')
  10. --branch 옵션을 브랜치 이름으로 설정하세요. branch 선택을 참조하여 전체 개요를 확인하세요. (예: --branch main)
  11. --testbed 옵션을 테스트베드 이름으로 설정하세요. 이는 runs-on에서 선택한 기기와 일치해야 할 가능성이 높습니다. the --testbed 문서를 참조하여 더 자세히 알아보세요. (예: --testbed ubuntu-latest)
  12. --adapter 옵션을 원하는 벤치마크 하네스 어댑터로 설정하세요. 벤치마크 하네스 어댑터를 참조하여 전체 개요를 확인하세요. (예: --adapter json)
  13. 경고가 생성되면 명령을 실패하게 하는 --err 플래그를 설정하세요. Threshold & Alerts를 참조하여 전체 개요를 확인하세요. (예: --err)
  14. 벤치마크 커맨드 인자를 지정하세요. 벤치마크 커맨드를 참조하여 전체 개요를 확인하세요. (예: bencher mock)

풀 리퀘스트

풀 리퀘스트에서 성능 회귀를 찾아내기 위해서는 PR에서 벤치마크를 실행해야 합니다. 만약 동일한 저장소 내의 브랜치에서만 PR이 예상된다면, 동일한 저장소에서 pull_request 이벤트에 대해 실행할 다른 워크플로우를 간단히 생성할 수 있습니다.

⚠️ 이 솔루션은 모든 PR이 동일한 저장소에서 온 경우에만 작동합니다! 아래의 포크에서 온 풀 리퀘스트를 참조하세요.

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. GitHub Actions workflow 파일을 생성하세요. (예: .github/workflows/pr_benchmarks.yml)

  2. pull_request 이벤트에서 실행하세요:

    • opened - 풀 리퀘스트가 생성되었습니다.
    • reopened - 이전에 닫힌 풀 리퀘스트가 다시 열렸습니다.
    • edited - 풀 리퀘스트의 제목이나 본문이 편집되었거나, 풀 리퀘스트의 베이스 브랜치가 변경되었습니다.
    • synchronize - 풀 리퀘스트의 헤드 브랜치가 업데이트되었습니다. 예를 들어, 헤드 브랜치가 베이스 브랜치에서 업데이트되었거나 헤드 브랜치에 새 커밋이 푸시되었습니다.

    GitHub Actions on 문서GitHub Actions pull_request 문서에서 전체 개요를 확인하세요. (예: on: pull_request: types: [opened, reopened, edited, synchronize])

  3. GitHub Actions 작업을 생성하세요. (예: jobs: benchmark_pr_branch)

  4. 풀 리퀘스트가 동일한 저장소에서 온 경우에만 pull_request 이벤트에서 실행하세요. ⚠️ 이 줄을 삭제하지 마세요! 포크 PR을 처리하는 방법은 아래의 포크에서 온 풀 리퀘스트를 참조하세요. (예: if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository)

  5. GITHUB_TOKEN권한pull-requests에 대해 쓰기로 설정하세요. 귀하의 GitHub 설정에 따라 이는 필요하지 않을 수 있습니다. 하지만 모든 조직 및 개인 저장소 2023년 2월 2일 이후에 생성된 경우, 이는 기본 동작입니다. 전체 개요는 GitHub 문서를 참조하세요. (예: permissions: pull-requests: write)

  6. 작업이 실행될 기계의 종류를 설정하세요. 전체 개요는 GitHub Actions runs-on 문서를 참조하세요. (예: runs-on: ubuntu-latest)

  7. PR 브랜치 소스 코드를 체크아웃하세요. (예: uses: actions/checkout@v4)

  8. GitHub Action을 사용하여 Bencher CLI를 설치하세요. (예: uses: bencherdev/bencher@main)

  9. bencher run CLI 하위 명령을 사용하여 풀 리퀘스트 브랜치 벤치마크를 실행하세요. 전체 개요는 the bencher run CLI 하위 명령을 참조하세요. (예: bencher run)

  10. --project 옵션을 프로젝트 슬러그로 설정하세요. 자세한 사항은 the --project 문서를 참조하세요. (예: --project save-walter-white-1234abcd)

  11. --token 옵션을 BENCHER_API_TOKEN 저장소 비밀로 설정하세요. 자세한 사항은 the --token 문서를 참조하세요. (예: --token '${{ secrets.BENCHER_API_TOKEN }}')

  12. GitHub Actions github 컨텍스트를 사용하여 PR 브랜치 이름을 --branch 옵션으로 설정하세요. 전체 개요는 branch selection을 참조하세요. (예: --branch '${{ github.head_ref }}')

  13. GitHub Actions github 컨텍스트를 사용하여 PR 베이스 브랜치 시작점을 --branch-start-point 옵션으로 설정하세요. 전체 개요는 branch selection을 참조하세요. (예: --branch-start-point '${{ github.base_ref }}')

  14. GitHub Actions pull_request 이벤트를 사용하여 PR 베이스 브랜치 시작점 해시를 --branch-start-point-hash 옵션으로 설정하세요. 전체 개요는 branch selection을 참조하세요. (예: --branch-start-point-hash '${{ github.event.pull_request.base.sha }}')

  15. --testbed 옵션을 테스트베드 이름으로 설정하세요. 이는 runs-on에서 선택한 기계와 일치해야 합니다. 자세한 사항은 the --tested 문서를 참조하세요. (예: --testbed ubuntu-latest)

  16. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정하세요. 전체 개요는 benchmark harness adapters를 참조하세요. (예: --adapter json)

  17. 경고가 생성된 경우 명령어를 실패하도록 --err 플래그를 설정하세요. 전체 개요는 Threshold & Alerts를 참조하세요. (예: --err)

  18. Pull Request에 결과를 댓글로 게시하기 위해 GitHub Actions GITHUB_TOKEN 환경 변수로 GitHub API 인증 토큰을 --github-actions 옵션으로 설정하세요. 자세한 사항은 the --github-actions 문서를 참조하세요. (예: --github-actions '${{ secrets.GITHUB_TOKEN }}')

  19. 벤치마크 명령어 인수를 지정하세요. 전체 개요는 benchmark command를 참조하세요. (예: bencher mock)


포크에서 온 풀 리퀘스트

공개 오픈 소스 프로젝트에서 그렇듯이, 포크에서 온 풀 리퀘스트를 받으려고 한다면, 일을 조금 다르게 처리해야 할 필요가 있습니다. 보안상의 이유로, BENCHER_API_TOKENGITHUB_TOKEN과 같은 비밀 값들은 포크 PR에서 GitHub Actions에서 이용할 수 없습니다. 즉, 외부 기여자가 포크에서 풀 리퀘스트를 올릴 경우 이전 예제는 작동하지 않습니다. 포크 PR에 대한 두 가지 옵션이 있습니다:

GitHub 보안 연구소 글과 악의적인 풀 리퀘스트의 위협을 방지하는 방법에 대한 이 블로그 포스트를 참고하여 전체 개요를 확인하십시오.

기본 브랜치에서 포크 PR을 벤치마킹하고 업로드하기

이것은 포크된 풀 요청에 지속적인 벤치마킹을 추가하는 안전하고 권장되는 방법입니다. 두 개의 별도 워크플로우가 필요합니다. 첫 번째 워크플로우는 pull_request 컨텍스트에서 벤치마크 결과를 실행하고 캐시합니다. 여기서는 BENCHER_API_TOKENGITHUB_TOKEN과 같은 비밀이 사용할 수 없습니다. 그런 다음 두 번째 워크플로우가 캐시된 벤치마크 결과를 workflow_run 컨텍스트에서 다운로드하고 Bencher에 업로드합니다. 이것은 workflow_run이 저장소의 기본 브랜치 컨텍스트에서 실행되기 때문에 작동하며, 여기서는 BENCHER_API_TOKENGITHUB_TOKEN과 같은 비밀을 사용할 수 있습니다. 초기 pull_request 워크플로우에서 사용된 풀 요청 번호, 헤드 브랜치 및 베이스 브랜치는 workflow_run 워크플로우에도 명시적으로 전달되어야 합니다. 왜냐하면 그것들은 거기에 사용할 수 없기 때문입니다. 이러한 워크플로우는 기본 브랜치에 존재하는 경우에만 실행됩니다. 전체 개요는 트리거 워크플로우에서 데이터 사용을 참조하세요.

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. 첫 번째 GitHub Actions workflow 파일을 생성합니다. (예: .github/workflows/run_fork_pr_benchmarks.yml)

  2. 이 워크플로우에 이름을 지정하여 두 번째 워크플로우에서 참조할 수 있도록 합니다. (예: name: Run and Cache Benchmarks)

  3. pull_request 이벤트에서 실행하도록 설정합니다:

    • opened - 풀 요청이 생성되었습니다.
    • reopened - 이전에 닫혔던 풀 요청이 다시 열렸습니다.
    • edited - 풀 요청의 제목 또는 본문이 편집되었거나 풀 요청의 기본 브랜치가 변경되었습니다.
    • synchronize - 풀 요청의 헤드 브랜치가 업데이트되었습니다. 예를 들어, 기본 브랜치에서 헤드 브랜치로 업데이트되었거나 헤드 브랜치에 새 커밋이 푸시되었습니다.

    GitHub Actions on 문서GitHub Actions pull_request 문서에서 전체 개요를 확인하세요. (예: on: pull_request: types: [opened, reopened, edited, synchronize])

  4. GitHub Actions job을 생성합니다. (예: jobs: benchmark_fork_pr_branch)

  5. 작업이 실행될 기계 유형을 설정합니다. 전체 개요는 GitHub Actions runs-on 문서를 참조하세요. (예: runs-on: ubuntu-latest)

  6. 포크 PR 브랜치 소스 코드를 체크아웃합니다. (예: uses: actions/checkout@v4)

  7. 벤치마크를 실행하고 결과를 파일에 저장합니다. (예: /bin/echo '{ ... }' > benchmark_results.json)

  8. 벤치마크 결과 파일을 아티팩트로 업로드합니다. (예: uses: actions/upload-artifact@v4)

  9. pull_request 이벤트 객체를 아티팩트로 업로드합니다. (예: 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. 첫 번째 GitHub Actions workflow 파일을 생성합니다. (예: .github/workflows/track_fork_pr_benchmarks.yml)
  2. 이 워크플로우에 이름을 지정하여 이를 두 번째 워크플로우로 지정합니다. (예: name: Track Benchmarks with Bencher)
  3. the workflow_run 이벤트를 사용하여 두 워크플로우를 연결합니다. (예: on: workflow_run: ...)
  4. GitHub Actions job을 생성합니다. (예: jobs: track_fork_pr_branch)
  5. 이전 워크플로우의 결론이 성공이었는지 여부에 따라 이 작업을 실행합니다. GitHub Actions workflow_run 이벤트를 사용합니다. (예: if: github.event.workflow_run.conclusion == 'success')
  6. 작업이 실행될 기계 유형을 설정합니다. 전체 개요는 GitHub Actions runs-on 문서를 참조하세요. (예: runs-on: ubuntu-latest)
  7. 벤치마크 결과 및 pull_request 이벤트 객체 파일 이름을 환경 변수로 설정합니다. (예: env: ...)
  8. 캐시된 벤치마크 결과 및 pull_request 이벤트를 다운로드합니다. (예: uses: actions/github-script@v6)
  9. 캐시된 벤치마크 결과 및 pull_request 이벤트를 추출합니다. (예: unzip ...)
  10. pull_request 이벤트에서 필요한 데이터를 환경 변수로 내보냅니다. (예: core.exportVariable(...))
  11. GitHub 액션을 사용하여 Bencher CLI를 설치합니다. (예: uses: bencherdev/bencher@main)
  12. 포크 풀 브랜치 벤치마크를 추적하기 위해 bencher run CLI 서브커맨드를 사용합니다. 전체 개요는 the bencher run CLI 서브커맨드를 참조하세요. (예: bencher run)
  13. --project 옵션을 프로젝트 슬러그로 설정합니다. 자세한 내용은 the --project 문서를 참조하세요. (예: --project save-walter-white-1234abcd)
  14. --token 옵션을 BENCHER_API_TOKEN 저장소 비밀로 설정합니다. 자세한 내용은 the --token 문서를 참조하세요. (예: --token '${{ secrets.BENCHER_API_TOKEN }}')
  15. GitHub Actions pull_request 이벤트를 사용하여 포맷된 포크 PR 번호로 --branch 옵션을 설정합니다. 전체 개요는 branch 선택를 참조하세요. (예: --branch '${{ env.PR_HEAD }}')
  16. GitHub Actions pull_request 이벤트를 사용하여 포크 PR 베이스 브랜치 시작점으로 --branch-start-point 옵션을 설정합니다. 전체 개요는 branch 선택를 참조하세요. (예: --branch-start-point '${{ env.PR_BASE }}')
  17. GitHub Actions pull_request 이벤트를 사용하여 포크 PR 베이스 브랜치 시작점 해시로 --branch-start-point-hash 옵션을 설정합니다. 전체 개요는 branch 선택를 참조하세요. (예: --branch-start-point-hash '${{ env.PR_BASE_SHA }}')
  18. --testbed 옵션을 테스트베드 이름으로 설정합니다. 이것은 runs-on에서 선택한 기계와 일치해야 합니다. 자세한 내용은 the --tested 문서를 참조하세요. (예: --testbed ubuntu-latest)
  19. 원하는 벤치마크 하네스 어댑터로 --adapter 옵션을 설정합니다. 전체 개요는 벤치마크 하네스 어댑터를 참조하세요. (예: --adapter json)
  20. 경고가 생성되면 명령이 실패하도록 --err 플래그를 설정합니다. 전체 개요는 임계값과 경고를 참조하세요. (예: --err)
  21. 풀 요청에 대한 댓글로 결과를 게시하기 위해 GitHub API 인증 토큰을 사용하여 --github-actions 옵션을 설정합니다. the GitHub Actions GITHUB_TOKEN 환경 변수를 사용합니다. 자세한 내용은 the --github-actions 문서를 참조하세요. (예: --github-actions '${{ secrets.GITHUB_TOKEN }}')
  22. 풀 요청 번호에 대한 --ci-number 옵션을 설정합니다. 자세한 내용은 the --ci-number 문서를 참조하세요. (예: --ci-number '${{ env.PR_NUMBER }}')
  23. 벤치마크 결과 파일 경로에 대한 --file 옵션을 설정합니다. 전체 개요는 벤치마크 명령을 참조하세요. (예: --file "$BENCHMARK_RESULTS")

타겟 브랜치와 필수 리뷰어를 사용한 포크 PR 벤치마킹

포크된 풀 리퀘스트의 코드가 안전한지 보장하기 위해서, 이 GitHub 액션은 포크가 다른 저장소에서 왔는지 확인합니다. 포크가 다른 저장소에서 온 경우, 리뷰가 필요합니다.

⚠️ 포크 PR을 승인하기 전에 매우, 매우 철저히 리뷰하는 것이 매우 중요합니다! 그렇지 않으면 pwn 리퀘스트가 발생할 수 있습니다!

이런 일을 겪고 싶지 않다면, 위의 [기본 브랜치에서 포크 PR 벤치마크 및 업로드][benchmark fork pr and upload from default branch]를 참조하세요.

이 워크플로우를 설정하려면, 두 개의 [GitHub 액션 환경][github actions environments]을 생성해야 합니다. Your Repo -> Settings -> Environments -> New environment로 이동합니다. internalexternal이라는 두 개의 새로운 환경을 생성합니다. internal 환경은 Deployment protection rules이 없어야 합니다. 그러나, external 환경은 벤치마크 전에 포크 PR을 리뷰할 수 있는 신뢰할 수 있는 리뷰어로 Required reviewers을 설정해야 합니다. 전체 개요는 [이 블로그 글][iterative.ai blog]을 참조하세요.

이 설정이 작동하는 이유는 pull_request_target이 풀 리퀘스트의 타겟 브랜치의 컨텍스트에서 실행되기 때문이며, 여기에는 BENCHER_API_TOKENGITHUB_TOKEN 같은 비밀이 사용 가능합니다. 따라서, 이 워크플로우는 타겟 브랜치에만 존재하는 경우에만 실행됩니다. GITHUB_TOKENBENCHER_API_TOKEN 같은 어떠한 비밀도 환경 변수로 설정하지 마세요. 대신, 명시적으로 비밀을 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. GitHub 액션 워크플로우 파일을 생성하세요. (예: .github/workflows/pr_target_benchmarks.yml)

  2. pull_request 이벤트에 대해 실행하세요:

    • opened - 풀 리퀘스트가 생성되었습니다.
    • reopened - 이전에 닫힌 풀 리퀘스트가 다시 열렸습니다.
    • edited - 풀 리퀘스트의 제목이나 본문이 편집되었거나, 풀 리퀘스트의 기준 브랜치가 변경되었습니다.
    • synchronize - 풀 리퀘스트의 헤드 브랜치가 업데이트되었습니다. 예를 들어, 기준 브랜치에서 헤드 브랜치로 업데이트되었거나, 헤드 브랜치에 새로운 커밋이 푸시되었습니다.

    전체 개요는 [GitHub 액션 on 문서][github actions on] 및 [GitHub 액션 pull_request 문서][github action pull_request]를 참조하세요. (예: on: pull_request: types: [opened, reopened, edited, synchronize])

  3. 워크플로우가 리뷰가 필요한지 확인하는 첫 번째 GitHub 액션 job을 생성하세요. (예: jobs: fork_pr_requires_review)

  4. 풀 리퀘스트가 동일한 저장소에서 온 경우에만 environmentinternal로 설정하세요. 아닌 경우, 리뷰어의 승인이 필요로 하여 계속 진행될 external로 설정하세요. ⚠️ 이 줄을 제거하지 마세요! (예: environment: ${{ (github.event.pull_request.head.repo.full_name == github.repository && 'internal') || 'external' }})

  5. 벤치마크를 실행하는 두 번째 GitHub 액션 job을 생성하세요. (예: benchmark_fork_pr_branch)

  6. benchmark_fork_pr_branch 작업이 실행되기 위해서는 fork_pr_requires_review 작업이 필요합니다. ⚠️ 이 줄을 제거하지 마세요! 전체 개요는 [GitHub 액션 needs 문서][github actions needs]를 참조하세요. (예: needs: fork_pr_requires_review)

  7. 작업이 실행될 기계의 유형을 설정하세요. 전체 개요는 [GitHub 액션 runs-on 문서][github actions runs-on]를 참조하세요. (예: runs-on: ubuntu-latest)

  8. 포크 PR 소스 코드를 체크아웃하세요. pull_request_target이 풀 리퀘스트의 타겟 브랜치 컨텍스트에서 실행되기 때문에, 여전히 풀 리퀘스트 브랜치를 체크아웃해야 합니다. (예: uses: actions/checkout@v4)

    • 포크 PR 저장소를 지정하세요. (예: repository: ${{ github.event.pull_request.head.repo.full_name }})
    • 포크 PR 해시를 지정하세요. (예: ref: ${{ github.event.pull_request.head.sha }})
    • git 자격 증명을 유지하지 마세요. (예: persist-credentials: false)
  9. [GitHub 액션][bencher cli github action]을 사용하여 Bencher CLI를 설치하세요. (예: uses: bencherdev/bencher@main)

  10. bencher run CLI 하위 명령어를 사용하여 포크 풀 브랜치 벤치마크를 실행하세요. 전체 개요는 [the bencher run CLI 하위 명령어][bencher run]를 참조하세요. (예: bencher run)

  11. --project 옵션을 프로젝트 슬러그로 설정하세요. 더 많은 세부 사항은 [the --project 문서][project option]를 참조하세요. (예: --project save-walter-white-1234abcd)

  12. --token 옵션을 BENCHER_API_TOKEN 저장소 비밀로 설정하세요. 더 많은 세부 사항은 [the --token 문서][token option]를 참조하세요. (예: --token '${{ secrets.BENCHER_API_TOKEN }}')

  13. [GitHub 액션 pull_request 이벤트][github action pull_request]를 사용하여 포맷된 포크 PR 번호를 --branch 옵션으로 설정하세요. 전체 개요는 [branch selection][branch selection branch]를 참조하세요. (예: --branch '${{ github.event.number }}/merge')

  14. [GitHub 액션 github 컨텍스트][github actions context]를 사용하여 포크 PR 베이스 브랜치 시작 지점을 --branch-start-point 옵션으로 설정하세요. 전체 개요는 [branch selection][branch selection start point]를 참조하세요. (예: --branch-start-point '${{ github.base_ref }}')

  15. [GitHub 액션 pull_request 이벤트][github action pull_request]를 사용하여 포크 PR 베이스 브랜치 시작 지점 해시를 --branch-start-point-hash 옵션으로 설정하세요. 전체 개요는 [branch selection][branch selection start point hash]를 참조하세요. (예: --branch-start-point-hash '${{ github.event.pull_request.base.sha }}')

  16. --testbed 옵션을 테스트베드 이름으로 설정하세요. 이는 runs-on에서 선택한 기계와 일치해야 할 가능성이 높습니다. 더 많은 세부 사항은 [the --tested 문서][testbed option]를 참조하세요. (예: --testbed ubuntu-latest)

  17. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정하세요. 전체 개요는 [benchmark harness adapters][adapters]를 참조하세요. (예: --adapter json)

  18. 경고가 생성된 경우 커맨드를 실패시키는 --err 플래그를 설정하세요. 전체 개요는 [Threshold & Alerts][alerts]를 참조하세요. (예: --err)

  19. [GitHub 액션 GITHUB_TOKEN 환경 변수][github token]를 사용하여 풀 리퀘스트에 결과를 코멘트로 게시하는 GitHub API 인증 토큰을 --github-actions 옵션으로 설정하세요. 더 많은 세부 사항은 [the --github-actions 문서][github actions option]를 참조하세요. (예: --github-actions '${{ secrets.GITHUB_TOKEN }}')

  20. 벤치마크 명령 인수를 지정하세요. 전체 개요는 [benchmark command][command argument]를 참조하세요. (예: bencher mock)



🐰 축하합니다! GitHub Actions에서 Bencher를 사용하는 방법을 배웠습니다! 🎉


계속하기: 벤치마킹 개요 ➡

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Mon, April 1, 2024 at 7:00:00 AM UTC