如何获取 Xcode Bot "Run Script" 触发器的提交 SHA?更新 Github 上的测试状态
How to get SHA of commit for Xcode Bot "Run Script" Trigger? Updating status of tests on Github
我创建了一个 Xcode 机器人,它会在每次提交时集成。
在 "Run Script" 触发器中,我想用 运行 的测试集成状态更新当前 GitHub 提交。相当标准的 CI 东西。
然后我将 运行 编写如下脚本:
curl -i -X POST -H "Content-type: application/json"
-H 'Authorization: token TOKEN_HERE' -d
'{
"state": "success",
"target_url": "https://example.com/build/status",
"description": "The build succeeded!",
"context": "continuous-integration/jenkins"
}'
https://api.github.com/repos/ORGANIZATION_HERE/REPO_HERE/statuses/SHA_HERE
看来我可以从 Xcode Bot 环境变量中获取 success
或 failure
状态:
Access build folder in Xcode Server CI bot run (env variables?)
但是,未列出当前提交的 SHA。此时我如何才能获得用于集成的提交的 SHA,以用于 GitHub 状态 API 请求?
XCS_OUTPUT_DIR
有一个名为 sourceControl.log
的文件。此文件包含如下日志:
"DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb",
您可以解析该日志以找到 SHA。
也许更实用,CaveJohnson 可以提取 SHA:
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
SHA=`cavejohnson getSha`
或者它可以继续将 GitHub 状态设置为单行:
#!/bin/bash
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
cavejohnson setGithubStatus
值得注意的是,状态不仅仅是成功和失败,我知道的至少有 6 种。您可以在我的 Xcode 6 CI Missing Manual.
中阅读更多关于它们的信息
使用另一个答案中的 cavejohnson
代码,它从某些键和 Xcode 日志中获取散列,我 运行 遇到 the returned hash was an outdated one from the last build 的问题。
我现在改为使用 git rev-parse HEAD
来获取 CI 构建中实际使用的提交的哈希值。我已将此作为对 cavejohnson
.
的修订提交
使用 get_sha()
检索 SHA-1 哈希:
def get_sha():
return get_repo_sha(get_git_directory())
def get_git_directory():
for subdir in os.listdir('.'):
if is_git_directory(subdir):
return subdir
assert False
def is_git_directory(path = '.'):
return subprocess.call(['git', '-C', path, 'status'], stderr=subprocess.STDOUT, stdout = open(os.devnull, 'w')) == 0
def get_repo_sha(repo):
sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repo).decode('ascii').strip()
return sha
我在我的 Xcode 机器人触发器中使用此代码来获取提交的 SHA:
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse HEAD
这是获取分支名称的方法:
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse --abbrev-ref HEAD
这会在源目录中执行 git 命令,将 "name_of_your_git_repo" 替换为 git
上的存储库名称
我创建了一个 Xcode 机器人,它会在每次提交时集成。
在 "Run Script" 触发器中,我想用 运行 的测试集成状态更新当前 GitHub 提交。相当标准的 CI 东西。
然后我将 运行 编写如下脚本:
curl -i -X POST -H "Content-type: application/json"
-H 'Authorization: token TOKEN_HERE' -d
'{
"state": "success",
"target_url": "https://example.com/build/status",
"description": "The build succeeded!",
"context": "continuous-integration/jenkins"
}'
https://api.github.com/repos/ORGANIZATION_HERE/REPO_HERE/statuses/SHA_HERE
看来我可以从 Xcode Bot 环境变量中获取 success
或 failure
状态:
Access build folder in Xcode Server CI bot run (env variables?)
但是,未列出当前提交的 SHA。此时我如何才能获得用于集成的提交的 SHA,以用于 GitHub 状态 API 请求?
XCS_OUTPUT_DIR
有一个名为 sourceControl.log
的文件。此文件包含如下日志:
"DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb",
您可以解析该日志以找到 SHA。
也许更实用,CaveJohnson 可以提取 SHA:
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
SHA=`cavejohnson getSha`
或者它可以继续将 GitHub 状态设置为单行:
#!/bin/bash
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
cavejohnson setGithubStatus
值得注意的是,状态不仅仅是成功和失败,我知道的至少有 6 种。您可以在我的 Xcode 6 CI Missing Manual.
中阅读更多关于它们的信息使用另一个答案中的 cavejohnson
代码,它从某些键和 Xcode 日志中获取散列,我 运行 遇到 the returned hash was an outdated one from the last build 的问题。
我现在改为使用 git rev-parse HEAD
来获取 CI 构建中实际使用的提交的哈希值。我已将此作为对 cavejohnson
.
使用 get_sha()
检索 SHA-1 哈希:
def get_sha():
return get_repo_sha(get_git_directory())
def get_git_directory():
for subdir in os.listdir('.'):
if is_git_directory(subdir):
return subdir
assert False
def is_git_directory(path = '.'):
return subprocess.call(['git', '-C', path, 'status'], stderr=subprocess.STDOUT, stdout = open(os.devnull, 'w')) == 0
def get_repo_sha(repo):
sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repo).decode('ascii').strip()
return sha
我在我的 Xcode 机器人触发器中使用此代码来获取提交的 SHA:
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse HEAD
这是获取分支名称的方法:
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse --abbrev-ref HEAD
这会在源目录中执行 git 命令,将 "name_of_your_git_repo" 替换为 git
上的存储库名称