如何在github操作工作流程yaml文件中编写If else条件?

问题描述 投票:0回答:1

在这里,我给出了一组线条。但根本行不通。无法同时进行 运行 Clang 静态分析 (C) 和运行静态代码分析 (C++)。为什么?

问题:当我需要在github上推送C或CPP或两者代码时,静态代码分析应该通过yaml文件运行

给定我写的代码

name: Clang Static Analysis

on:
  push:
     branches:
       - main

jobs:
  build:
     runs-on: ubuntu-latest

steps:
  - name: Checkout Code
    uses: actions/checkout@v2

  - name: Run Clang Static Analysis (C)
    if: ${{ contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/') }}
    run: clang --analyze src/*.c

  - name: Run Static Code Analysis (C++)
    if: ${{ contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/') }}
    run: clang++ --analyze src/*.cpp
yaml github-actions clang clang++ clang-static-analyzer
1个回答
0
投票

GitHub Actions 运行器不支持

else
子句。 但是您可以使用各种技巧来实现所需的输出。

根据您的代码,似乎

clang
clang++
步骤都是由同一组条件触发的

 - name: Run Clang Static Analysis (C)
    if: ${{ contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/') }}
    run: clang --analyze src/*.c

  - name: Run Static Code Analysis (C++)
    if: ${{ contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/') }}
    run: clang++ --analyze src/*.cpp

如果要运行“静态代码分析(C++)”,当“Clang 静态分析(C)”失败时,可以使用

failure()
表达式来实现
try catch
else
子句结果。

失败()

当作业的任何先前步骤失败时返回 true。如果您有一系列依赖作业,则如果任何祖先作业失败,failure() 将返回 true。

你的 yaml 文件看起来像这样

 - name: Run Clang Static Analysis (C)
    if: ${{ contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/') }}
    run: clang --analyze src/*.c

  - name: Run Static Code Analysis (C++)
    if: ${{ failure() && (contains(github.event.head_commit.added, 'src/') || contains(github.event.head_commit.modified, 'src/')) }}
    run: clang++ --analyze src/*.cpp
© www.soinside.com 2019 - 2024. All rights reserved.