assumes a file structure something like:
├── package.json
└── packages
├── foo
│ ├── package.json
│ └── ...
└── bar
├── package.json
└── ...
| name: build | |
| on: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| packages: ${{ steps.set_packages.outputs.packages }} | |
| steps: | |
| - uses: actions/checkout@v2 | |
| - id: set_packages | |
| run: | | |
| echo "::set-output name=packages::$( | |
| find packages -mindepth 1 -maxdepth 1 -exec basename '{}' ';' \ | |
| | jq --compact-output --raw-input -n '[inputs]' | |
| )" | |
| build: | |
| name: Build ${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| needs: matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| package: ${{ fromJson(needs.matrix.outputs.packages) }} | |
| defaults: | |
| run: | |
| working-directory: ./packages/${{ matrix.package }} | |
| steps: | |
| - uses: actions/checkout@v2 | |
| - name: Set up Node | |
| uses: actions/setup-node@v2 | |
| with: | |
| node-version: "16" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Build | |
| run: npm run build |