name: BP DEVTOOLS CI on: workflow_dispatch: push: branches: - main pull_request: env: HUSKY: 0 jobs: main: runs-on: ubuntu-latest defaults: run: working-directory: ${{ github.workspace }} strategy: matrix: node-version: [ 18 ] npm-version: [ 9 ] yarn-version: [ '1.22.x' ] pnpm-version: [ 7 ] steps: - name: Checkout [Pull Request] uses: actions/checkout@v2 if: ${{ github.event_name == 'pull_request' }} with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Checkout [Default Branch] uses: actions/checkout@v2 if: ${{ github.event_name != 'pull_request' }} with: fetch-depth: 0 - name: Derive appropriate SHAs for base and head for `nx affected` commands uses: nrwl/nx-set-shas@v2 with: main-branch-name: ${{ github.base_ref }} - name: Detect package manager id: package_manager run: | echo "::set-output name=name::$([[ -f ./yarn.lock ]] && echo "yarn" || ([[ -f ./pnpm-lock.yaml ]] && echo "pnpm") || echo "npm")" - name: Set node/npm/yarn versions using volta uses: volta-cli/action@v4 with: node-version: '${{ matrix.node-version }}' npm-version: '${{ matrix.npm-version }}' yarn-version: '${{ matrix.yarn-version }}' - name: Install PNPM if: steps.package_manager.outputs.name == 'pnpm' uses: pnpm/action-setup@v2.2.1 with: version: '${{ matrix.pnpm-version }}' - name: Print node/npm/yarn/pnpm versions id: versions run: | node_ver=$( node --version ) yarn_ver=$( yarn --version || true ) pnpm_ver=$( pnpm --version || true ) echo "Node: ${node_ver:1}" echo "NPM: $(npm --version )" if [[ $yarn_ver != '' ]]; then echo "Yarn: $yarn_ver"; fi if [[ $pnpm_ver != '' ]]; then echo "PNPM: $pnpm_ver"; fi echo "::set-output name=node_version::${node_ver:1}" - name: Use the node_modules cache if available [npm] if: steps.package_manager.outputs.name == 'npm' uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Use the node_modules cache if available [pnpm] if: steps.package_manager.outputs.name == 'pnpm' uses: actions/cache@v2 with: path: ~/.pnpm-store key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Get yarn cache directory path if: steps.package_manager.outputs.name == 'yarn' id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - name: Use the node_modules cache if available [yarn] if: steps.package_manager.outputs.name == 'yarn' uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Install dependencies run: | if [ "${{ steps.package_manager.outputs.name == 'yarn' }}" == "true" ]; then echo "Running yarn install --frozen-lockfile" yarn install --frozen-lockfile elif [ "${{ steps.package_manager.outputs.name == 'pnpm' }}" == "true" ]; then echo "Running pnpm install --frozen-lockfile" pnpm install --frozen-lockfile else echo "Running npm ci" npm ci fi - run: | npx nx format:check npx nx affected --target lint --parallel 3 npx nx affected --target test --parallel 3 --ci --code-coverage npx nx affected --target build --parallel 3 - name: Release if: ${{ success() && (github.event_name != 'pull_request' || github.event.action == 'closed' && github.event.pull_request.merged == true) }} env: GH_TOKEN: ${{ secrets.GH_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: | npx nx run-many --target release --all