【问题标题】:How to replace string in expression with GitHub actions如何用 GitHub 操作替换表达式中的字符串
【发布时间】:2021-07-17 18:17:39
【问题描述】:

这是我的操作,它返回 $TOXENV 看起来像这样 py3.6-django2.2 我想 $TOXENV 看起来像这样而不是 py36-django22 是否有任何替代/替换函数可以用来替换 @987654326 @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

【问题讨论】:

  • 您可以使用此处建议的内容:stackoverflow.com/questions/2871181/… 在您的 run 最后一步中将 . 替换为其他内容。
  • 谢谢。这是sed 的一般替换,但是 GitHub Actions 是否有任何内置功能?

标签: github-actions


【解决方案1】:

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

相反,也许您可​​以在run 指令中使用sed 设置TOXENV 的值,然后使用add it to the environment

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

【讨论】:

  • 我对答案投了赞成票。遗憾的是,目前(2021 年 4 月 25 日)函数不包括替换指令/函数。移动替换逻辑以运行目前只有一种解决方案。
  • 现在是 2022 年 3 月,我们仍然没有可用的原生字符串替换功能。
猜你喜欢
  • 2014-02-12
  • 2011-05-14
  • 2020-10-19
  • 2020-12-22
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
相关资源
最近更新 更多