Как загрузить файлы с Octokit на Github, подписанные проверенным ярлыком?
Используя Octokit REST API, у меня работает аутентификация, и я пытаюсь загрузить файл с помощью createOrUpdateFile, который также работает. В настоящее время мои коммиты были сделаны приложением GitHub App.
Но при просмотре всех коммитов этого приложения оно просто отображает следующее сообщение:
Я хочу, чтобы мои коммиты выполнялись через пользователя, которого я сделал MerlinPanelBot
. Таким образом, я могу просматривать все коммиты, сделанные этим пользователем, и иметь более подробную аналитику по профилю пользователя (MerlinPanelBot) и для понимания каждого проекта, который коммитирует код.
Есть ли простой способ использовать моего нового пользователя MerlinPanelBot
в моем коде И подтвердили коммиты?
Возможно, мне нужно взглянуть на использование oAuth и / или получение токена личного доступа для запуска непосредственно от имени пользователя? Надеюсь, это простое решение.
Прогресс на данный момент:
Если коммиттер не предоставляется, он фиксирует подтвержденный ключ GPG с именем приложения Github.
merlin-panel-deploy-bot
. Это хорошо, но я хочу, чтобы он запускался через нового пользователя, которого я создал, по имениMerlinPanelBot
.Я установил коммиттера на свой аккаунт
LukeXF
чтобы проверить, что это работает. Да, но на моем коммите нет проверенной метки GPG.
committer: {
name: "LukeXF",
email: '<my email (redacted)>'
},
Я попытался изменить адрес электронной почты в коммиттере на MerlinPanelBot (пользователь), который, когда я запустил код, вызвал несанкционированную ошибку.
Добавление файла PEM для MerlinPanelBot на страницу приложения GitHub для пользователя MerlinPanelBot (как показано ниже) позволяет запускать мой код, но по-прежнему нет проверенной метки GPG.
Код
Несмотря на то, что на аутентификацию, чтение, буферизацию и отправку файлов при работе Github/Octokit потребовалось много времени, мой код на самом деле довольно прост, а именно:
Файл маршрута:
const installationAccessToken = await GithubClass.getInstallationAccessToken('repoExample');
const octokit = new Octokit({
auth: `token ${installationAccessToken}`
});
const fromGithub = await GithubClass.sendFile(octokit, 'repoExample', 'MERLIN.md', req.body.lineToAdd, req.userId);
return res.send(fromGithub);
Встроенный octokit auth:
// as explained above I have two PEM files for my two account used in testing.
const pemFile = path.resolve(__dirname, '../app.2020-02-02.private-key.pem');
async getInstallationAccessToken(repo) {
const privateKey = fs.readFileSync(pemFile);
const app = new App({id: '52777', privateKey});
const jwt = app.getSignedJsonWebToken();
// Example of using authenticated app to GET an individual installation
// https://developer.github.com/v3/apps/#find-repository-installation
const {data} = await request("GET /repos/:owner/:repo/installation", {
owner: "element-softworks",
repo,
headers: {
authorization: `Bearer ${jwt}`,
accept: "application/vnd.github.machine-man-preview+json"
}
});
// contains the installation id necessary to authenticate as an installation
const installationId = data.id;
// return installationId;
return await app.getInstallationAccessToken({
installationId,
});
},
Функция для обновления файла:
async sendFile(octokit, repo, path, lineToAdd, userId) {
const repos = await octokit.repos.getContents({
owner: 'element-softworks',
repo,
path
});
const {sha} = repos.data;
let file = Buffer.from(repos.data.content, 'base64').toString();
file += `
${lineToAdd} by ${userId}`;
return await octokit.repos.createOrUpdateFile({
owner: 'element-softworks',
repo,
path,
message: `Updating product ${lineToAdd} by ${userId}`,
content: Buffer.from(file).toString('base64'),
committer: {
name: "Luke",
email: '<my email (redacted)>'
},
sha
})
}