Esta versão do GitHub Enterprise foi descontinuada em 2021-09-23. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, melhorar a segurança e novos recursos, upgrade to the latest version of GitHub Enterprise. Para ajuda com a atualização, contact GitHub Enterprise support.

Usar a API do GitHub no seu aplicativo

Aprenda como configurar seu aplicativo para ouvir eventos e usar a biblioteca do Octokit para realizar operações da API REST.

Introdução

Este guia irá ajudá-lo a criar um aplicativo GitHub e executá-lo em um servidor. O aplicativo que você criar adicionará uma etiqueta a todos os novos problemas abertos no repositório onde o aplicativo está instalado.

Este projeto orientará você no seguinte:

  • Programar seu aplicativo para ouvir eventos
  • Usar a biblioteca do Octokit.rb para realizar operações da API REST

Note: Esta guia demonstra o processo de desenvolvimento de aplicativos usando a linguagem de programação Ruby. No entanto, existem muitos flavors of Octokit. Se você preferir o JavaScript, você pode usar Probot e Node.js para desenvolver Aplicativos GitHub.

Uma concluídas as etapas, você estará pronto para desenvolver outros tipos de integrações usando o conjunto completo das APIS do GitHub.

Pré-requisitos

Você pode achar útil ter um entendimento básico do seguinte:

Mas é possível acompanhar o processo em qualquer nível de experiência. Nós vamos nos conectar a informações de que você precisa ao longo do caminho!

Antes de começar, você precisará fazer o seguinte:

  1. Clone o repositório Usando a API do GitHub no seu aplicativo.

    $ git clone https://github.com/github-developer/using-the-github-api-in-your-app.git

    Dentro do diretório, você encontrará um arquivo template_server.rb com o código do template você usará neste início rápido e um arquivo server.rb arquivo com o código do projeto concluído.

  2. Siga as etapas no início rápido Configurando o seu ambiente de desenvolvimento para configurar e executar o servidor do aplicativo template_server.rb. Se você já concluiu um início rápido do aplicativo GitHub diferente de Configurar seu ambiente de desenvolvimento, você deverá registrar um novo aplicativo GitHub e começar um novo canal da Smee para usar com este início rápido.

    Este início rápido inclui o mesmo código template_server.rb que o início rápido Configurando o seu ambiente de desenvolvimento. Observação: Conforme você segue com o início rápido Configurando seu ambiente de desenvolvimento, certifique-se de usar os arquivos do projeto incluídos no repositório Usando a API do GitHub no seu aplicativo.

    Consulte a seção Solução de problemas se você tiver problemas na configuração do seu aplicativo GitHub do modelo.

Criar o aplicativo

Agora que você está familiarizado com o código template_server.rb, você irá criar um código que adiciona automaticamente a etiqueta needs-response para todos os problemas abertos no repositório onde o aplicativo está instalado.

O arquivo template_server.rb contém código do modelo do aplicativo que ainda não foi personalizado. Neste arquivo, você verá um espaço reservado para manipular eventos de webhook e outro código para inicializar um cliente Octokit.rb.

Observação: template_server.rb contém muitos comentários de código que complementam este guia e explicam detalhes técnicos adicionais. Você pode considerar útil ler os comentários do arquivo antes de seguir com esta seção, para obter uma visão geral de como o código funciona.

O código final personalizado que você criará no final deste guia é fornecido em server.rb. Mas espere até o final para olhar isso!

Estas são as etapas que você concluirá para criar seu primeiro aplicativo GitHub:

  1. Atualizar as permissões do aplicativo
  2. Adicionar gerenciamento de evento
  3. Criar nova etiqueta
  4. Adicionar gerenciamento de etiqueta

Etapa 1. Atualizar as permissões do aplicativo

Quando você registrou seu aplicativo pela primeira vez, você aceitou as permissões-padrão, o que significa que seu aplicativo não tem acesso à maioria dos recursos. Para este exemplo, seu aplicativo precisará de permissão para ler problemas e escrever etiquetas.

