Как загрузить файлы с Octokit на Github, подписанные проверенным ярлыком?

Используя Octokit REST API, у меня работает аутентификация, и я пытаюсь загрузить файл с помощью createOrUpdateFile, который также работает. В настоящее время мои коммиты были сделаны приложением GitHub App.

Но при просмотре всех коммитов этого приложения оно просто отображает следующее сообщение:

Я хочу, чтобы мои коммиты выполнялись через пользователя, которого я сделал MerlinPanelBot. Таким образом, я могу просматривать все коммиты, сделанные этим пользователем, и иметь более подробную аналитику по профилю пользователя (MerlinPanelBot) и для понимания каждого проекта, который коммитирует код.

Есть ли простой способ использовать моего нового пользователя MerlinPanelBot в моем коде И подтвердили коммиты?

Возможно, мне нужно взглянуть на использование oAuth и / или получение токена личного доступа для запуска непосредственно от имени пользователя? Надеюсь, это простое решение.


Прогресс на данный момент:

  1. Если коммиттер не предоставляется, он фиксирует подтвержденный ключ GPG с именем приложения Github. merlin-panel-deploy-bot. Это хорошо, но я хочу, чтобы он запускался через нового пользователя, которого я создал, по имениMerlinPanelBot.

  2. Я установил коммиттера на свой аккаунт LukeXFчтобы проверить, что это работает. Да, но на моем коммите нет проверенной метки GPG.

committer: {
    name: "LukeXF",
    email: '<my email (redacted)>'
},
  1. Я попытался изменить адрес электронной почты в коммиттере на MerlinPanelBot (пользователь), который, когда я запустил код, вызвал несанкционированную ошибку.

  2. Добавление файла 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
    })
}

0 ответов

Другие вопросы по тегам