@ 当前/ 承诺- info
收藏 Git 来自 git CLI 的信息
安装
测试过 节点.js 页:1.
npm install --save @currents/commit-info
使用
const {commitInfo} = require('@currents/commit-info')
// default folder is current working directory
commitInfo(folder)
.then(info => {
// info object will have properties
// branch
// message
// email
// author
// sha
// timestamp (in seconds since epoch)
// remote (without credentials)
// ghaEventData (GitHub Actions pull request events only)
})
每个财产都来自第一个有价值的财产,或者是 null数字 :
- 页:1
COMMIT_INFO_*环境变量,见 后退环境变量 - gi src/git-api.js (英语)
- cI 提供者的环境变量,参见 CI 提供者变量
这个 remote 是例外: CI 提供者的值出现在 git 之前. COMMIT_INFO_REMOTE 还是先来 例如,在Azure管道上,克隆人往往有一个SSH遥控器,以及 BUILD_REPOSITORY_URI 拥有 HTTPS URL 。 设置遥控器的 CI 供应商有 AWS 代码构建、 Azure 管道、 竹子、 Buildkite、 CircleCI、 Drone、 GitLab、 Semaphore 和 Netlify, 参见 标准/c.js。 。 。 .
注释:
- git 报告没有分支进行脱机(
HEAD),所以分支来自CI提供者. 来自COMMIT_INFO_BRANCH并如实报告提供供应商. remote从不包含用户名称或密码,无论它来自何处。 GitLab的电话CI_REPOSITORY_URL例如,持有工作标志.- 以本地人决定
Promise。 。 。 . - 如果您需要调试, 请使用
DEBUG=commit-info环境变量。 调试输出不包含远程的证书 . - 当 git 失败, 并且字段在 CI 提供者的变量之后仍然是空的,
commitInfo用 git 错误和COMMIT_INFO_*要设置的变量。 没有寄存器和CI提供者的变量填充字段时,或者没有寄存器和CI提供者时,没有警告. - 当 git 不安装或不安装在
PATH,所有 git 值都是空的,警告说 git 在PATH。安装 git 或设置COMMIT_INFO_*变量.
CI 提供者变量
当 git 不返回一个值时, 它来自 CI 提供者的变量 。 遥控器首先来自这些变量. 该分支来自:
| 提供者 | 处 |
|---|---|
| GitHub 动作 | GH_BRANCH, (中文(简体) ), GITHUB_HEAD_REF (请求), GITHUB_REF_NAME,或 GITHUB_REF 无 refs/heads/ 或者说 refs/tags/ |
| 吉特拉布语Name | CI_COMMIT_REF_NAME |
| 圆CI | CIRCLE_BRANCH |
| 詹金斯(英语: | CHANGE_BRANCH (多分支牵引请求),或 GIT_BRANCH 无 origin/, (中文(简体) ), refs/remotes/origin/ 或者说 refs/heads/ |
| 水管 | SYSTEM_PULLREQUEST_SOURCEBRANCH 无 refs/heads/ (撤回请求),或 BUILD_SOURCEBRANCHNAME,而这只是最后一个部分: x 页:1 feature/x |
| 点球管 | BITBUCKET_BRANCH |
| 建树 | BUILDKITE_BRANCH |
AWS 代码Build 给出没有分支 。 其他财产和提供者在 标准/c.js。 。 。 . getCiCommitInfo() 返回这些值和提供者名称.
集装箱
git 2.35.2,后来拒绝读取由另一个用户拥有的寄存器,其中 fatal: unsafe repository (2.35.2至2.37.x) 或 fatal: detected dubious ownership in repository (2.38.0及后). 当一个容器作为根运行于另一个用户的取出时,这种情况很常见. 在 CI 上,只读的 git 命令会再次运行 -c safe.directory=*CI意味着 CI 变量设定为非 false 或者说 0,或者CI提供商之一在 src/ci-professor.js (中文(简体) ) 检测到;例如,Jenkins没有设置 CI。 。 。 . GOOGLE_CLOUD_PROJECT, (中文(简体) ), GCP_PROJECT, (中文(简体) ), GCLOUD_PROJECT 财务报告和审定财务报表 JENKINS_HOME 不计数,因为开发者往往在外壳中设置它们. * 因为文件夹可以是寄存器的子文件夹.
git 2.35.2至2.37.x 忽略 safe.directory 在命令行,所以这里 commitInfo 打印警告(图2.3.8.0并随后予以尊重);运行 git config --global --add safe.directory '*' 或设置 COMMIT_INFO_* 变量.
拉动请求构建
根据拉动请求建立许多 CI 提供者检查一个将拉动请求合并到目标分支的承诺. GitHub 动作, 例如检查 refs/pull/<number>/merge,其信息为 Merge <sha> into <sha>。 。 。 .
当退约承诺如此合并时, commitInfo 报告拉动请求的最后承诺: sha, (中文(简体) ), message, (中文(简体) ), email, (中文(简体) ), author 财务报告和审定财务报表 timestamp发现其行为包括:
- GitHub 动作 :
pull_request.head.sha在事件文件中 (GITHUB_EVENT_PATH(中文(简体) ) - GitLab 合并了成果管道:
CI_MERGE_REQUEST_SOURCE_BRANCH_SHA - 阿苏雷管:
SYSTEM_PULLREQUEST_SOURCECOMMITID - 崔维斯:
TRAVIS_PULL_REQUEST_SHA - 司马彪:
SEMAPHORE_GIT_PR_SHA - Buildkite : (帮助)
BUILDKITE_PULL_REQUEST_HEAD_COMMIT - Bitbucket 管道 :
BITBUCKET_COMMIT
承诺只有在被检查出的承诺是合并,而承诺是其父母之一时才使用。 如果一个浅层克隆体没有包含它( 例如) actions/checkout 默认值 fetch-depth: 1它将随着 git fetch --depth=1 origin <sha>,还有3次暂停。 如果取回失败, 则报告退出承诺 。 获取不使用 safe.directory 重试。 设定 CURRENTS_DISABLE_HEAD_COMMIT_FETCH=true 跳过获取.
这个 COMMIT_INFO_* 下面的变量仍然具有优先地位。 何时 COMMIT_INFO_SHA 被设定,拉请求的承诺没有被检查.
后退环境变量
您可以通过设置这些环境变量来提供承诺信息 。 它们优先于git和CI提供者的变量.
branch: COMMIT_INFO_BRANCH
message: COMMIT_INFO_MESSAGE
email: COMMIT_INFO_EMAIL
author: COMMIT_INFO_AUTHOR
sha: COMMIT_INFO_SHA
timestamp: COMMIT_INFO_TIMESTAMP
remote: COMMIT_INFO_REMOTE
嵌入容器
在 Docker 容器内运行应用程序时,您应该使用 -e 语法.
$ docker run \
-e COMMIT_INFO_BRANCH=develop \
-e COMMIT_INFO_SHA=e5d9eb66474bc0b681da9240aa5a457fe17bc8f3 \
<container name>
见 插件实例 一个完整的例子.
个别方法
何况 commitInfo 本单元还揭示了个人承诺的回归
方法 getBranch, (中文(简体) ), getMessage, (中文(简体) ), getEmail, (中文(简体) ), getAuthor, (中文(简体) ), getSha, (中文(简体) ), getTimestamp, (中文(简体) ), getRemoteOrigin。这些方法只使用git,而不是环境变量. getRemoteOrigin 返回没有证书的远程.
其他出口:
getCiCommitInfo(env = process.env): CI 提供者的值,参见 CI 提供者变量编辑remote没有证书.detectCiProvider(env = process.env): CI 提供者名称,例如githubActions,或null。 。 。 .removeCredentials(url):从URL中删除用户名和密码,保留端口. 返回其他值,例如:[email protected]:o/r.git就像他们一样.
举个例子
const {getAuthor} = require('@currents/commit-info')
getAuthor('path/to/repo')
.then(name => ...)
获取缓冲
以当前 git 分支名称或 null。 。 。 .
const {getBranch} = require('@currents/commit-info')
getBranch()
.then(branch => ...)
- 如果这是分离的(报告)
HEAD),返回时null
小印数
许可:麻省理工学院 - 做任何与代码有关的事情, 但如果它不起作用,不要责怪我.
支持: 如果您发现此模块有任何问题, 电子邮件 / 微博 / 未决问题 在基图布
MIT 许可证
版权(c)2017 Cypress.io
特此免费准许任何人 获取该软件和相关文件的副本 文件(“软件”),在软件中处理,不包含 限制,包括不限制使用权, 复制、修改、合并、出版、发行、分版和/或销售 软件的复制本,并允许向 为此提供了软件,但须符合下列条件: 条件:
上述版权通知和本许可通知应为: 列入软件的所有副本或大部分.
软件是提供的"是", 没有任何种类的恐惧, 或监禁,包括但不限制于 特别目的和目的的证明 无所不入。 绝对不能让警察或警察 B. 任何索赔、救济或其他负债的持有者, 条约、条约或其他条约行动 来源、来源或与溶剂或使用有关的 其他交易 在软件.