检查 Github 操作中 2 个变量的相等性

Check equality of 2 variables in Github Action

如果标签以 v 推送到分支开始,将进行发布。问题在于:人们可能会忘记在发布前升级版本。因此需要检查标记版本和代码中的版本之间的相等性

代码中的版本可以通过poetry version -s获取,然后需要在版本字符串前面加一个字母v(请看下面)

VERSION_CODE = "v""$(poetry version -s)"

git标签中的版本可以如下访问

VERSION_TAG = $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))

问题: 如何检查 VERSION_CODEVERSION_TAG 是否相等,以便管道在它们的值对齐时进行释放?

我现在的代码如下所示。步骤 if: VERSION_CODE != VERSION_TAG 有一条错误消息,指出存在 无法识别的命名值:'VERSION_CODE'。位于表达式中的位置 1:VERSION_CODE

name: Release By Tag

on:
  push:
    tags:
      - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  version-check:
    name: check version
    runs-on: ubuntu-latest
    steps:
       
       ... set up environment, ex install poetry 

       - name: try to fail version check
         run: |
           VERSION_CODE = "v""$(poetry version -s)"
           VERSION_TAG = $(git describe --exact-match --tags $(git log -n1 --pretty='%h')
         if: VERSION_CODE != VERSION_TAG
         run: exit 1

       - name: version is correct
         run: echo "version tag is alined"

       ... make a release

您只能将变量传递给下一步 - if 检查发生在步骤执行之前,因此您无法在发布时访问它。 exit 1 也不是正确的模式,您更需要生成变量,传递它们并在接下来的步骤中使用它们。

一个解决方案是:

name: Release By Tag

on:
  push:
    tags:
      - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  version-check:
    name: check version
    runs-on: ubuntu-latest
    steps:
       
       ... set up environment, ex install poetry 

       - name: try to fail version check
         id: version_info
         run: |
           VERSION_CODE="v""$(poetry version -s)"
           VERSION_TAG=$(git describe --exact-match --tags $(git log -n1 --pretty='%h')
           echo "::set-output name=VERSION_CODE::$VERSION_CODE"
           echo "::set-output name=VERSION_TAG::$VERSION_TAG"

       - name: version is correct
         if: ${{ steps.version_info.outputs.VERSION_CODE == steps.version_info.outputs.VERSION_TAG }}
         run: echo "version tag is alined"

       ... make a release

您还可以在第一步中检查这些值是否匹配,然后仅将布尔值传递给下一步 - 取决于您的需要。