GitHub Actions
Para fluxos de trabalho em um repositório de propriedade da organização, conceda a permissão de token interno para fazer solicitações de Copilot:
permissions:
contents: read
copilot-requests: write
jobs:
copilot:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: your-application
env:
GITHUB_TOKEN: $
A CLI de permitir o uso de Copilot da organização cobrada na política da organização deve ser habilitada. Essa abordagem não precisa de GitHub aplicativo ou segredo de autenticação armazenado. Para obter detalhes, consulte Usando Copilot CLI em GitHub Actions com GITHUB_TOKEN.
Outros serviços e sistemas de CI
Para serviços fora GitHub Actions:
-
Crie um aplicativo GitHub com a permissão do repositório
Copilot Solicitações definida comoLeitura & gravação . -
Instale-o na organização que deve ser cobrada. A verificação de permissão de Copilot atual requer acesso a todos os repositórios.
-
Gerando um token de acesso de instalação para um aplicativo GitHub com uma ID do repositório e a permissão Copilot:
{ "repository_ids": [123456789], "permissions": { "copilot_requests": "write" } } -
Passe o token resultante
ghs_para o runtime comoCOPILOT_GITHUB_TOKEN.
A organização deve ser habilitada para Copilot solicitações de instalações do GitHub App. Os tokens de instalação expiram após uma hora.
Aviso
Não passe um token de instalação por meio da opção do SDK gitHubToken``github_tokenou equivalente. Essa opção é para tokens de usuário. Os tokens de instalação devem usar o caminho de autenticação de ambiente de runtime.
Configurar o runtime
Os exemplos a seguir pressupõem que o token cunhado está em INSTALLATION_TOKEN. Eles o transmitem apenas para o runtime filho e desabilitam o fallback para as credenciais de usuário armazenadas.
import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";
const token = process.env.INSTALLATION_TOKEN;
if (!token) throw new Error("INSTALLATION_TOKEN is required");
const client = new CopilotClient({
connection: RuntimeConnection.forStdio(),
env: {
...process.env,
COPILOT_GITHUB_TOKEN: token,
},
useLoggedInUser: false,
});
import os
from copilot import CopilotClient, RuntimeConnection
client = CopilotClient(
connection=RuntimeConnection.for_stdio(),
env={**os.environ, "COPILOT_GITHUB_TOKEN": os.environ["INSTALLATION_TOKEN"]},
use_logged_in_user=False,
)
package main
import (
"log"
"os"
copilot "github.com/github/copilot-sdk/go"
)
func main() {
token, ok := os.LookupEnv("INSTALLATION_TOKEN")
if !ok {
log.Fatal("INSTALLATION_TOKEN is required")
}
client := copilot.NewClient(&copilot.ClientOptions{
Connection: copilot.StdioConnection{},
Env: append(os.Environ(), "COPILOT_GITHUB_TOKEN="+token),
UseLoggedInUser: copilot.Bool(false),
})
_ = client
}
use github_copilot_sdk::{ClientOptions, Transport};
fn main() {
let token = std::env::var("INSTALLATION_TOKEN").expect("INSTALLATION_TOKEN is required");
let options = ClientOptions::new()
.with_transport(Transport::Stdio)
.with_env([("COPILOT_GITHUB_TOKEN", token)])
.with_use_logged_in_user(false);
drop(options);
}
using System.Collections;
using GitHub.Copilot;
var token = Environment.GetEnvironmentVariable("INSTALLATION_TOKEN")
?? throw new InvalidOperationException("INSTALLATION_TOKEN is required");
var environment = Environment.GetEnvironmentVariables()
.Cast<DictionaryEntry>()
.ToDictionary(entry => (string)entry.Key, entry => entry.Value?.ToString() ?? "");
environment["COPILOT_GITHUB_TOKEN"] = token;
await using var client = new CopilotClient(new CopilotClientOptions
{
Connection = RuntimeConnection.ForStdio(),
Environment = environment,
UseLoggedInUser = false,
});
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.CopilotClientOptions;
import java.util.HashMap;
import java.util.Objects;
var environment = new HashMap<>(System.getenv());
var token = Objects.requireNonNull(
System.getenv("INSTALLATION_TOKEN"), "INSTALLATION_TOKEN is required");
environment.put("COPILOT_GITHUB_TOKEN", token);
try (var client = new CopilotClient(new CopilotClientOptions()
.setEnvironment(environment)
.setUseLoggedInUser(false))) {
// Use the client.
}
Para o FFI em processo, defina COPILOT_GITHUB_TOKEN no ambiente do host antes de carregar o runtime; não há suporte para opções de ambiente por cliente. Para um URI de runtime existente, defina-o nesse processo de runtime.
Tokens de atualização
Mint um novo token de instalação antes do token atual expirar. Para um processo filho, reinicie o cliente do SDK com o novo ambiente. Para um runtime em processo ou existente, reinicie o runtime do host com o novo token.
Billing
O uso é atribuído e cobrado na conta que possui a instalação do aplicativo GitHub. Usar uma instalação da organização para cobrança da organização; um uso de atributos de instalação de conta de usuário para esse usuário.
Resolução de problemas
| Sintoma | Verificação |
|---|---|
401 Unauthorized | Confirme se a organização dá suporte à autenticação de instalação do aplicativo GitHub para Copilot. |
403 Resource not accessible by integration ou um erro ao mencionar informações do usuário | Confirme se o token de instalação está dentro COPILOT_GITHUB_, não a opção de token explícito do SDK. |
403 Forbiddenda API de Copilot | Confirme se a solicitação de token contém repository_ids e copilot_requests: write. |
403 Forbidden com a solicitação de token necessária | Confirme se a instalação do aplicativo tem acesso a Todos os repositórios e, em seguida, crie um novo token. |
| O modelo solicitado não está disponível | Confirme se a política de Copilot da organização permite o modelo e o runtime empacotado dá suporte a ele. |
| Conta incorreta cobrada | Confirme se a instalação pertence à organização pretendida. |
Leitura adicional
- Autenticação: outros métodos de autenticação e prioridade
- Gerando um token de acesso de instalação para um aplicativo GitHub: criação de token de aplicativo GitHub