참고
이 기능은 공개 미리 보기로 제공되며 변경될 수 있습니다.
스택의 모든 끌어오기 요청은 다음과 같이 main스택의 기본을 대상으로 하는 것처럼 평가됩니다. 이렇게 하면 모든 계층에서 품질이 일관되게 유지되지만 단일 스택에 대해 워크플로를 여러 번 실행할 수 있습니다. 이 문서에서는 워크플로가 스택에 대해 실행되는 방법과 중복 CI 사용량을 줄이는 방법을 설명합니다.
스택에 대해 워크플로를 실행하는 방법
GitHub 작업 워크플로는 스택의 각 끌어오기 요청이 스택의 베이스를 대상으로 하는 것처럼 트리거됩니다. 스택의 pull_request모든 끌어오기 요청에 대해 실행되는 이벤트를 대상으로 main 하도록 구성된 워크플로로, 아래쪽 요청뿐만 아니라 전체 스택에서 검사를 실행하기 위해 워크플로 변경이 필요하지 않습니다.
워크플로는 끌어오기 요청당 한 번 실행되므로 큰 스택은 CI 사용량을 곱합니다. 그러나 스택 메타데이터를 사용하여 필요한 경우에만 비용이 많이 드는 작업을 실행할 수 있습니다.
스택 메타데이터 액세스
스택 메타데이터는 을 통해 github.event.pull_request.stack워크플로 식에서 사용할 수 있습니다. 이 속성은 끌어오기 요청이 스택에 속하는 경우에만 존재하므로 해당 필드를 읽기 전에 워크플로에서 필터링해야 합니다.
| Expression | Description |
|---|---|
github.event.pull_request.stack.number | 리포지토리로 범위가 지정된 스택의 번호입니다. |
github.event.pull_request.stack.size | 스택의 총 끌어오기 요청 수입니다. |
github.event.pull_request.stack.position | 스택 내에서 이 끌어오기 요청의 1부터 시작하는 위치입니다(1 아래쪽). |
github.event.pull_request.stack.base.ref | 전체 스택이 궁극적으로 대상으로 지정하는 분기(예: main.) |
github.event.pull_request.stack.base.sha | 스택의 기본 분기의 HEAD SHA입니다. |
예를 들어 다음 워크플로는 스택 메타데이터를 읽고 스택이 이름이 시작되는 분기를 대상으로 하는 경우에만 두 번째 단계를 실행합니다 release/.
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Show stack info
if: github.event.pull_request.stack != null
run: |
echo "Stack base ref: ${{ github.event.pull_request.stack.base.ref }}"
echo "PR ${{ github.event.pull_request.stack.position }} of ${{ github.event.pull_request.stack.size }} in the stack"
- name: Run only when the stack targets a release branch
if: github.event.pull_request.stack != null && startsWith(github.event.pull_request.stack.base.ref, 'release/')
run: echo "This stack targets a release branch"
CI 사용량 감소
워크플로는 스택의 모든 끌어오기 요청에 대해 실행되므로 필드를 사용하여 stack 중요한 위치에서만 비용이 많이 드는 작업을 실행할 수 있습니다. 두 가지 조건이 특히 유용합니다.
- 가장 낮은 끌어오기 요청 - 현재 나머지 스택의 맨 아래에 있는 끌어오기 요청입니다. 스택 베이스를 직접
github.event.pull_request.stack.base.ref대상으로 지정하므로 다음과 같습니다github.event.pull_request.base.ref. - 상위 끌어오기 요청 - 전체 변경 내용 집합을 포함하는 스택의 마지막 끌어오기 요청입니다. 끌어오기 요청(같음)
github.event.pull_request.stack.position입니다.github.event.pull_request.stack.size
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Run for the lowest unmerged pull request in the stack
if: github.event.pull_request.stack != null && github.event.pull_request.stack.base.ref == github.event.pull_request.base.ref
run: echo "Lowest unmerged pull request in the stack"
- name: Run for the top pull request in the stack
if: github.event.pull_request.stack != null && github.event.pull_request.stack.position == github.event.pull_request.stack.size
run: echo "Top pull request in the stack"
끌어오기 요청이 아래쪽에서 위로 병합되면 가장 낮은 병합되지 않은 끌어오기 요청이 변경됩니다. 아래쪽 끌어오기 요청이 착륙하면 다음 끌어오기 요청이 스택 베이스를 직접 대상으로 다시 지정되므로 다음 워크플로 실행에서 가장 낮은 병합되지 않은 끌어오기 요청이 됩니다.
를 사용하여 원래 아래쪽 끌어오기 요청 github.event.pull_request.stack.position == 1또는 특정 계층에서 제어할 수도 있습니다 position.