Menu Docs

Página inicial do DocsServiços Atlas App

Snippets do GitHub [Obsoleto]

Nesta página

  • Visão geral
  • Registrar todos os commits no MongoDB
  • Comentar automaticamente em novas solicitações pull

Importante

Suspensão de serviços de terceiros e notificações push

Os serviços de terceiros e as notificações por push no App Services foram preteridos em favor da criação de pontos de extremidade HTTP que usam dependências externas em funções.

Webhooks foram renomeados e agora são chamados de pontos de conexão HTTPS sem nenhuma alteração em seu comportamento. Recomendamos migrar webhooks existentes.

Os serviços existentes continuarão a funcionar até 1 de novembro de 2024.

Como os serviços de terceiros e as notificações por push agora estão obsoletos, eles foram removidos por padrão da UI do App Services. Para gerenciar um serviço de terceiros ou uma notificação por push existente, adicione as configurações de volta à UI fazendo o seguinte:

  • Na navegação à esquerda, na seção Manage, clique em App Settings.

  • Ative a chave de alternância ao lado de Temporarily Re-Enable 3rd Party Services e salve as alterações.

Os trechos de código nesta página demonstram como você pode responder a eventos em um repositório GitHub por meio do Serviço GitHub. Todos os trechos exigem uma interface do Github Service com regras que permitem a ação de serviço usadas no trecho.

Se seu aplicativo não tiver uma interface de serviço do Github, crie uma antes de usar esses trechos.

Essa função de webhook de entrada do GitHub registra todos os commits enviados para um repositório no MongoDB com base em um PushEvent carga útil do GitHub.

exports = async function(pushEvent) {
// Parse the list of commits from the PushEvent payload.
// Also grab the user that pushed the commits and the repo information.
const { commits, pusher, repository } = pushEvent;
// Create a new array of log documents, one for each commit
const commitLogs = commits.map(commit => {
return {
commit: commit,
pushed_by: pusher,
repo: {
name: repository.name,
url: repository.url
}
}
})
// Get a client for the `GitHubRepo.logs` collection in MongoDB
const mongodb = context.services.get("mongodb-atlas");
const logs = mongodb.db("GitHubRepo").collection("commit-logs");
// Insert the log documents in MongoDB
try {
const insertResult = await logs.insertMany(commitLogs)
console.log(insertResult.insertedIds);
} catch(err) {
console.error(err)
}
};

Esta função de webhook de entrada do GitHub adiciona um comentário às novas solicitações pull que agradece aos usuários pelo envio. O webhook aceita um pullRequestEvent carga útil do GitHub e usa um cliente de serviço HTTP para criar um comentário por meio da API do GitHub.

exports = async function(pullRequest) {
// Get information about the PR from the PullRequestEvent
const { action, repository, pull_request: pr } = pullRequest;
// Only run if this is a new PR
if (action !== "opened") { return }
// Construct the GitHub API URL for this PR's Comments
const pr_comments_url = {
scheme: "https",
host: "api.github.com",
path: `/repos/${repository.owner.login}/${repository.name}/issues/${pr.number.$numberInt}/comments`,
};
// Specify GitHub API Basic Authentication Fields and Headers
const github_basic_auth = {
username: context.values.get("github-credentials").username,
password: context.values.get("github-credentials").password,
};
const headers = {
// OPTIONAL: Include this header if your security settings require a 2fa code
"X-GitHub-OTP": ["<2fa Code>"]
};
// Specify the comment text
const body = EJSON.stringify({
body: `Thank you for submitting a pull request, ${pr.user.login}!`
});
try {
// Get an HTTP service client. The service rules should allow you
// to send POST requests to `https://api.github.com`.
const http = context.services.get("<HTTP Service Name>");
// Send the Request to GitHub
const request = { ...github_basic_auth, ...pr_comments_url, headers, body };
const result = await http.post(request);
// Check for a Successful Result
if (result.statusCode == 201) {
return "Successfully commented on the pull request!";
} else {
throw new Error(`Received a bad result status from GitHub: ${result.body.text()}`);
}
} catch (err) {
console.error("Something went wrong while posting the comment.", err);
}
};
← Trechos Amazon Web Services S3 [Obsoleto]