CI/CD com /advpl-validate e /advpl-find-issues
Pipeline CI/CD pra Protheus usando @totvs/tds-ls e a skill claude-advpl-skill. GitHub Actions, GitLab CI, Jenkins.
Por muito tempo, "CI/CD pra Protheus" foi unico erro: dev empurrava fonte direto pra homolog. Com @totvs/tds-ls open source (NPM) e a claude-advpl-skill, da pra montar pipeline completo: validar sintaxe + analise estatica + compile remoto.
Etapas do pipeline
- Validate — pre-compile local sem AppServer (
/advpl-validate src/) - Find issues — analise estatica (
/advpl-find-issues src/ --severity=error) - Compile remoto — push pra AppServer homolog (
/advpl-compileem modo CI) - Smoke test — Web Service /health ou rotina batch curta
GitHub Actions — exemplo
name: AdvPL CI
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g @totvs/tds-ls
- name: Validate syntax
run: |
for arquivo in src/*.prw; do
advpls appre -includes ./includes -file $arquivo
done
- name: Static analysis
run: |
node skills/advpl-find-issues/scripts/analyze.js src/ --severity=error --json > report.json
- uses: actions/upload-artifact@v4
with:
name: analysis-report
path: report.json
Gate de PR — bloqueia merge se achar erro
# script de pre-commit ou CI step
node skills/advpl-find-issues/scripts/analyze.js src/ --severity=error
# Exit code:
# 0 = limpo (passa)
# 1 = encontrou ERROR ou WARN (bloqueia)
Auto-fix em pull request
Com --fix, a skill aplica correcoes seguras (GetMV sem default, MsgYesNo legacy, Function nua). Pra abrir auto-PR de cleanup:
- name: Auto-fix safe issues
run: |
node skills/advpl-find-issues/scripts/analyze.js src/ --fix
git config user.name "advpl-bot"
git config user.email "bot@empresa.com"
git checkout -b auto-fix/safe-issues
git commit -am "auto-fix: GetMV defaults + MsgYesNo modern"
git push origin auto-fix/safe-issues
gh pr create --title "Auto-fix safe issues" --body "Gerado por claude-advpl-skill"
Pegadinhas
- Includes Protheus nao publicos — voce precisa hospedar a pasta
/includesem volume/cache da pipeline. - Compile remoto exige credenciais — usar secrets do CI, nunca commitar.
- Tempo de pipeline — validate sem AppServer e rapido (~3-5s/arquivo); compile remoto depende de AppServer disponivel.
- Em mono-repo grande, use
--severity=errorprimeiro pra reduzir ruido; warn em job separado.