Para atualizar as permissões do aplicativo:

  1. Selecione seu aplicativo na página de configurações do aplicativo e clique em Permissões & Webhooks na barra lateral.
  2. Na seção "Permissões", encontre "Problemas" e selecione Leitura & Gravação no menu "suspenso Acesso" ao lado. A descrição diz que esta opção concede acesso a problemas e etiquetas, o que é exatamente o que você precisa.
  3. Na seção "Assinar eventos", selecione Problemas para assinar o evento.
  4. Clique em Save changes na parte inferior da página.
  5. Se você instalou o aplicativo na sua conta, verifique seu e-mail e siga o link para aceitar novas permissões. Sempre que você alterar as permissões ou webhooks do seu aplicativo, os usuários que instalaram o aplicativo (incluindo você mesmo) precisarão aceitar as novas permissões antes que as alterações tenham efeito. Você também pode aceitar as novas permissões navegando até sua installations page e clicando em "Configure" ao lado de seu aplicativo. Você verá um banner no topo da página, permitindo que você saiba que o aplicativo está solicitando diferentes permissões. Clique em "Details" e clique em "Accept new permissions."

Ótimo! Seu aplicativo tem permissão para realizar as tarefas que você deseja que ele realize. Agora você pode adicionar o código para que ele funcione.

Etapa 2. Adicionar gerenciamento de evento

A primeira coisa que seu aplicativo precisa fazer é ouvir novos problemas que estão abertos. Agora que você se assinou o evento Problemas, você começará a receber o webhook dos problemas, que é acionado quando ocorrem certas ações relacionadas a um problema. Você pode filtrar este tipo de evento para a ação específica que você deseja no seu código.

O GitHub envia cargas do webhook como solicitações de POST. Porque você encaminhou suas cargas de webhook da Smee para http://localhost/event_handler:3000, seu servidor receberá as cargas de solicitação de POST no rota post '/event_handler'.

Um encaminhamento vazio post '/event_handler' já está incluído no arquivo template_server.rb, que você baixou na seção pré-requisitos. O encaminhamento vazio tem a seguinte forma:

  post '/event_handler' do

    # # # # # # # # # # # #
    # ADD YOUR CODE HERE  #
    # # # # # # # # # # # #

    200 # success status
  end

Use essa encaminhamento para gerenciar o evento problemas, adicionando o seguinte código:

case request.env['HTTP_X_GITHUB_EVENT']
when 'issues'
  if @payload['action'] === 'opened'
    handle_issue_opened_event(@payload)
  end
end

Cada evento que o GitHub envia inclui um cabeçalho de solicitação denominado HTTP_X_GITHUB_EVENT, que indica o tipo de evento na solicitação de POST. No momento, você só está interessado nos tipos de evento de problemas. Cada evento tem um campo ação adicional que indica o tipo de ação que acionou os eventos. Para problemas, o campo ação pode ser atribuído, não atribuído, etiquetado, não etiquetado,, abriu, editado, marcado,, desmarcado, fechado ou reaberto.

Para testar seu gerenciador de eventos, tente adicionar um método auxiliar temporário. Você irá atualizar mais tarde ao Adicionar o gerenciamento da etiqueta. Por enquanto, adicione o seguinte código na seção Ajudantes fazem do código. Você pode colocar o novo método acima ou abaixo de qualquer outro método de ajuda. A ordem não importa.

def handle_issue_opened_event(payload)
  logger.debug 'An issue was opened!'
end

Este método recebe uma carga de eventos formatada em JSON como argumento. Isso significa que você pode analisar a carga no método e detalhar os dados específicos de que você precisa. Você pode achar útil inspecionar a carga completa em algum momento: tente alterar logger.debug 'An issue was opened! para logger.debug payload. A estrutura da carga que você vê deve corresponder ao que é mostrado na documentação de evento de webhook dos problemas.

Ótimo! É hora de testar as alterações.

Nota: Você precisará reiniciar o servidor Sinatra para testar as alterações. Digite Ctrl-C para parar o servidor, e então execute ruby template_server.rb novamente. Se você não quiser fazer isso toda vez que mudar o seu código de aplicativo, você pode olhar para reloading.

No seu navegador, acesse o repositório onde você instalou seu aplicativo. Abra um novo problema neste repositório. O problema pode dizer o que você quiser. É apenas para teste.

Ao olhar para o seu Terminal, você deve ver uma mensagem na saída que diz: Um problema foi aberto! Parabéns! Você adicionou um gerenciador de eventos ao seu aplicativo. 💪

Etapa 3. Criar nova etiqueta

Ok, seu aplicativo pode dizer quando os problemas estão abertos. Agora você quer que ele adicione a etiqueta needs-response a qualquer problema recém-aberto em um repositório no qual o aplicativo está instalado.

