프로젝트 소개
Last Run Action은 재사용 가능한 저장소 수준 Actions 아티팩트에 타임스탬프를 저장하여 워크플로우가 마지막으로 실행된 시점을 추적하는 GitHub Action입니다. 값을 읽기, 쓰기 또는 원자적으로 읽고 쓰는 간단한 모드를 제공합니다.
## 사용법
2단계 패턴(get 후 set):
```yaml
permissions:
actions: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: benbalter/last-run-action@v1
id: last-run
with:
mode: get
- run: echo "Previous run was at ${{ steps.last-run.outputs.last-run }}"
- run: echo "(do stuff)"
- uses: benbalter/last-run-action@v1
with:
mode: set
```
원자적 get-and-set:
```yaml
permissions:
actions: write
steps:
- uses: actions/checkout@v5
- uses: benbalter/last-run-action@v1
id: last-run
with:
mode: get-and-set
- run: echo "Previous run was at ${{ steps.last-run.outputs.last-run }}"
```
## 입력
- `mode` (선택 사항, 기본값 `get`): `get`, `set`, `get-and-set` (별칭 `getset`, `get_and_set`) 중 하나입니다. 알 수 없는 값은 경고를 기록하고 읽기 전용 `get`처럼 동작합니다.
- `fail-if-missing` (선택 사항, 기본값 `false`): `true`이고 유효한 이전 타임스탬프가 없으면 액션이 실패합니다. 결합 모드에서는 업로드가 계속 진행됩니다.
- `key` (선택 사항, 기본값 `last-run`): 타임스탬프의 아티팩트 이름입니다. 워크플로우 또는 브랜치별로 고유한 키를 사용하세요. 잘못된 문자는 `-`로 대체됩니다.
- `retention-days` (선택 사항, 기본값 `90`): 아티팩트가 보관되는 기간입니다. 저장소 설정으로 상한이 적용됩니다. 만료된 경우 다음 실행은 첫 실행으로 처리됩니다.
- `token` (선택 사항, 기본값 `${{ github.token }}`): 아티팩트를 나열/다운로드하기 위한 토큰입니다. `GITHUB_TOKEN`으로 대체됩니다.
## 출력
- `last-run`: 이전 실행의 ISO 8601 타임스탬프입니다. 첫 실행에서는 생략됩니다.
- `first-run`: 이전 타임스탬프가 없으면 `'true'`, 그렇지 않으면 `'false'`입니다.
- `current-run`: 이 단계에서 저장한 타임스탬프입니다(set, get-and-set 또는 첫 실행 시딩).
## 첫 실행 동작
- `mode: get`과 `fail-if-missing: false`: 경고를 기록하고, `last-run`을 생략하며, `first-run`을 `'true'`로 설정하고, 현재 타임스탬프를 자동 업로드합니다(`actions: write` 필요).
- `mode: get-and-set`: `last-run` 출력이 없고, `first-run`은 `'true'`이며, 새 타임스탬프를 업로드합니다.
- `fail-if-missing: true`: 실패하며 시딩하지 않습니다.
이후의 `set` 또는 `get-and-set` 단계가 시드를 대체합니다.
## 작동 방식
타임스탬프를 `last-run`이라는 단일 파일 아티팩트(파일 `last-run.txt`)에 저장합니다. 검색은 이름으로 아티팩트를 나열하고, 만료되지 않은 가장 최근 것을 선택하여 `RUNNER_TEMP`로 다운로드합니다. 저장소 전체 상태이므로 겹치는 실행이 경합할 수 있으므로 동시성 그룹을 추가하세요.
권한: 읽기에는 `actions: read`가 필요하고, 쓰기에는 `actions: write`가 필요합니다.
## 동작 요약
| 모드 | 이전 값 읽기 | `last-run` 출력 | 새 타임스탬프 업로드 |
|------|----------------|---------------------|-----------------------|
| get | 예 | 예 (발견되고 유효한 경우) | 첫 실행에서만 |
| set | 아니요 | 아니요 | 예 |
| get-and-set | 예 | 예 (이전) | 예 (새) |
## 사용 사례
- 마지막 실행 이후의 활동 다운로드.
- 마지막 실행 이후의 변경 사항에 대한 조치.
- 주기적 작업 실행.
## 구현 참고 사항
- 타임스탬프 검증: `YYYY-MM-DDTHH:mm:ss(.fraction)?Z`와 일치해야 하며 `Date.parse`로 파싱 가능해야 합니다.
- 단조 증가 업데이트: 저장된 타임스탬프는 이전에 읽은 값보다 최소 1ms 이후입니다.
- 결합 모드의 장점: 한 단계에서 원자적으로 캡처 및 업데이트합니다.
## REST API를 사용하지 않는 이유
타임스탬프는 필터링된 실행에 대한 모호성을 피하고 워크플로우 결론이나 외부 필터링에 의존하지 않습니다.
## 자동화된 종속성 업데이트
Renovate를 사용하여 npm 종속성과 GitHub Actions를 최신 상태로 유지합니다.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.