Files
adaptador-planilhas/.github/workflows/runner-check.yml
T
camilafagundesandClaude Opus 5 c5790ab301
ci / lint, typecheck, testes e build (push) Has been cancelled
ci / Postgres e Redis reais (push) Has been cancelled
ci / imagem Docker Linux (push) Has been cancelled
runner-check / o runner responde (push) Has been cancelled
Protege o CI em repositório público e prepara a ativação do runner
O push para o Gitea criou o run, mas ele ficou em Waiting: a mensagem da
instância é "No matching online runner with label: ubuntu-latest". A falha é na
atribuição do job, não no enfileiramento — o gatilho funcionou e a branch está
contemplada. O endpoint /actions/tasks devolvia lista vazia porque lista tasks
aceitas por runner, não runs criados, e foi isso que confundiu a leitura.

Com o diagnóstico fechado, duas coisas importam antes de um runner existir.

Primeira: este repositório é público e o CI dispara em pull_request. Sem
guarda, um fork traria código de terceiro para rodar na máquina do runner, com
Docker à disposição. Os três jobs do ci.yml e o runner-check passam a exigir
que o PR venha da própria origem; push continua rodando normalmente. Também
entram `permissions: contents: read` e `concurrency` por ref, para não
acumular fila de runs esperando runner.

Segunda: `runner-check` é o primeiro workflow a rodar quando o runner subir.
Não faz checkout, não instala dependência, não usa segredo e não toca rede
externa. Só confirma a ligação e inventaria node, npm, docker, psql e python3
— o job `services` precisa de psql e a jornada assíncrona precisa de python3,
e é melhor descobrir isso num workflow de dez segundos.

A documentação registra a evidência (runs 666 em Waiting e 584 cancelado),
recomenda act_runner 0.6.1-dind-rootless com escopo de repositório, e explica
por que Docker-in-Docker em vez do socket do host: num repositório público,
montar o socket entregaria o Docker da máquina ao workflow. Fica registrado
também que os ambientes de aprovação manual do deploy são conceito do GitHub e
não têm equivalente no Gitea.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-15 21:17:12 -03:00

79 lines
2.7 KiB
YAML

name: runner-check
# Primeiro workflow a rodar quando um runner entrar online. Não instala
# dependência, não constrói nada, não toca em rede externa, não usa segredo e
# não faz checkout do código: só confirma que a ligação Gitea → runner funciona
# e mostra o que o runner tem disponível.
#
# Dispare pela interface (Actions → runner-check → Run workflow) ou editando
# este arquivo.
on:
workflow_dispatch:
push:
paths:
- ".github/workflows/runner-check.yml"
permissions:
contents: read
concurrency:
group: runner-check-${{ github.ref }}
cancel-in-progress: true
jobs:
ligacao:
name: o runner responde
runs-on: ubuntu-latest
# Público: PR de fork não executa enquanto não houver aprovação manual.
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
steps:
- name: Identidade do runner
run: |
echo "runner.os = ${RUNNER_OS:-?}"
echo "runner.arch = ${RUNNER_ARCH:-?}"
echo "ref = ${GITHUB_REF:-?}"
echo "sha = ${GITHUB_SHA:-?}"
echo "evento = ${GITHUB_EVENT_NAME:-?}"
echo "---"
uname -a
echo "usuario: $(id -un) (uid $(id -u))"
- name: Ferramentas que os outros jobs exigem
run: |
faltando=""
for cmd in node npm docker curl git psql python3; do
if command -v "$cmd" >/dev/null 2>&1; then
printf ' ok %-8s %s\n' "$cmd" "$($cmd --version 2>&1 | head -1)"
else
printf ' AUSENTE %-8s\n' "$cmd"
faltando="$faltando $cmd"
fi
done
echo ""
if [ -n "$faltando" ]; then
echo "Faltam no runner:$faltando"
echo "node e npm são exigidos pelo job verify."
echo "docker é exigido pelo job image (precisa de Docker-in-Docker)."
echo "psql e python3 são exigidos pelo job services e pela jornada assíncrona."
echo ""
echo "Isto não falha o workflow de propósito: o objetivo é inventariar."
else
echo "todas as ferramentas presentes"
fi
- name: Docker funciona de verdade
continue-on-error: true
run: |
if ! command -v docker >/dev/null 2>&1; then
echo "docker ausente: o job image não vai rodar neste runner"
exit 0
fi
docker version
docker run --rm hello-world >/dev/null 2>&1 \
&& echo "ok: o runner executa contêiner" \
|| echo "docker presente mas não executa contêiner: confira o Docker-in-Docker"
- name: Resultado
run: echo "ligacao Gitea -> runner confirmada"