Sobre o projeto
Last Run Action é uma GitHub Action que rastreia quando um workflow foi executado pela última vez, armazenando um carimbo de data/hora em um artefato de Actions reutilizável no nível do repositório. Ela oferece modos simples para ler, gravar ou ler e gravar atomicamente o valor.
## Uso
Padrão de duas etapas (obter e depois definir):
```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 "A execução anterior foi em ${{ steps.last-run.outputs.last-run }}"
- run: echo "(fazer algo)"
- uses: benbalter/last-run-action@v1
with:
mode: set
```
Obter e definir atômico:
```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 "A execução anterior foi em ${{ steps.last-run.outputs.last-run }}"
```
## Entradas
- `mode` (opcional, padrão `get`): Um de `get`, `set`, `get-and-set` (aliases `getset`, `get_and_set`). Valores desconhecidos registram um aviso e se comportam como `get` somente leitura.
- `fail-if-missing` (opcional, padrão `false`): Se `true` e nenhum carimbo de data/hora anterior válido for encontrado, a action falha. Em modos combinados, o upload ainda prossegue.
- `key` (opcional, padrão `last-run`): Nome do artefato para o carimbo de data/hora. Use chaves únicas por workflow ou branch. Caracteres inválidos são substituídos por `-`.
- `retention-days` (opcional, padrão `90`): Por quanto tempo o artefato é mantido. Limitado à configuração do repositório. Se expirado, a próxima execução é tratada como primeira execução.
- `token` (opcional, padrão `${{ github.token }}`): Token para listar/baixar artefatos. Usa `GITHUB_TOKEN` como fallback.
## Saídas
- `last-run`: Carimbo de data/hora ISO 8601 da execução anterior. Omitido na primeira execução.
- `first-run`: `'true'` se não houver carimbo de data/hora anterior, `'false'` caso contrário.
- `current-run`: Carimbo de data/hora armazenado por esta etapa (set, get-and-set ou seeding de primeira execução).
## Comportamento na primeira execução
- `mode: get` com `fail-if-missing: false`: registra aviso, omite `last-run`, define `first-run` como `'true'` e faz upload automático do carimbo de data/hora atual (requer `actions: write`).
- `mode: get-and-set`: sem saída `last-run`, `first-run` é `'true'`, faz upload do novo carimbo de data/hora.
- `fail-if-missing: true`: falha, sem seeding.
Uma etapa posterior de `set` ou `get-and-set` substitui o seed.
## Como funciona
Armazena o carimbo de data/hora em um artefato de arquivo único chamado `last-run` (arquivo `last-run.txt`). A recuperação lista artefatos por nome, seleciona o mais recente não expirado e baixa para `RUNNER_TEMP`. Estado em todo o repositório; execuções sobrepostas podem competir, então adicione um grupo de concorrência.
Permissões: leitura requer `actions: read`; gravação requer `actions: write`.
## Resumo de comportamento
| Modo | Lê anterior | Saída `last-run` | Faz upload do novo carimbo de data/hora |
|------|----------------|---------------------|-----------------------|
| get | Sim | Sim (se encontrado e válido) | Apenas na primeira execução |
| set | Não | Não | Sim |
| get-and-set | Sim | Sim (anterior) | Sim (novo) |
## Casos de uso
- Baixar atividade desde a última execução.
- Agir sobre mudanças desde a última execução.
- Executar tarefas periódicas.
## Notas de implementação
- Validação do carimbo de data/hora: deve corresponder a `YYYY-MM-DDTHH:mm:ss(.fraction)?Z` e ser analisável por `Date.parse`.
- Atualizações monotônicas: o carimbo de data/hora armazenado é pelo menos 1ms posterior ao anterior lido.
- Vantagens do modo combinado: captura e atualização atômicas em uma única etapa.
## Por que não a REST API?
Carimbos de data/hora evitam ambiguidade em torno de execuções filtradas e não dependem de conclusões de workflow ou filtragem externa.
## Atualizações automatizadas de dependências
Usa Renovate para manter dependências npm e GitHub Actions atualizadas.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.