web-dev-qa-db-fra.com

Comment puis-je facilement faire des actions GitHub Skip Passer l'exécution des travaux ultérieurs sur certaines conditions?

J'ai un script d'action YamL Github, qui consiste sur trois emplois. Le script nocturne doit vérifier s'il y a des commissions d'utilisateurs (qui ne provenaient pas d'un travail automatique), puis effectuez la version de la version nocturne et déploiez la construction dans l'environnement de test.

Je me lance d'utiliser un seul point où je pouvais sauter l'exécution de l'ensemble de la seconde et troisième emplois s'il n'y a pas de commits récents dans les référentiels autres que les autocommensions.

Pour autant que je sache, je devrais échouer sur le script de sauter des actions supplémentaires ou de définir la condition if à chaque étape de chaque travail que j'ai, ce qui n'a pas l'air concis.

J'ai essayé de mettre la condition if condition sur le travail lui-même, mais cela ne fonctionne pas. Le travail exécute même si la valeur de condition if est fausse. Existe-t-il une solution meilleure ou élégante à l'échec du travail si le référentiel est rassis?

name: Nightly script

on:
  workflow_dispatch:
  schedule:
    - cron: "0 1 * * *"  

jobs:
  check-if-there-are-commits:
    runs-on: ubuntu-latest
    outputs:
      alive: ${{ steps.check.outputs.alive }}
    steps:
      ### Activity check
      ### uses GitHub API to check last non-automagic commit in repository
      ### if it's older than a week, all other steps are skipped
      - name: Activity check
        id: "check"
        run: |
          curl -sL  -H "Authorization: bearer ${{secrets.REPO_BEARER_TOKEN}}" https://api.github.com/repos/$GITHUB_REPOSITORY/commits?sha=dev | jq -r '[.[] | select(.author.type != "Bot")][0]' > $HOME/commit.json
          echo $GITHUB_REPOSITORY
          echo $HOME
          echo $(cat $HOME/commit.json)

          date="$(jq -r '.commit.author.date' $HOME/commit.json)"
          echo "Date: $date"
          timestamp=$(date --utc -d "$date" +%s)
          echo "Timestamp: $timestamp"
          echo "Current date: $(date --utc +%s)"
          echo "Difference between the current date and time of the last commit: $(( ( $(date --utc +%s) - $timestamp ) ))"
          days=$(( ( $(date --utc +%s) - $timestamp ) / 86400 ))
          echo "Days: $days"

          alive=0

          echo "Date: $date"
          echo "timestamp: $timestamp"
          echo "days: $days"

          if [ $days -lt 1 ]; then
            echo Repository active : $days days
            alive=1
          else
            echo "[WARNING] Repository not updated : event<${{ github.event_name }}> not allowed to modify stale repository"
          fi
          echo "Alive? $alive"
          if [ $alive -eq 1 ]; then
            echo "REPO_ALIVE=true" >> $GITHUB_ENV
            echo "::set-output name=alive::true"
          else
            echo "REPO_ALIVE=false" >> $GITHUB_ENV
            echo "::set-output name=alive::false"
          fi
          echo "REPO_ACTIVITY=$days" >> $
          echo "::set-output name=days::$days"

  release:
    needs: check-if-there-are-commits
    if: ${{needs.check-if-there-are-commits.outputs.alive}} == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: "Verify"
        run: |
          echo "Alive? ${{needs.check-if-there-are-commits.outputs.alive}}"
          alive=${{needs.check-if-there-are-commits.outputs.alive}}
          if [ $alive == "true" ]; then
            echo "Alive"
          else
            echo "Dead"
            exit 1;
          fi

      - name: Next step
        if: ${{needs.check-if-there-are-commits.outputs.alive}} == 'true'
        run: |
          ...

      #- other steps...

  deploy:
    needs: [check-if-there-are-commits, release]
    if: ${{needs.check-if-there-are-commits.outputs.alive}} == 'true'
    runs-on: ubuntu-latest
    steps:
      #- other steps 
5
Patlatus

Selon la - Documentation :

Lorsque vous utilisez des expressions dans un si conditionnel, vous pouvez omettre la syntaxe d'expression ($ {{}}) car GitHub évalue automatiquement le si conditionné comme une expression, à moins que l'expression ne contienne aucun opérateur. Si l'expression contient des opérateurs, l'expression doit être contenue dans le cadre de $ {{}} pour le marquer explicitement pour évaluation.

Cela signifie que votre si doit être défini comme suit:

if: ${{ needs.check-if-there-are-commits.outputs.alive == 'true' }}
5
soltex