📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Ferramentas. Recomendado revisar antes de começar.

🛠️ Ambientes Reprodutíveis com DevContainers & Makefiles

v1.0 — DevContainers W3C, Docker, Automação de Tarefas com Make e Ambientes Herméticos

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Engenheiro DevOps / Platform Engineer Trainee. O dilema “na minha máquina funciona” acabou. Empresas modernas utilizam DevContainers e Makefiles, garantindo que um novo desenvolvedor consiga clonar o repositório e rodar o projeto em 30 segundos, exatamente com as mesmas versões de compilador e dependências de produção.


🎯 Objetivo & Escopo do Projeto

Criar a infraestrutura de Ambiente Reprodutível de Desenvolvimento utilizando a especificação aberta DevContainers (.devcontainer/devcontainer.json), isolamento com Docker e automação padronizada de comandos operacionais (make build, make test, make lint, make run) através de um Makefile Canônico.


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Tech Lead & Coordenador de Engenharia)

“Levamos 3 dias para configurar o computador de um novo desenvolvedor contratado porque cada um usa um sistema operacional diferente (Windows, Mac, Ubuntu) com versões conflitantes do Java, Node e Python. Queremos que qualquer desenvolvedor abra o VS Code, clique em ‘Reopen in Container’ e tenha o ambiente 100% pronto com todas as extensões instaladas e possa rodar o projeto simplesmente digitando make run.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Configurar .devcontainer/devcontainer.json com imagem base, portas e extensões recomendadas. “clique em Reopen in Container”
RF02 Funcional Implementar Makefile com targets canônicos: build, test, lint, clean e run. “rodar o projeto digitando make run”
RF03 Funcional Script de pós-criação (postCreateCommand) instalando ferramentas automaticamente. “ambiente 100% pronto”
RNF01 Não-Funcional Reprodutibilidade idêntica em Windows (WSL2), macOS (Apple Silicon) e Linux. Portabilidade Total
RNF02 Não-Funcional Makefile determinístico com declaração explícita de .PHONY. Boas Práticas Make

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como novo membro do time, quero começar a programar no meu primeiro dia sem instalar 10 ferramentas locais. Alta
US02 Como time de CI/CD, quero rodar make test no GitHub Actions executando exatamente a mesma instrução dos devs. Alta

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Execução)

# Branch da funcionalidade
git checkout -b feature/US01-devcontainer-makefile

# Executar os targets do Makefile
make build
make test

🛠️ Fase 4 — Implementação do Makefile Canônico

SHELL := /bin/bash

.PHONY: all build test clean run

all: build test

build:
	@echo "==> Compilando a aplicacao..."

test:
	@echo "==> Executando suíte de testes automatizados..."

clean:
	@echo "==> Limpando artefatos temporarios..."

run:
	@echo "==> Iniciando o servidor de desenvolvimento..."


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd tools_01_devcontainer_makefile

2. Execute a aplicação ou testes

# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/tools_01_devcontainer_makefile`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Asserções

# Validar se o Makefile executa todos os alvos sem erros
make all


🏛️ Arquitetura Visual & Engenharia de Infraestrutura

O diagrama abaixo ilustra a topologia de componentes, balanceamento, esteiras de automação e observabilidade na subpasta .devcontainer/:

Arquitetura de Infraestrutura

flowchart TD
    subgraph Config["Configuração & IaC"]
        C1["Manifestos Declarativos"] --> C2["Variáveis & Segredos"]
    end
    subgraph Orquestracao["Orquestração & Redes"]
        O1["Load Balancer / Ingress"] --> O2["Pods / Contêineres de Serviço"]
    end
    subgraph Observabilidade["Observabilidade & Segurança"]
        M1["Telemetria Prometheus / k6"] --> M2["Scanners SAST & Dashboards"]
    end
    subgraph Qualidade["Homologação & Qualidade"]
        Q1["Automação CI/CD"] --> Q2["Checkpoints CP-01..05 PASS"]
    end

    Config --> Orquestracao
    Orquestracao --> Observabilidade
    Observabilidade --> Qualidade

    style Config fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Orquestracao fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Observabilidade fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Desenvolvedor em Onboarding Desejo abrir o projeto em um DevContainer VS Code totalmente configurado Setup instantâneo com runtime, linters, formatadores e extensões pré-instalados Alta
US-02 Tech Lead Desejo Makefile padronizando comandos essenciais (make lint, test, build, clean) Interface de automação unificada operando de forma idêntica em qualquer máquina Alta
US-03 Engenheiro de Plataforma Desejo definição Dockerfile do container com ferramentas de linha de comando Imagem Docker customizada contendo git, curl, zsh, linters e SDKs Alta
US-04 Analista de Infraestrutura Desejo persistência de dados de extensões e histórico via mounts de volume Volumes Docker mapeando ~/.ssh e caches locais para produtividade Média
US-05 Auditor de Ambiente Desejo testes automatizados comprovando execução de make test dentro do container Validação de que todas as metas do Makefile executam com código de retorno zero Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Configuração devcontainer.json com definições de extensões e configurações VS Code Alta
RF-02 Makefile canônico com alvos padronizados: help, install, lint, test, build, clean Alta
RF-03 Dockerfile de desenvolvimento com ferramentas utilitárias e permissões de usuário Alta
RF-04 Scripts de postCreateCommand configurando ambiente no primeiro boot Média
RF-05 Módulo de testes automatizados com verificação de alvos do Makefile Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Eliminação do problema ‘funciona na minha máquina’ via contêiner padronizado Alta
RNF-02 Compatibilidade multiplataforma com VS Code no Windows, Mac e Linux Alta
RNF-03 Tempo de inicialização do devcontainer após build inferior a 5 segundos Média
RNF-04 Conformidade com a especificação oficial Development Containers (containers.dev) Alta
RNF-05 Isolamento dos arquivos de configuração em .devcontainer/ Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-04 .devcontainer/devcontainer.json Testado
US-02 RF-02 RNF-01, RNF-02 Makefile Testado
US-03 RF-03 RNF-01, RNF-03 .devcontainer/Dockerfile Testado
US-04 RF-04 RNF-02, RNF-03 .devcontainer/devcontainer.json Testado
US-05 RF-05 RNF-01, RNF-05 Makefile Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Configuração Declarativa do Ambiente .devcontainer/ PASS ✅
CP-02 Provisionamento & Orquestração Deployments / Services PASS ✅
CP-03 Redes, Proxies & Segurança de Borda Ingress / Security Groups PASS ✅
CP-04 Observabilidade, Métricas & SAST Metrics / Scanners PASS ✅
CP-05 Homologação com Suíte de Testes Test Suite / CI Gate PASS ✅