You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Action工作流YAML中编写If else?工作流问题求助

解决GitHub Actions中Clang静态分析仅在同时存在C/C++文件时运行的问题

问题根源在于:当目录中没有对应类型的文件时,Shell会将src/*.c或src/*.cpp作为字面量传递给Clang,导致工具因找不到文件而报错。以下是两种可行的解决方法:


方案一:利用GitHub Actions内置条件判断

通过exists()函数检查是否存在目标类型的文件,仅当文件存在时才执行对应的分析步骤,代码简洁直接:

name: Clang Static Analysis

on:
  push:
    branches:
      - development/*
      - test/*
      - feature/*
      
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

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

      - name: Run Clang Static Analysis (C)
        if: exists('src/*.c')
        run: clang --analyze src/*.c

      - name: Run Static Code Analysis (C++)
        if: exists('src/*.cpp')
        run: clang++ --analyze src/*.cpp

exists()函数会自动匹配路径下的所有对应文件,只要存在至少一个目标文件,就会执行该步骤。


方案二:通过Shell命令处理无匹配文件的情况

如果需要更灵活的逻辑控制,可以直接在Shell脚本中处理通配符匹配,避免无文件时的报错:

name: Clang Static Analysis

on:
  push:
    branches:
      - development/*
      - test/*
      - feature/*
      
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

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

      - name: Run Clang Static Analysis (C)
        run: |
          shopt -s nullglob
          c_files=(src/*.c)
          if [ ${#c_files[@]} -gt 0 ]; then
            clang --analyze "${c_files[@]}"
          fi

      - name: Run Static Code Analysis (C++)
        run: |
          shopt -s nullglob
          cpp_files=(src/*.cpp)
          if [ ${#cpp_files[@]} -gt 0 ]; then
            clang++ --analyze "${cpp_files[@]}"
          fi
  • shopt -s nullglob:让Bash在通配符无匹配结果时返回空数组,而非原字符串
  • 通过数组长度判断是否存在目标文件,仅当有文件时才执行分析命令

内容的提问来源于stack exchange,提问作者Jasmi VInay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:55:03