Skip to content

Commit a180b74

Browse files
committed
feat: add support for pnpm
Signed-off-by: Emilien Escalle <[email protected]>
1 parent 8181eca commit a180b74

24 files changed

+63773
-23036
lines changed

.github/dependabot.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ updates:
2929
- package-ecosystem: npm
3030
open-pull-requests-limit: 20
3131
versioning-strategy: increase
32-
directory: "/"
32+
directories:
33+
- "/"
34+
- "/tests/npm"
35+
- "/tests/pnpm"
36+
- "/tests/pnpm-package-manager"
37+
- "/tests/yarn"
3338
schedule:
3439
interval: weekly
3540
day: friday

.github/workflows/__shared-ci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ jobs:
1414
linter:
1515
uses: hoverkraft-tech/ci-github-common/.github/workflows/linter.yml@198d391bd7046a3c8ca503d3387ad9c5ba8f9f29 # 0.22.0
1616

17+
test-action-dependencies-cache:
18+
name: Test action "dependencies-cache"
19+
needs: linter
20+
uses: ./.github/workflows/__test-action-dependencies-cache.yml
21+
1722
test-action-get-package-manager:
1823
name: Test action "get-package-manager"
1924
needs: linter
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: Internal - Tests for "dependencies-cache" action
2+
3+
on:
4+
workflow_call:
5+
6+
permissions:
7+
contents: read
8+
9+
jobs:
10+
test:
11+
name: Test "dependencies-cache" (${{ matrix.working-directory }})
12+
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
include:
16+
- working-directory: tests/npm
17+
package-manager: npm
18+
19+
- working-directory: tests/pnpm
20+
package-manager: pnpm
21+
22+
- working-directory: tests/pnpm-package-manager
23+
package-manager: pnpm
24+
25+
- working-directory: tests/yarn
26+
package-manager: yarn
27+
steps:
28+
# jscpd:ignore-start
29+
30+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
31+
32+
- id: setup-node
33+
uses: ./actions/setup-node
34+
with:
35+
working-directory: ${{ matrix.working-directory }}
36+
37+
- name: Check that package manager is the expected one
38+
id: check-package-manager
39+
run: |
40+
if [[ "${{ steps.setup-node.outputs.run-script-command }}" != "${{ matrix.package-manager }}"* ]]; then
41+
echo "Package manager is not ${{ matrix.package-manager }}"
42+
exit 1
43+
fi
44+
45+
# jscpd:ignore-end
46+
47+
- id: get-dependencies-cache
48+
uses: ./actions/dependencies-cache
49+
with:
50+
working-directory: ${{ matrix.working-directory }}
51+
dependencies: |
52+
gatsby
53+
jest
54+
nx
55+
prettier
56+
storybook
57+
unknown
58+
59+
- name: Check "dependencies-cache" configured cache
60+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
61+
with:
62+
script: |
63+
const assert = require("assert");

.github/workflows/__test-action-get-package-manager.yml

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,65 @@ permissions:
77
contents: read
88

99
jobs:
10-
test-yarn:
11-
name: Tests with Yarn package manager
10+
test:
11+
name: Test "get-package-manager" (${{ matrix.working-directory }})
1212
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
include:
16+
- working-directory: tests/npm
17+
package-manager: npm
18+
lock-file: package-lock.json
19+
cache-dependency-path: "**/package-lock.json"
20+
install-command: npm ci
21+
run-script-command: npm run
22+
23+
- working-directory: tests/pnpm
24+
package-manager: pnpm
25+
lock-file: pnpm-lock.yaml
26+
cache-dependency-path: "**/pnpm-lock.yaml"
27+
install-command: pnpm install --frozen-lockfile
28+
run-script-command: pnpm
29+
30+
- working-directory: tests/pnpm-package-manager
31+
package-manager: pnpm
32+
lock-file: pnpm-lock.yaml
33+
cache-dependency-path: "**/pnpm-lock.yaml"
34+
install-command: pnpm install --frozen-lockfile
35+
run-script-command: pnpm
36+
37+
- working-directory: tests/yarn
38+
package-manager: yarn
39+
lock-file: yarn.lock
40+
cache-dependency-path: "**/yarn.lock"
41+
install-command: yarn install --frozen-lockfile
42+
run-script-command: yarn
1343
steps:
1444
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
1545