Antes que a etiqueta possa ser adicionada em qualquer lugar, você precisará criar a etiqueta personalizada no seu repositório. Você só terá de fazer isso uma vez. Para fins deste guia, crie a etiqueta manualmente no GitHub. No seu repositório, clique em Problemas e, em seguida, em Etiquetas e depois clique em Nova etiqueta. Nomeie a nova etiqueta needs-response.

Dica: Não seria ótimo se o aplicativo pudesse criar a etiqueta de forma programática? Ele pode! Adicione o código para fazer isso por conta própria depois de concluir as etapas deste guia.

Agora que o rótulo foi criado, você pode programar seu aplicativo para usar a API REST para adicionar a etiqueta a qualquer problema recém-aberto.

Etapa 4. Adicionar gerenciamento de etiqueta

Parabéns! Você chegou à etapa final: adicionando o gerenciamento de etiquetas ao seu aplicativo. Para esta tarefa, você vai irá usar a biblioteca Octokit.rb do Ruby.

Na documentação do Octokit.rb, encontre a lista de métodos da etiqueta. O método que você vai querer usar será add_labels_to_an_issue.

Ao voltar para template_server.rb, encontre o método definido anteriormente:

def handle_issue_opened_event(payload)
  logger.debug 'An issue was opened!'
end

A documentação add_labels_to_an_issue mostra que você precisará passar três argumentos para este método:

  • Repo (string em formato "proprietário/nome")
  • Número do problema (inteiro)
  • Etiquetas (array)

Você pode analisar a carga para obter o repositório e o número do problema. Como o nome da etiqueta será sempre o mesmo (needs-response) você pode passá-lo como uma string de caracteres codificados no array de etiquetas. Ao juntar essas peças, seu método atualizado pode parecer com isto:

# When an issue is opened, add a label
def handle_issue_opened_event(payload)
  repo = payload['repository']['full_name']
  issue_number = payload['issue']['number']
  @installation_client.add_labels_to_an_issue(repo, issue_number, ['needs-response'])
end

Tente abrir um novo problema no seu repositório de teste e veja o que acontece! Se nada acontecer imediatamente, tente atualizar.

Você não verá muitos coisas no Terminal, mas você deve ver que um usuário bot adicionou uma etiqueta ao problema.

Observação: Quando os aplicativos GitHub realizam ações pela API, como, por exemplo, adicionar etiquetas, o GitHub mostra essas ações como sendo realizadas por contas do bot. Para obter mais informações, consulte "Máquina vs. contas de bot".

Se for assim, parabéns! Você construiu um aplicativo funcional com sucesso! 🎉

Você pode ver o código final no server.rb no repositório do modelo do aplicativo.

Consulte "Próximos passos" para ter ideias sobre aonde você pode ir a partir daqui.

Solução de Problemas

Aqui estão alguns problemas comuns e algumas soluções sugeridas. Se você tiver qualquer outro problema, poderá pedir ajuda ou orientação em Fórum de Suporte e Desenvolvimento de API GitHub.

Conclusão

Depois de analisar este guia, você aprendeu os componentes básicos para o desenvolvimento dos aplicativos GitHub! Para resumir, você:

  • Programou seu aplicativo para ouvir eventos
  • Usou a biblioteca do Octokit.rb para fazer operações da API REST

Próximas etapas

Aqui estão algumas ideias do que você pode fazer a seguir:

  • Reescreva seu aplicativo usando o GraphQL!
  • Reescreva seu aplicativo no Node.js usando o Probot!
  • Faça o aplicativo verificar se a etiqueta needs-response já existe no problema, e, em caso negativo, adicione-a.
  • Quando o bot adiciona a etiqueta com sucesso, é exibida uma mensagem no Terminal. (Dica: compare o ID da etiqueta needs-response com o ID da etiqueta na carga como uma condição para sua mensagem para que a mensagem seja exibida somente quando a etiqueta relevante for adicionada e não qualquer outra etiqueta.)
  • Adicione uma página inicial ao seu aplicativo e conecte um encaminhamento do Sinatra para isso.
  • Mova o seu código para um servidor hospedado (como o Heroku). Não se esqueça de atualizar as configurações do seu aplicativo com o novo domínio.
  • Compartilhe seu projeto ou receba orientações no Fórum de Suporte e Desenvolvimento de API GitHub