CI / Formatação e clippy (push) Successful in 20s
CI / Auditoria de dependências (push) Successful in 9s
CI / Compila o app desktop (Linux) (push) Successful in 1m55s
Release / Cria a release (push) Successful in 5s
CI / Testes (Linux) (push) Successful in 4m25s
Release / CLI (linux-aarch64) (push) Successful in 2m18s
Release / CLI (linux-x86_64) (push) Successful in 2m51s
Release / App desktop (linux-aarch64) (push) Successful in 9m19s
Release / App desktop (linux-x86_64) (push) Failing after 11m11s
Release / App desktop (windows) (push) Successful in 10m27s
Release / Monta o latest.json (push) Skipped
69 lines
2.7 KiB
Bash
Executable File
69 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Verificação local: roda o mesmo que o CI roda, antes de você dar push.
|
|
#
|
|
# scripts/verificar.sh rápido (~1 min): formatação, clippy, tradução, scripts, workflows
|
|
# scripts/verificar.sh --completo inclui os testes do workspace e o cargo audit
|
|
#
|
|
# O CI leva de 5 a 30 minutos por execução e roda em Linux; quase tudo que o faz falhar
|
|
# aparece aqui em segundos. Se isto passa, o CI só deve revelar o que é próprio dele
|
|
# (imagens baixadas, apt do runner).
|
|
set -uo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
completo=0
|
|
[ "${1:-}" = "--completo" ] && completo=1
|
|
falhas=()
|
|
passo() { # passo "nome" comando...
|
|
local nome="$1"; shift
|
|
printf '\n\033[1m== %s\033[0m\n' "$nome"
|
|
if "$@"; then printf '\033[32mok\033[0m %s\n' "$nome"; else printf '\033[31mFALHOU\033[0m %s\n' "$nome"; falhas+=("$nome"); fi
|
|
}
|
|
|
|
passo "formatação (cargo fmt)" cargo fmt --all -- --check
|
|
# as mesmas flags do CI: avisos viram erro, inclusive nos testes
|
|
passo "clippy (workspace, todos os alvos)" env RUSTFLAGS="-D warnings" cargo clippy --workspace --all-targets
|
|
passo "cobertura da tradução da interface" node scripts/check-ui-i18n.mjs
|
|
passo "teste do latest.json" python3 -B scripts/test_make_latest_json.py
|
|
passo "sintaxe dos scripts bash" bash -c 'for f in scripts/*.sh .githooks/*; do bash -n "$f" || exit 1; done'
|
|
passo "workflows e templates (YAML válido)" python3 -c "
|
|
import glob, yaml
|
|
for f in glob.glob('.gitea/**/*.yml', recursive=True):
|
|
yaml.safe_load(open(f))
|
|
"
|
|
passo "versões consistentes" python3 -c "
|
|
import json, re, sys
|
|
from pathlib import Path
|
|
|
|
def cargo_version(path):
|
|
m = re.search(r'^version\s*=\s*\"([^\"]+)\"', Path(path).read_text(), re.M)
|
|
if not m:
|
|
sys.exit(f'versão não encontrada em {path}')
|
|
return m.group(1)
|
|
|
|
versoes = [
|
|
cargo_version('Cargo.toml'),
|
|
cargo_version('apps/gui/src-tauri/Cargo.toml'),
|
|
json.load(open('apps/gui/src-tauri/tauri.conf.json'))['version'],
|
|
]
|
|
if len(set(versoes)) != 1:
|
|
sys.exit(f'versões divergentes: Cargo.toml={versoes[0]}, src-tauri={versoes[1]}, tauri.conf={versoes[2]}')
|
|
print(versoes[0])
|
|
"
|
|
if [ -f apps/gui/src-tauri/Cargo.toml ] && pkg-config --exists webkit2gtk-4.1 2>/dev/null; then
|
|
passo "app desktop (cargo check)" env RUSTFLAGS="" cargo check --manifest-path apps/gui/src-tauri/Cargo.toml
|
|
else
|
|
printf '\n(app desktop: pulado, faltam as bibliotecas do WebKitGTK; o CI compila)\n'
|
|
fi
|
|
|
|
if [ "$completo" = 1 ]; then
|
|
passo "testes (cargo test --workspace)" cargo test --workspace
|
|
passo "auditoria de dependências (cargo audit)" cargo audit
|
|
fi
|
|
|
|
printf '\n'
|
|
if [ ${#falhas[@]} -eq 0 ]; then
|
|
printf '\033[32mtudo certo\033[0m: pode dar push.\n'
|
|
else
|
|
printf '\033[31mfalhou:\033[0m %s\n' "${falhas[*]}"
|
|
exit 1
|
|
fi
|