Reusable CI/CD workflows and scaffolding tools for K3s deployments
Ferramenta de scaffolding para criar aplicações com infraestrutura CI/CD automatizada para deploy em cluster K3s via GitHub Actions.
O self-workflows fornece:
- Workflows CI/CD reutilizáveis via GitHub Actions
- CLI de scaffolding para criar novas aplicações rapidamente
- Templates Kubernetes prontos para deploy
- Suporte a backend (Java/Spring Boot) e frontend (Node.js)
- Deploy automatizado para cluster K3s via Tailscale
- K3s cluster rodando em seu homelab
- Tailscale configurado para acesso VPN ao cluster
- GitHub account com GitHub Container Registry habilitado
- Node.js 20+ para usar a CLI de scaffolding
# Instalar globalmente
npm install -g @leoferolive/self-workflows
# Ou usar diretamente com npx (sem instalação)
npx @leoferolive/self-workflows backend minha-api -u leoferolive# Clonar repositório
git clone https://github.com/leoferolive/self-workflows.git
cd self-workflows
# Instalar dependências
npm install
# Instalar CLI globalmente
npm linknew-app backend minha-api -u leoferolivenew-app frontend meu-app -u leoferolive# Customizar domínio, versões e réplicas
new-app backend minha-api \
-u leoferolive \
--domain example.com \
--java-version 17 \
--replicas 3
new-app frontend meu-app \
-u leoferolive \
--domain example.com \
--node-version 18 \
--replicas 2npx @leoferolive/self-workflows backend minha-api -u leoferolive
npx @leoferolive/self-workflows frontend meu-app -u leoferolive| Opção | Descrição | Padrão |
|---|---|---|
-u, --user <github-user> |
Usuário do GitHub | leoferolive |
-r, --template-repo <repo> |
Repositório de templates | self-workflows |
--domain <domain> |
Domínio para ingress | leoferolive.com.br |
--java-version <version> |
Versão do Java (backend) | 21 |
--node-version <version> |
Versão do Node.js (frontend) | 20 |
--replicas <count> |
Número de réplicas | 1 |
Após criar uma aplicação com new-app, a seguinte estrutura será gerada:
minha-api/
├── .github/
│ └── workflows/
│ └── deploy.yml # Workflow CI/CD que chama self-workflows
├── k8s/
│ ├── namespace.yaml # Namespace Kubernetes
│ ├── deployment.yaml # Deployment da aplicação
│ ├── service.yaml # Service interno
│ └── ingress.yaml # Ingress Traefik
├── Dockerfile # Dockerfile multi-stage
└── README.md # Instruções básicas
Após criar a aplicação e fazer push para o GitHub, configure os seguintes secrets:
- TAILSCALE_AUTHKEY - Auth key do Tailscale
- KUBECONFIG - Config do K3s em base64
# Exportar kubeconfig atual
base64 -w 0 ~/.kube/config- Push para main → Trigger automático do workflow
- Build & Push → Imagem Docker é buildada e pushada para GHCR
- Deploy → Tailscale conecta ao K3s e aplica manifests Kubernetes
- Rollout → Deployment é atualizado com nova imagem
- Registry: GitHub Container Registry (ghcr.io)
- Pipeline: GitHub Actions
- Cluster: K3s (homelab)
- Networking: Tailscale para acesso VPN
- Ingress: Traefik com entrada via
webentrypoint - Domínio:
{APP_NAME}.{DOMAIN}
O nome da aplicação deve seguir estas regras:
- Apenas letras minúsculas, números e hífens
- Não pode começar ou terminar com hífen
- Não pode conter hífens consecutivos
Exemplos válidos: minha-api, app-v2, demo123
Exemplos inválidos: minha_api, Meu-App, app--v1, -app
self-workflows/
├── .github/
│ └── workflows/
│ └── deploy.yml # Workflow unificado reutilizável
├── scripts/
│ └── new-app.js # CLI de scaffolding
├── templates/
│ ├── backend/ # Template para backend Java
│ │ ├── .github/workflows/
│ │ ├── k8s/
│ │ └── Dockerfile
│ └── frontend/ # Template para frontend Node.js
│ ├── .github/workflows/
│ ├── k8s/
│ └── Dockerfile
└── package.json
# Executar sem instalar globalmente
node scripts/new-app.js backend test-app -u leoferolive# Clonar repositório
git clone https://github.com/leoferolive/self-workflows.git
cd self-workflows
# Instalar dependências
npm install
# Criar link global para testes locais
npm linknpm run dev # Executa CLI localmente
npm run test # Executa testes
npm run lint # Verifica qualidade do código
npm run lint:fix # Corrige problemas automaticamente
npm run format # Formata código
npm run format:check # Verifica formatação# 1. Atualizar versão (cria tag e auto-commit)
npm version major|minor|patch
# 2. Fazer push da tag
git push origin main --tags
# 3. GitHub Actions publica automaticamente no npmContribuições são bem-vindas! Por favor, leia CONTRIBUTING.md para detalhes.
Este projeto está licenciado sob a licença ISC - veja o arquivo LICENSE para detalhes.
LeoFerOlive