GitHub Actions
对于组织拥有的存储库中的工作流,请授予内置令牌权限,以发出Copilot请求:
permissions:
contents: read
copilot-requests: write
jobs:
copilot:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: your-application
env:
GITHUB_TOKEN: $
必须启用组织允许使用向组织策略计费的 Copilot CLI。 此方法不需要GitHub应用或存储的身份验证机密。 有关详细信息,请参阅 在 GitHub Actions 中使用 GITHUB_TOKEN 运行 Copilot CLI。
其他服务和 CI 系统
对于GitHub Actions之外的服务:
-
创建GitHub应用,其中Copilot请求存储库权限设置为 “读取和写入”。
-
将其安装在应计费的组织上。 当前Copilot权限检查需要所有存储库访问权限。
-
具有存储库 ID 和Copilot权限的 为 GitHub 应用生成安装访问令牌:
{ "repository_ids": [123456789], "permissions": { "copilot_requests": "write" } } -
将生成的
ghs_令牌作为COPILOT_GITHUB_TOKEN.
必须为来自GitHub应用安装Copilot请求启用组织。 安装令牌在一小时后过期。
警告
不要通过 SDK 的 gitHubToken或 github_token等效选项传递安装令牌。 此选项适用于用户令牌。 安装令牌必须使用运行时环境身份验证路径。
配置运行时
以下示例假定 minted 令牌位于 INSTALLATION_TOKEN其中。 它们仅将其传递给子运行时,并禁用对存储的用户凭据的回退。
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.
}
对于进程内 FFI,在加载运行时之前在主机环境中设置 COPILOT_GITHUB_TOKEN ;不支持按客户端环境选项。 对于现有运行时 URI,请在该运行时进程中设置它。
刷新令牌
在当前令牌过期之前,先挖掘新的安装令牌。 对于子进程,请使用新环境重启 SDK 客户端。 对于进程内或现有运行时,请使用新令牌重启主机运行时。
Billing
使用情况由拥有GitHub应用安装的帐户进行特性化和计费。 使用组织安装进行组织计费;用户帐户安装属性将使用该用户的使用情况。
Troubleshooting
| 症状 | 检查 |
|---|---|
401 Unauthorized | 确认组织是否支持Copilot GitHub应用安装身份验证。 |
403 Resource not accessible by integration 或提及用户信息的错误 | 确认安装令牌在内 COPILOT_GITHUB_,而不是 SDK 的显式令牌选项。 |
403 Forbidden从 Copilot API | 确认令牌请求包含 repository_ids 和 copilot_requests: write。 |
403 Forbidden 包含所需令牌请求 | 确认应用安装具有 “所有存储库 ”访问权限,然后挖掘一个新令牌。 |
| 请求的模型不可用 | 确认组织的Copilot策略允许模型和捆绑运行时支持它。 |
| 错误的帐户计费 | 确认安装属于预期组织。 |
延伸阅读
- Authentication:其他身份验证方法和优先级
- 为 GitHub 应用生成安装访问令牌:GitHub创建应用令牌