如何为特定分支的对应子包配置GitHub Action执行检查?
可以实现,以下是具体配置方案
你只需要通过分支名提取对应的包名称,然后指定工作目录到该包的路径下执行lint和测试命令即可。修改后的GitHub Action配置如下:
name: Pre checks (eslint, test coverage) on: push: branches: - "**" - '!master' jobs: package-specific-checks: name: Run checks for targeted package runs-on: ubuntu-latest # 仅对dev/package开头的分支执行该任务 if: startsWith(github.ref_name, 'dev/package') steps: - uses: actions/checkout@v3 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} # 从分支名中提取包名(比如dev/packageA → packageA) - name: Get target package name run: | PACKAGE_NAME=$(echo "${{ github.ref_name }}" | cut -d'/' -f2) echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV # 校验包目录是否存在,避免执行错误 if [ ! -d "./packages/$PACKAGE_NAME" ]; then echo "Error: Package directory ./packages/$PACKAGE_NAME not found" exit 1 fi - name: Install dependencies run: npm ci working-directory: ./packages/${{ env.PACKAGE_NAME }} - name: Run lint run: npm run lint working-directory: ./packages/${{ env.PACKAGE_NAME }} - name: Run tests run: npm test working-directory: ./packages/${{ env.PACKAGE_NAME }}
配置说明:
- 分支触发控制:通过
if: startsWith(github.ref_name, 'dev/package')确保只有推送到dev/packageA、dev/packageB这类分支时,才执行该任务;其他分支会自动跳过这个job。 - 包名提取:用
cut命令分割分支名,取出/后的第二部分作为包名称,存入环境变量PACKAGE_NAME。 - 定向执行命令:所有依赖安装、lint、测试步骤都指定工作目录为
./packages/${{ env.PACKAGE_NAME }},只会对对应包的代码进行校验,不会影响其他包。
如果你的其他分支也需要执行全仓库的校验,可以保留原来的test job,同时新增上面的package-specific-checks job,让两者共存即可。
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

