Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions .github/actions/setupNodeAndInstall/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Setup Node and install dependencies
description: Configures npm, pnpm, or Yarn, restores the matching dependency cache, and installs dependencies.
inputs:
node-version:
description: Node.js version to use.
required: true
package-manager:
description: 'Package manager to use: npm, pnpm, or yarn.'
required: false
default: npm
package-manager-version:
description: 'pnpm version to install when package-manager is pnpm.'
required: false
default: '10'
cache-dependency-path:
description: 'Path to the package manager lockfile.'
required: false
default: package-lock.json
install-command:
description: 'Command used to install repository dependencies.'
required: false
default: npm ci
runs:
using: composite
steps:
- name: Validate package manager
shell: bash
env:
PACKAGE_MANAGER: ${{ inputs.package-manager }}
run: |
if [ "$PACKAGE_MANAGER" != "npm" ] && [ "$PACKAGE_MANAGER" != "pnpm" ] && [ "$PACKAGE_MANAGER" != "yarn" ]; then
echo "Unsupported package manager: $PACKAGE_MANAGER. Expected npm, pnpm, or yarn."
exit 1
fi

- name: Setup pnpm
if: inputs.package-manager == 'pnpm'
uses: pnpm/action-setup@v4
with:
version: ${{ inputs.package-manager-version }}

- name: Setup Node.js and restore dependency cache
uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
cache: ${{ inputs.package-manager }}
cache-dependency-path: ${{ inputs.cache-dependency-path }}

- name: Resolve install command
id: install-command
shell: bash
env:
INSTALL_COMMAND: ${{ inputs.install-command }}
PACKAGE_MANAGER: ${{ inputs.package-manager }}
run: |
if [ "$INSTALL_COMMAND" = "npm ci" ]; then
case "$PACKAGE_MANAGER" in
pnpm) INSTALL_COMMAND="pnpm install --frozen-lockfile" ;;
yarn) INSTALL_COMMAND="yarn install --network-timeout 600000" ;;
esac
fi
echo "value=$INSTALL_COMMAND" >> "$GITHUB_OUTPUT"

- name: Install npm dependencies
if: inputs.package-manager == 'npm' && steps.install-command.outputs.value == 'npm ci'
uses: salesforcecli/github-workflows/.github/actions/npmInstallWithRetries@main

- name: Install Yarn dependencies
if: inputs.package-manager == 'yarn' && steps.install-command.outputs.value == 'yarn install --network-timeout 600000'
uses: salesforcecli/github-workflows/.github/actions/yarnInstallWithRetries@main

- name: Install custom or pnpm dependencies
if: (inputs.package-manager != 'npm' || steps.install-command.outputs.value != 'npm ci') && (inputs.package-manager != 'yarn' || steps.install-command.outputs.value != 'yarn install --network-timeout 600000')
uses: salesforcecli/github-workflows/.github/actions/retry@main
with:
command: ${{ steps.install-command.outputs.value }}
Loading