16-
- run: rm -f package-lock.json
17-
1846
- id: get-package-manager
1947
uses: ./actions/get-package-manager
48+
with:
49+
working-directory: ${{ matrix.working-directory }}
2050

2151
- name: Check "get-package-manager" outputs
2252
run: |
23-
if [ "${{ steps.get-package-manager.outputs.package-manager }}" != 'yarn' ]; then
53+
if [ "${{ steps.get-package-manager.outputs.package-manager }}" != '${{ matrix.package-manager }}' ]; then
2454
echo "get-package-manager outputs result is not valid"
2555
exit 1
2656
fi
2757
28-
test-npm:
29-
name: Tests with Npm package manager
30-
runs-on: ubuntu-latest
31-
steps:
32-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
33-
34-
- run: rm -f yarn.lock
58+
if [ "${{ steps.get-package-manager.outputs.cache-dependency-path }}" != '${{ matrix.cache-dependency-path }}' ]; then
59+
echo "get-package-manager outputs cache-dependency-path is not valid"
60+
exit 1
61+
fi
3562
36-
- id: get-package-manager
37-
uses: ./actions/get-package-manager
63+
if [ "${{ steps.get-package-manager.outputs.install-command }}" != '${{ matrix.install-command }}' ]; then
64+
echo "get-package-manager outputs install-command is not valid"
65+
exit 1
66+
fi
3867
39-
- name: Check "get-package-manager" outputs
40-
run: |
41-
if [ "${{ steps.get-package-manager.outputs.package-manager }}" != 'npm' ]; then
42-
echo "get-package-manager outputs result is not valid"
68+
if [ "${{ steps.get-package-manager.outputs.run-script-command }}" != '${{ matrix.run-script-command }}' ]; then
69+
echo "get-package-manager outputs run-script-command is not valid"
4370
exit 1
4471
fi

.github/workflows/__test-action-has-installed-dependencies.yml

Lines changed: 32 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,47 @@ permissions:
77
contents: read
88

99
jobs:
10-
test-yarn:
11-
name: Tests with Yarn package manager
10+
test:
11+
name: Test "has-installed-dependencies" (${{ matrix.working-directory }})
1212
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
include:
16+
- working-directory: tests/npm
17+
package-manager: npm
18+
lock-file: package-lock.json
19+
20+
- working-directory: tests/pnpm
21+
package-manager: pnpm
22+
lock-file: pnpm-lock.yaml
23+
24+
- working-directory: tests/pnpm-package-manager
25+
package-manager: pnpm
26+
lock-file: pnpm-lock.yaml
27+
28+
- working-directory: tests/yarn
29+
package-manager: yarn
30+
lock-file: yarn.lock
1331
steps:
1432
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
1533

16-
- run: rm -f package-lock.json
34+
- id: setup-node
35+
uses: ./actions/setup-node
36+
with:
37+
working-directory: ${{ matrix.working-directory }}
1738

