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>
This commit is contained in:
1 parent
5b11496cd9
commit
c5790ab301
3 files changed
+217
No files matched your search
@@ -0,0 +1,78 @@
|
||||
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"
|
||||
Reference in new issue
Block a user