GIT_USER_SETUP - Configurar Usuário Git
O que é este Node?
O GIT_USER_SETUP é o node responsável por configurar nome e email do usuário Git no repositório local. Ele executa comandos git config user.name e git config user.email.
Por que este Node existe?
Todo commit precisa de um autor identificado. O GIT_USER_SETUP existe para:
- Identificação: Definir autor dos commits
- Automação: Configurar usuário programaticamente
- CI/CD: Setup de usuário em ambientes automatizados
- Multi-repo: Configurar usuários diferentes por repositório
Como funciona internamente?
Quando o GIT_USER_SETUP é executado, o sistema:
- Recebe credenciais: Nome e email do usuário
- Substitui variáveis: Aplica variáveis do contexto
- Configura nome: Executa
git config user.name - Configura email: Executa
git config user.email - Retorna confirmação: Confirma configuração
Código interno (git.executor.ts:183-191):
private async userSetup(repoPath: string, userName: string, userEmail: string, context: ExecutionContext): Promise<any> {
const replacedName = this.replaceVariables(userName, context.variables);
const replacedEmail = this.replaceVariables(userEmail, context.variables);
await this.execGit(repoPath, `config user.name "${replacedName}"`, context);
await this.execGit(repoPath, `config user.email "${replacedEmail}"`, context);
return { userConfigured: true, name: replacedName, email: replacedEmail };
}
Quando você DEVE usar este Node?
Use GIT_USER_SETUP quando precisar de configurar autor de commits:
Casos de uso
- CI/CD setup: "Configurar bot de deploy como autor"
- Automação: "Setup de repositório em novo ambiente"
- Multi-usuário: "Diferentes usuários em diferentes repos"
- Clone inicial: "Configurar usuário após clone"
Quando NÃO usar GIT_USER_SETUP
- Usuário já configurado: Verificar antes de sobrescrever
- Config global suficiente: Use config global para usuário padrão
Parâmetros Detalhados
repositoryPath (string, obrigatório)
O que é: Caminho absoluto para o repositório Git.
Padrão: Nenhum (obrigatório informar)
userName (string, obrigatório)
O que é: Nome completo do usuário Git (será usado como autor dos commits).
Padrão: Nenhum (obrigatório informar)
Exemplo: "João Silva", "Deploy Bot"
Flow completo para testar:
{
"name": "Teste Git User Setup - User Name",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Digite seu nome completo:",
"variable": "user_name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Digite seu email:",
"variable": "user_email"
}
}
},
{
"id": "git_user_1",
"type": "git",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Setup User",
"operation": "userSetup",
"repositoryPath": "/var/www/app",
"userName": "{{user_name}}",
"userEmail": "{{user_email}}",
"responseVariable": "user_config"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Usuário configurado!\nNome: {{user_config.name}}\nEmail: {{user_config.email}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "git_user_1" },
{ "source": "git_user_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite seu nome e email quando solicitado.
userEmail (string, obrigatório)
O que é: Email do usuário Git (será usado nos commits).
Padrão: Nenhum (obrigatório informar)
Exemplo: "joao@example.com", "deploy@company.com"
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "userSetup" |
| repositoryPath | string | Sim | Caminho do repositório local |
| userName | string | Sim | Nome completo do usuário |
| userEmail | string | Sim | Email do usuário |
| responseVariable | string | Não | Variável para armazenar resultado |
Exemplo 1: Setup de Bot de Deploy
Objetivo: Configurar usuário bot para commits automatizados
JSON para Importar
{
"name": "Setup Bot de Deploy",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Aviso",
"parameters": {
"message": "Configurando bot de deploy..."
}
}
},
{
"id": "git_user_1",
"type": "git",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Setup Bot User",
"operation": "userSetup",
"repositoryPath": "/var/www/production",
"userName": "Deploy Bot",
"userEmail": "deploy-bot@company.com",
"responseVariable": "bot_config"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Bot configurado com sucesso!\nCommits serão assinados como: {{bot_config.name}} <{{bot_config.email}}>"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "git_user_1" },
{ "source": "git_user_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Configurando bot de deploy...
Sistema: Bot configurado com sucesso!
Commits serão assinados como: Deploy Bot <deploy-bot@company.com>
Exemplo 2: Setup Pós-Clone
Objetivo: Clonar repositório e configurar usuário
JSON para Importar
{
"name": "Clone e Setup de Usuário",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "git_clone_1",
"type": "git",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Clone Repo",
"operation": "clone",
"repositoryUrl": "https://github.com/empresa/projeto.git",
"targetDirectory": "/var/www/projeto",
"responseVariable": "clone_result"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Clone OK",
"parameters": {
"message": "Repositório clonado. Configurando usuário..."
}
}
},
{
"id": "git_user_1",
"type": "git",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Setup User",
"operation": "userSetup",
"repositoryPath": "/var/www/projeto",
"userName": "CI/CD System",
"userEmail": "cicd@company.com",
"responseVariable": "user_config"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Completo",
"parameters": {
"message": "Setup completo!\nRepositório pronto para uso."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "git_clone_1" },
{ "source": "git_clone_1", "target": "message_1" },
{ "source": "message_1", "target": "git_user_1" },
{ "source": "git_user_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Repositório clonado. Configurando usuário...
Sistema: Setup completo!
Repositório pronto para uso.
Exemplo 3: Setup com Variáveis Dinâmicas
Objetivo: Configurar usuário baseado em variáveis de ambiente
JSON para Importar
{
"name": "Setup Dinâmico de Usuário",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Ambiente",
"parameters": {
"variable": "env",
"value": "production"
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Selecionar User",
"parameters": {
"variable": "env",
"cases": [
{ "value": "production", "output": "prod-bot@company.com" },
{ "value": "staging", "output": "staging-bot@company.com" },
{ "value": "development", "output": "dev-bot@company.com" }
]
},
"outputVariable": "bot_email"
}
},
{
"id": "git_user_1",
"type": "git",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Setup User",
"operation": "userSetup",
"repositoryPath": "/var/www/app",
"userName": "{{env}} Bot",
"userEmail": "{{bot_email}}",
"responseVariable": "user_config"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Usuário {{env}} configurado:\n{{user_config.name}} <{{user_config.email}}>"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "switch_1" },
{ "source": "switch_1", "target": "git_user_1" },
{ "source": "git_user_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Usuário production configurado:
production Bot <prod-bot@company.com>
Resposta do Node
{
"userConfigured": true,
"name": "Deploy Bot",
"email": "deploy-bot@company.com"
}
Boas Práticas
✅ SIM: - Configure usuário após clone de repositório - Use emails corporativos válidos - Configure bots com identificação clara - Use variáveis para ambientes diferentes - Valide configuração após setup
❌ NÃO: - Não use emails pessoais em bots corporativos - Não sobrescreva config sem verificar - Não use informações falsas ou genéricas - Não esqueça de configurar em novos repos
Dicas
💡 Dica 1: Use após GIT_CLONE para setup completo
💡 Dica 2: Bots devem ter identificação clara no nome
💡 Dica 3: Email precisa ser válido para notificações Git
💡 Dica 4: Config é local ao repositório (não global)
💡 Dica 5: Combine com GIT_ADD_CONFIG para setup avançado
Próximo Node
→ GIT_CLONE - Clonar repositório antes de configurar usuário → GIT_COMMIT - Criar commits após configurar usuário → GIT_ADD_CONFIG - Adicionar outras configurações