diff --git a/.github/actions/cache-npm/action.yml b/.github/actions/cache-npm/action.yml new file mode 100644 index 0000000..b99eeb0 --- /dev/null +++ b/.github/actions/cache-npm/action.yml @@ -0,0 +1,25 @@ +# https://docs.github.com/en/actions/creating-actions/creating-a-composite-action +name: Cache NPM +description: Composite action (cache NPM) + +runs: + using: composite + steps: + # https://github.com/actions/cache/blob/master/examples.md#node---npm + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter + - name: Get NPM cache directory + run: echo "NPM_CACHE_DIRECTORY=$(npm config get cache)" >> ${{ github.env }} # use "github.env" instead of "github.output"; if use "github.output", "Warning: Input required and not supplied: path" is displayed on post-process + shell: pwsh # use PowerShell; Bash doesn't work on Windows because the value of "github.env" is like "D:\a\_temp\_runner_file_commands\set_env_XXX". + + - name: Get Node.js version + run: echo "NODEJS_VERSION=$(node -v)" >> ${{ github.env }} + shell: pwsh + + - name: Cache NPM modules + uses: actions/cache@v3 + with: + path: ${{ env.NPM_CACHE_DIRECTORY }} + key: npm-${{ runner.os }}-${{ runner.arch }}-${{ env.NODEJS_VERSION }}-${{ hashFiles('package-lock.json') }} + restore-keys: | + npm-${{ runner.os }}-${{ runner.arch }}-${{ env.NODEJS_VERSION }}- + npm-${{ runner.os }}-${{ runner.arch }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2d8b1a8..eaff221 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,6 +30,8 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.nodejs }} + - name: Cache NPM + uses: ./.github/actions/cache-npm - name: Install dependencies run: npm ci - name: Build