首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得Xcode Bot的提交SHA“运行脚本”触发器?更新Github测试的状态

如何获得Xcode Bot的提交SHA“运行脚本”触发器?更新Github测试的状态
EN

Stack Overflow用户
提问于 2015-02-20 02:25:14
回答 3查看 1.3K关注 0票数 7

我已经创建了一个Xcode Bot,它集成在每个提交上。

在“运行脚本”触发器中,我想用正在运行的测试的集成状态更新当前的GitHub提交。相当标准的CI资料。

然后,我将运行如下脚本:

代码语言:javascript
复制
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环境变量中获取successfailure状态:

访问Xcode Server CI bot运行中的生成文件夹(env变量?)

但是,没有列出当前提交的SHA。此时,我如何能够获得用于集成的提交的SHA,以便在GitHub状态API请求中使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-23 19:56:39

XCS_OUTPUT_DIR有一个名为sourceControl.log的文件。该文件的日志如下所示:

代码语言:javascript
复制
"DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb",

您可以解析该日志以找到SHA。

也许更实际一点,CaveJohnson可以提取SHA:

代码语言:javascript
复制
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
SHA=`cavejohnson getSha`

或者,它可以直接将GitHub状态设置为一行:

代码语言:javascript
复制
#!/bin/bash
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH
cavejohnson setGithubStatus

值得注意的是,有更多的状态,而不仅仅是成功和失败,至少有6个我知道。你可以在我的Xcode 6 CI失踪手册上读到更多关于它们的信息。

票数 1
EN

Stack Overflow用户

发布于 2015-06-05 15:52:36

我在Xcode Bot触发器中使用此代码获取提交的SHA:

代码语言:javascript
复制
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse HEAD

为了得到分支机构的名字:

代码语言:javascript
复制
git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse --abbrev-ref HEAD

它在源目录中执行git命令,将"name_of_your_git_repo“替换为git上存储库的名称。

票数 3
EN

Stack Overflow用户

发布于 2015-02-27 23:54:20

使用另一个答案中的cavejohnson代码(从Xcode日志中的某些键获取散列),我遇到了一个返回的散列是上一次构建时的过时哈希。问题。

我现在使用git rev-parse HEAD来获取CI构建中实际使用的提交的散列。我已将此作为cavejohnson的修订版提交。

使用get_sha()检索SHA-1哈希:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28620681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档