Github代码段 [已弃用]
Atlas Device Sync 、 Atlas Edge Server 、 Data API和HTTPS endpoints均已弃用。 有关详细信息,请参阅弃用页面。
重要
第三方服务和推送通知弃用
App Services 中的第三方服务和推送通知已弃用,转而创建在函数中使用外部依赖项的 HTTP 端点。
Webhook 已重命名为 HTTPS 端点,行为没有发生变化。您应该迁移现有的 Webhook。
现有服务将继续运行到 9 月30 ,2025 。
由于第三方服务和推送通知现已弃用,因此,默认将其从 App Services 用户界面中删除。如果您需要管理现有的第三方服务或推送通知,可以执行以下操作以将配置重新添加到用户界面中:
在左侧导航栏中的 Manage(管理)部分下面,单击 App Settings(应用设置)。
启用 Temporarily Re-Enable 3rd Party Services(暂时重新启用第三方服务)旁边的切换开关,然后保存更改。
Overview
本页封面上的代码片段演示了如何通过GitHub 服务响应 GitHub 存储库中的事件。 所有代码片段都需要一个 GitHub 服务接口,其中包含允许在代码片段中使用服务操作的规则。
如果您的应用程序没有 GitHub Service 接口,请在使用这些代码段之前创建一个接口。
记录 MongoDB 中的所有提交
此 传入Github Webhook 函数根据MongoDB PushEvent 记录推送到 中存储库的所有提交 来自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) } };
自动对新的拉取请求发表评论
此Github传入 Webhook函数会为新的拉取请求添加注释,以感谢用户的提交。 Webhook 接受 PullRequestEvent 来自Github 的有效负载,并使用HTTP Service 客户端 创建评论 通过GithubAPI 。
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); } };