@adbayb/stack 2.33.0 → 2.34.0-next-3f9769a

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,18 @@ 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 {
199
+ throw createError("changeset", [
200
+ "Some packages have been changed but no changelogs were found.",
201
+ "Run `pnpm stack release --log` to log your change(s).",
202
+ "If the change doesn't require a changelog, you can run `pnpm stack release --empty-log`."
203
+ ].join("\n"));
204
+ }
205
+ };
206
+
211
207
  const checkCode = eslint({
212
208
  isFixMode: false
213
209
  });
@@ -338,6 +334,7 @@ const checkType = async ()=>{
338
334
  };
339
335
 
340
336
  const ONLY_VALUES = [
337
+ "changelog",
341
338
  "commit",
342
339
  "code",
343
340
  "dependency",
@@ -368,6 +365,12 @@ const createCheckCommand = (program)=>{
368
365
  skip ({ filter }) {
369
366
  return filter === "commit"; // No need to build if only commit is checked
370
367
  }
368
+ }).task({
369
+ async handler () {
370
+ await checkChangelog();
371
+ },
372
+ label: label$4("Check changelog compliance"),
373
+ skip: ifFilterDefinedAndNotEqualTo("changelog")
371
374
  }).task({
372
375
  async handler () {
373
376
  await checkDependency();
@@ -464,7 +467,7 @@ const PRESERVE_FILES = [
464
467
  "node_modules"
465
468
  ];
466
469
 
467
- var version = "2.33.0";
470
+ var version = "2.34.0-next-3f9769a";
468
471
 
469
472
  const createCreateCommand = (program)=>{
470
473
  program.command({
@@ -704,20 +707,15 @@ const createInstallCommand = (program)=>{
704
707
  }).task({
705
708
  async handler () {
706
709
  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`);
710
+ 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(" "))')`);
711
+ await installGitHook("pre-commit", `${stackCommand} && git add -A`);
709
712
  },
710
713
  label: label("Install `git.pre-commit` hook")
711
714
  }).task({
712
715
  async handler () {
713
- await installGitHook("commit-msg", getStackCommand("check --filter commit", false));
716
+ await installGitHook("commit-msg", getStackCommand("check --filter commit"));
714
717
  },
715
718
  label: label("Install `git.commit-msg` hook")
716
- }).task({
717
- async handler () {
718
- await checkPackageManager();
719
- },
720
- label: label("Check the package manager")
721
719
  });
722
720
  };
723
721
  const label = (message)=>`${message} 📲`;
@@ -735,6 +733,10 @@ const createReleaseCommand = (program)=>{
735
733
  description: "Add a new changelog entry",
736
734
  key: "log",
737
735
  name: "log"
736
+ }).option({
737
+ description: "Add an empty changelog entry",
738
+ key: "emptyLog",
739
+ name: "empty-log"
738
740
  }).option({
739
741
  description: "Bump the package(s) version",
740
742
  key: "tag",
@@ -749,6 +751,12 @@ const createReleaseCommand = (program)=>{
749
751
  await changeset("changeset");
750
752
  },
751
753
  skip: ifNotEqualTo("log")
754
+ }).task({
755
+ async handler () {
756
+ helpers.message("New empty changelog entry\n");
757
+ await changeset("changeset --empty");
758
+ },
759
+ skip: ifNotEqualTo("emptyLog")
752
760
  }).task({
753
761
  async handler () {
754
762
  helpers.message("Bumping the package(s) version\n");
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-next-3f9769a",
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.4.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.14",
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
  }