Pular para conteúdo

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:

  1. Identificação: Definir autor dos commits
  2. Automação: Configurar usuário programaticamente
  3. CI/CD: Setup de usuário em ambientes automatizados
  4. Multi-repo: Configurar usuários diferentes por repositório

Como funciona internamente?

Quando o GIT_USER_SETUP é executado, o sistema:

  1. Recebe credenciais: Nome e email do usuário
  2. Substitui variáveis: Aplica variáveis do contexto
  3. Configura nome: Executa git config user.name
  4. Configura email: Executa git config user.email
  5. 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

  1. CI/CD setup: "Configurar bot de deploy como autor"
  2. Automação: "Setup de repositório em novo ambiente"
  3. Multi-usuário: "Diferentes usuários em diferentes repos"
  4. 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