我在GitHub操作中访问全局npm命令的输出时遇到了问题。运行任何全局linting npm包(我已经尝试过几个不同的包)总是以如下方式退出:Process completed with exit code 1.
.
有趣的是,我可以在本地机器上运行这些bash命令。
下面是我尝试做的一个简化版本:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 16.13.2
- name: Install npm package
run: npm install markdownlint-cli --location=global
- name: Run standard-markdown
id: run_md_lint
run: |
VAR=$((markdownlint **/*.md --ignore node_modules) 2>&1)
echo "::set-output name=LINT_RESULT::$VAR"
- name: Run a one-line script
run: echo "Resultes ${{ steps.run_md_lint.outputs.LINT_RESULT }}"
运行步骤的预期输出会记录在GitHub操作日志中,但访问结果并将其保存到变量中是不可能的-我猜是由于退出错误。
我应该提到的是,这样做的最终目标是在打开PR时捕获输出并将其添加到注解中。
- name: Add PR comment
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "${{ steps.run_md_lint.outputs.LINT_RESULT }}"
})
任何想法都是赞赏。
编辑:有效!
非常感谢@VonC帮助解决我的问题。几点注意事项:
- 如下所述,我需要在命令中添加
|| true
,以返回不同的退出状态。 set-output
只适用于单行字符串。我需要替换换行符和回车符来保存多行。- npm软件包必须与
-g
一起安装。-location=global
不起作用。
下面是正在运行的GitHub操作:
name: Lint the docs!
on:
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# Set up Node.js
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 16.13.2
- name: Install markdownlint
run: npm install -g markdownlint-cli
- name: Run standard-markdown
id: run_md_lint
run: |
LINT=$(((markdownlint **/*.md --ignore node_modules) 2>&1) || true)
LINT="${LINT//'%'/'%25'}"
LINT="${LINT//$'\n'/'%0A'}"
LINT="${LINT//$'\r'/'%0D'}"
echo "::set-output name=LINT_RESULT::$LINT"
- name: Add PR comment
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `Lint results:
\`\`\`bash
${{ steps.run_md_lint.outputs.LINT_RESULT }}
\`\`\`
`
})
1条答案
按热度按时间gcmastyq1#
从this thread,尝试在返回非0退出状态的命令上添加
|| true
(illustration)类似于:
这将迫使GitHub脚本运行步骤 * 不 * 认为该步骤失败。
OP使用第一个语法确认它的工作:
注:我已经使用了
$GITHUB_OUTPUT
,因为command::set-output
command has now (Oct. 2022) been deprecated。