如何在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
相关产品推荐
相关产品推荐

