Skip to content

Instantly share code, notes, and snippets.

Aider Case 03: Integração com GitHub Actions, Análise de PRs e SonarQube

Este documento explora as possibilidades de integração do Aider com o ecossistema de CI/CD do GitHub, com foco em GitHub Actions e SonarQube, para aprimorar a qualidade de código e automatizar tarefas de revisão.

Integração com GitHub Actions

O Aider pode ser integrado em fluxos de trabalho do GitHub Actions de diversas formas, potencializando a análise e a revisão automatizada de código. A chave é usar o Aider como uma etapa (step) dentro de um job do seu workflow. O workflow é definido em um arquivo YAML (geralmente em .github/workflows/).

Cenários de Uso Comuns:

Análise de Código e Integração LLM no Aider

O Aider implementa um sistema sofisticado de análise de código que combina análise estática com modelos de linguagem. Ele utiliza a biblioteca tree-sitter através do módulo grep_ast para realizar análise sintática do código. Em aider/repomap.py, podemos ver a implementação:

from grep_ast import TreeContext, filename_to_lang
from grep_ast.tsl import USING_TSL_PACK, get_language, get_parser

class RepoMap:
    def get_tree_context(self, fname, code=None):
@scovl
scovl / aider-case01.md
Last active February 26, 2025 20:54
Estudo sobre o aider

Gerenciamento de Janela de Contexto no Aider

O Aider implementa um sistema sofisticado para gerenciar a janela de contexto nas interações com modelos de linguagem (LLMs). Este documento detalha como isso funciona internamente, cobrindo a estrutura de dados, algoritmos, estratégias de otimização e configurações.

Por que o Gerenciamento da Janela de Contexto é Crucial?

Modelos de linguagem, como os da OpenAI (GPT-3, GPT-4), Anthropic (Claude) e outros, operam com uma janela de contexto limitada. Essa janela representa a quantidade máxima de texto (medida em tokens) que o modelo pode "ver" ao gerar uma resposta. Quanto maior a janela, mais contexto o modelo tem, mas também maior o custo computacional e financeiro.

Ferramentas como o Aider, que usam LLMs para auxiliar na programação, enfrentam um desafio particular:

@scovl
scovl / shelllog.sh
Created March 27, 2024 15:54
shell log example
#!/bin/bash
log_message() {
local message="$@"
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message"
}
# Simulando o processo de backup
backup_result=$(tar czf backup.tar.gz /path/to/data 2>&1)
@scovl
scovl / java-gradle.md
Created March 19, 2024 03:23
Instrumentando sonar no java gradle

Para instrumentar um projeto Java usando Gradle no SonarQube e forçar a coleta de testes unitários via JaCoCo, você precisa seguir alguns passos. Vou te guiar por um processo básico:

  1. Configuração do Gradle: Primeiro, certifique-se de que seu projeto Gradle esteja configurado para usar o JaCoCo para relatórios de cobertura de código e o plugin do SonarQube para análise de código.

  2. Adicione o Plugin JaCoCo: No seu arquivo build.gradle, adicione o plugin JaCoCo para habilitar a geração de relatórios de cobertura de teste:

    plugins {
        id 'java'

id 'jacoco'

#!/bin/bash
# Solicita autorização de sudo
sudo -v
# Identifica a distribuição
OS=$(grep -E '^ID=' /etc/os-release | cut -d'=' -f2 | sed 's/"//g')
# Atualiza o sistema e instala o curl de acordo com a distribuição
case $OS in
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.Configuration;
@scovl
scovl / testSsh.go
Created February 15, 2023 17:39
Connect ssh/key in golang
package main
import (
"fmt"
"golang.org/x/crypto/ssh"
"net"
"time"
)
func main() {
@scovl
scovl / throw new
Last active February 10, 2023 12:38
throw new
Você pode adicionar uma exceção personalizada criando uma nova classe que estenda Exception e capturá-la dentro do bloco de código que você deseja tratar. Por exemplo:
class NamespaceException extends Exception {
public NamespaceException(String message) {
super(message);
}
}
...