diff --git a/.github/actions/setup-pnpm-with-dependencies/action.yaml b/.github/actions/setup-pnpm-with-dependencies/action.yaml new file mode 100644 index 00000000..f07a15b5 --- /dev/null +++ b/.github/actions/setup-pnpm-with-dependencies/action.yaml @@ -0,0 +1,61 @@ +name: Setup PNPM with Yarn Dependencies +description: Reusable composition of setup-node, cache, and pnpm install actions +inputs: + nodejs-version: + description: 'Version of NodeJS to use (ex: 18.18.2)' + default: '18.18.2' + force-install: + description: When 'true', pnpm install will be executed regardless of a cache hit + required: false + default: 'false' + frozen-lockfile: + description: When false, pnpm install will use the --no-frozen-lockfile flag + required: false + default: 'true' +outputs: + cache-hit: + description: Whether or not there was a cache hit + value: ${{ steps.dependency-cache.outputs.cache-hit }} +runs: + using: composite + steps: + + - name: get Node version + id: node-version + shell: bash + run: | + voltaNodeVersion=$(cat package.json|jq -r ".volta.node") + if [[ $voltaNodeVersion == null ]]; then + voltaNodeVersion="${{ inputs.nodejs-version }}" + fi + voltaPnpmVersion=$(cat package.json|jq -r ".volta.pnpm") + if [[ $voltaPnpmVersion == null ]]; then + voltaPnpmVersion="8.10.5" + fi + + echo "node-version=${voltaNodeVersion}">> $GITHUB_OUTPUT + echo "pnpm-version=${voltaPnpmVersion}">> $GITHUB_OUTPUT + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ steps.node-version.outputs.node-version }} + + - name: Install PNPM + shell: bash + run: | + npm i -g pnpm@${{ steps.node-version.outputs.pnpm-version }} + pnpm --version + + + - name: Dependency Cache + id: dependency-cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: pnpm-${{ steps.node-version.outputs.pnpm-version }}-${{ steps.node-version.outputs.node-version }}-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} + + - name: Install Dependencies + if: ${{ inputs.force-install == 'true' || steps.dependency-cache.outputs.cache-hit != 'true' }} + shell: bash + run: pnpm i${{ inputs.frozen-lockfile == 'false' && ' --no-frozen-lockfile' || '' }} diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index d3703a9b..22a598f0 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -33,13 +33,8 @@ jobs: # Reference the env variable NPM_TOKEN here, not the secret run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: Install dependencies - run: pnpm install + - name: Setup PNPM with Dependencies + uses: ./.github/actions/setup-pnpm-with-dependencies/ - name: Build # Since we lint in the Tests job, we can just build here diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 74233a09..27ee2fc6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -35,13 +35,10 @@ jobs: with: fetch-depth: 0 - - name: Use Node.js - uses: actions/setup-node@v4 + - name: Setup PNPM with Dependencies + uses: ./.github/actions/setup-pnpm-with-dependencies/ with: - node-version-file: '.nvmrc' - - - name: Install dependencies - run: pnpm install + force-install: true - name: Stylelint run: pnpm run stylelint