表达式语法的回退

tim*_*der 7 continuous-integration yaml github-actions

我有一个在两个不同事件上运行的 github 工作流程:pull_request 和手动。它看起来像这样:

\n
on:\n  pull_request:\n    branches: [master]\n  workflow_dispatch: {}\n\nenv:\n  API_URL: https://example.com/\n
Run Code Online (Sandbox Code Playgroud)\n

API_URL我想要的是当我手动触发工作流程时能够设置替代方案。但我希望工作流程在自动运行时也能以相同的方式运行。\n因此,首先,我将 \xe2\x80\x9c inputs\xe2\x80\x9d 添加到工作流程_dispatch 中:

\n
on:\n  pull_request:\n    branches: [master]\n  workflow_dispatch:\n    inputs:\n      API_URL:\n        description:\n        required: true\n        default: https://example.com\n\nenv:\n  API_URL: ${{ github.event.API_URL }}\n
Run Code Online (Sandbox Code Playgroud)\n

据我了解,这样API_URL只有在手动运行工作流程时才会设置环境变量。但是当它自动运行时,xe2x80x99s没有github.event.API_URL值。

\n

在我看来,这里需要一个条件回退。\n这样的东西会起作用吗?

\n
env:\n  API_URL: ${{ github.event.API_URL || \'https://example.com/\' }}\n
Run Code Online (Sandbox Code Playgroud)\n

但从文档来看,||运算符将计算为1or 0

\n

有没有好的办法解决这个问题呢?谢谢!

\n

sha*_*mcd 10

这对我有用:

env:
  BRANCH: ${{ github.base_ref || 'devel' }}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tek 3

不幸的是(在撰写本文时),这是不可能的。但是,仅当作业不是手动运行时(例如,作业由 PR 事件触发),您可以通过动态将环境变量( ) 设置为默认值来达到相同的效果 。您可以通过创建一个条件作业步骤来做到这一点,该步骤仅在尚未设置时运行:API_URLAPI_URL

on:
  pull_request:
    branches:
      - master
  workflow_dispatch:
    inputs:
      API_URL:
        required: true
        default: https://example.com
jobs:
  build:
    env:
      API_URL: ${{ github.event.inputs.API_URL }}
    runs-on: ubuntu-latest
    steps:
      - name: Set API_URL environment variable
        if: env.API_URL == null
        run: echo "API_URL=https://example.com" >> $GITHUB_ENV
      - name: Test API_URL environment variable
        run: echo "API_URL=$API_URL"
Run Code Online (Sandbox Code Playgroud)

这样,API_URL无论工作流程的触发方式如何(手动或自动),我们都将设置环境变量,并且能够在手动运行时使用自定义值覆盖它。