CI/CD para projetos Rust: GitHub Actions do A ao Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que CI/CD é criticamente importante para projetos Rust?

\n

Desenvolver em Rust não é apenas sobre segurança de memória e alta performance, mas também sobre disciplina rigorosa. O compilador Rust captura muitos erros na fase de build, no entanto, isso não elimina a necessidade de testes de qualidade, linting e verificação de compatibilidade de dependências. É aqui que o CI/CD (Continuous Integration / Continuous Deployment) entra em ação.

\n

GitHub Actions é um sistema de automação integrado que é ideal para projetos Rust. Ele permite executar automaticamente testes, formatar código, verificar vulnerabilidades e até publicar crates no registro crates.io a cada push no repositório. Neste artigo, abordaremos o pipeline completo: desde o básico cargo build até o deploy em produção.

\n\n

1. Fundamentos: Configurando um workflow básico para Rust

\n

Qualquer pipeline CI/CD no GitHub Actions começa com a criação de um arquivo YAML no diretório .github/workflows/. Vamos criar o arquivo ci.yml para uma verificação básica de um projeto Rust.

\n\n

1.1. Primeiro workflow: Build e testes

\n

Vamos começar com o conjunto mínimo: clonar o repositório, instalar o Rust e executar os testes.

\n
name: Rust CI\n\non:\n  push:\n    branches: [ "main", "develop" ]\n  pull_request:\n    branches: [ "main" ]\n\nenv:\n  CARGO_TERM_COLOR: always\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@stable\n    - name: Build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose
\n

O que está acontecendo aqui?

\n
    \n
  • actions/checkout@v4 — clona seu código.
  • \n
  • dtolnay/rust-toolchain@stable — action oficial para instalar o Rust (suporta nightly, beta e stable).
  • \n
  • cargo build e cargo test — comandos principais para verificar o projeto.
  • \n
\n

Este workflow será executado a cada push nos branches main e develop, bem como ao criar um Pull Request.

\n\n

1.2. Cache de dependências para acelerar o build

\n

Projetos Rust geralmente têm muitas dependências. Para não precisar baixá-las toda vez, use cache. Isso reduzirá o tempo de build de 5 a 10 minutos para 30 a 60 segundos.

\n
    - name: Cache Cargo registry\n      uses: actions/cache@v3\n      with:\n        path: |\n          ~/.cargo/registry\n          ~/.cargo/git\n          target/\n        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-cargo-
\n

Adicione esta etapa antes de executar cargo build. O hash do arquivo Cargo.lock garante que o cache seja atualizado apenas quando as dependências mudarem.

\n\n

2. Verificação avançada de qualidade de código

\n

Apenas testes não são suficientes para manter a alta qualidade do código. Vamos adicionar linting, formatação e verificação de segurança.

\n\n

2.1. Formatação (rustfmt) e linting (clippy)

\n

Rust possui ferramentas integradas para manter um estilo de código consistente. Vamos adicioná-las em um job separado:

\n
  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: dtolnay/rust-toolchain@stable\n      with:\n        components: clippy, rustfmt\n    - name: Check formatting\n      run: cargo fmt --check\n    - name: Run clippy\n      run: cargo clippy -- -D warnings
\n
    \n
  • cargo fmt --check — verifica se o código está formatado de acordo com o padrão rustfmt.
  • \n
  • cargo clippy -- -D warnings — executa o linter e transforma avisos em erros (flag -D).
  • \n
\n

Isso ajudará a evitar código "sujo" no repositório.

\n\n

2.2. Verificação de segurança de dependências (car

Blogs

Book Recommendations