Действие GitHub — невозможно добавить условие «если» поэтапно

#github #continuous-integration #github-actions

#github #непрерывная интеграция #github-действия

Вопрос:

Я использую составные действия GitHub, где я хочу проверить текущее имя ветки в некоторых шагах составного действия и принять решение по этому условию.

например

 name: main

on:
  push:
  repository_dispatch:
    types:
      - manual-trigger

jobs:
  build:
    runs-on: windows-latest
    steps:
    - name: Checkout project
      uses: actions/checkout@v2

    - name: Fetch full project
      run: git fetch --prune --unshallow

    - name: Restore packages
      run: nuget restore -ConfigFile "../Build/Nuget.config"
      working-directory: Projects
      env:
        # ARTIFACTORY_PASSWORD is read by the nuget.config credentials section
        ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}

    - name: Composite Action - To build solution and execute SonarScanner
      uses: ./Build/build-and-sonarscanner-execution
 

Где в составном действии — у меня есть проверка, что Sonar-Scanner должен выполняться только для ветки разработки, иначе будет выполняться только сборка проекта.

 name: build-and-sonarscanner-execution
description: "Build the solution using msbuild and SonarScanner execution"

inputs:
  # Set of parameters

runs:
  using: "composite"
  steps: 
    - name: Restore packages
      run: nuget restore -ConfigFile "../Build/Nuget.config"
      working-directory: ${{ inputs.solution-directory }}
      env:
        # ARTIFACTORY_PASSWORD is read by the nuget.config credentials section
        ARTIFACTORY_PASSWORD: ${{ inputs.artifactory-password }}
      shell: pwsh

    - name: Install dotnet-sonarscanner package
      if: {{ github.ref == 'ref/head/develop' }}  This is the line where it is throwing syntax error as 'if' is not allowed under steps
      run: dotnet tool install --global dotnet-sonarscanner --version 4.10.0
      shell: pwsh
 

Здесь и здесь приведены ссылки, которые я искал, прежде чем применять это условие if здесь. И это работает совершенно нормально, если я применяю этот main.yml, но в файле составного действия yaml это не работает.

Может кто-нибудь, пожалуйста, поделиться тем, чего мне здесь не хватает?

Комментарии:

1. if не поддерживается в действиях composite run steps, только run , shell , name , id , env и working-directory , см. Документацию , и эта проблема GitHub , в которой упоминается «мы не поддерживаем настройку условий».

2. Спасибо @BenjaminW. В случае, если это правильный канал, не могли бы вы сообщить мне, есть ли какой-либо другой подход, который я могу использовать для достижения того, что я объяснил?

3. Вы можете сделать это условием на run шаге; Я не знаю PowerShell, но в Bash это будет что-то вроде run: "[[ $GITHUB_REF == 'ref/head/develop' ]] amp;amp; <your command>"

Ответ №1:

Приведенный выше синтаксис if: ${{ ... }} должен быть в порядке, но кажется, что составные действия пока не поддерживают условия: https://github.com/actions/runner/blob/main/docs/adrs/0549-composite-run-steps.md

Обходной путь, предложенный Бенджамином, работает для меня:

 run: |
  if [[ "${{inputs.myVar}}" != "" ]]; then
    aws ...
  fi
  exit 0

shell: bash
 

Комментарии:

1. Теперь это поддерживается: docs.github.com/en/actions/creating-actions /…

Ответ №2:

Попробуйте следующий синтаксис:

 if: ${{ github.ref == 'refs/heads/xxxx' }}