Skip to content

Commit 62605e1

Browse files
committed
Merge remote-tracking branch 'origin/main' into hm/mul-1242
2 parents ec0f132 + af8b97b commit 62605e1

File tree

84 files changed

+867
-305
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+867
-305
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Check release
2+
description: Check for conflicts in packages being released in this PR.
3+
4+
inputs:
5+
pull-request:
6+
description: 'The pull request number to get changed files from.'
7+
required: true
8+
9+
runs:
10+
using: composite
11+
steps:
12+
- name: Checkout repository
13+
uses: actions/checkout@v4
14+
with:
15+
fetch-depth: 0
16+
17+
- name: Get target reference
18+
id: get-target
19+
shell: bash
20+
env:
21+
EVENT_NAME: ${{ github.event_name }}
22+
run: |
23+
if [ "$EVENT_NAME" = "pull_request" ]; then
24+
echo "TARGET=$(git merge-base HEAD refs/remotes/origin/main)" >> "$GITHUB_OUTPUT"
25+
elif [ "$EVENT_NAME" = "merge_group" ]; then
26+
echo "TARGET=$(git rev-parse HEAD^)" >> "$GITHUB_OUTPUT"
27+
else
28+
echo "::error::This action only supports \`pull_request\` and \`merge_group\` events."
29+
exit 1
30+
fi
31+
32+
- name: Check commits for changes in released packages
33+
shell: bash
34+
env:
35+
GH_TOKEN: ${{ github.token }}
36+
PULL_REQUEST: ${{ inputs.pull-request }}
37+
TARGET: ${{ steps.get-target.outputs.TARGET }}
38+
run: |
39+
set -euo pipefail
40+
git fetch origin main
41+
42+
mapfile -t PACKAGES < <(find packages -maxdepth 2 -name "package.json" -not -path "*/node_modules/*")
43+
RELEASED_PACKAGES=()
44+
45+
# Get all packages being released in this PR
46+
MERGE_BASE=$(git merge-base HEAD refs/remotes/origin/main)
47+
for package in "${PACKAGES[@]}"; do
48+
MAIN_VERSION=$(git show "$MERGE_BASE:$package" | jq -r .version)
49+
HEAD_VERSION=$(jq -r .version "$package")
50+
51+
if [ "$HEAD_VERSION" != "$MAIN_VERSION" ]; then
52+
package_name=$(jq -r ".name" "$package")
53+
echo "📦 Package \`$package_name\` is being released (version \`$MAIN_VERSION\` -> \`$HEAD_VERSION\`)"
54+
RELEASED_PACKAGES+=("$package")
55+
fi
56+
done
57+
58+
# Fetch the pull request branch to compare changes.
59+
PULL_REQUEST_BRANCH=$(gh pr view "$PULL_REQUEST" --json headRefName --template "{{ .headRefName }}")
60+
echo "🔍 Checking for release conflicts with files changed ahead of PR branch \`$PULL_REQUEST_BRANCH\`..."
61+
git fetch origin "$PULL_REQUEST_BRANCH"
62+
63+
# Get all files changed ahead of this PR.
64+
BEFORE=$(git merge-base "refs/remotes/origin/main" "origin/$PULL_REQUEST_BRANCH")
65+
git diff --name-only "$BEFORE..$TARGET" > changed-files.txt
66+
67+
CONFLICTS=()
68+
for package in "${RELEASED_PACKAGES[@]}"; do
69+
package_directory=$(dirname "$package")
70+
if grep -q "^$package_directory/" changed-files.txt; then
71+
CONFLICTS+=("$package_directory")
72+
fi
73+
done
74+
75+
if [ ${#CONFLICTS[@]} -ne 0 ]; then
76+
mapfile -t CONFLICTS < <(printf "%s\n" "${CONFLICTS[@]}" | sort -u)
77+
fi
78+
79+
if [ ${#CONFLICTS[@]} -ne 0 ]; then
80+
for conflict in "${CONFLICTS[@]}"; do
81+
package_name=$(jq -r ".name" "$conflict/package.json")
82+
echo "::error::Release conflict detected in \`$package_name\`. This package is being released in this PR, but files in the package were also modified ahead of this PR. Please ensure that all changes are included in the release."
83+
done
84+
exit 1
85+
else
86+
echo "✅ No release conflicts detected."
87+
fi

.github/workflows/main.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches: [main]
66
pull_request:
7+
merge_group:
78

89
concurrency:
910
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.sha || github.ref }}
@@ -62,6 +63,59 @@ jobs:
6263
needs: check-workflows
6364
uses: ./.github/workflows/lint-build-test.yml
6465

66+
check-release:
67+
name: Check release
68+
needs: check-workflows
69+
runs-on: ubuntu-latest
70+
steps:
71+
- name: Checkout repository
72+
uses: actions/checkout@v4
73+
with:
74+
fetch-depth: 0
75+
76+
- name: Get merge base
77+
id: merge-base
78+
if: github.event_name != 'push'
79+
env:
80+
BASE_REF: ${{ github.event.pull_request.base.ref || github.event.merge_group.base_ref }}
81+
run: |
82+
echo "MERGE_BASE=$(git merge-base HEAD "refs/remotes/origin/$BASE_REF")" >> "$GITHUB_OUTPUT"
83+
84+
- name: Check if the commit or pull request is a release
85+
id: is-release
86+
if: github.event_name != 'push'
87+
uses: MetaMask/action-is-release@d063725cd15ee145d7e795a2e77db31a3e3f2c92
88+
with:
89+
commit-starts-with: 'Release [version],Release v[version],Release/[version],Release/v[version],Release `[version]`'
90+
commit-message: ${{ github.event.pull_request.title }}
91+
before: ${{ steps.merge-base.outputs.MERGE_BASE }}
92+
93+
- name: Get pull request number
94+
if: github.event_name != 'push'
95+
id: pr-number
96+
env:
97+
EVENT_NAME: ${{ github.event_name }}
98+
PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
99+
MERGE_GROUP_HEAD_REF: ${{ github.event.merge_group.head_ref }}
100+
run: |
101+
if [ "$EVENT_NAME" = "pull_request" ]; then
102+
echo "PR_NUMBER=$PULL_REQUEST_NUMBER" >> "$GITHUB_OUTPUT"
103+
elif [ "$EVENT_NAME" = "merge_group" ]; then
104+
PR_NUMBER_REGEX='/pr-([0-9]+)-'
105+
if [[ "$MERGE_GROUP_HEAD_REF" =~ $PR_NUMBER_REGEX ]]; then
106+
echo "PR_NUMBER=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
107+
else
108+
echo "::error::Could not extract PR number from merge group head ref: $MERGE_GROUP_HEAD_REF."
109+
exit 1
110+
fi
111+
fi
112+
113+
- name: Check release
114+
if: github.event_name != 'push' && steps.is-release.outputs.IS_RELEASE == 'true'
115+
uses: ./.github/actions/check-release
116+
with:
117+
pull-request: ${{ steps.pr-number.outputs.PR_NUMBER }}
118+
65119
is-release:
66120
name: Determine whether this is a release merge commit
67121
needs: lint-build-test
@@ -99,6 +153,7 @@ jobs:
99153
runs-on: ubuntu-latest
100154
needs:
101155
- analyse-code
156+
- check-release
102157
- lint-build-test
103158
outputs:
104159
passed: ${{ steps.set-output.outputs.passed }}

eslint-warning-thresholds.json

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
"packages/assets-controllers/src/NftDetectionController.test.ts": {
3232
"import-x/namespace": 6
3333
},
34-
"packages/assets-controllers/src/NftDetectionController.ts": {
35-
"jsdoc/check-tag-names": 34
36-
},
3734
"packages/assets-controllers/src/Standards/ERC20Standard.test.ts": {
3835
"jest/no-commented-out-tests": 1
3936
},
@@ -49,15 +46,11 @@
4946
"packages/assets-controllers/src/TokenListController.test.ts": {
5047
"import-x/namespace": 7
5148
},
52-
"packages/assets-controllers/src/TokenRatesController.ts": {
53-
"jsdoc/check-tag-names": 11
54-
},
5549
"packages/assets-controllers/src/TokensController.test.ts": {
5650
"import-x/namespace": 1
5751
},
5852
"packages/assets-controllers/src/TokensController.ts": {
59-
"@typescript-eslint/no-unused-vars": 1,
60-
"jsdoc/check-tag-names": 10
53+
"@typescript-eslint/no-unused-vars": 1
6154
},
6255
"packages/assets-controllers/src/multicall.test.ts": {
6356
"@typescript-eslint/prefer-promise-reject-errors": 2
@@ -74,8 +67,7 @@
7467
"no-shadow": 2
7568
},
7669
"packages/controller-utils/src/siwe.ts": {
77-
"@typescript-eslint/no-unused-vars": 1,
78-
"jsdoc/check-tag-names": 5
70+
"@typescript-eslint/no-unused-vars": 1
7971
},
8072
"packages/controller-utils/src/util.test.ts": {
8173
"import-x/no-named-as-default": 1,
@@ -90,9 +82,6 @@
9082
"packages/eip-5792-middleware/src/hooks/processSendCalls.ts": {
9183
"@typescript-eslint/no-misused-promises": 1
9284
},
93-
"packages/ens-controller/src/EnsController.ts": {
94-
"jsdoc/check-tag-names": 6
95-
},
9685
"packages/eth-block-tracker/src/PollingBlockTracker.test.ts": {
9786
"@typescript-eslint/unbound-method": 4
9887
},
@@ -101,15 +90,11 @@
10190
"@typescript-eslint/unbound-method": 5,
10291
"no-restricted-syntax": 28
10392
},
104-
"packages/eth-block-tracker/tests/buildDeferred.ts": {
105-
"@typescript-eslint/naming-convention": 1
106-
},
10793
"packages/eth-block-tracker/tests/recordCallsToSetTimeout.ts": {
10894
"@typescript-eslint/no-explicit-any": 1
10995
},
11096
"packages/eth-block-tracker/tests/setupAfterEnv.ts": {
11197
"@typescript-eslint/consistent-type-definitions": 1,
112-
"@typescript-eslint/naming-convention": 1,
11398
"@typescript-eslint/no-explicit-any": 3
11499
},
115100
"packages/eth-block-tracker/tests/withBlockTracker.ts": {
@@ -118,9 +103,6 @@
118103
"packages/gas-fee-controller/src/GasFeeController.test.ts": {
119104
"import-x/namespace": 2
120105
},
121-
"packages/gas-fee-controller/src/GasFeeController.ts": {
122-
"jsdoc/check-tag-names": 20
123-
},
124106
"packages/json-rpc-middleware-stream/src/index.test.ts": {
125107
"@typescript-eslint/prefer-promise-reject-errors": 1,
126108
"no-empty-function": 1
@@ -137,18 +119,6 @@
137119
"packages/logging-controller/src/LoggingController.test.ts": {
138120
"import-x/namespace": 1
139121
},
140-
"packages/logging-controller/src/LoggingController.ts": {
141-
"jsdoc/check-tag-names": 1
142-
},
143-
"packages/message-manager/src/AbstractMessageManager.ts": {
144-
"jsdoc/check-tag-names": 23
145-
},
146-
"packages/message-manager/src/DecryptMessageManager.ts": {
147-
"jsdoc/check-tag-names": 11
148-
},
149-
"packages/message-manager/src/EncryptionPublicKeyManager.ts": {
150-
"jsdoc/check-tag-names": 13
151-
},
152122
"packages/message-manager/src/utils.ts": {
153123
"@typescript-eslint/no-unused-vars": 1
154124
},
@@ -161,18 +131,9 @@
161131
"packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.ts": {
162132
"@typescript-eslint/no-misused-promises": 1
163133
},
164-
"packages/permission-log-controller/src/PermissionLogController.ts": {
165-
"jsdoc/check-tag-names": 2
166-
},
167-
"packages/phishing-controller/src/PhishingController.ts": {
168-
"jsdoc/check-tag-names": 32
169-
},
170134
"packages/phishing-controller/src/utils.test.ts": {
171135
"import-x/namespace": 5
172136
},
173-
"packages/rate-limit-controller/src/RateLimitController.ts": {
174-
"jsdoc/check-tag-names": 4
175-
},
176137
"packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.test.ts": {
177138
"promise/param-names": 1
178139
},
@@ -206,11 +167,7 @@
206167
"no-empty-function": 1
207168
},
208169
"tests/fake-provider.ts": {
209-
"@typescript-eslint/prefer-promise-reject-errors": 1,
210-
"jsdoc/check-tag-names": 12
211-
},
212-
"tests/mock-network.ts": {
213-
"jsdoc/check-tag-names": 10
170+
"@typescript-eslint/prefer-promise-reject-errors": 1
214171
},
215172
"tests/setupAfterEnv/nock.ts": {
216173
"import-x/no-named-as-default-member": 3

eslint.config.mjs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ const config = createConfig([
169169
'import-x/namespace': 'warn',
170170
'import-x/no-named-as-default': 'warn',
171171
'import-x/order': 'warn',
172-
'jsdoc/check-tag-names': 'warn',
173172
'jsdoc/require-returns': 'warn',
174173
'jsdoc/tag-lines': 'warn',
175174
'no-unused-private-class-members': 'warn',
@@ -188,7 +187,6 @@ const config = createConfig([
188187
{
189188
files: ['**/*.d.ts'],
190189
rules: {
191-
'@typescript-eslint/naming-convention': 'warn',
192190
'import-x/unambiguous': 'off',
193191
},
194192
},
@@ -224,7 +222,6 @@ const config = createConfig([
224222
// TODO: Re-enable these rules or add inline ignores for warranted cases
225223
'@typescript-eslint/prefer-nullish-coalescing': 'warn',
226224
'no-restricted-syntax': 'warn',
227-
'@typescript-eslint/naming-convention': 'warn',
228225
'@typescript-eslint/no-explicit-any': 'warn',
229226
'@typescript-eslint/unbound-method': 'warn',
230227
'@typescript-eslint/consistent-type-definitions': 'warn',
@@ -251,6 +248,32 @@ const config = createConfig([
251248
'consistent-this': 'off',
252249
},
253250
},
251+
{
252+
files: [
253+
'packages/assets-controllers/src/NftDetectionController.ts',
254+
'packages/assets-controllers/src/TokenRatesController.ts',
255+
'packages/assets-controllers/src/TokensController.ts',
256+
'packages/controller-utils/src/siwe.ts',
257+
'packages/ens-controller/src/EnsController.ts',
258+
'packages/gas-fee-controller/src/GasFeeController.ts',
259+
'packages/logging-controller/src/LoggingController.ts',
260+
'packages/message-manager/src/AbstractMessageManager.ts',
261+
'packages/message-manager/src/DecryptMessageManager.ts',
262+
'packages/message-manager/src/EncryptionPublicKeyManager.ts',
263+
'packages/permission-log-controller/src/PermissionLogController.ts',
264+
'packages/phishing-controller/src/PhishingController.ts',
265+
'packages/rate-limit-controller/src/RateLimitController.ts',
266+
'tests/fake-provider.ts',
267+
'tests/mock-network.ts',
268+
],
269+
rules: {
270+
// TODO: Re-enable this rule
271+
// This has been temporarily disabled because the auto-fix mangles pre-existing JSDoc blocks
272+
// for types that don't follow TSDoc properly.
273+
// See https://github.com/gajus/eslint-plugin-jsdoc/issues/1054
274+
'jsdoc/check-tag-names': 'off',
275+
},
276+
},
254277
]);
255278

256279
export default config;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/core-monorepo",
3-
"version": "675.0.0",
3+
"version": "679.0.0",
44
"private": true,
55
"description": "Monorepo for packages shared between MetaMask clients",
66
"repository": {

0 commit comments

Comments
 (0)