GitHub Actions에서 Bencher 사용하기
당신의 사용 사례에 따라, GitHub Actions에서 지속적 벤치마킹을 설정할 수 있습니다:
진행하기 전에 API 토큰을 생성하고, 이를 BENCHER_API_TOKEN
이라는 저장소 비밀로 설정했는지 확인하세요!
Your Repo -> Settings -> Secrets and variables -> Actions -> New repository secret
로 이동합니다.
비밀 이름을 BENCHER_API_TOKEN
으로 지정하고 비밀값을 API 토큰으로 설정하세요.
GitHub Actions에서,
비밀은 포크된 리포지토리에서 워크플로우가 트리거될 때 실행자에게 전달되지 않습니다.
따라서 아래의 워크플로 중 하나를 저장소에 풀 리퀘스트로 추가할 때는 같은 저장소의 브랜치를 사용해야 합니다.
포크로부터 풀 리퀘스트로 Bencher를 추가하면,
BENCHER_API_TOKEN
비밀은 사용 가능하지 않습니다.
${{ secrets.BENCHER_API_TOKEN }}
는 빈 문자열이 될 것입니다.
기본 브랜치
통계적 지속 벤치마킹의 초석은 기본 브랜치에 대한 역사적 기준선을 보유하는 것입니다. 이 역사적 기준선은 풀 리퀘스트에서 성능 저하를 감지하는 데 사용될 수 있습니다.
- 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@v4
) - GitHub Action을 사용하여 Bencher CLI를 설치하세요.
(예:
uses: bencherdev/bencher@main
) bencher run
CLI 서브 커맨드를 사용하여main
브랜치 벤치마크를 실행하세요. 전체 개요는bencher run
CLI 서브 커맨드를 참조하세요. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은--project
문서를 참조하세요. (예:--project save-walter-white-1234abcd
)--token
옵션을BENCHER_API_TOKEN
레포지토리 비밀로 설정하세요. 자세한 내용은--token
문서를 참조하세요. (예:--token '${{ secrets.BENCHER_API_TOKEN }}'
)--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
)
- 알림이 생성되면 명령을 실패하도록
--err
플래그를 설정하세요. 전체 개요는--err
문서를 참조하세요. (예:--err
) - 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를 참조하십시오.
-
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
의 권한을 설정하여pull-requests
에write
를 부여합니다. GitHub 설정에 따라 이 작업이 필요하지 않을 수 있습니다. 그러나 2023년 2월 2일 이후에 생성된 모든 조직 및 개인 저장소의 경우 기본 동작입니다. 전체 개요는 GitHub 문서를 참조하세요. (예:permissions: pull-requests: write
) -
작업을 실행할 머신의 유형을 설정합니다. 전체 개요는 GitHub Actions
runs-on
문서를 참조하세요. (예:runs-on: ubuntu-latest
) -
PR 브랜치의 소스 코드를 체크아웃합니다. (예:
uses: actions/checkout@v4
) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main
) -
PR 브랜치 벤치마크를 실행하기 위해
bencher run
CLI 서브커맨드를 사용합니다. 전체 개요는bencher run
CLI 서브커맨드를 참조하세요. (예:bencher run
) -
--project
옵션을 프로젝트 슬러그로 설정합니다. 더 많은 세부 사항은--project
문서를 참조하세요. (예:--project save-walter-white-1234abcd
) -
--token
옵션을BENCHER_API_TOKEN
레포지토리 시크릿으로 설정합니다. 더 많은 세부 사항은--token
문서를 참조하세요. (예:--token '${{ secrets.BENCHER_API_TOKEN }}'
) -
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
) -
알림이 생성되면 명령어를 실패시키도록
--err
플래그를 설정합니다. 전체 개요는--err
문서를 참조하세요. (예:--err
) -
bencher mock
에 의해 생성된 Bencher Metric Format JSON (json
)에--adapter
옵션을 설정합니다. 전체 개요는 벤치마크 하네스 어댑터를 참조하세요. (예:--adapter json
) -
GitHub Actions
GITHUB_TOKEN
환경 변수을 사용하여 결과를 Pull Request에 댓글로 게시하는 GitHub API 인증 토큰에--github-actions
옵션을 설정합니다. 더 많은 세부 사항은--github-actions
문서를 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}'
) -
벤치마크 명령어 인수를 지정합니다. 전체 개요는 벤치마크 명령어를 참조하세요. (예:
bencher mock
)
PR이 닫힌 후 PR 브랜치를 정리하려면 closed
타입의 pull_request
이벤트에서 실행할 별도의 워크플로를 생성할 수 있습니다. 이 워크플로는 bencher archive
명령을 사용하여 PR 브랜치를 아카이브합니다.
-
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@v4
) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main
) -
PR 브랜치를 아카이브하기 위해
bencher archive
CLI 서브커맨드를 사용하십시오. (예:bencher archive
) -
프로젝트 슬러그로
--project
옵션을 설정하십시오. 자세한 내용은--project
문서를 참조하십시오. (예:--project save-walter-white-1234abcd
) -
--token
옵션을BENCHER_API_TOKEN
저장소 시크릿으로 설정하십시오. 자세한 내용은--token
문서를 참조하십시오. (예:--token '${{ secrets.BENCHER_API_TOKEN }}'
) -
GitHub Actions
GITHUB_HEAD_REF
기본 환경 변수를 사용하여 PR 브랜치 이름으로--branch
옵션을 설정하십시오. (예:--branch "$GITHUB_HEAD_REF"
)
포크로부터의 풀 리퀘스트
공개 오픈 소스 프로젝트에서 일반적으로 발생하는 것처럼 포크로부터의 풀 리퀘스트를 수락할 계획이라면
조금 다르게 처리해야 합니다.
보안상의 이유로, 포크 PR에서는 BENCHER_API_TOKEN
과 GITHUB_TOKEN
과 같은 비밀이 GitHub Actions에서 사용할 수 없습니다.
즉, 외부 기여자가 포크로부터 PR을 열면 위의 예제는 작동하지 않습니다.
전체 개요를 보려면 GitHub Security Lab 글 작성
및 블로그 게시물
을 참조하십시오.
포크 풀 리퀘스트에 지속적인 벤치마킹을 추가하는 안전하고 권장되는 방법입니다.
두 개의 별도 워크플로우가 필요합니다.
첫 번째 워크플로우는 pull_request
컨텍스트에서 벤치마크 결과를 실행하고 캐시합니다.
여기에는 BENCHER_API_TOKEN
과 GITHUB_TOKEN
같은 비밀은 사용할 수 없습니다.
그런 다음 두 번째 워크플로우는 workflow_run
컨텍스트에서 캐시된 벤치마크 결과를 다운로드하여 Bencher에 업로드합니다.
이 방법은 workflow_run
이 저장소의 기본 브랜치 컨텍스트에서 실행되기 때문에
BENCHER_API_TOKEN
과 GITHUB_TOKEN
같은 비밀이 사용 가능하기 때문입니다.
초기의 pull_request
워크플로우에서 사용된 풀 리퀘스트 번호, 헤드 브랜치, 그리고 베이스 브랜치도
명시적으로 workflow_run
워크플로우에 전달되어야 합니다.
이 워크플로우는 기본 브랜치에 있을 때만 실행됩니다.
전체 개요는 트리거링 워크플로우에서 데이터 사용하기를 참조하십시오.
-
첫 번째 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@v4
) -
벤치마크를 실행하고 결과를 파일에 저장합니다. (예:
/bin/echo '{ ... }' > benchmark_results.json
) -
벤치마크 결과 파일을 아티팩트로 업로드합니다. (예:
uses: actions/upload-artifact@v4
) -
pull_request
이벤트 객체를 아티팩트로 업로드합니다. (예:uses: actions/upload-artifact@v4
)
- 첫 번째 GitHub Actions
workflow
파일을 만드세요. (예:.github/workflows/fork_pr_benchmarks_track.yml
) - 이 워크플로의 이름을 두 번째 워크플로로 지정하세요.
(예:
name: Track Benchmarks with Bencher
) - the
workflow_run
event을 사용하여 두 워크플로를 연결하세요. (예:on: workflow_run: ...
) - GitHub Actions
job
을 만드세요. (예:jobs: track_fork_pr_branch
) - the GitHub Actions
workflow_run
event을 사용하여 이전 워크플로의 결론이 성공적일 경우에만 이 작업을 실행하도록 하세요. (예:if: github.event.workflow_run.conclusion == 'success'
) - 작업이 실행될 머신 유형을 설정하세요.
전체 개요는 GitHub Actions
runs-on
documentation을 참조하세요. (예:runs-on: ubuntu-latest
) - 벤치마크 결과와
pull_request
이벤트 객체 파일 이름을 환경 변수로 설정하세요. (예:env: ...
) - the
action-download-artifact
GitHub Action을 사용하여 캐시된 벤치마크 결과와pull_request
이벤트를 다운로드하세요. (예:uses: dawidd6/action-download-artifact@v6
) - 필요한 데이터를
pull_request
이벤트에서 환경 변수로 내보내세요. (예:core.exportVariable(...)
) - the GitHub Action을 사용하여 Bencher CLI를 설치하세요.
(예:
uses: bencherdev/bencher@main
) bencher run
CLI 서브커맨드를 사용하여 포크 풀 브랜치 벤치마크를 추적하세요. 자세한 내용은 thebencher run
CLI subcommand을 참조하세요. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은 the--project
docs을 참조하세요. (예:--project save-walter-white-1234abcd
)--token
옵션을BENCHER_API_TOKEN
Repository 비밀로 설정하세요. 자세한 내용은 the--token
docs을 참조하세요. (예:--token '${{ secrets.BENCHER_API_TOKEN }}'
)- an intermediate environment variable을 사용하여 포크 PR 브랜치 이름을
--branch
옵션에 설정하세요. 전체 개요는 the--branch
docs을 참조하세요. (예:--branch "$PR_HEAD"
) - 포크 PR 브랜치의 시작 지점을 설정하세요:
- an intermediate environment variable을 사용하여 포크 PR 브랜치 시작 지점을
--start-point
옵션에 설정하세요. 전체 개요는 the--start-point
docs을 참조하세요. (예:--start-point "$PR_BASE"
) - an intermediate environment variable을 사용하여 포크 PR 브랜치 시작 지점
git
해시를--start-point-hash
옵션에 설정하세요. 전체 개요는 the--start-point-hash
docs을 참조하세요. (예:--start-point-hash "$PR_BASE_SHA"
) - 시작 지점에서 임계값을 복제하려면
--start-point-clone-thresholds
플래그를 설정하세요. 전체 개요는 the--start-point-clone-thresholds
docs을 참조하세요. (예:--start-point-clone-thresholds
) - 벤치마크 데이터 드리프트를 방지하기 위해 포크 PR 브랜치를 항상 시작 지점으로 재설정하려면
--start-point-reset
플래그를 설정하세요. 전체 개요는 the--start-point-reset
docs을 참조하세요. (예:--start-point-reset
)
- an intermediate environment variable을 사용하여 포크 PR 브랜치 시작 지점을
- 시험대 이름을
--testbed
옵션에 설정하세요. 이는runs-on
에서 선택한 머신과 일치해야 할 것입니다. 자세한 내용은 the--tested
docs을 참조하세요. (예:--testbed ubuntu-latest
) - 경고가 생성되면 명령을 실패하게 하려면
--err
플래그를 설정하세요. 전체 개요는 the--err
docs을 참조하세요. (예:--err
) bencher mock
에 의해 생성된 Bencher Metric Format JSON (json
)을--adapter
옵션에 설정하세요. 전체 개요는 benchmark harness adapters을 참조하세요. (예:--adapter json
)- the GitHub Actions
GITHUB_TOKEN
environment variable을 사용하여 Pull Request에 대한 결과를 댓글로 게시하고자 할 때 GitHub API 인증 토큰을--github-actions
옵션에 설정하세요. 자세한 내용은 the--github-actions
docs을 참조하세요. (예:--github-actions '${{ secrets.GITHUB_TOKEN }}'
) - an intermediate environment variable을 사용하여 풀 리퀘스트 번호를
--ci-number
옵션에 설정하세요. 자세한 내용은 the--ci-number
docs을 참조하세요. (예:--ci-number "$PR_NUMBER"
) - 벤치마크 결과 파일 경로를
--file
옵션에 설정하세요. 전체 개요는 benchmark command를 참조하세요. (예:--file "$BENCHMARK_RESULTS"
)
포크 PR 브랜치를 PR이 종료된 후 정리하려면,
pull_request_target
이벤트 중 closed
타입으로 실행되는 별도의 워크플로를 생성할 수 있습니다.
이 워크플로는 bencher archive
명령어를 사용하여 포크 PR 브랜치를 아카이브합니다.
-
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@v4
) -
GitHub Action을 사용하여 Bencher CLI를 설치합니다. (예:
uses: bencherdev/bencher@main
) -
PR 브랜치를 아카이브하기 위해
bencher archive
CLI 서브커맨드를 사용합니다. (예:bencher archive
) -
--project
옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은--project
문서를 참조하십시오. (예:--project save-walter-white-1234abcd
) -
--token
옵션을BENCHER_API_TOKEN
저장소 시크릿으로 설정합니다. 자세한 사항은--token
문서를 참조하십시오. (예:--token '${{ secrets.BENCHER_API_TOKEN }}'
) -
GitHub Actions
GITHUB_HEAD_REF
기본 환경 변수를 사용하여 PR 브랜치 이름을--branch
옵션으로 설정합니다. (예:--branch "$GITHUB_HEAD_REF"
)
🐰 축하합니다! GitHub Actions에서 Bencher를 사용하는 방법을 배웠습니다! 🎉