18-
- uses: ./actions/setup-node
39+
- name: Check that package manager is the expected one
40+
id: check-package-manager
41+
run: |
42+
if [[ "${{ steps.setup-node.outputs.run-script-command }}" != "${{ matrix.package-manager }}"* ]]; then
43+
echo "Package manager is not ${{ matrix.package-manager }}"
44+
exit 1
45+
fi
1946
2047
- id: has-installed-dependencies
2148
uses: ./actions/has-installed-dependencies
2249
with:
50+
working-directory: ${{ matrix.working-directory }}
2351
dependencies: |
2452
gatsby
2553
jest
@@ -59,57 +87,3 @@ jobs:
5987
JSON.stringify(expectedResult),
6088
`"installed-dependencies" output is not valid`
6189
);
62-
63-
test-npm:
64-
name: Tests with Npm package manager
65-
runs-on: ubuntu-latest
66-
steps:
67-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
68-
69-
- run: rm -f yarn.lock
70-
71-
- uses: ./actions/setup-node
72-
73-
- id: has-installed-dependencies
74-
uses: ./actions/has-installed-dependencies
75-
with:
76-
dependencies: |
77-
nx
78-
gatsby
79-
storybook
80-
prettier
81-
unknown
82-
83-
- name: Check "has-installed-dependencies" outputs
84-
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
85-
with:
86-
script: |
87-
// jscpd:ignore-start
88-
const assert = require("assert");
89-
90-
const installedDependenciesOutput = `${{ steps.has-installed-dependencies.outputs.installed-dependencies }}`;
91-
assert(installedDependenciesOutput.length, `"installed-dependencies" output is empty`);
92-
93-
// Check if is valid Json
94-
let installedDependencies = null;
95-
try {
96-
installedDependencies = JSON.parse(installedDependenciesOutput);
97-
} catch (error) {
98-
throw new Error(`"installed-dependencies" output is not a valid JSON: ${error}`);
99-
}
100-
101-
const expectedResult = {
102-
nx: true,
103-
gatsby: true,
104-
storybook: true,
105-
prettier: true,
106-
unknown: false,
107-
};
108-
109-
assert.equal(
110-
JSON.stringify(installedDependencies),
111-
JSON.stringify(expectedResult),
112-
`"installed-dependencies" output is not valid`
113-
);
114-
115-
// jscpd:ignore-end

.github/workflows/__test-action-setup-node.yml

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,45 @@ permissions:
77
contents: read
88

99
jobs:
10-
test-yarn:
11-
name: Tests with Yarn package manager
10+
test:
11+
name: Test "setup-node" (${{ matrix.working-directory }})
1212
runs-on: ubuntu-latest
13+
strategy:
14+
matrix:
15+
include:
16+
- working-directory: tests/npm
17+
package-manager: npm
18+
lock-file: package-lock.json
19+
run-script-command: npm run
20+
21+
- working-directory: tests/pnpm
22+
package-manager: pnpm
23+
lock-file: pnpm-lock.yaml
24+
run-script-command: pnpm
25+
26+
- working-directory: tests/pnpm-package-manager
27+
package-manager: pnpm
28+
lock-file: pnpm-lock.yaml
29+
run-script-command: pnpm
30+
31+
- working-directory: tests/yarn
32+
package-manager: yarn
33+
lock-file: yarn.lock
34+
run-script-command: yarn
1335
steps:
1436
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
1537

16-
- run: |
17-
rm -f package-lock.json
18-
echo "lts/*" > .nvmrc
38+
- run: echo "lts/*" > .nvmrc
39+
working-directory: ${{ matrix.working-directory }}
1940

2041
- id: setup-node
2142
uses: ./actions/setup-node
43+
with:
44+
working-directory: ${{ matrix.working-directory }}
2245

2346
- name: Check "setup-node" outputs
2447
run: |
25-
if [ "${{ steps.setup-node.outputs.run-script-command }}" != 'yarn' ]; then
26-
echo "setup-node outputs result is not valid"
27-
exit 1
28-
fi
29-
30-
test-npm:
31-
name: Tests with Npm package manager
32-
runs-on: ubuntu-latest
33-
steps:
34-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
35-
36-
- run: |
37-
rm -f yarn.lock
38-
echo "lts/*" > .nvmrc
39-
40-
- id: setup-node
41-
uses: ./actions/setup-node
42-
43-
- name: Check "setup-node" outputs
44-
run: |
45-
if [ "${{ steps.setup-node.outputs.run-script-command }}" != 'npm run' ]; then
46-
echo "setup-node outputs result is not valid"
48+
if [ "${{ steps.setup-node.outputs.run-script-command }}" != "${{ matrix.run-script-command }}" ]; then
49+
echo "get-package-manager outputs run-script-command is not valid"
4750
exit 1
4851
fi

0 commit comments

Comments
 (0)