GitHub操作:将npm程序包输出传递给变量

btxsgosb  于 2022-11-14  发布在  Git
关注(0)|答案(1)|浏览(146)

我在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 }}
              \`\`\`
              `
            })
gcmastyq

gcmastyq1#

this thread,尝试在返回非0退出状态的命令上添加|| trueillustration
类似于:

VAR=$(((markdownlint **/*.md --ignore node_modules) 2>&1) || true)
# or
VAR=$(((markdownlint **/*.md --ignore node_modules) || true) 2>&1)

这将迫使GitHub脚本运行步骤 * 不 * 认为该步骤失败。
OP使用第一个语法确认它的工作:

- 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 "name=LINT_RESULT::$LINT" >> $GITHUB_OUTPUT

      - 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 }}
              \`\`\`
              `
            })

注:我已经使用了$GITHUB_OUTPUT,因为command ::set-output command has now (Oct. 2022) been deprecated

相关问题