@adbayb/stack 2.33.0 → 2.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,7 +44,8 @@ export const config = createConfig({
44
44
  },
45
45
  settings: {
46
46
  node: {
47
- version: require(join(CWD, "package.json")).engines.node,
47
+ version: require(join(CWD, "package.json")).devEngines.runtime
48
+ .version,
48
49
  },
49
50
  },
50
51
  });
@@ -7,77 +7,83 @@ import {
7
7
  } from "../constants.js";
8
8
  import { createConfig } from "../helpers.js";
9
9
 
10
- const {
11
- configs: { all: reactPluginConfig },
12
- } = reactPlugin;
13
-
14
10
  export const config = createConfig(
15
11
  {
16
12
  files: JAVASCRIPT_LIKE_FILES,
17
- plugins: reactPluginConfig.plugins,
13
+ plugins: {
14
+ "@eslint-react": reactPlugin,
15
+ },
18
16
  rules: {
19
- "@eslint-react/component-hook-factories": "error",
20
- "@eslint-react/dom/no-dangerously-set-innerhtml": "error",
21
- "@eslint-react/dom/no-dangerously-set-innerhtml-with-children":
17
+ "@eslint-react/dom-no-dangerously-set-innerhtml": "error",
18
+ "@eslint-react/dom-no-dangerously-set-innerhtml-with-children":
22
19
  "error",
23
- "@eslint-react/dom/no-find-dom-node": "error",
24
- "@eslint-react/dom/no-flush-sync": "error",
25
- "@eslint-react/dom/no-hydrate": "error",
26
- "@eslint-react/dom/no-missing-button-type": "error",
27
- "@eslint-react/dom/no-missing-iframe-sandbox": "error",
28
- "@eslint-react/dom/no-namespace": "error",
29
- "@eslint-react/dom/no-render": "error",
30
- "@eslint-react/dom/no-render-return-value": "error",
31
- "@eslint-react/dom/no-script-url": "error",
32
- "@eslint-react/dom/no-string-style-prop": "error",
33
- "@eslint-react/dom/no-unsafe-iframe-sandbox": "error",
34
- "@eslint-react/dom/no-unsafe-target-blank": "error",
35
- "@eslint-react/dom/no-use-form-state": "error",
36
- "@eslint-react/dom/no-void-elements-with-children": "error",
20
+ "@eslint-react/dom-no-find-dom-node": "error",
21
+ "@eslint-react/dom-no-flush-sync": "error",
22
+ "@eslint-react/dom-no-hydrate": "error",
23
+ "@eslint-react/dom-no-missing-button-type": "error",
24
+ "@eslint-react/dom-no-missing-iframe-sandbox": "error",
25
+ "@eslint-react/dom-no-render": "error",
26
+ "@eslint-react/dom-no-render-return-value": "error",
27
+ "@eslint-react/dom-no-script-url": "error",
28
+ "@eslint-react/dom-no-string-style-prop": "error",
29
+ "@eslint-react/dom-no-unknown-property": "error",
30
+ "@eslint-react/dom-no-unsafe-iframe-sandbox": "error",
31
+ "@eslint-react/dom-no-unsafe-target-blank": "error",
32
+ "@eslint-react/dom-no-use-form-state": "error",
33
+ "@eslint-react/dom-no-void-elements-with-children": "error",
37
34
  "@eslint-react/error-boundaries": "error",
38
35
  "@eslint-react/exhaustive-deps": "warn",
36
+ "@eslint-react/globals": "error",
39
37
  "@eslint-react/immutability": "error",
38
+ "@eslint-react/jsx-no-children-prop": "error",
39
+ "@eslint-react/jsx-no-children-prop-with-children": "error",
40
40
  "@eslint-react/jsx-no-comment-textnodes": "error",
41
- "@eslint-react/jsx-shorthand-boolean": "error",
42
- "@eslint-react/jsx-shorthand-fragment": "error",
43
- "@eslint-react/naming-convention/context-name": "error",
41
+ "@eslint-react/jsx-no-key-after-spread": "error",
42
+ "@eslint-react/jsx-no-leaked-dollar": "error",
43
+ "@eslint-react/jsx-no-leaked-semicolon": "error",
44
+ "@eslint-react/jsx-no-namespace": "error",
45
+ "@eslint-react/jsx-no-useless-fragment": "error",
46
+ "@eslint-react/naming-convention-context-name": "error",
47
+ "@eslint-react/naming-convention-id-name": "error",
48
+ "@eslint-react/naming-convention-ref-name": "error",
44
49
  "@eslint-react/no-access-state-in-setstate": "error",
45
- "@eslint-react/no-children-prop": "error",
50
+ "@eslint-react/no-array-index-key": "error",
46
51
  "@eslint-react/no-class-component": "error",
47
52
  "@eslint-react/no-context-provider": "error",
48
53
  "@eslint-react/no-create-ref": "error",
49
54
  "@eslint-react/no-direct-mutation-state": "error",
50
55
  "@eslint-react/no-duplicate-key": "error",
51
56
  "@eslint-react/no-forward-ref": "error",
57
+ "@eslint-react/no-implicit-children": "error",
58
+ "@eslint-react/no-implicit-key": "error",
59
+ "@eslint-react/no-implicit-ref": "error",
52
60
  "@eslint-react/no-leaked-conditional-rendering": "error",
53
61
  "@eslint-react/no-missing-component-display-name": "error",
54
62
  "@eslint-react/no-missing-key": "error",
55
63
  "@eslint-react/no-misused-capture-owner-stack": "error",
56
64
  "@eslint-react/no-nested-component-definitions": "error",
57
65
  "@eslint-react/no-nested-lazy-component-declarations": "error",
58
- "@eslint-react/no-unnecessary-use-callback": "error",
59
- "@eslint-react/no-unnecessary-use-memo": "error",
60
66
  "@eslint-react/no-unnecessary-use-prefix": "error",
61
67
  "@eslint-react/no-unstable-context-value": "error",
62
68
  "@eslint-react/no-unstable-default-props": "error",
63
- "@eslint-react/no-unused-class-component-members": "error",
64
69
  "@eslint-react/no-unused-props": "error",
70
+ "@eslint-react/no-unused-state": "error",
65
71
  "@eslint-react/no-use-context": "error",
66
- "@eslint-react/no-useless-fragment": "error",
67
72
  "@eslint-react/purity": "error",
68
73
  "@eslint-react/refs": "error",
74
+ "@eslint-react/rsc-function-definition": "error",
69
75
  "@eslint-react/rules-of-hooks": "error",
70
76
  "@eslint-react/set-state-in-effect": "error",
71
77
  "@eslint-react/set-state-in-render": "error",
72
- "@eslint-react/unstable-rules-of-props": "error",
73
- "@eslint-react/unstable-rules-of-state": "error",
78
+ "@eslint-react/static-components": "error",
74
79
  "@eslint-react/unsupported-syntax": "error",
75
80
  "@eslint-react/use-memo": "error",
76
81
  "@eslint-react/use-state": "error",
77
- "@eslint-react/web-api/no-leaked-event-listener": "error",
78
- "@eslint-react/web-api/no-leaked-interval": "error",
79
- "@eslint-react/web-api/no-leaked-resize-observer": "error",
80
- "@eslint-react/web-api/no-leaked-timeout": "error",
82
+ "@eslint-react/web-api-no-leaked-event-listener": "error",
83
+ "@eslint-react/web-api-no-leaked-fetch": "error",
84
+ "@eslint-react/web-api-no-leaked-interval": "error",
85
+ "@eslint-react/web-api-no-leaked-resize-observer": "error",
86
+ "@eslint-react/web-api-no-leaked-timeout": "error",
81
87
  },
82
88
  },
83
89
  {
@@ -88,6 +94,9 @@ export const config = createConfig(
88
94
  * Until the React X plugin provides a `disableTypeChecked`-like preset, we must maintain the rule list manually
89
95
  * following the [documentation](https://eslint-react.xyz/docs/configuration/configure-project-config#type-information).
90
96
  */
97
+ "@eslint-react/no-implicit-children": "off",
98
+ "@eslint-react/no-implicit-key": "off",
99
+ "@eslint-react/no-implicit-ref": "off",
91
100
  "@eslint-react/no-leaked-conditional-rendering": "off",
92
101
  "@eslint-react/no-unused-props": "off",
93
102
  },
@@ -19,6 +19,7 @@ export const config = createConfig({
19
19
  "unicorn/consistent-empty-array-spread": "error",
20
20
  "unicorn/consistent-existence-index-check": "error",
21
21
  "unicorn/consistent-function-scoping": "error",
22
+ "unicorn/consistent-template-literal-escape": "error",
22
23
  "unicorn/custom-error-definition": "error",
23
24
  "unicorn/error-message": "error",
24
25
  "unicorn/escape-case": "error",
@@ -33,6 +34,7 @@ export const config = createConfig({
33
34
  },
34
35
  },
35
36
  ],
37
+ "unicorn/isolated-functions": "error",
36
38
  "unicorn/new-for-builtins": "error",
37
39
  "unicorn/no-abusive-eslint-disable": "error",
38
40
  "unicorn/no-array-callback-reference": "error",
@@ -67,6 +69,7 @@ export const config = createConfig({
67
69
  "unicorn/no-useless-collection-argument": "error",
68
70
  "unicorn/no-useless-error-capture-stack-trace": "error",
69
71
  "unicorn/no-useless-fallback-in-spread": "error",
72
+ "unicorn/no-useless-iterator-to-array": "error",
70
73
  "unicorn/no-useless-length-check": "error",
71
74
  "unicorn/no-useless-promise-resolve-reject": "error",
72
75
  "unicorn/no-useless-spread": "error",
@@ -113,6 +116,7 @@ export const config = createConfig({
113
116
  "unicorn/prefer-response-static-json": "error",
114
117
  "unicorn/prefer-set-has": "error",
115
118
  "unicorn/prefer-set-size": "error",
119
+ "unicorn/prefer-simple-condition-first": "error",
116
120
  "unicorn/prefer-single-call": "error",
117
121
  "unicorn/prefer-spread": "error",
118
122
  "unicorn/prefer-string-raw": "error",
@@ -136,6 +140,7 @@ export const config = createConfig({
136
140
  "unicorn/require-module-attributes": "error",
137
141
  "unicorn/require-number-to-fixed-digits-argument": "error",
138
142
  "unicorn/switch-case-braces": "error",
143
+ "unicorn/switch-case-break-position": "error",
139
144
  "unicorn/template-indent": "error",
140
145
  "unicorn/text-encoding-identifier-case": "error",
141
146
  "unicorn/throw-new-error": "error",
package/dist/index.js CHANGED
@@ -73,13 +73,6 @@ const createError = (bin, error)=>{
73
73
  }
74
74
  return new Error(errorMessage);
75
75
  };
76
- const checkPackageManager = async ()=>{
77
- try {
78
- await helpers.exec("npx only-allow pnpm");
79
- } catch {
80
- throw createError("pnpm", "The project must use `pnpm` as a node package manager tool. Follow this installation guide https://pnpm.io/installation");
81
- }
82
- };
83
76
  const getNpmVersion = async ()=>{
84
77
  try {
85
78
  return await helpers.exec("pnpm -v");
@@ -87,17 +80,8 @@ const getNpmVersion = async ()=>{
87
80
  throw createError("pnpm", "The project must use `pnpm` as a node package manager tool. Follow this installation guide https://pnpm.io/installation");
88
81
  }
89
82
  };
90
- const getStackCommand = (command, isNodeRuntime = true)=>{
91
- /**
92
- * `isNodeRuntime` allows executing node bin executables in a non node environment such as in git hooks context
93
- * Npx is used to make executable resolution independent from the build tool (npx is the built-in Node tool)
94
- * `--no` flag to prevent installation prompt and throw an error if the binary is not installed.
95
- */ return [
96
- ...isNodeRuntime ? [] : [
97
- "npx --no"
98
- ],
99
- `stack ${command}`
100
- ].join(" ");
83
+ const getStackCommand = (command)=>{
84
+ return `pnpm stack ${command}`;
101
85
  };
102
86
  const hasDependency = (packageName)=>{
103
87
  return Boolean(require$1.resolve(packageName));
@@ -208,6 +192,14 @@ const createBuildCommand = (program)=>{
208
192
  });
209
193
  };
210
194
 
195
+ const checkChangelog = async ()=>{
196
+ try {
197
+ return await helpers.exec("changeset status --since=origin/main");
198
+ } catch (error) {
199
+ throw createError("changeset", error);
200
+ }
201
+ };
202
+
211
203
  const checkCode = eslint({
212
204
  isFixMode: false
213
205
  });
@@ -338,6 +330,7 @@ const checkType = async ()=>{
338
330
  };
339
331
 
340
332
  const ONLY_VALUES = [
333
+ "changelog",
341
334
  "commit",
342
335
  "code",
343
336
  "dependency",
@@ -368,6 +361,12 @@ const createCheckCommand = (program)=>{
368
361
  skip ({ filter }) {
369
362
  return filter === "commit"; // No need to build if only commit is checked
370
363
  }
364
+ }).task({
365
+ async handler () {
366
+ await checkChangelog();
367
+ },
368
+ label: label$4("Check changelog compliance"),
369
+ skip: ifFilterDefinedAndNotEqualTo("changelog")
371
370
  }).task({
372
371
  async handler () {
373
372
  await checkDependency();
@@ -464,7 +463,7 @@ const PRESERVE_FILES = [
464
463
  "node_modules"
465
464
  ];
466
465
 
467
- var version = "2.33.0";
466
+ var version = "2.34.0";
468
467
 
469
468
  const createCreateCommand = (program)=>{
470
469
  program.command({
@@ -704,20 +703,15 @@ const createInstallCommand = (program)=>{
704
703
  }).task({
705
704
  async handler () {
706
705
  const lineBreakMatcher = String.raw`\n|\r\n`;
707
- const modifiedFilesCommand = `node -e 'console.log(require("child_process").execSync("git status --porcelain", {encoding: "utf8"}).split(/${lineBreakMatcher}/).filter(Boolean).map(item => item.split(" ").at(-1)).join(" "))'`;
708
- await installGitHook("pre-commit", `${getStackCommand(`fix $(${modifiedFilesCommand})`, false)} && git add -A`);
706
+ const stackCommand = getStackCommand(`fix $(node -e 'console.log(require("child_process").execSync("git status --porcelain", {encoding: "utf8"}).split(/${lineBreakMatcher}/).filter(Boolean).map(item => item.split(" ").at(-1)).join(" "))')`);
707
+ await installGitHook("pre-commit", `${stackCommand} && git add -A`);
709
708
  },
710
709
  label: label("Install `git.pre-commit` hook")
711
710
  }).task({
712
711
  async handler () {
713
- await installGitHook("commit-msg", getStackCommand("check --filter commit", false));
712
+ await installGitHook("commit-msg", getStackCommand("check --filter commit"));
714
713
  },
715
714
  label: label("Install `git.commit-msg` hook")
716
- }).task({
717
- async handler () {
718
- await checkPackageManager();
719
- },
720
- label: label("Check the package manager")
721
715
  });
722
716
  };
723
717
  const label = (message)=>`${message} 📲`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adbayb/stack",
3
- "version": "2.33.0",
3
+ "version": "2.34.0",
4
4
  "description": "My opinionated JavaScript-based toolchain",
5
5
  "keywords": [
6
6
  "stack",
@@ -39,37 +39,37 @@
39
39
  "templates"
40
40
  ],
41
41
  "dependencies": {
42
- "@changesets/changelog-github": "^0.6.0",
43
- "@changesets/cli": "^2.30.0",
44
- "@commitlint/cli": "^20.5.0",
45
- "@commitlint/config-conventional": "^20.5.0",
46
- "@eslint-react/eslint-plugin": "^3.0.0",
47
- "@eslint/compat": "^2.0.3",
42
+ "@changesets/changelog-github": "^0.7.0",
43
+ "@changesets/cli": "^2.31.0",
44
+ "@commitlint/cli": "^21.0.1",
45
+ "@commitlint/config-conventional": "^21.0.1",
46
+ "@eslint-react/eslint-plugin": "^5.7.8",
47
+ "@eslint/compat": "^2.1.0",
48
48
  "@stylistic/eslint-plugin": "^5.10.0",
49
- "@vitest/eslint-plugin": "^1.6.13",
50
- "eslint": "^10.1.0",
49
+ "@vitest/eslint-plugin": "^1.6.17",
50
+ "eslint": "^10.3.0",
51
51
  "eslint-config-prettier": "^10.1.8",
52
52
  "eslint-import-resolver-typescript": "^4.4.4",
53
53
  "eslint-plugin-depend": "^1.5.0",
54
54
  "eslint-plugin-import-x": "^4.16.2",
55
- "eslint-plugin-jsdoc": "^62.8.0",
55
+ "eslint-plugin-jsdoc": "^62.9.0",
56
56
  "eslint-plugin-mdx": "^3.7.0",
57
- "eslint-plugin-n": "^17.24.0",
58
- "eslint-plugin-perfectionist": "^5.7.0",
57
+ "eslint-plugin-n": "^18.0.1",
58
+ "eslint-plugin-perfectionist": "^5.9.0",
59
59
  "eslint-plugin-prettier": "^5.5.5",
60
- "eslint-plugin-sonarjs": "^4.0.2",
61
- "eslint-plugin-unicorn": "^63.0.0",
60
+ "eslint-plugin-sonarjs": "^4.0.3",
61
+ "eslint-plugin-unicorn": "^64.0.0",
62
62
  "fdir": "^6.5.0",
63
- "globals": "^17.4.0",
64
- "prettier": "^3.8.1",
63
+ "globals": "^17.6.0",
64
+ "prettier": "^3.8.3",
65
65
  "prettier-plugin-packagejson": "^3.0.2",
66
66
  "termost": "^1.9.0",
67
- "turbo": "^2.8.20",
68
- "typescript": "^6.0.2",
69
- "typescript-eslint": "^8.57.2"
67
+ "turbo": "^2.9.12",
68
+ "typescript": "^6.0.3",
69
+ "typescript-eslint": "^8.59.3"
70
70
  },
71
71
  "devDependencies": {
72
- "@types/node": "24.12.0",
72
+ "@types/node": "24.12.4",
73
73
  "quickbundle": "2.16.0"
74
74
  },
75
75
  "publishConfig": {
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
3
  "extends": [
4
- ":automergeAll",
5
- ":automergePr",
6
- ":automergeRequireAllStatusChecks",
7
4
  ":enableVulnerabilityAlerts",
8
5
  ":label(dependencies)",
9
6
  ":maintainLockFilesMonthly",
@@ -20,7 +20,7 @@ jobs:
20
20
  pull-requests: write
21
21
  steps:
22
22
  - uses: actions/checkout@v6
23
- - uses: pnpm/action-setup@v5
23
+ - uses: pnpm/action-setup@v6
24
24
  - uses: actions/setup-node@v6
25
25
  with:
26
26
  cache: pnpm
@@ -30,8 +30,9 @@ jobs:
30
30
  - name: Publish pre-release version(s)
31
31
  if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
32
32
  run: |
33
- pnpm --filter="!." --filter="!./(applications|examples|tools)/*" --recursive exec pnpm version "$(pnpm show ./ version)-next-${GITHUB_SHA::7}" --no-git-tag-version
34
- pnpm --filter="!." --filter="!./(applications|examples|tools)/*" --recursive exec pnpm publish --tag next --no-git-checks
33
+ pnpm --filter="!." --filter="!./applications/*" --filter="!./examples/*" --filter="!./tools/*" --recursive exec \
34
+ node -e "const fs=require('fs'),pkg=JSON.parse(fs.readFileSync('package.json'));pkg.version=pkg.version+'-next-${GITHUB_SHA::7}';fs.writeFileSync('package.json',JSON.stringify(pkg,null,2)+'\n');"
35
+ pnpm --filter="!." --filter="!./applications/*" --filter="!./examples/*" --filter="!./tools/*" --recursive exec pnpm publish --tag next --no-git-checks
35
36
  - name: Create release pull request
36
37
  if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
37
38
  uses: changesets/action@v1
@@ -41,7 +41,7 @@ jobs:
41
41
  ```
42
42
  # Delete a previous comment when the issue has been resolved
43
43
  - if: ${{ steps.check_pr_rule.outputs.error_message == null }}
44
- uses: marocchino/sticky-pull-request-comment@v2
44
+ uses: marocchino/sticky-pull-request-comment@v3
45
45
  with:
46
46
  header: check_pr_comment
47
47
  delete: true
@@ -21,7 +21,7 @@ jobs:
21
21
  git config --global user.email adbayb@gmail.com
22
22
  git config --global user.name 'Ayoub Adib'
23
23
  - name: Create changelog entry
24
- uses: actions/github-script@v8
24
+ uses: actions/github-script@v9
25
25
  # Credits to https://github.com/backstage/backstage/blob/bcc11651add5a2589898dfb9d665ebb9d412201b/.github/workflows/sync_renovate-changesets.yml
26
26
  with:
27
27
  script: |
@@ -10,7 +10,7 @@ jobs:
10
10
  steps:
11
11
  - name: Checkout the code
12
12
  uses: actions/checkout@v6
13
- - uses: pnpm/action-setup@v5
13
+ - uses: pnpm/action-setup@v6
14
14
  - uses: actions/setup-node@v6
15
15
  with:
16
16
  cache: pnpm
@@ -18,8 +18,21 @@
18
18
  },
19
19
  "prettier": "@adbayb/stack/prettier",
20
20
  "packageManager": "pnpm@{{npmVersion}}",
21
- "engines": {
22
- "node": ">=24.0.0",
23
- "pnpm": ">=10.0.0"
21
+ "devEngines": {
22
+ "packageManager": [
23
+ {
24
+ "name": "pnpm",
25
+ "version": "{{npmVersion}}",
26
+ "onFail": "download"
27
+ },
28
+ {
29
+ "name": "npm"
30
+ }
31
+ ],
32
+ "runtime": {
33
+ "name": "node",
34
+ "version": ">=24.0.0",
35
+ "onFail": "error"
36
+ }
24
37
  }
25
38
  }
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
3
  "extends": [
4
- ":automergeAll",
5
- ":automergePr",
6
- ":automergeRequireAllStatusChecks",
7
4
  ":enableVulnerabilityAlerts",
8
5
  ":label(dependencies)",
9
6
  ":maintainLockFilesMonthly",
@@ -20,7 +20,7 @@ jobs:
20
20
  pull-requests: write
21
21
  steps:
22
22
  - uses: actions/checkout@v6
23
- - uses: pnpm/action-setup@v5
23
+ - uses: pnpm/action-setup@v6
24
24
  - uses: actions/setup-node@v6
25
25
  with:
26
26
  cache: pnpm
@@ -30,8 +30,9 @@ jobs:
30
30
  - name: Publish pre-release version(s)
31
31
  if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
32
32
  run: |
33
- pnpm --filter="!." --filter="!./(applications|examples|tools)/*" --recursive exec pnpm version "$(pnpm show ./ version)-next-${GITHUB_SHA::7}" --no-git-tag-version
34
- pnpm --filter="!." --filter="!./(applications|examples|tools)/*" --recursive exec pnpm publish --tag next --no-git-checks
33
+ pnpm --filter="!." --filter="!./applications/*" --filter="!./examples/*" --filter="!./tools/*" --recursive exec \
34
+ node -e "const fs=require('fs'),pkg=JSON.parse(fs.readFileSync('package.json'));pkg.version=pkg.version+'-next-${GITHUB_SHA::7}';fs.writeFileSync('package.json',JSON.stringify(pkg,null,2)+'\n');"
35
+ pnpm --filter="!." --filter="!./applications/*" --filter="!./examples/*" --filter="!./tools/*" --recursive exec pnpm publish --tag next --no-git-checks
35
36
  - name: Create release pull request
36
37
  if: "!contains(github.event.head_commit.message, 'chore: release package(s)')"
37
38
  uses: changesets/action@v1
@@ -41,7 +41,7 @@ jobs:
41
41
  ```
42
42
  # Delete a previous comment when the issue has been resolved
43
43
  - if: ${{ steps.check_pr_rule.outputs.error_message == null }}
44
- uses: marocchino/sticky-pull-request-comment@v2
44
+ uses: marocchino/sticky-pull-request-comment@v3
45
45
  with:
46
46
  header: check_pr_comment
47
47
  delete: true
@@ -21,7 +21,7 @@ jobs:
21
21
  git config --global user.email adbayb@gmail.com
22
22
  git config --global user.name 'Ayoub Adib'
23
23
  - name: Create changelog entry
24
- uses: actions/github-script@v8
24
+ uses: actions/github-script@v9
25
25
  # Credits to https://github.com/backstage/backstage/blob/bcc11651add5a2589898dfb9d665ebb9d412201b/.github/workflows/sync_renovate-changesets.yml
26
26
  with:
27
27
  script: |
@@ -10,7 +10,7 @@ jobs:
10
10
  steps:
11
11
  - name: Checkout the code
12
12
  uses: actions/checkout@v6
13
- - uses: pnpm/action-setup@v5
13
+ - uses: pnpm/action-setup@v6
14
14
  - uses: actions/setup-node@v6
15
15
  with:
16
16
  cache: pnpm
@@ -18,8 +18,21 @@
18
18
  },
19
19
  "prettier": "@adbayb/stack/prettier",
20
20
  "packageManager": "pnpm@{{npmVersion}}",
21
- "engines": {
22
- "node": ">=24.0.0",
23
- "pnpm": ">=10.0.0"
21
+ "devEngines": {
22
+ "packageManager": [
23
+ {
24
+ "name": "pnpm",
25
+ "version": "{{npmVersion}}",
26
+ "onFail": "download"
27
+ },
28
+ {
29
+ "name": "npm"
30
+ }
31
+ ],
32
+ "runtime": {
33
+ "name": "node",
34
+ "version": ">=24.0.0",
35
+ "onFail": "error"
36
+ }
24
37
  }
25
38
  }