如何使用 GitHub 操作替换表达式中的字符串

Luk*_*ski 13 github-actions

这是我返回的操作,$TOXENV看起来像这样,py3.6-django2.2我希望$TOXENV看起来像这样,而py36-django22不是有任何替代/替换函数可以用来替换.char 吗?

name: CI
on:
  workflow_dispatch:
    branches: [ master, actions ]
jobs:
  demo:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python: [3.6, 3.7, 3.8, 3.9]
        django: ['2.2', '3.0']
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v1
        name: Set up Python ${{ matrix.python }} ${{ matrix.django }}
        with:
          python-version: ${{ matrix.python }}
      - name: python version
        env:
            TOXENV: "py${{ matrix.python }}-django${{ matrix.django }}"
        run:
          echo $TOXENV
Run Code Online (Sandbox Code Playgroud)

Sef*_*eff 12

另一种方法是使用 BASH 本机变量替换

  - name: python version
    env:
        TOXENV: "py${{ matrix.python }}-django${{ matrix.django }}"
    run: |
      TOXENV=${{ env.TOXENV }}
      TOXENV=${TOXENV//.} # replace all dots
      echo TOXENV=${TOXENV} >> $GITHUB_ENV # update GitHub ENV vars
  - name: print env
    run: echo ${{ env.TOXENV }}
Run Code Online (Sandbox Code Playgroud)

这个想法是将 GitHub actions 表达式变量读入 BASH 变量并进行字符串操作,然后导出或设置输出以在 GitHub actions 运行时更新。


jid*_*ula 11

env我认为在定义 TOXENV 的值时,在步骤的指令中没有一种简单的方法可以做到这一点。该env指令接受表达式,但表达式中可使用的函数有限,无法替换任意字符。我能找到的最接近的是format(),但不幸的是,这需要目标字符串中的编号大括号,这不适用于您的情况。

run相反,也许您可​​以使用指令在指令中设置 TOXENV 的值sed,然后将其添加到环境中

      - name: python version
        run:
          RAW_TOXENV="py${{ matrix.python }}-django${{ matrix.django }}"
          TOXENV=$(echo $RAW_TOXENV | sed 's/\.//')
          echo "TOXENV=$TOXENV" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

  • 现在已经是 2022 年 3 月,我们仍然没有可用的本机字符串替换功能。 (4认同)