我在通过 GitHub API 执行简单的挑选时遇到问题。这一定是可能的,但我不清楚如何......
我正在用 C# 为 Slack 开发一个聊天机器人,以帮助管理 Kubernetes 环境和 GitHub 版本,并希望通过修补程序功能来扩展它。给定一个环境,它应该创建一个与当前版本匹配的分支,并在其中挑选一个或多个提交 SHA,如请求作者通过 Slack 提供的那样。
所有管道均已就位。使用POST /repos/:owner/:repo/git/refs我可以创建与特定版本匹配的分支。这意味着我已经有了branch name,commit SHA并tree SHA为下一步做好了准备;挑选一个或多个提交 SHA 到此分支中。使用POST /repos/:owner/:repo/git/commits我能够创建一个提交,但我不确定要使用哪棵树和/或父级 - 这可能会导致我在调用时遇到问题POST /repos/:owner/:repo/merges,因为它返回我状态 409(合并冲突),当然,在本地,它才不是。
我似乎找到的唯一真实的例子是https://github.com/tibdex/github-cherry-pick。然而,它与我的场景不太相符,我很难理解 Git 的内部工作原理。
我的场景(从最新到最旧);
* commit E (current state of `master`)
* commit D
* commit C (deployed to environment)
* commit B
* commit A
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想将提交 E 挑选到提交 C 的新分支中,创建一个可以发布的集合(A、B、C、E)。
* commit E (current …Run Code Online (Sandbox Code Playgroud) 使用 GitHub Api 时,您可以提供作者和提交者信息,例如当您创建PUT文件时content。
我希望能够使用 GitHub 应用程序,以便committer人们了解提交是使用第三方工具完成的,并且作者信息保留为经过身份验证的用户。
目前,我使用应用程序名称作为应用程序域的电子邮件地址name。committer但这根本不会将提交与应用程序绑定在一起(例如:我必须使用该电子邮件创建一个机器人帐户才能使其显示任何类型的个人资料等,但这不会真正与我的 Github 应用程序绑定)。
这样做的正确方法是什么?或者我不应该尝试使用应用程序作为,committer而只使用经过身份验证的用户作为committer?
我正在开发 github 的扩展。我需要搜索一个提交。我正在使用 github api,首先我尝试获取 api 上的所有提交,但每页的最大值是 100。其次我尝试了,https://api.github.com/repos/{owner}/{repo}/commits?q={commit_message}但它不起作用。那么我怎样才能在 github api 中找到我正在寻找的提交呢?
我正在通过 GitHub 操作创建自动 PR,因此每当分支上发生新推送时dev。自动创建 PR 从dev到master
我想更改:如果 PR 已存在 ( master<- dev),则无需运行此操作,那么如何检查 PR 是否已存在?
GitHub 行动
name: Pull Request Action
on:
push:
branches: ['dev']
jobs:
create-pull-request:
runs-on: ubuntu-latest
steps:
- name: Create Pull Request
uses: actions/github-script@v6
with:
script: |
const { repo, owner } = context.repo;
const result = await github.rest.pulls.create({
title: 'Master Sync : Auto Generated PR',
owner,
repo,
head: '${{ github.ref_name }}',
base: 'master',
body: [
'This PR is auto-generated …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用找到的create hook api创建一个钩子
http://developer.github.com/v3/repos/hooks/#create-a-hook
但是当我试图发帖时,我得到301,所以我确信我做错了...
几个问题......
1)如果github是私有的,我怎么知道我可以为该repo创建一个钩子?我确信我需要通过POST进行身份验证,但是如何进行身份验证?
2)以下curl语句是如何创建钩子的有效示例吗?
curl -v -H "Content-Type: application/json" -X POST -d "{ "name": "cia",
"active": true, "events": [ "push" ], "config": {
"url": "http://requestb.in/######", "content_type": "json" } }"
http://github.com/repos/#####/#####/hooks
Run Code Online (Sandbox Code Playgroud)
为了安全起见,我用#####替换了某些元素......
3)如果上述内容不正确,请问我是否有一个有效示例的片段为名为"cia"的webhook创建一个钩子?
当试图从github apir获取数据时,我得到了403.我想使用基本身份验证(用户名和密码).
我也尝试过没有凭据缓存并直接设置凭据,结果相同.
我究竟做错了什么?
string url = "https://api.github.com/search/users?q=gentlehag"
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Proxy = null;
request.PreAuthenticate = true;
var crds = new NetworkCredential(Username, Password);
CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(new Uri(url), "Basic", crds);
request.Credentials = myCredentialCache;
request.KeepAlive = false;
request.Accept = "application/vnd.github.v" + Version + "+json";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试在这样的hider中设置基本身份验证
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(Username + ":" + …Run Code Online (Sandbox Code Playgroud) 有时,当我从GitHub API获得单个pull请求时,响应包含JSON响应中的以下属性:
"merged": false,
"mergeable": null,
"mergeable_state": "unknown",
"merged_by": null,
Run Code Online (Sandbox Code Playgroud)
这是为什么?如何确定此拉取请求是否可合并?在获得不同的响应之前,我是否真的需要重新加载拉取请求?
这将返回我想要的结果
https://api.github.com/search/repositories?q=myRepoName%20user:myUserName
这不会
https://api.github.com/search/repositories?q=myRepoName%20user:myUser
如何使用Github API搜索已知的repo名称,但只能部分登录?
如何找到我的GitHub组织ID?
理想情况下,我可以通过脚本或命令来解析其输出。
我正在使用GitHub API从GitHub下载文件.我已经能够成功进行身份验证以及从github获取响应,并查看表示文件内容的base64编码字符串.
不幸的是,当解码base64字符串时,我得到一个不寻常的错误(字符串长度不是4的倍数).
HTTP请求如下所示:
GET /repos/:owner/:repo/contents/:path
Run Code Online (Sandbox Code Playgroud)
(部分)响应如下所示:
{
"name":....,
"download_url":...",
"type":"file",
"content":"ewogICAgInN3YWdnZXIiOiAiM...
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是字符串的长度是15263字节,我在解码字符串时遇到错误(字符串长度不是4的倍数).我正在使用node.js和'base64-js'npm模块来解码字符串.执行解码的代码如下所示:
var base64 = require('base64-js');
var contents = base64.toByteArray(fileContent);
Run Code Online (Sandbox Code Playgroud)
解码会导致异常:
Error: Invalid string. Length must be a multiple of 4
at placeHoldersCount (.../node_modules/base64-js/index.js:23:11)
at Object.toByteArray (...node_modules/base64-js/index.js:42:18)
:
:
Run Code Online (Sandbox Code Playgroud)
我认为GitHub API正在向我发送正确的数据,所以我认为这不是问题.
我是不正确地执行解码还是我忽略了另一个问题?
任何帮助表示赞赏.
github-api ×10
github ×6
base64 ×1
fetch ×1
git ×1
github-app ×1
javascript ×1
node-github ×1
pull-request ×1