From 9eb75c59cb2ff6564370b43fee28925ea180f775 Mon Sep 17 00:00:00 2001 From: Marco Schaeck Date: Thu, 20 Aug 2026 17:30:43 +0200 Subject: [PATCH 1/2] build(bpmn): adopt central @miragon/bpmnlint-plugin-rules as a blocking gate Replace the bare `bpmnlint:recommended` setup with the central Miragon plugin, which bundles the structural rules, the Camunda-7 deployability layer and the Miragon BPMN conventions behind one dependency. - add @miragon/bpmnlint-plugin-rules@0.5.0 (exact pin) - bump bpmnlint 11.12.1 -> 11.13.0 (exact; plugin peer needs >=11.13) - .bpmnlintrc extends bpmnlint:recommended + camunda-compat/camunda-platform-7-24 (+ camunda moddleExtension) + plugin:@miragon/rules/all (default config, no rule overrides), so every Miragon rule blocks at error - lint:bpmn runs with --max-warnings=0 so warnings (e.g. standard-size, fake-join) also fail the build; the pre-commit hook and pre-merge CI job pick this up No custom rules existed to remove (the old .bpmnlintrc only extended recommended). --- tools/.bpmnlintrc | 9 ++- tools/package-lock.json | 161 ++++++++++++++++++++++++++++++++++++++-- tools/package.json | 5 +- 3 files changed, 166 insertions(+), 9 deletions(-) diff --git a/tools/.bpmnlintrc b/tools/.bpmnlintrc index 0c1faae..9192290 100644 --- a/tools/.bpmnlintrc +++ b/tools/.bpmnlintrc @@ -1,3 +1,10 @@ { - "extends": "bpmnlint:recommended" + "extends": [ + "bpmnlint:recommended", + "plugin:camunda-compat/camunda-platform-7-24", + "plugin:@miragon/rules/all" + ], + "moddleExtensions": { + "camunda": "camunda-bpmn-moddle/resources/camunda.json" + } } diff --git a/tools/package-lock.json b/tools/package-lock.json index 2618038..a37f96e 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -8,7 +8,36 @@ "name": "fullstack-example-tooling", "version": "1.0.0", "devDependencies": { - "bpmnlint": "11.12.1" + "@miragon/bpmnlint-plugin-rules": "0.5.0", + "bpmnlint": "11.13.0" + } + }, + "node_modules/@bpmn-io/feel-analyzer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/feel-analyzer/-/feel-analyzer-0.3.0.tgz", + "integrity": "sha512-TJjNDg9c8f3Vg9rPuUTMV1vKQfX2mZGejyTUAzOWy4KXjqMTRG1PxlpAma5P444niivnZPtEukHgvO8R3aGd3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bpmn-io/lezer-feel": "^2.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@bpmn-io/lezer-feel": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/lezer-feel/-/lezer-feel-2.5.0.tgz", + "integrity": "sha512-09JlwNYeD5YYeFrl0dIFfgQKEL+NNiTyUwEtdcPhfftz1mYa7z+ylOPCv/8Z0GqG7X81uyMFvRZDFCRBFTiUPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/highlight": "^1.2.3", + "@lezer/lr": "^1.4.10", + "min-dash": "^5.0.0" + }, + "engines": { + "node": ">= 20.12.0" } }, "node_modules/@bpmn-io/moddle-utils": { @@ -21,6 +50,69 @@ "min-dash": "^5.0.0" } }, + "node_modules/@bpmn-io/semver-compat": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@bpmn-io/semver-compat/-/semver-compat-0.1.0.tgz", + "integrity": "sha512-hIcW42Ku92MUioL6aknDbRoW1jK8ZEqIe8qZZ+d3cjitDO+PMEFFXj/sezJYIHMe8elu4CBz9qpjkV8WIVG9qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.2" + } + }, + "node_modules/@camunda/feel-builtins": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@camunda/feel-builtins/-/feel-builtins-1.4.0.tgz", + "integrity": "sha512-G3jH5MRvF/3L9/h6fY1zn+kwgYgH7APa84p34jajSG9IVWPCIGpttVGyRTrnbsCI76C2QdPbR2AvOm3RaLzUJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lezer/common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.2.tgz", + "integrity": "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.10.tgz", + "integrity": "sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@miragon/bpmnlint-plugin-rules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@miragon/bpmnlint-plugin-rules/-/bpmnlint-plugin-rules-0.5.0.tgz", + "integrity": "sha512-baY2/w1wXDz/khXTKSX5eCDacsP7Q6rAOd8WjRhWRfWj3GKB4T0jYJkYJUsei0HTTZwqhBM3uSARbWbnnqm9zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bpmnlint-plugin-camunda-compat": "2.59.2", + "bpmnlint-utils": "1.1.1", + "camunda-bpmn-moddle": "7.0.1", + "zeebe-bpmn-moddle": "1.17.0" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "bpmnlint": ">=11" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -47,19 +139,19 @@ } }, "node_modules/bpmnlint": { - "version": "11.12.1", - "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-11.12.1.tgz", - "integrity": "sha512-s/V68yzJU/ko7ea6ljp/xUUC8PUN+fzZaqI+votu0DPzDc6OqvpBcKzw7rMpqS4WPw/HOW3cLw/C2poWilClCw==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/bpmnlint/-/bpmnlint-11.13.0.tgz", + "integrity": "sha512-EBUp+6yg2UWiCf44tZtxZUY0GpopALEE+/8ajV4inRGAVkuvHoICRmCPVkz88MSzBKdX0XSHOYijIk4yRdHW2Q==", "dev": true, "license": "MIT", "dependencies": { "@bpmn-io/moddle-utils": "^0.3.0", "ansi-colors": "^4.1.3", - "bpmn-moddle": "^10.0.0", + "bpmn-moddle": "^10.1.0", "bpmnlint-utils": "^1.1.1", "cli-table": "^0.3.11", "color-support": "^1.1.3", - "min-dash": "^5.0.0", + "min-dash": "^5.1.0", "mri": "^1.2.0", "pluralize": "^8.0.0", "tiny-glob": "^0.2.9" @@ -71,6 +163,29 @@ "node": ">= 20" } }, + "node_modules/bpmnlint-plugin-camunda-compat": { + "version": "2.59.2", + "resolved": "https://registry.npmjs.org/bpmnlint-plugin-camunda-compat/-/bpmnlint-plugin-camunda-compat-2.59.2.tgz", + "integrity": "sha512-CTkzFIFv8FpiFP+AWIofMRzDWYVeeDraU3ZvC6s7xnrqMw6gCR+EDVfmi+LXiaR6bGrIleP2Q/FpO1Od6DLPyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bpmn-io/feel-analyzer": "^0.3.0", + "@bpmn-io/lezer-feel": "^2.5.0", + "@bpmn-io/moddle-utils": "^0.3.0", + "@bpmn-io/semver-compat": "^0.1.0", + "@camunda/feel-builtins": "^1.2.0", + "bpmnlint-utils": "^1.1.1", + "min-dash": "^5.0.0", + "semver-compare": "^1.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "bpmnlint": ">= 11.6.0" + } + }, "node_modules/bpmnlint-utils": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/bpmnlint-utils/-/bpmnlint-utils-1.1.1.tgz", @@ -78,6 +193,13 @@ "dev": true, "license": "MIT" }, + "node_modules/camunda-bpmn-moddle": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camunda-bpmn-moddle/-/camunda-bpmn-moddle-7.0.1.tgz", + "integrity": "sha512-Br8Diu6roMpziHdpl66Dhnm0DTnCFMrSD9zwLV08LpD52QA0UsXxU87XfHf08HjuB7ly0Hd1bvajZRpf9hbmYQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cli-table": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", @@ -188,6 +310,26 @@ "node": ">= 20.12" } }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT" + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -198,6 +340,13 @@ "globalyzer": "0.1.0", "globrex": "^0.1.2" } + }, + "node_modules/zeebe-bpmn-moddle": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/zeebe-bpmn-moddle/-/zeebe-bpmn-moddle-1.17.0.tgz", + "integrity": "sha512-b+0AKsY90Kg+ewf8fiI9gGQkHhcs/4RTkVtVpKwZMaWvq3GoeBEP91GKxbeOxan7cKD9yQinKazPFb0BSE5lew==", + "dev": true, + "license": "MIT" } } } diff --git a/tools/package.json b/tools/package.json index 044c3e1..a6b568f 100644 --- a/tools/package.json +++ b/tools/package.json @@ -4,10 +4,11 @@ "private": true, "description": "Dev tooling for the fullstack bike-leasing blueprint: BPMN linting (bpmnlint) and git hook installation. Run from the repo root via `npm --prefix tools run