# Registrando um App do GitHub a partir de um manifesto

Um GitHub App manifesto é uma maneira de compartilhar um registro pré-configurado GitHub App com outros usuários. O fluxo de manifesto permite que alguém registre rapidamente um GitHub App.

## Sobre os manifestos de GitHub App

> \[!NOTE]               Os manifestos de GitHub App não estão disponíveis para GitHub Apps.

Quando se registra um GitHub App de um manifesto, é necessário apenas seguir uma URL e nomear o aplicativo. O manifesto inclui as permissões, eventos e URL do webhook necessários para registrar o aplicativo automaticamente. O fluxo de manifesto cria o registro do GitHub App e gera o segredo do webhook do aplicativo, a chave privada (arquivo PEM), o segredo do cliente e a ID do GitHub App. A pessoa que cria o GitHub App registro do manifesto será proprietária do GitHub App registro e poderá optar por editar as configurações do registro, excluí-lo ou transferi-lo para outra pessoa.GitHub

Você pode usar o [Probot](https://probot.github.io/) para começar a usar GitHub App Manifestos ou ver uma implementação de exemplo. Consulte [Como usar o Probot para implementar o fluxo do GitHub App Manifesto](#using-probot-to-implement-the-github-app-manifest-flow) para saber mais.

Aqui estão alguns cenários em que você pode usar GitHub App Manifestos para registrar aplicativos pré-configurados:

* Ajude novos membros da equipe a familiarizar-se rapidamente ao desenvolver os GitHub Apps.
* Permitir que outras pessoas estendam um GitHub App usando as APIs do GitHub sem exigir que elas configurem um aplicativo.
* Crie GitHub App designs de referência para compartilhar com a GitHub comunidade.
* Certifique-se de implantar GitHub Apps em ambientes de desenvolvimento e produção usando a mesma configuração.
* Acompanhe as revisões de uma configuração do GitHub App.

## Implementar o fluxo do manifesto de GitHub App

O fluxo do manifesto de GitHub App usa um processo de handshake semelhante ao [fluxo OAuth](/pt/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps). O fluxo usa um manifesto para [registrar um GitHub App](/pt/enterprise-server@3.22/apps/creating-github-apps/registering-a-github-app/registering-a-github-app) e recebe um `code` temporário usado para recuperar a chave privada, o segredo do webhook e a ID do aplicativo.

> \[!NOTE] Você deve concluir todas as três etapas no fluxo do manifesto de GitHub App dentro de uma hora.

Siga estas etapas para implementar o fluxo de GitHub App Manifest:

1. Você redireciona as pessoas para GitHub para registrar um novo GitHub App.
2. GitHub redireciona as pessoas de volta ao seu site.
3. Você troca o código temporário para recuperar a configuração do aplicativo.

### 1. Você redireciona as pessoas para GitHub para registrar um novo GitHub App

Para redirecionar as pessoas para registrar um novo GitHub App, [forneça um link](#examples) para que elas cliquem e enviem uma `POST` solicitação para `https://github.com/settings/apps/new` uma conta pessoal ou `https://github.com/organizations/ORGANIZATION/settings/apps/new` para uma conta da organização, substituindo `ORGANIZATION` pelo nome da conta da organização em que o aplicativo será registrado.

Você deve incluir os [GitHub App parâmetros de Manifesto](#github-app-manifest-parameters) como uma cadeia de caracteres codificada em JSON em um parâmetro chamado `manifest`. Você também pode incluir um `state`[parâmetro](#parameters) para segurança adicional.

A pessoa que registrar o aplicativo será redirecionada para uma GitHub página com um campo de entrada em que poderá editar o nome do aplicativo incluído no `manifest` parâmetro. Se você não incluir um `name` no `manifest`, eles poderão definir o próprio nome para o aplicativo neste campo.

#### GitHub App Parâmetros de manifesto

| Nome                                             | Tipo               | Descrição                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `name`                                           | `string`           | O nome do GitHub App.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `url`                                            | `string`           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **Obrigatório.** A página inicial do GitHub App. |                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `hook_attributes`                                | `object`           | A configuração do webhook do GitHub App.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `redirect_url`                                   | `string`           | A URL completa para a qual redirecionar após um usuário iniciar o registro de um GitHub App direto de um manifesto.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `callback_urls`                                  | `array of strings` | Uma URL completa para a qual redirecionar após alguém autorizar uma instalação. Você pode fornecer até 10 URLs de retorno de chamada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `setup_url`                                      | `string`           | Uma URL completa para a qual redirecionar os usuários após a instalação GitHub App se for necessária uma configuração adicional.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `description`                                    | `string`           | Uma descrição do GitHub App.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `public`                                         | `boolean`          | Defina `true` quando seu GitHub App estiver disponível para o público ou `false` quando estiver acessível apenas ao proprietário do aplicativo.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `default_events`                                 | `array`            | A lista de [eventos](/pt/enterprise-server@3.22/webhooks/webhook-events-and-payloads) aos quais o GitHub App se inscreve.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `default_permissions`                            | `object`           | O conjunto de permissões necessárias para o GitHub App. O formato do objeto usa o nome da permissão para a chave (por exemplo, `issues`) e o tipo de acesso para o valor (por exemplo, `write`). Para saber mais, confira [Escolhendo permissões para um aplicativo GitHub](/pt/enterprise-server@3.22/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app). Para ver a lista de permissões disponíveis para uso e seus nomes parametrizados, confira [Gerenciar seus tokens de acesso pessoal](/pt/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#account-permissions). |
| `request_oauth_on_install`                       | `boolean`          | Defina como `true` para solicitar ao usuário que autorize o GitHub App, depois que o GitHub App for instalado.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `setup_on_update`                                | `boolean`          | Defina `true` para redirecionar os usuários para `setup_url` após eles atualizarem sua instalação GitHub App.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

O objeto `hook_attributes` tem as chaves a seguir.

| Nome                                                                              | Tipo      | Descrição                                                                          |
| --------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------- |
| `url`                                                                             | `string`  |                                                                                    |
| **Obrigatório.** A URL do servidor que receberá as requisições de webhook `POST`. |           |                                                                                    |
| `active`                                                                          | `boolean` | Implementar detalhes do evento quando esse hook é acionado. O padrão é verdadeiro. |

#### Parâmetros

| Nome    | Tipo     | Descrição                                                                                                        |
| ------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
| `state` | `string` | Uma string aleatória indescritível. É usado para proteger contra ataques de falsificação de pedidos entre sites. |

#### Exemplos

Este exemplo usa um formulário em uma página da Web com um botão que dispara a solicitação `POST` para uma conta pessoal:

```html
<form action="https://github.com/settings/apps/new?state=abc123" method="post">
 Register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>
```

Este exemplo usa um formulário em uma página da Web com um botão que dispara a solicitação `POST` para uma conta de organização. Substitua `ORGANIZATION` pelo nome da conta de organização em que deseja registrar o aplicativo.

```html
<form action="https://github.com/organizations/ORGANIZATION/settings/apps/new?state=abc123" method="post">
 register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>
```

### 2. GitHub redireciona as pessoas de volta ao seu site

Quando a pessoa clica em **Criar GitHub App**, GitHub redireciona-se de volta para `redirect_url` com um `code` temporário em um parâmetro de código. Por exemplo:

```
https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679
```

Se você fornecer um parâmetro `state`, também verá esse parâmetro na `redirect_url`. Por exemplo:

```
https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679&state=abc123
```

### 3. Você troca o código temporário para recuperar a configuração do aplicativo

Para concluir o handshake, envie o `code` temporário em uma solicitação `POST` para [Criar um GitHub App direto de um ponto de extremidade](/pt/enterprise-server@3.22/rest/apps/apps#create-a-github-app-from-a-manifest) de manifesto. A resposta incluirá a `id` (GitHub App ID), `pem` (chave privada) e `webhook_secret`.
GitHub cria automaticamente um segredo de webhook para o aplicativo. Você pode armazenar esses valores em variáveis de ambiente no servidor do aplicativo. Por exemplo, se o seu aplicativo usar o [dotenv](https://github.com/bkeepers/dotenv) para armazenar variáveis de ambiente, você armazenará as variáveis no arquivo `.env` do aplicativo.

Você deve concluir esta etapa do fluxo do manifesto de GitHub App dentro de uma hora.

> \[!NOTE]
> Esse ponto de extremidade tem uma taxa limitada. Confira [Limites de taxa](/pt/enterprise-server@3.22/rest/rate-limit/rate-limit) para saber como obter o status do limite de taxa atual.

```
POST /app-manifests/{code}/conversions
```

Para obter mais informações sobre a resposta do ponto de extremidade, consulte [Criar um GitHub App direto de um](/pt/enterprise-server@3.22/rest/apps/apps#create-a-github-app-from-a-manifest) de manifesto.

Quando a etapa final do fluxo de manifesto for concluída, a pessoa que estiver registrando o aplicativo direto do fluxo será proprietária de um GitHub App que pode instalar em qualquer conta. Eles podem optar por estender o aplicativo usando as GitHub APIs, transferir a propriedade para outra pessoa ou excluí-lo a qualquer momento.

## Usando o Probot para implementar o fluxo do Manifesto GitHub App

[O Probot](https://probot.github.io/) é uma estrutura criada com [Node.js](https://nodejs.org/) que executa muitas das tarefas necessárias para todos GitHub Apps, como validar webhooks e executar a autenticação. O Probot implementa o fluxo do manifesto de [GitHub App](#implementing-the-github-app-manifest-flow), facilitando a criação e o compartilhamento dos designs de referência do GitHub App com a comunidade GitHub.

Para criar um aplicativo Probot que você pode compartilhar, siga estas etapas:

1. [Gerar um novo GitHub App](https://probot.github.io/docs/development/#generating-a-new-app).
2. Abra o projeto que você criou e personalize as configurações no arquivo `app.yml`. O Probot usa as configurações em `app.yml` como os [GitHub App parâmetros ](#github-app-manifest-parameters) do manifesto.
3. Adicione o código personalizado do seu aplicativo.
4. [Execute o localmente ou hospede-o GitHub App](https://probot.github.io/docs/development/#running-the-app-locally) em qualquer lugar que você gostaria. Ao navegar até a URL do aplicativo hospedado, você encontrará uma página da Web com um botão **Registrar GitHub App** que as pessoas podem clicar para registrar um aplicativo pré-configurado.

Usando o [dotenv](https://github.com/bkeepers/dotenv), o Probot cria um arquivo `.env` e define as variáveis de ambiente `APP_ID`, `PRIVATE_KEY` e `WEBHOOK_SECRET` com os valores [recuperados da configuração do aplicativo](#3-you-exchange-the-temporary-code-to-retrieve-the-app-configuration).