在这里,我给出了一组线条。但根本行不通。无法同时进行 运行 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
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