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

如何在Github Action中优先执行子包B、C的npm test再执行仓库A

如何在GitHub Action中先执行子仓库B、C的npm test再执行父仓库A的测试?

我有三个仓库A、B、C,其中A是父仓库,B和C作为包存在于A仓库中。当前A仓库的GitHub Action配置如下,想知道能不能实现先跑B、C的npm test,再跑A的npm test?如果可以,具体该怎么操作?

on:
  push:
    tags:
      - '*'
name: 🚀 Deploy website on create tag
jobs:
  web-deploy:
    name: 🎉 Deploy
    runs-on: ubuntu-latest
    steps:
    - name: 🚚 Get latest code
      uses: actions/checkout@v2

    - name: Use Node.js 14
      uses: actions/setup-node@v2
      with:
        node-version: '14'
        registry-url: 'https://registry.npmjs.org'
        scope: '@xxxxxx'
    - name: 🔨 NPM install en build prod
      run: echo "//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}" > .npmrc
    - run: npm ci
    - run: npm run build
    - run: npm run test

    - name: Copy public dir to production
      uses: appleboy/scp-action@master
      with:
        host:  ${{ secrets.HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{secrets.SSH_PRIVATE_KEY}}
        port: ${{secrets.SSH_PORT}}
        command_timeout: 30s
        source: "./public"
        target: "/var/www/html/"

当然可以实现,核心就是在A仓库的测试命令之前,分别进入B、C对应的目录执行它们的测试用例。具体操作如下:

修改后的GitHub Action配置

on:
  push:
    tags:
      - '*'
name: 🚀 Deploy website on create tag
jobs:
  web-deploy:
    name: 🎉 Deploy
    runs-on: ubuntu-latest
    steps:
    - name: 🚚 Get latest code
      uses: actions/checkout@v2

    - name: Use Node.js 14
      uses: actions/setup-node@v2
      with:
        node-version: '14'
        registry-url: 'https://registry.npmjs.org'
        scope: '@xxxxxx'
    - name: 🔨 配置NPM认证
      run: echo "//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}" > .npmrc
    - run: npm ci
    - run: npm run build

    # 新增:执行仓库B的测试
    - name: 🧪 运行仓库B的测试用例
      run: npm test
      working-directory: ./packages/B  # 替换成B在A仓库中的实际路径

    # 新增:执行仓库C的测试
    - name: 🧪 运行仓库C的测试用例
      run: npm test
      working-directory: ./packages/C  # 替换成C在A仓库中的实际路径

    - run: npm run test

    - name: Copy public dir to production
      uses: appleboy/scp-action@master
      with:
        host:  ${{ secrets.HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{secrets.SSH_PRIVATE_KEY}}
        port: ${{secrets.SSH_PORT}}
        command_timeout: 30s
        source: "./public"
        target: "/var/www/html/"

关键说明

  • 务必将./packages/B和./packages/C替换为B、C在A仓库中的真实目录路径,比如如果B直接放在根目录下的B文件夹,就写./B
  • 因为npm ci已经安装了所有项目依赖(包括B、C的依赖),所以不需要在B、C目录重复执行npm install或npm ci
  • 测试步骤的顺序可以按需调整,只要保证B、C的测试在A的测试之前执行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:35:27