英文:
can github composite action inputs use self inputs as default values?
问题
I want if the value of a is not set the value of b be set as the value of a.
如果a的值未设置,则将b的值设置为a的值。
Please note that the code section remains unchanged in Chinese as you requested.
英文:
does this work?
name: "test"
description: "test"
inputs:
  a:
    description: "Description of a"
    required: false
    default: ${{ inputs.b }}
  b:
    description: "Description of b"
runs:
  using: "composite"
  steps:
    - name: docker-login-build-push
      run: |
        echo {{ inputs.a }}
        echo {{ inputs.b }}
      shell: bash
I want if the value of a is not set the value of b be set as the value of a.
答案1
得分: 1
inputs.<input_id>.default 没有提到在 default 中使用 inputs。
但是,您可以自行测试和验证。
我运行了这个简单的测试,结果出现了这个 错误:
> 无法识别的命名值:'inputs'。位于表达式内的位置 1:inputs.a
这意味着它不受支持。
这是我用来验证的操作和工作流:
.github/actions/test/action.yml
name: Test
description: Test
inputs:
  a:
    description: a
  b:
    description: b
    default: '${{ inputs.a }}';
runs:
  using: composite
  steps:
    - name: Test
      shell: bash
      run: |
        echo 'a: ${{ inputs.a }}'
        echo 'b: ${{ inputs.b }}'        
.github/workflows/ci-test-action.yml
name: test_action
on: workflow_dispatch
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Test
      uses: ./.github/actions/test
这是完整的错误日志:
Error: /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14):
Error: /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.a
Error: GitHub.DistributedTask.ObjectTemplating.TemplateValidationException: The template is not valid. /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.a
   at GitHub.DistributedTask.ObjectTemplating.TemplateValidationErrors.Check()
   at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
   at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load /home/runner/work/test/test/./.github/actions/test/action.yml
关于:
> 如果 a 的值未设置,b 的值应设置为 a 的值。
这应该可以工作:
${{ inputs.a && inputs.a || inputs.b }}
即:
echo '${{ inputs.a && inputs.a || inputs.b }}'
您可以将 inputs 设置为环境变量,应用这些验证,并在 shell/Bash 中像这样使用:
.github/actions/test/action.yml
name: Test
description: Test
inputs:
  a:
    description: a
  b:
    description: b
runs:
  using: composite
  steps:
    - name: Test
      env:
        A: '${{ inputs.a && inputs.a || inputs.b }}'
        B: '${{ inputs.b }}'
      shell: bash
      run: |
        echo "A: $A"
        echo "B: $B"        
英文:
inputs.<input_id>.default doesn't say anything about the use of inputs in default.
But, you can test and verify it yourself.
I ran this simple test resulting in this error:
> Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.a
That means it's not supported.
Here's the action and workflow that I used to verify this:
.github/actions/test/action.yml
name: Test
description: Test
inputs:
  a:
    description: a
  b:
    description: b
    default: '${{ inputs.a }}'
runs:
  using: composite
  steps:
    - name: Test
      shell: bash
      run: |
        echo 'a: ${{ inputs.a }}'
        echo 'b: ${{ inputs.b }}'        
.github/workflows/ci-test-action.yml
name: test_action
on: workflow_dispatch
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Test
      uses: ./.github/actions/test
Here's the complete error logs:
Error: /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14):
Error: /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.a
Error: GitHub.DistributedTask.ObjectTemplating.TemplateValidationException: The template is not valid. /home/runner/work/test/test/./.github/actions/test/action.yml (Line: 11, Col: 14): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.a
   at GitHub.DistributedTask.ObjectTemplating.TemplateValidationErrors.Check()
   at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
   at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load /home/runner/work/test/test/./.github/actions/test/action.yml
Regarding:
> I want if the value of a is not set the value of b be set as the value of a.
this should work:
${{ inputs.a && inputs.a || inputs.b }}
i.e.
echo '${{ inputs.a && inputs.a || inputs.b }}'
You may set inputs as env vars, apply these validations, and use those inside shell/Bash like this:
.github/actions/test/action.yml
name: Test
description: Test
inputs:
  a:
    description: a
  b:
    description: b
runs:
  using: composite
  steps:
    - name: Test
      env:
        A: '${{ inputs.a && inputs.a || inputs.b }}'
        B: '${{ inputs.b }}'
      shell: bash
      run: |
        echo "A: $A"
        echo "B: $B"        
答案2
得分: 0
这是我选择的解决方案:
name: "composite-test"
description: "test"
inputs:
  a:
    description: "如果a不适用,请将其值设置为空字符串 - 将使用b的值"
  b:
    description: "对b的一些描述"
runs:
  using: "composite"
  steps:
    - name: echo
      run: |
        A=${{ inputs.a }}
        B=${{ inputs.b }}
        if [ "$A" = "" ]; then
          echo "$B"
        else
          echo "$A"
        fi
        echo "$B"        
      shell: bash
请注意,我已将代码部分排除在外,只翻译了您提供的YAML配置部分。
英文:
here is a solution I am going with
name: "composite-test"
description: "test"
inputs:
  a:
    description: "If a is not applicable, set its value to an empty string if - the value of b will be used for it"
  b:
    description: "Some description for b"
runs:
  using: "composite"
  steps:
    - name: echo
      run: |
        A=${{ inputs.a }}
        B=${{ inputs.b }}
        if [ "$A" = "" ]; then
          echo "$B"
        else
          echo "$A"
        fi
        echo "$B"
      shell: bash
</details>
				通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论