name: Node.js on: push: branches: - main pull_request: jobs: test: timeout-minutes: 10 strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] node-version: [18.x, 20.x, 22.x] package: - cli-hooks - cli-test - logger - oauth - rtm-api - socket-mode - types - web-api - webhook runs-on: ${{ matrix.os }} steps: - name: Configure git settings (Windows) if: matrix.os == 'windows-latest' run: | git config --global core.autocrlf false git config --global core.eol lf - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - run: npm --version - run: npm install working-directory: packages/${{ matrix.package }} - name: Link dependent packages (*nix) if: matrix.os == 'ubuntu-latest' working-directory: packages/${{ matrix.package }} run: | # depending on which package we are testing, also npm link up dependent packages within this monorepo case "$PWD" in */webhook) pushd ../types && npm i && popd && npm link ../types;; */web-api) pushd ../types && npm i && popd && npm link ../types && pushd ../logger && npm i && popd && npm link ../logger;; */oauth) pushd ../logger && npm i && popd && npm link ../logger && pushd ../web-api && npm i && popd && npm link ../web-api;; */socket-mode) pushd ../logger && npm i && popd && npm link ../logger && pushd ../web-api && npm i && popd && npm link ../web-api;; *) ;; # default esac - name: Link dependent packages (Windows) if: matrix.os == 'windows-latest' working-directory: packages/${{ matrix.package }} run: | # depending on which package we are testing, also npm link up dependent packages within this monorepo # NOTE: the following is PowerShell echo "$pwd" switch -Wildcard ( "$pwd" ) { '*\webhook' { pushd ..\types && npm i && popd && npm link ..\types } '*\web-api' { pushd ..\types && npm i && popd && npm link ..\types && pushd ..\logger && npm i && popd && npm link ..\logger } '*\oauth' { pushd ..\logger && npm i && popd && npm link ..\logger && pushd ..\web-api && npm i && popd && npm link ..\web-api } '*\socket-mode' { pushd ..\logger && npm i && popd && npm link ..\logger && pushd ..\web-api && npm i && popd && npm link ..\web-api } } - run: npm test working-directory: packages/${{ matrix.package }} - name: Check for coverage report existence id: check_coverage uses: andstor/file-existence-action@v3 with: files: packages/${{ matrix.package }}/coverage/lcov.info - name: Upload code coverage if: matrix.node-version == '22.x' && matrix.os == 'ubuntu-latest' && steps.check_coverage.outputs.files_exists == 'true' uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} directory: packages/${{ matrix.package }}/coverage flags: ${{ matrix.package }} verbose: true