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.