标签: github-actions

如何修复或避免错误:无法成功处理文件命令“输出”?

最近 github宣布更改命令echo "::set-output name=x::y"已弃用,应替换为echo "x=y" >> $GITHUB_OUTPUT

以前的命令能够处理多行值b,而新方法失败并出现以下错误

Error: Unable to process file command 'output' successfully.
Error: Invalid format
Run Code Online (Sandbox Code Playgroud)

message在我的脚本中,我使用应发送到 slack 的消息文本填充变量。我需要输出变量将该文本传递到执行发送操作的下一个作业步骤。

message="Coverage: $(cat coverage.txt). Covered: $(cat covered.txt). Uncovered: $(cat uncovered.txt). Coverage required: $(cat coverageRequires.csv)"
      
Run Code Online (Sandbox Code Playgroud)

消息的最后一部分包括csv多行文件的上下文

虽然该set-output命令能够处理此类多行参数

echo "::set-output name=text::$message"
Run Code Online (Sandbox Code Playgroud)

新版本失败

echo "text=$message" >> $GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

可以采取什么措施来修复或避免此错误?

github-actions

39
推荐指数
3
解决办法
2万
查看次数

Firebase action-hosting-deploy 因 RequestError 失败(资源无法通过集成访问)

Firebase action-hosting-deploy 因 RequestError 失败(资源无法通过集成访问)

我正在尝试按照https://firebase.google.com/docs/hosting/github-integration开始自动推送我的代码以由 Firebase 托管。

我最终得到了一个 Github Actions .yml 文件,如下所示:

# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on PR
'on': pull_request
jobs:
  build_and_preview:
    if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'
    runs-on: ubuntu-latest
    environment: development
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: |
          cd front
          echo "$ENV_DEVELOPMENT" > .env.development
          PWD=$(pwd)
          npm install
          sh -ac ". $PWD/.env.development; npm run build"
        env:
          ENV_DEVELOPMENT: ${{ secrets.ENV_DEVELOPMENT …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-hosting github-actions

39
推荐指数
2
解决办法
4476
查看次数

Github 操作:如果特定文件夹中发生更改,则运行工作流程中的步骤/作业

我们有什么方法可以根据特定文件夹中的更改来控制工作流程中运行哪些作业/步骤

例如:

我已经说过,我的 git 存储库中的以下文件夹:a、b、c 在每次 PR 合并到我的分支时,我都会触发一个工作流程。工作流将执行作业,例如 A -> B -> C。我只想在文件夹"a/**"、B"b/**"等存在更改时才运行作业 A。

因此,如果 PR 中的更改仅发生在 中,"a/**"并且"b/**"工作流将跳过 的作业执行C,使工作流运行为A->B

github-actions

38
推荐指数
2
解决办法
4万
查看次数

我可以有多个 GitHub Actions 工作流程文件吗?

我可以有多个工作流文件吗?

我有一些使用 GitHub Actions 的存储库,它们运行良好!在我的特定用例中,我在“推送”时自动部署到我的开发环境,并在“发布”时自动部署到生产环境。这是两个独立的工作流程。

我知道我可以将这两个工作流放在同一个 main.workflow 文件中,这样就可以正常工作,但我更愿意将它们完全放在单独的工作流文件中。例如,是否可以有一个 dev.workflow 文件和一个 prod.workflow 文件?

我曾尝试创建一个 dev.workflow 和 prod.workflow 文件,但它们似乎没有被 Actions 接收。看来需要一个 main.workflow 文件。如果是这种情况,有没有办法将其他工作流文件导入 main.workflow?

github-actions

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

GitHub Actions:如何定位除 master 之外的所有分支?

我希望能够让操作在除 master 之外的任何给定分支上运行。我知道有一个预先构建的filter动作,但我想要的是完全相反的。

更像是 GitLab 的except关键字。由于这不在官方文档中,是否有人准备了一个像样的解决方法?

非常感谢。

git github github-actions

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

如何使用 GitHub Actions 提取机密?

我有一个相当基本的场景。为此,我制作了一个专用的 ssh 密钥并将其添加到我的存储库机密中。

  1. 代码被推送到 master

  2. GitHub 操作ssh通过执行将其上传到服务器echo "${{ secrets.SSH_KEY }}" > key

  3. 之后,我可以使用此密钥连接到我的服务器,例如 ssh -i key devops@myserver.com lsb_release -a

问题是由于某种原因,GitHub 操作无法将其写入文件,而是将字符***而不是实际的秘密值写入文件。因此显然我无法连接到我的服务器。

如何使用此密钥与 ssh 连接?有没有不使用文件就可以连接的方法?使用 GitHub 操作完成此常见场景的人能否解释一下?

ssh github-actions secretsmanager

37
推荐指数
4
解决办法
2万
查看次数

GitHub Actions:如何在 GithHub Actions 中连接到 Postgres

我正在使用 Ruby on Rails 应用程序尝试 GitHub Actions for CI。

我的设置是使用 VM,而不是在容器中运行 Ruby 构建。

这是我的工作流程 yml。它一直运行而没有错误,直到步骤“设置数据库”。

name: Rails CI

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

jobs:
  build:

    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:10.10
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: db_test
        ports:
          - 5432/tcp
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
      redis:
        image: redis:latest
        ports:
          - 6379/tcp

    steps:
    - uses: actions/checkout@v1

    - name: Set up ruby 2.5
      uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.5.5

    - name: Set up node …
Run Code Online (Sandbox Code Playgroud)

postgresql workflow continuous-integration github-actions

34
推荐指数
2
解决办法
9755
查看次数

如何从我当前正在处理的分支重用 GitHub Actions 工作流程?

我想用可重用的工作流程抽象一些 GitHub 操作。

为了做到这一点,我需要以以下格式调用我新定义的可调用工作流程{owner}/{repo}/{path}/{filename}@{ref}

例如(来自文档)

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@172239021f7ba04fe7327647b213799853a9eb89
  call-workflow-2:
    uses: octo-org/another-repo/.github/workflows/workflow-2.yml@v1
Run Code Online (Sandbox Code Playgroud)

然而,实际上,我正在我的分支 上工作,some-branch-name我正在处理我的workflow-1.yml文件,并且我希望能够按照当前分支中定义的方式运行我的操作,给定

`{ref} 可以是 SHA、发布标签或分支名称。

看来我需要使用

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@some-branch-name
Run Code Online (Sandbox Code Playgroud)

但是,我希望这适用于任何分支机构,所以

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@${{ github.ref }}
Run Code Online (Sandbox Code Playgroud)

但是,事实证明这是不可能的,因为表达式不能uses属性中使用。

我怎样才能实现这个目标?

github-actions

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

在复合操作中使用 Secrets GitHub

我正在创建一个复合操作,并尝试使用 GitHub 提供的机密,但遇到错误,指出未找到机密。

这可以使用您的 action.yml 重新创建,如下所示:

name: 'test'
description: 'test'
runs:
  using: 'composite'
  steps:
    - name: Create Branch
      run: echo "git branch test"
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      shell: bash
Run Code Online (Sandbox Code Playgroud)

复合操作似乎不知道秘密,这使得通过它们运行 git 命令变得困难。

github-actions

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

从 GitHub 操作推送到源

我正在尝试origin从 GitHub 操作推送到远程。我的行动逻辑是:

  • 处理pull_request_review事件并按评论消息过滤
  • checkout to master, merge PR branch, run some checks and push it to origin

The script is:

if [[ "${GITHUB_EVENT_NAME}" != "pull_request_review" ]]; then
  echo "unsupported event: ${GITHUB_EVENT_NAME}"
  exit 1
fi

user=$(jq -r .review.user.login ${GITHUB_EVENT_PATH})
cmd=$(jq -r .review.body ${GITHUB_EVENT_PATH})
echo "reviewer is ${user}, command is ${cmd}"

if [[ "${cmd}" == "merge" ]]; then
  head=$(jq -r .pull_request.head.ref ${GITHUB_EVENT_PATH})
  git config user.email test@test.com
  git config user.name test
  git checkout -B _tmp origin/${head}
  git checkout …
Run Code Online (Sandbox Code Playgroud)

git github docker github-actions building-github-actions

33
推荐指数
5
解决办法
2万
查看次数