Skip to content

Commit 27f1916

Browse files
authored
internal: Improve yarn performance in CI (#3323)
1 parent bc09cf4 commit 27f1916

File tree

2 files changed

+56
-38
lines changed

2 files changed

+56
-38
lines changed

.circleci/config.yml

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,26 @@
33
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
44
#
55
version: 2.1
6-
jobs:
7-
setup:
6+
executors:
7+
node:
88
docker: &docker
9-
# specify the version you desire here
109
- image: cimg/node:22.12
10+
environment:
11+
# the whole CI is reset each time anyway, so only track local cache
12+
YARN_ENABLE_GLOBAL_CACHE: false
13+
YARN_ENABLE_MIRROR: false
14+
15+
# Don't waste io
16+
YARN_ENABLE_PROGRESS_BARS: false
17+
YARN_ENABLE_INLINE_BUILDS: true
18+
# Don't revalidate
19+
YARN_ENABLE_SCRIPTS: false
20+
# Keep install cache
21+
YARN_ENABLE_IMMUTABLE_INSTALLS: true
22+
23+
jobs:
24+
setup:
25+
executor: node
1126
resource_class: large
1227
steps:
1328
- checkout:
@@ -18,44 +33,42 @@ jobs:
1833
npm pkg set 'workspaces[]'='examples/*'
1934
- restore_cache:
2035
keys:
21-
- v12-dependencies-{{ checksum "yarn.lock" }}-{{ checksum "examples/github-app/package.json" }}
36+
- v13-dependencies-{{ checksum "yarn.lock" }}-{{ checksum "examples/github-app/package.json" }}-{{ checksum "examples/todo-app/package.json" }}
2237
# fallback to using the latest cache if no exact match is found
23-
- v12-dependencies-
38+
- v13-dependencies-
2439
- run:
2540
name: yarn install
2641
command: |
27-
sudo corepack enable
28-
YARN_ENABLE_GLOBAL_CACHE=false YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn workspace todo-app add @data-client/endpoint@workspace:^ @data-client/react@workspace:^ @data-client/rest@workspace:^
29-
YARN_ENABLE_GLOBAL_CACHE=false YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn workspace github-app add @data-client/graphql@workspace:^ @data-client/react@workspace:^ @data-client/rest@workspace:^
30-
YARN_ENABLE_GLOBAL_CACHE=false YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install
42+
yarn up @data-client/endpoint@workspace:^ @data-client/react@workspace:^ @data-client/rest@workspace:^
3143
- save_cache:
3244
paths:
3345
- .yarn/cache
3446
- .yarn/install-state.gz
35-
key: v12-dependencies-{{ checksum "yarn.lock" }}-{{ checksum "examples/github-app/package.json" }}
47+
key: v13-dependencies-{{ checksum "yarn.lock" }}-{{ checksum "examples/github-app/package.json" }}-{{ checksum "examples/todo-app/package.json" }}
3648
- run: yarn run ci:build:types
3749
- run: yarn run ci:build
3850
- persist_to_workspace:
3951
root: ~/
4052
paths:
4153
# explicitly list so we can ignore some directories that are not needed
42-
- project/packages
54+
- project/.yarn
55+
- project/__tests__
4356
- project/examples
4457
- project/node_modules
45-
- project/__tests__
58+
- project/packages
4659
- project/scripts
60+
- project/.yarnrc.yml
4761
- project/babel.config.js
62+
- project/eslint.config.mjs
4863
- project/jest.config.js
64+
- project/package.json
4965
- project/tsconfig-base.json
5066
- project/tsconfig.json
51-
- project/eslint.config.mjs
52-
- project/yarn.lock
5367
- project/tsconfig.test.json
54-
- project/package.json
55-
- project/.yarnrc.yml
56-
- project/.yarn
68+
- project/yarn.lock
69+
5770
lint:
58-
docker: *docker
71+
executor: node
5972
resource_class: medium+
6073
steps:
6174
- attach_workspace:
@@ -65,7 +78,7 @@ jobs:
6578
yarn lint --quiet packages/*/src
6679
6780
typecheck:
68-
docker: *docker
81+
executor: node
6982
resource_class: small
7083
steps:
7184
- attach_workspace:
@@ -78,7 +91,7 @@ jobs:
7891
parameters:
7992
react-version:
8093
type: string
81-
docker: *docker
94+
executor: node
8295
resource_class: large
8396
steps:
8497
- attach_workspace:
@@ -87,15 +100,15 @@ jobs:
87100
name: Installing React Version
88101
command: |
89102
if [ "<< parameters.react-version >>" == "^17.0.0" ]; then
90-
YARN_ENABLE_GLOBAL_CACHE=false yarn remove @react-navigation/native @react-navigation/native-stack react-native-screens
91-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspace @data-client/react remove @react-navigation/native
92-
YARN_ENABLE_GLOBAL_CACHE=false yarn add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >> @testing-library/react@^12.0.0 @testing-library/react-hooks @react-navigation/native@^6.0.0 @react-navigation/native-stack@^6.0.0 react-native-screens@^3.0.0
93-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspaces foreach -W --include @data-client/img --include @data-client/react --include @data-client/ssr --include @data-client/test --include @data-client/use-enhanced-reducer add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
94-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspace @data-client/react add @react-navigation/native@^6.0.0
95-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspace @data-client/test add @testing-library/react@^12.0.0
103+
yarn remove @react-navigation/native @react-navigation/native-stack react-native-screens
104+
yarn workspace @data-client/react remove @react-navigation/native
105+
yarn add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >> @testing-library/react@^12.0.0 @testing-library/react-hooks @react-navigation/native@^6.0.0 @react-navigation/native-stack@^6.0.0 react-native-screens@^3.0.0
106+
yarn workspaces foreach -W --include @data-client/img --include @data-client/react --include @data-client/ssr --include @data-client/test --include @data-client/use-enhanced-reducer add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
107+
yarn workspace @data-client/react add @react-navigation/native@^6.0.0
108+
yarn workspace @data-client/test add @testing-library/react@^12.0.0
96109
elif [ "<< parameters.react-version >>" == "^18" ]; then
97-
YARN_ENABLE_GLOBAL_CACHE=false yarn add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
98-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspaces foreach -W --include @data-client/img --include @data-client/react --include @data-client/ssr --include @data-client/test --include @data-client/use-enhanced-reducer add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
110+
yarn add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
111+
yarn workspaces foreach -W --include @data-client/img --include @data-client/react --include @data-client/ssr --include @data-client/test --include @data-client/use-enhanced-reducer add --dev react@<< parameters.react-version >> react-dom@<< parameters.react-version >> react-test-renderer@<< parameters.react-version >>
99112
fi
100113
- run:
101114
name: Running Jest
@@ -133,7 +146,7 @@ jobs:
133146
ANANSI_JEST_TYPECHECK=false npm test --ci --maxWorkers=2 --selectProjects Node
134147
135148
non-app-examples:
136-
docker: *docker
149+
executor: node
137150
resource_class: small
138151
steps:
139152
- attach_workspace:
@@ -147,24 +160,25 @@ jobs:
147160
parameters:
148161
typescript-version:
149162
type: string
150-
docker: *docker
163+
executor: node
151164
steps:
152165
- attach_workspace:
153166
at: ~/
154167
- run:
168+
name: Install TypeScript Version
155169
command: |
156170
if [ "<< parameters.typescript-version >>" != "latest" ]; then
157-
YARN_ENABLE_GLOBAL_CACHE=false yarn add --dev typescript@~<< parameters.typescript-version >>
171+
yarn add --dev typescript@~<< parameters.typescript-version >>
158172
fi
159173
if [[ "<< parameters.typescript-version >>" == "4.0" || \
160174
"<< parameters.typescript-version >>" == "4.1" || \
161175
"<< parameters.typescript-version >>" == "4.3" ]]; then
162176
sed -i '/"@types\/react":/d' package.json
163177
sed -i '/"@types\/react-dom":/d' package.json
164-
YARN_ENABLE_GLOBAL_CACHE=false yarn workspaces foreach -Rt --from github-app --from todo-app add -DE @types/react@ts<< parameters.typescript-version >>
178+
yarn workspaces foreach -Rt --from github-app --from todo-app add -DE @types/react@ts<< parameters.typescript-version >>
165179
fi
166180
- run:
167-
name: typecheck
181+
name: Run Typecheck
168182
command: |
169183
if [ "<< parameters.typescript-version >>" == "latest" ] || [ "<< parameters.typescript-version >>" == "5.3" ] || [ "<< parameters.typescript-version >>" == "4.8" ]; then
170184
yarn run tsc --project examples/todo-app/tsconfig.json
@@ -177,12 +191,12 @@ jobs:
177191
fi
178192
179193
esmodule-loosenulltypes:
180-
docker: *docker
194+
executor: node
181195
steps:
182196
- attach_workspace:
183197
at: ~/
184198
- run:
185-
name: typecheck
199+
name: Run Typecheck
186200
command: |
187201
yarn run tsc --project examples/todo-app/tsconfig.json --strictNullChecks false
188202
yarn run tsc --project examples/github-app/tsconfig.json --strictNullChecks false
@@ -191,19 +205,19 @@ jobs:
191205
yarn run tsc --project examples/todo-app/tsconfig.typetest41.json --strictNullChecks false
192206
193207
esmodule-exactOptionalPropertyTypes:
194-
docker: *docker
208+
executor: node
195209
steps:
196210
- attach_workspace:
197211
at: ~/
198212
- run:
199-
name: typecheck
213+
name: Run Typecheck
200214
command: |
201215
yarn run tsc --project examples/todo-app/tsconfig.typetest.json --exactOptionalPropertyTypes true
202216
yarn run tsc --project examples/github-app/tsconfig.typetest.json --exactOptionalPropertyTypes true
203217
yarn run tsc --project examples/todo-app/tsconfig.typetest41.json --exactOptionalPropertyTypes true
204218
205219
validate-esmodule-browser-build:
206-
docker: *docker
220+
executor: node
207221
steps:
208222
- attach_workspace:
209223
at: ~/

.yarnrc.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ changesetIgnorePatterns:
55
nodeLinker: node-modules
66

77
yarnPath: .yarn/releases/yarn-4.5.3.cjs
8+
9+
logFilters:
10+
- code: YN0060 # Suppress peer dependency mismatch warnings
11+
level: discard

0 commit comments

Comments
 (0)