检查 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_CODE
和 VERSION_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
您还可以在第一步中检查这些值是否匹配,然后仅将布尔值传递给下一步 - 取决于您的需要。
如果标签以 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_CODE
和 VERSION_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
您还可以在第一步中检查这些值是否匹配,然后仅将布尔值传递给下一步 - 取决于您的需要。