diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000000..0f60dd4b27b --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,95 @@ +name: Release Please + +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + id-token: write # Required for trusted publishing via OIDC (https://docs.npmjs.com/trusted-publishers) + +jobs: + release-please: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v5 + + - name: Node.js LTS + uses: actions/setup-node@v5 + with: + node-version: 24.x + + - name: Run Release Please to update PRs and create releases + uses: googleapis/release-please-action@v4 + id: release + with: + token: "${{ secrets.GITHUB_TOKEN }}" + + publish-packages: + runs-on: ubuntu-24.04 + needs: release-please + if: needs.release-please.outputs.releases_created == 'true' + strategy: + # Publish packages in dependency order: logger โ†’ fs โ†’ builder โ†’ server โ†’ project + # CLI is handled separately to update shrinkwrap + # Order of packages in the matrix does matter and is important! + # release-please updates the package.json dependencies with ones that do not exist yet on NPM + # Publish in the correct order is important, so that dependencies are available and resolved properly! + max-parallel: 1 + matrix: + package: [logger, fs, builder, server, project] + steps: + - uses: actions/checkout@v5 + + - name: Node.js LTS + uses: actions/setup-node@v5 + with: + node-version: 24.x + + - name: Install and publish ${{ matrix.package }} + working-directory: packages/${{ matrix.package }} + run: | + echo "๐Ÿš€ Publishing @ui5/${{ matrix.package }}" + + # TODO: Uncomment when ready to publish + # npm ci + # npm publish --access public + + publish-cli: + runs-on: ubuntu-24.04 + needs: [release-please, publish-packages] + if: needs.release-please.outputs.releases_created == 'true' + steps: + - uses: actions/checkout@v5 + + - name: Node.js LTS + uses: actions/setup-node@v5 + with: + node-version: 24.x + + - name: Generate npm-shrinkwrap.json (isolated staging) + run: | + set -e + echo "๐Ÿ“ฆ Isolating @ui5/cli for shrinkwrap" + npm ci --omit=dev + STAGE=cli-publish + rm -rf "$STAGE" && mkdir "$STAGE" + echo "โ†ช๏ธ Copying CLI sources" + rsync -a --exclude 'node_modules' packages/cli/ "$STAGE"/ + echo "โ†ช๏ธ Copying resolved production dependencies" + rsync -a node_modules/ "$STAGE"/node_modules/ + echo "๐Ÿงน Pruning extraneous modules inside staging" + (cd "$STAGE" && npm prune --production) + echo "๐Ÿ”’ Running npm shrinkwrap in isolated directory (post-prune)" + (cd "$STAGE" && npm shrinkwrap) + mv "$STAGE"/npm-shrinkwrap.json packages/cli/ + echo "โœ… npm-shrinkwrap.json placed into packages/cli" + + - name: Publish @ui5/cli + working-directory: packages/cli + run: | + echo "๐Ÿš€ Publishing @ui5/cli" + # TODO: Uncomment when ready to publish + # npm publish --access public diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000000..8c7ff6c7518 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,8 @@ +{ + "packages/logger": "4.0.2", + "packages/fs": "4.0.2", + "packages/builder": "4.0.11", + "packages/server": "4.0.7", + "packages/project": "4.0.6", + "packages/cli": "4.0.26" +} diff --git a/package-lock.json b/package-lock.json index 149557a2573..832e64dd614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "0.0.1", "license": "Apache-2.0", "workspaces": [ - "packages/logger", "packages/builder", + "packages/cli", "packages/fs", - "packages/server", + "packages/logger", "packages/project", - "packages/cli" + "packages/server" ], "dependencies": { "@ui5/cli": "^4.0.30", @@ -15361,12 +15361,12 @@ }, "packages/builder": { "name": "@ui5/builder", - "version": "4.0.11", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "cheerio": "1.0.0", "escape-unicode": "^0.2.0", "escope": "^4.0.0", @@ -15383,7 +15383,7 @@ "devDependencies": { "@istanbuljs/esm-loader-hook": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.31", - "@ui5/project": "^4.0.6", + "@ui5/project": "5.0.0-0", "ava": "^6.4.1", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", @@ -15498,14 +15498,14 @@ }, "packages/cli": { "name": "@ui5/cli", - "version": "4.0.26", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "@ui5/project": "^4.0.6", - "@ui5/server": "^4.0.7", + "@ui5/builder": "5.0.0-0", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", + "@ui5/project": "5.0.0-0", + "@ui5/server": "5.0.0-0", "chalk": "^5.6.2", "data-with-position": "^0.5.0", "import-local": "^3.2.0", @@ -15786,10 +15786,10 @@ }, "packages/fs": { "name": "@ui5/fs", - "version": "4.0.2", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { - "@ui5/logger": "^4.0.2", + "@ui5/logger": "5.0.0-0", "clone": "^2.1.2", "escape-string-regexp": "^5.0.0", "globby": "^15.0.0", @@ -15960,7 +15960,7 @@ }, "packages/logger": { "name": "@ui5/logger", - "version": "4.0.2", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { "chalk": "^5.6.2", @@ -16066,12 +16066,12 @@ }, "packages/project": { "name": "@ui5/project", - "version": "4.0.6", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { "@npmcli/config": "^10.4.0", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "ajv": "^6.12.6", "ajv-errors": "^1.0.1", "chalk": "^5.6.2", @@ -16116,7 +16116,7 @@ "npm": ">= 8" }, "peerDependencies": { - "@ui5/builder": "^4.0.11" + "@ui5/builder": "5.0.0-0" }, "peerDependenciesMeta": { "@ui5/builder": { @@ -16235,12 +16235,12 @@ }, "packages/server": { "name": "@ui5/server", - "version": "4.0.7", + "version": "5.0.0-0", "license": "Apache-2.0", "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/builder": "5.0.0-0", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "body-parser": "^1.20.2", "compression": "^1.8.1", "cors": "^2.8.5", @@ -16260,7 +16260,7 @@ }, "devDependencies": { "@istanbuljs/esm-loader-hook": "^0.3.0", - "@ui5/project": "^4.0.6", + "@ui5/project": "5.0.0-0", "ava": "^6.4.1", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", diff --git a/packages/builder/package.json b/packages/builder/package.json index ff631203915..6137aff8adb 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/builder", - "version": "4.0.11", + "version": "5.0.0-0", "description": "UI5 CLI - Builder", "author": { "name": "SAP SE", @@ -117,8 +117,8 @@ }, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "cheerio": "1.0.0", "escape-unicode": "^0.2.0", "escope": "^4.0.0", @@ -135,7 +135,7 @@ "devDependencies": { "@istanbuljs/esm-loader-hook": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.31", - "@ui5/project": "^4.0.6", + "@ui5/project": "5.0.0-0", "ava": "^6.4.1", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", diff --git a/packages/cli/package.json b/packages/cli/package.json index 253e039afee..710613d20f9 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/cli", - "version": "4.0.26", + "version": "5.0.0-0", "description": "UI5 CLI - CLI", "author": { "name": "SAP SE", @@ -110,11 +110,11 @@ "directory": "packages/cli" }, "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "@ui5/project": "^4.0.6", - "@ui5/server": "^4.0.7", + "@ui5/builder": "5.0.0-0", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", + "@ui5/project": "5.0.0-0", + "@ui5/server": "5.0.0-0", "chalk": "^5.6.2", "data-with-position": "^0.5.0", "import-local": "^3.2.0", diff --git a/packages/fs/package.json b/packages/fs/package.json index 234f4ff4303..384c46ebd6d 100644 --- a/packages/fs/package.json +++ b/packages/fs/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/fs", - "version": "4.0.2", + "version": "5.0.0-0", "description": "UI5 CLI - File System Abstraction", "author": { "name": "SAP SE", @@ -118,7 +118,7 @@ "directory": "packages/fs" }, "dependencies": { - "@ui5/logger": "^4.0.2", + "@ui5/logger": "5.0.0-0", "clone": "^2.1.2", "escape-string-regexp": "^5.0.0", "globby": "^15.0.0", diff --git a/packages/logger/package.json b/packages/logger/package.json index 0211e1715a4..6686f4a5890 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/logger", - "version": "4.0.2", + "version": "5.0.0-0", "description": "UI5 CLI - Internal Logger", "author": { "name": "SAP SE", diff --git a/packages/project/package.json b/packages/project/package.json index d97a9ef2215..dfb48e9e092 100644 --- a/packages/project/package.json +++ b/packages/project/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/project", - "version": "4.0.6", + "version": "5.0.0-0", "description": "UI5 CLI - Project", "author": { "name": "SAP SE", @@ -116,8 +116,8 @@ }, "dependencies": { "@npmcli/config": "^10.4.0", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "ajv": "^6.12.6", "ajv-errors": "^1.0.1", "chalk": "^5.6.2", @@ -138,7 +138,7 @@ "yesno": "^0.4.0" }, "peerDependencies": { - "@ui5/builder": "^4.0.11" + "@ui5/builder": "5.0.0-0" }, "peerDependenciesMeta": { "@ui5/builder": { diff --git a/packages/server/package.json b/packages/server/package.json index 6dd23200c7c..28ff4e13150 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@ui5/server", - "version": "4.0.7", + "version": "5.0.0-0", "description": "UI5 CLI - Server", "author": { "name": "SAP SE", @@ -112,9 +112,9 @@ "directory": "packages/server" }, "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", + "@ui5/builder": "5.0.0-0", + "@ui5/fs": "5.0.0-0", + "@ui5/logger": "5.0.0-0", "body-parser": "^1.20.2", "compression": "^1.8.1", "cors": "^2.8.5", @@ -134,7 +134,7 @@ }, "devDependencies": { "@istanbuljs/esm-loader-hook": "^0.3.0", - "@ui5/project": "^4.0.6", + "@ui5/project": "5.0.0-0", "ava": "^6.4.1", "chokidar-cli": "^3.0.0", "cross-env": "^7.0.3", diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000000..76ac66d6517 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "include-component-in-tag": true, + "group-pull-request-title-pattern": "release: UI5 CLI packages", + "packages": { + "packages/logger": { + "component": "logger" + }, + "packages/fs": { + "component": "fs" + }, + "packages/builder": { + "component": "builder" + }, + "packages/server": { + "component": "server" + }, + "packages/project": { + "component": "project" + }, + "packages/cli": { + "component": "cli", + "extra-files": [ + "npm-shrinkwrap.json" + ] + } + }, + "release-type": "node", + "always-update": true, + "pull-request-header": ":tractor: New release prepared", + "pull-request-title-pattern": "release: UI5 CLI packages", + "plugins": [ + { + "type": "node-workspace" + } + ], + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "deps", + "section": "Dependencies" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "docs", + "section": "Documentation", + "hidden": true + }, + { + "type": "style", + "section": "Styles", + "hidden": true + }, + { + "type": "refactor", + "section": "Code Refactoring", + "hidden": true + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Automation", + "hidden": true + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true + }, + { + "type": "release", + "section": "Release", + "hidden": true + } + ] +}