Migracao para Go: fundacao do cliente #9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Roda a cada push e pull request. E a mesma bateria do `make teste` que roda | |
| # na maquina, mais o empacotamento - porque quebrar o pacote e tao ruim quanto | |
| # quebrar o codigo, e so se descobre tentando empacotar. | |
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| workflow_dispatch: | |
| jobs: | |
| # Barato e primeiro: versao fora de sincronia entre os modulos so aparecia | |
| # na hora de cortar a tag, quando ja e tarde e chato de corrigir. | |
| versao: | |
| name: versao | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - run: ./checar-versao.sh | |
| agente: | |
| name: agente (Go) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-go@v7 | |
| with: | |
| go-version-file: linux-agent/go.mod | |
| # O agente nao tem dependencia externa: sem go.sum, o cache do | |
| # setup-go falha procurando o arquivo. | |
| cache: false | |
| # vet + gofmt + go test, igual ao alvo `checagem` do Makefile. | |
| - name: Checagem | |
| run: make -C linux-agent checagem | |
| # O agente serve HTTP e coleta em varias goroutines: corrida aqui vira | |
| # leitura errada no cliente. | |
| - name: Testes com -race | |
| run: make -C linux-agent teste | |
| - name: Compila para amd64 e arm64 | |
| run: make -C linux-agent dist | |
| # O lancador do Windows so compila com GOOS=windows: sem isto ninguem | |
| # olharia para ele ate a hora de empacotar. | |
| - name: Checagem do lancador do Windows | |
| run: | | |
| cd windows-lancador | |
| GOOS=windows go vet ./... | |
| test -z "$(gofmt -l .)" || { echo "gofmt pendente"; gofmt -l .; exit 1; } | |
| # Cliente em Go: a migracao do Python acontece aqui, pacote a pacote. | |
| cliente-go: | |
| name: cliente (Go) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-go@v7 | |
| with: | |
| go-version-file: cliente/go.mod | |
| cache: false | |
| - name: Checagem | |
| run: | | |
| cd cliente | |
| go vet ./... | |
| test -z "$(gofmt -l .)" || { echo "gofmt pendente:"; gofmt -l .; exit 1; } | |
| go test ./... | |
| clientes: | |
| name: clientes (Python ${{ matrix.python }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # O piso e o que o README promete; o topo e o que a maioria tem hoje. | |
| python: ['3.9', '3.13'] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v7 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| # sysmon_win importa tkinter no topo do modulo, entao o import precisa | |
| # funcionar mesmo sem display (os testes nao abrem janela). | |
| - name: Bibliotecas do Tk | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y --no-install-recommends tk | |
| python -c "import tkinter; print('tkinter', tkinter.TkVersion)" | |
| - name: Testes | |
| run: python -m unittest discover -s tools -t tools -v | |
| pacote: | |
| name: pacote | |
| runs-on: ubuntu-latest | |
| needs: [versao, agente, clientes] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-go@v7 | |
| with: | |
| go-version-file: linux-agent/go.mod | |
| cache: false | |
| - uses: actions/setup-python@v7 | |
| with: | |
| python-version: '3.13' | |
| - name: Bibliotecas do Tk | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y --no-install-recommends tk | |
| # Sem argumento, o empacotar.sh tira a versao do main.go - que e | |
| # exatamente o que queremos conferir aqui. | |
| - name: Empacota | |
| run: ./empacotar.sh | |
| # O auto-update baixa o .pyz e confere contra o SHA256SUMS. Se um dos | |
| # dois sumir do pacote, o cliente instalado recusa a atualizacao. | |
| - name: Confere o que o auto-update precisa | |
| run: | | |
| test -f dist/sysmon.pyz | |
| grep -q ' sysmon.pyz$' dist/SHA256SUMS | |
| ( cd dist && sha256sum -c SHA256SUMS ) | |
| # Roda o bundle de verdade: um .pyz que nao abre nao serve de nada. | |
| - name: Fuma o .pyz | |
| run: python dist/sysmon.pyz --help | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: dist-${{ github.sha }} | |
| path: dist/ | |
| retention-days: 14 |