问题描述
在GitHub Actions中有一个工作流程,目的是从一个coverage.txt文件中读取代码覆盖率,并将覆盖率作为评论打印出来。用户在获取文件的输出(使用bash命令awk '/^Lines/ { print $2 }' < coverage.txt
)后,想将其插入到消息中,而消息目前只是一个简单的问候语。用户在尝试使用一些YAML变量的代码后遇到了问题,不知道是否有更好的方法。用户还考虑是否可以直接将文件的内容转储到消息中。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
您可以使用GitHub Actions的run
步骤来运行bash命令,并将其输出存储在一个变量中。然后,您可以在消息中使用该变量来显示代码覆盖率。
以下是一个示例工作流程的代码:
name: Report Code Coverage
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test:coverage
- name: Get code coverage
id: coverage
run: |
coverage=$(awk '/^Lines/ { print $2 }' < coverage.txt)
echo "::set-output name=coverage::$coverage"
- uses: mshick/add-pr-comment@v1
with:
message: |
**Code Coverage: ${{ steps.coverage.outputs.coverage }}**
repo-token: ${{ secrets.GITHUB_TOKEN }}
repo-token-user-login: 'github-actions[bot]'
allow-repeats: false
在上面的示例中,我们添加了一个名为Get code coverage
的步骤,该步骤运行了您的bash命令,并将输出存储在一个名为coverage
的变量中。然后,我们使用::set-output
语法将该变量的值设置为一个输出,以便在后续步骤中使用。最后,在消息中使用${{ steps.coverage.outputs.coverage }}
来显示代码覆盖率。
方案2
如果您只是想将文件的内容转储到消息中,而不需要对其进行处理,您可以使用cat
命令将文件的内容读取到一个变量中,并在消息中使用该变量来显示文件的内容。
以下是一个示例工作流程的代码:
name: Report Code Coverage
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test:coverage
- name: Get file content
id: file
run: |
content=$(cat coverage.txt)
echo "::set-output name=content::$content"
- uses: mshick/add-pr-comment@v1
with:
message: |
**File Content: ${{ steps.file.outputs.content }}**
repo-token: ${{ secrets.GITHUB_TOKEN }}
repo-token-user-login: 'github-actions[bot]'
allow-repeats: false
在上面的示例中,我们添加了一个名为Get file content
的步骤,该步骤使用cat
命令将文件的内容读取到一个名为content
的变量中。然后,我们使用::set-output
语法将该变量的值设置为一个输出,以便在后续步骤中使用。最后,在消息中使用${{ steps.file.outputs.content }}
来显示文件的内容。