标签: github-actions

GitHub Action - 无法在步骤中添加“if”条件

我正在使用复合 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)

continuous-integration github github-actions

6
推荐指数
2
解决办法
1万
查看次数

如何在 GitHub Action 中捕获curl http状态代码以确定成功/失败?

我对 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 编号”。

curl github github-actions

6
推荐指数
1
解决办法
2万
查看次数

如何使用 GITHUB-SHA 预填充工作流程_dispatch Github 操作中的输入字段

我正在尝试构建一个工作流调度(即手动)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-actions

6
推荐指数
1
解决办法
2105
查看次数

如何从 github actions 中的版本获取描述或名称

我已经阅读了 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-actions

6
推荐指数
1
解决办法
4880
查看次数

如何获取 Github 操作工作流程的通过/失败状态?

我一直在查看 GitHub REST API,并试图找出在哪里可以找到端点来获取操作中工作流程的状态。我判断它是否通过的唯一方法是下载badge.svg。

github github-api github-actions building-github-actions

6
推荐指数
1
解决办法
2993
查看次数

Github Actions:设置输出似乎不起作用

我有一个工作流程,可以执行一堆模糊测试,最后计算所有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)

有人知道我做错了什么吗?谢谢你!

github github-actions

6
推荐指数
1
解决办法
1万
查看次数

工作流程文件应位于哪个分支以便 GitHub Actions 执行它们?

我在我的主分支上创建了

on:  
  push:
      branches: [ test ]
Run Code Online (Sandbox Code Playgroud)

我注意到,虽然我可以手动触发它,并且它会起作用,但如果我按下 ,它实际上不会触发test。为此,我需要在test. 现在,似乎我什至不需要在分支上执行操作main,对吗?

那么为什么这个选项如此指定它应该触发的分支存在呢?它仅在文件存在的分支上触发。也就是说,我发现令人沮丧的是,我必须将我的一个文件从主分支合并到我的测试分支,有没有一种方法可以在推送时自动触发该操作,即使我的分支上没有它test,只有在main

github-actions

6
推荐指数
1
解决办法
7800
查看次数

如何启用非 docker 操作来访问我的自托管 github 操作运行器上 docker 创建的文件?(无根码头工人)

Github 建议以非 root 用户身份运行运行程序,这会引起一些有关混合 docker 和非 docker 操作的问题。这非常烦人,因为它导致签出操作无法运行,因为它无法访问在 docker 容器中运行的操作创建的文件。

可以通过使用 rootless docker 运行 actions runner 来解决这个问题吗?

containers github docker github-actions rootless

6
推荐指数
1
解决办法
2026
查看次数

Github Actions 容器未运行

当整个工作流程在 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)

github docker github-actions

6
推荐指数
1
解决办法
2639
查看次数

当使用深度 = 1 克隆存储库时获取最新标签“gitdescribe--tags”

我在 CI 自动化工作流程期间读取 git 存储库的标签时遇到问题。我不想创建完整克隆,因为这会产生大量开销,因此更愿意维护“浅克隆”,但以某种方式确定应用程序版本控制的标签。

使用案例

  1. Github Actions CI 构建通过设置将 Git 存储库检查为“浅”克隆git clone ... --depth=1
  2. 预构建阶段将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)

解决方案思路

  • 修改 CI 下的“克隆”以某种方式包含标签?
  • 如果可能的话,修改预构建的“desribe”步骤以从远程读取标签?

git github git-clone github-actions

6
推荐指数
1
解决办法
4560
查看次数