██╗ ██╗ ██████╗ ██████╗ ██╗ ██╗███████╗████████╗ █████╗ ████████╗███████╗
██║ ██║██╔═══██╗██╔══██╗██║ ██╔╝██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝
██║ █╗ ██║██║ ██║██████╔╝█████╔╝ ███████╗ ██║ ███████║ ██║ █████╗
██║███╗██║██║ ██║██╔══██╗██╔═██╗ ╚════██║ ██║ ██╔══██║ ██║ ██╔══╝
╚███╔███╔╝╚██████╔╝██║ ██║██║ ██╗███████║ ██║ ██║ ██║ ██║ ███████╗
╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
🏠 Dev Environment ──▶ ☁️ AWS S3 ──▶ 🌍 Anywhere
Ferramenta de Gerenciamento de Ambiente de Desenvolvimento Portátil
Workstate é uma poderosa ferramenta CLI que permite aos desenvolvedores preservar e restaurar o estado completo de seus ambientes de desenvolvimento em diferentes máquinas. Diferentemente dos sistemas de controle de versão que focam no código-fonte, o Workstate captura tudo que torna seu ambiente de desenvolvimento único - configurações, bancos de dados locais, configurações de IDEs, variáveis de ambiente e muito mais.
Você já precisou:
- Continuar trabalhando em um projeto de uma máquina diferente com exatamente a mesma configuração?
- Preservar bancos de dados de desenvolvimento locais, arquivos de configuração e configurações de IDE?
- Compartilhar um ambiente de desenvolvimento completo com membros da equipe?
- Fazer backup do seu estado de desenvolvimento incluindo arquivos que não devem ir para o controle de versão?
O Workstate resolve esses problemas criando snapshots comprimidos do seu ambiente de desenvolvimento e armazenando-os de forma segura no AWS S3.
- Seleção Inteligente de Arquivos: Usa arquivos
.workstateignore(similar ao.gitignore) para definir o que deve ser incluído no snapshot do ambiente - Interface Interativa: CLI amigável com formatação rica e menus interativos
- Restauração Seletiva: Baixe estados sem descompactar ou restaure ambientes completos
- Integração AWS S3: Armazenamento seguro na nuvem para seus estados de desenvolvimento
- Compartilhamento: Compartilhe/importe estados utilizando URLs pré-assinadas temporárias do AWS S3
- Templates Pré-construídos: Vem com templates otimizados para ferramentas de desenvolvimento populares (Python, Node.js, Java, React, Angular, etc.)
- Multiplataforma: Funciona no Windows, macOS e Linux
Você é quem manda o que será capturado, mas a solução foi pensada para capturar tudo que o controle de versão tradicional ignora.
Exemplos:
- Variáveis de Ambiente:
.env,.env.local, arquivos de configuração - Configurações de IDE:
.vscode/,.idea/, configurações de editores - Scripts locais: Arquivos de teste, exemplos, scripts de seed, arquivos de contexto (llms)
- Bancos de Dados Locais: Arquivos SQLite, dumps de bancos locais
- Containers de Desenvolvimento: Arquivos docker-compose, volumes de containers
- Artefatos de Build: Arquivos compilados, dependências
- Configurações Locais: Configurações específicas de ferramentas e preferências
- Dados de Desenvolvimento: Dados de teste, arquivos mock, assets locais
Se você for utilizar o workstate.exe ignore esse tópico.
- Python 3.8+
- Conta AWS com acesso ao S3
- pip
- typer: Framework para CLIs
- rich: Formatação de terminal
- boto3: SDK AWS para Python
.workstateignore: Define arquivos/diretórios a serem incluídos/excluídos~/.workstate/config.json: Armazena credenciais AWS
git clone https://github.com/seuusuario/workstate.git
cd workstate
pip install -r requirements.txtSe você não tem uma conta AWS, crie uma em aws.amazon.com.
- Vá para o Console AWS IAM
- Crie um novo usuário para o Workstate
- Anexe a política AmazonS3FullAccess ou crie uma política personalizada com as seguintes permissões:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::seu-bucket-workstate",
"arn:aws:s3:::seu-bucket-workstate/*"
]
}
]
}- No console IAM, selecione seu usuário
- Vá para a aba "Credenciais de segurança"
- Crie chaves de acesso para CLI
- Importante: Salve o Access Key ID e Secret Access Key de forma segura
- Vá para o Console AWS S3
- Crie um novo bucket com um nome único (ex:
meu-bucket-workstate-12345) - Escolha sua região preferida
- Mantenha as configurações padrão de segurança
workstate configureIsso solicitará:
- AWS Access Key ID: A chave de acesso do seu usuário IAM
- AWS Secret Access Key: A chave secreta do seu usuário IAM
- AWS Region: A região onde seu bucket S3 está localizado (ex:
us-east-1,sa-east-1) - S3 Bucket Name: O nome do seu bucket S3
Configuração não-interativa alternativa:
workstate configure --access-key-id AKIA... --secret-access-key xxx --region us-east-1 --bucket-name meu-bucket --no-interactive# Inicializar com um template específico
workstate init --tool python
# Ou usar o template padrão
workstate initIsso cria um arquivo .workstateignore otimizado para sua stack de desenvolvimento.
workstate statusIsso mostra todos os arquivos e diretórios que serão incluídos no snapshot do seu estado.
workstate save "meu-projeto-v1"Isso compacta todos os arquivos mapeados (os mesmos listados no comando de status) em .zip e carrega para o AWS S3.
workstate listLista todos os zips no AWS S3 do Workstate.
Baixa um estado e descompacta localmente. Caso haja repetição de arquivos, os arquivos repetidos do zip serão salvos como duplicatas seguindo o padrão (numero_da_duplicata), por exemplo: arquivo.txt, arquivo (1).txt, arquivo (2).txt.
workstate downloadCaso queira apenas baixar o estado sem restaura-lo diretamente, use a opção --download-only, o zip será baixado e
armazenado numa pasta downloads no diretório atual.
workstate download --download-only| Comando | Descrição | Argumentos | Opções |
|---|---|---|---|
config |
Exibe configuração atual do Workstate | - | - |
configure |
Configura credenciais AWS | - | --access-key-id, -a, --secret-access-key, -s, --region, -r, --bucket-name, -b, --interactive, -i |
init |
Inicializa um novo projeto Workstate com arquivo .workstateignore |
- | --tool, -t: Tipo de ferramenta (padrão: generic) |
status |
Mostra arquivos rastreados pelo Workstate | - | - |
save |
Salva o estado atual do projeto no AWS S3 | state_name: Nome único para o estado |
- |
download |
Restaura um estado salvo do AWS S3 | - | --only-download: Apenas baixa sem extrair |
delete |
Exclui um estado salvo no AWS S3 | - | - |
list |
Lista todos os estados disponíveis no AWS S3 | - | - |
download-pre-signed |
Restaura um estado salvo do AWS S3 a partir de uma URL pré-assinada | base_url, signature, expires: Componentes da URL pré-assinada |
--no-extract, --output, -o |
share |
Gera uma URL pré-assinada do AWS S3 para permitir o download de um estado sem necessidade de autenticação | - | --expiration, -e: Horas até a URL expirar (padrão: 24) |
Funcionalidade: Exibe configuração AWS atual sem revelar informações sensíveis.
Informações exibidas:
- Access Key ID (mascarado)
- Região AWS
- Nome do bucket
- Status da configuração
Funcionalidade: Configura credenciais AWS (armazenadas em ~/.workstate/config.json).
Opções:
| Opção | Abreviação | Descrição |
|---|---|---|
--access-key-id |
-a |
AWS Access Key ID |
--secret-access-key |
-s |
AWS Secret Access Key |
--region |
-r |
Região AWS (ex: us-east-1, sa-east-1) |
--bucket-name |
-b |
Nome do bucket S3 |
--interactive |
-i |
Modo interativo (padrão: true) |
Exemplos:
# Modo interativo
workstate configure
# Modo não-interativo
workstate configure --access-key-id AKIA... --secret-access-key xxx --region us-east-1 --bucket-name my-bucket
# Modo misto
workstate configure --region sa-east-1 --bucket-name my-workstate-bucketFuncionalidade: Cria arquivo .workstateignore com template otimizado para a ferramenta especificada.
Ferramentas válidas: python, node, java, go, generic
Exemplos:
workstate init --tool python
workstate init -t node
workstate init # usa template genericFuncionalidade: Visualiza arquivos que serão incluídos no próximo backup.
Informações exibidas:
- Caminhos de arquivos/diretórios
- Tamanhos individuais
- Total de arquivos e tamanho
Funcionalidade: Comprime arquivos selecionados e faz upload para S3.
Processo:
- Analisa
.workstateignore - Cria ZIP temporário
- Upload para S3
- Remove arquivo temporário
Exemplos:
workstate save my-django-project
workstate save "projeto com espaços"Funcionalidade: Interface interativa para restaurar estados salvos.
Processo:
- Lista estados disponíveis
- Seleção interativa
- Download do ZIP
- Extração (opcional)
- Limpeza de arquivos temporários
Opções:
| Opção | Descrição |
|---|---|
--only-download |
Baixa apenas o ZIP sem extrair |
Funcionalidade: Exclui um estado salvo no AWS S3 de forma interativa.
Processo:
- Lista estados disponíveis
- Seleção interativa do estado a ser excluído
- Confirmação da exclusão
- Remoção do arquivo do S3
Funcionalidade: Gera uma URL pré-assinada para compartilhar um estado do projeto sem necessidade de credenciais AWS.
Processo:
- Lista estados disponíveis
- Seleção interativa do estado
- Geração da URL pré-assinada
- Exibição da URL e instruções de uso
Opções:
| Opção | Abreviação | Descrição |
|---|---|---|
--expiration |
-e |
Horas até a URL expirar (padrão: 24) |
Exemplos:
# URL válida por 24 horas (padrão)
workstate share
# URL válida por 48 horas
workstate share --expiration 48
workstate share -e 48Funcionalidade: Baixa e restaura um estado do projeto usando uma URL pré-assinada compartilhada.
Argumentos:
| Argumento | Descrição |
|---|---|
base_url |
URL base sem assinatura ou expiração |
signature |
Parte da assinatura da URL pré-assinada |
expires |
Timestamp de expiração da URL pré-assinada |
Opções:
| Opção | Abreviação | Descrição |
|---|---|---|
--no-extract |
- | Não extrai o arquivo ZIP após o download |
--output |
-o |
Caminho personalizado para o arquivo baixado |
Exemplos:
# Download e extração automática
workstate download-pre-signed "https://bucket.s3.region.amazonaws.com/file.zip" "signature123" "1234567890"
# Apenas download sem extração
workstate download-pre-signed "https://bucket.s3.region.amazonaws.com/file.zip" "signature123" "1234567890" --no-extract
# Download para caminho específico
workstate download-pre-signed "https://bucket.s3.region.amazonaws.com/file.zip" "signature123" "1234567890" --output ./downloads/project.zipFuncionalidade: Lista estados salvos no S3 com informações detalhadas.
Informações exibidas:
- Nome do arquivo
- Tamanho
- Data de modificação
- Ordenação por data (mais recente primeiro)
O arquivo .workstateignore funciona de forma similar ao .gitignore, mas define o que ignorado no snapshot do seu estado.
A ideia é ignorar tudo que for referente ao repositório. Ele suporta:
- Padrões glob:
*.env,config/*,!.jar - Inclusão de diretórios:
/.vscode/ - Arquivos específicos:
database.sqlite3 - Comentários: Linhas começando com
#
# Ignora arquivos do repositório e mantém arquivos de desenvolvimento local de um projeto Python
src/
.ruff_cache/
__pycache__
venv
.venv
requirements.txt
pyproject.*
.git
.gitignore
LICENSE
README.md
main.py
logs/- Credenciais são armazenadas localmente em
~/.workstate/config.json - Nunca commite este arquivo no controle de versão
- Use as melhores práticas do AWS IAM para gerenciamento de credenciais
- Considere usar políticas de rotação de credenciais da AWS
- Todos os dados são armazenados no seu bucket S3 privado
- Use políticas de bucket S3 para restringir acesso
- Considere habilitar criptografia em repouso no S3
- Revise regularmente os logs de acesso do S3
- Use contas AWS separadas para diferentes projetos
- Implemente políticas de acesso de menor privilégio
- Audite regularmente estados salvos e remova os desnecessários
- Seja consciente sobre dados sensíveis no seu ambiente de desenvolvimento
Tenha cuidado para não incluir no seu .workstateignore:
- Arquivos binários grandes que mudam com frequência
- Arquivos temporários do sistema
- Arquivos específicos do SO (
.DS_Store,Thumbs.db) - Credenciais pessoais que devem permanecer específicas da máquina
- O S3 tem um limite de objeto único de 5TB
- Considere as implicações de custo de armazenar estados de desenvolvimento grandes
- Limpe regularmente estados antigos que você não precisa mais
- Caminhos de arquivos são tratados usando
pathlibdo Python para compatibilidade multiplataforma - Diferenças de terminação de linha são preservadas como estão
- Links simbólicos podem não funcionar entre diferentes sistemas operacionais
Erros de "Access Denied":
- Verifique se suas credenciais AWS estão corretas
- Verifique se seu usuário IAM tem permissões S3
- Certifique-se de que o bucket S3 existe e está acessível
"Arquivo .workstateignore não encontrado":
- Execute
workstate initpara criar um - Certifique-se de estar no diretório correto do projeto
Tempos de upload longos:
- Verifique seu arquivo
.workstateignorepara arquivos grandes desnecessários - Considere a velocidade da sua conexão com a internet
- Use
workstate statuspara revisar o que está sendo carregado
Problemas de configuração:
- Use
workstate configpara verificar suas configurações atuais - Re-execute
workstate configurepara atualizar credenciais
Se este projeto foi útil para você ou para sua equipe, considere deixar uma estrela no repositório do GitHub! Isso ajuda outras pessoas a descobrirem o Workstate e me motiva a continuar melhorando a ferramenta.