我正在使用复合 GitHub actions,我想在复合操作的某些步骤中检查当前分支名称,并根据该条件做出决定。
例如
name: main
on:
push:
repository_dispatch:
types:
- manual-trigger
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
- name: Fetch full project
run: git fetch --prune --unshallow
- name: Restore packages
run: nuget restore -ConfigFile "../Build/Nuget.config"
working-directory: Projects
env:
# ARTIFACTORY_PASSWORD is read by the nuget.config credentials section
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
- name: Composite Action - To build solution and execute SonarScanner
uses: ./Build/build-and-sonarscanner-execution
Run Code Online (Sandbox Code Playgroud)
在复合操作中,我确实检查了声纳扫描仪应该只为开发分支执行,否则只有项目构建才会执行。
name: build-and-sonarscanner-execution
description: "Build the solution …Run Code Online (Sandbox Code Playgroud) 我对 GitHub Actions 非常陌生,所以请耐心等待...我正在尝试创建一个 GitHub Action,其中步骤之一是对 GitHub API 进行curl 调用。我想捕获该curl 调用的HTTP 状态代码,以确定该操作是否确实失败。现在,因为curl 成功完成,所以它总是返回成功运行,即使curl 响应可能有错误的状态代码(例如405、404、403 等)。
这是我的卷曲调用:
- name: Squash And Merge After Approval of PR
run: |
curl --request PUT \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
--url https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.inputs.pr_num }}/merge \
--data '{
"merge_method": "squash",
"commit_title": "Squash and Merge for Pull Request ${{ github.event.inputs.pr_num }}",
"commit_message": "expected sha value = ${{ github.event.inputs.pr_head_sha }}",
"sha":"${{ github.event.inputs.pr_head_sha }}"
}'
Run Code Online (Sandbox Code Playgroud)
我想我必须以某种方式包装我的curl 命令才能在变量中输出响应,或者?但我不知道如何捕获curl响应,解析它,并检查状态代码以确定curl是否成功。
TIA。
PS:这是一个手动运行的操作,因此当操作运行时,我从输入表单中提供“sha”和“pr 编号”。
我正在尝试构建一个工作流调度(即手动)Github 操作,该操作使用分支的 SHA 预先填充输入字段。
IE
name: Manually tag a release
on:
workflow_dispatch:
inputs:
git-sha:
description: Release SHA
default: <prefill with GITHUB_SHA>
required: true
Run Code Online (Sandbox Code Playgroud)
我已经尝试过default: ${{ github.sha }},但这会引发错误。
这可能吗?语法是什么?
我已经阅读了 Github 操作和发布操作的文档,但我找不到任何关于如何从操作中获取名称的信息。我需要运行 fetch 调用还是其他操作?
name: Publish to Bintray
on:
release:
types: [published]
workflow_dispatch:
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew curseforge uploadSubProjects publishToModrinth --parallel --stacktrace
env:
BINTRAY_USER: oroarmor
BINTRAY_KEY: ${{ secrets.BINTRAY_KEY }}
CURSE_API_KEY: ${{ secrets.CURSE_API_KEY }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
Run Code Online (Sandbox Code Playgroud) 我一直在查看 GitHub REST API,并试图找出在哪里可以找到端点来获取操作中工作流程的状态。我判断它是否通过的唯一方法是下载badge.svg。
我有一个工作流程,可以执行一堆模糊测试,最后计算所有crashers子目录中的文件总数。后来,在另一项工作中,我使用该号码向 Slack 发送通知。但是,由于某种原因,::set-output不会产生任何输出,最重要的是,即使数量crashers不为零,下一个作业也不会运行!
jobs:
fuzz-nightly-test:
runs-on: ubuntu-latest
steps:
...
- name: Set crashers count
working-directory: test/fuzz
run: echo "::set-output name=crashers-count::$(find . -type d -name 'crashers' | xargs -I % sh -c 'ls % | wc -l' | awk '{total += $1} END {print total}')"
id: set-crashers-count
outputs:
crashers-count: ${{ steps.set-crashers-count.outputs.crashers-count }}
fuzz-nightly-fail:
needs: fuzz-nightly-test
if: ${{ needs.set-crashers-count.outputs.crashers-count != 0 }}
runs-on: ubuntu-latest
steps:
...
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?谢谢你!
我在我的主分支上创建了
on:
push:
branches: [ test ]
Run Code Online (Sandbox Code Playgroud)
我注意到,虽然我可以手动触发它,并且它会起作用,但如果我按下 ,它实际上不会触发test。为此,我需要在test. 现在,似乎我什至不需要在分支上执行操作main,对吗?
那么为什么这个选项如此指定它应该触发的分支存在呢?它仅在文件存在的分支上触发。也就是说,我发现令人沮丧的是,我必须将我的一个文件从主分支合并到我的测试分支,有没有一种方法可以在推送时自动触发该操作,即使我的分支上没有它test,只有在main?
Github 建议以非 root 用户身份运行运行程序,这会引起一些有关混合 docker 和非 docker 操作的问题。这非常烦人,因为它导致签出操作无法运行,因为它无法访问在 docker 容器中运行的操作创建的文件。
可以通过使用 rootless docker 运行 actions runner 来解决这个问题吗?
当整个工作流程在 Github Actions at actions/checkout@v2.1.0 中的 Init Containers 之后立即启动时,就会出现此问题:
Run actions/checkout@v2.1.0
/usr/bin/docker exec c30dd34bb8ac19329d0971b0808f9a4440b20a31283dbfb70b5249619e3dc894 sh -c "cat /etc/*release | grep ^ID"
Error response from daemon: Container c30dd34bb8ac19329d0971b0808f9a4440b20a31283dbfb70b5249619e3dc894 is not running
Run Code Online (Sandbox Code Playgroud)
初始化容器日志:
Checking docker version
Clean up resources from previous jobs
Create local container network
Starting job container
/usr/bin/docker pull rafal1137/etlraspbian
Using default tag: latest
latest: Pulling from rafal1137/etlraspbian
31994f9482cd: Pulling fs layer
76b671f957fb: Pulling fs layer
2782b509b7bd: Pulling fs layer
31994f9482cd: Verifying Checksum
31994f9482cd: Download complete
2782b509b7bd: Verifying Checksum
2782b509b7bd: …Run Code Online (Sandbox Code Playgroud) 我在 CI 自动化工作流程期间读取 git 存储库的标签时遇到问题。我不想创建完整克隆,因为这会产生大量开销,因此更愿意维护“浅克隆”,但以某种方式确定应用程序版本控制的标签。
使用案例
git clone ... --depth=1。git describe --tags版本信息嵌入到已编译的应用程序中预期结果
对于完整克隆,标签将报告如下:
> git describe --tags
v0.5.0-95-g7bbc323
Run Code Online (Sandbox Code Playgroud)
实际结果
CI 下的浅克隆的工作原理不一样:
> git describe --tags
fatal: No names found, cannot describe anything.
Run Code Online (Sandbox Code Playgroud)
解决方案思路
github-actions ×10
github ×7
docker ×2
containers ×1
curl ×1
git ×1
git-clone ×1
github-api ×1
rootless ×1