From 13d2583ab2fe90999589566fb21c359e8378a705 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Wed, 30 Sep 2026 17:22:27 +0300 Subject: [PATCH 1/8] feat(*): one off react grids release --- .azure-pipelines/release.yml | 268 ++++++++++------------------------- 1 file changed, 71 insertions(+), 197 deletions(-) diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml index 2808c8e..4672cfb 100644 --- a/.azure-pipelines/release.yml +++ b/.azure-pipelines/release.yml @@ -1,12 +1,26 @@ -trigger: - tags: - include: - - '*' +# ONE-OFF BRANCH VERSION - do not merge into master. +# +# Publishes igniteui-react-grids ONLY, from a manually queued run. Differences +# from the master copy of this file: +# * no tag trigger - the run is queued by hand against this branch, +# * the version is typed into the `releaseVersion` parameter instead of being +# read from the tag name, +# * components and dock-manager are not published at all. +# +# Delete this branch once the one-off release is out; master keeps the real, +# tag-driven release pipeline. + +trigger: none +pr: none pool: vmImage: ubuntu-latest parameters: +- name: releaseVersion + displayName: 'Version to publish - exact semver, e.g. 21.0.1 or 21.1.0-beta.0' + type: string + - name: publishToNpm displayName: 'Publish to npm registry?' type: boolean @@ -14,7 +28,7 @@ parameters: - name: publishToProdLicensed displayName: 'Publish to Production/External Licensed Feed (ProGet)?' - type: boolean + type: boolean default: true - name: verbose @@ -23,18 +37,35 @@ parameters: default: false variables: + # Same rule the tag-driven pipeline applies to the tag name, applied here to + # the typed version. - name: npmPublishTag - ${{ if or(contains(variables['Build.SourceBranchName'], 'rc'), contains(variables['Build.SourceBranchName'], 'alpha'),contains(variables['Build.SourceBranchName'], 'beta')) }}: + ${{ if or(contains(parameters.releaseVersion, 'rc'), contains(parameters.releaseVersion, 'alpha'), contains(parameters.releaseVersion, 'beta')) }}: value: 'next' ${{ else }}: value: 'latest' -name: $(BuildDefinitionName)_$(Build.SourceBranchName)_$(Date:yyyy-MM-dd).$(Rev:r) +name: $(BuildDefinitionName)_grids_${{ parameters.releaseVersion }}_$(Date:yyyy-MM-dd).$(Rev:r) jobs: - job: Trial condition: ${{ parameters.publishToNpm }} steps: + # Fail in seconds on a bad version rather than after the full build: `npm + # version` also accepts keywords like `patch`/`minor`, which would silently + # bump off the manifest's placeholder 0.0.0 and publish nonsense. + - task: PowerShell@2 + displayName: 'Validate releaseVersion' + inputs: + targetType: inline + script: | + $version = '${{ parameters.releaseVersion }}' + if ($version -notmatch '^\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$') { + Write-Host "##vso[task.logissue type=error]'$version' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)." + exit 1 + } + Write-Host "Publishing igniteui-react-grids $version under npm dist-tag '$(npmPublishTag)'." + # build: - template: setup-build-test-steps.yml parameters: @@ -63,99 +94,22 @@ jobs: workingFile: '$(Build.SourcesDirectory)/.npmrc' customEndpoint: 'NPMJS.ORG PUBLIC-NetAdvantage' - # components release: - - task: PowerShell@2 - displayName: 'Copy components package.json' - inputs: - targetType: inline - script: Copy-Item -Path "scripts/components.package.json" -Destination "dist/package.json" - - - task: PowerShell@2 - displayName: 'Copy MIT license' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_MIT" -Destination "dist/LICENSE" - - - task: PowerShell@2 - displayName: 'Copy skills folder' - inputs: - targetType: inline - script: Copy-Item -Path "skills" -Destination "dist/skills" -Recurse - - - task: PowerShell@2 - displayName: 'Copy components README' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/README_Components.md" -Destination "dist/README.md" - - - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - - - task: Npm@1 - displayName: '[npmjs] npm publish igniteui-react' - continueOnError: true - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' - verbose: ${{ parameters.verbose }} - - - task: PowerShell@2 - displayName: 'Remove skills folder' - inputs: - targetType: inline - script: Remove-Item -Path "dist/skills" -Recurse -Force - - # dock-manager trial release: + # grids trial release: - task: PowerShell@2 - displayName: 'Copy dock-manager package.json' + displayName: 'Copy grids package.json' inputs: targetType: inline - script: Copy-Item -Path "scripts/dock-manager.package.json" -Destination "dist/package.json" + script: Copy-Item -Path "scripts/grids.package.json" -Destination "dist/package.json" + # The master pipeline gets away without this because the dock-manager release + # right before it already left LICENSE_IG in dist/; publishing grids on its + # own has to copy it explicitly or the package ships with no LICENSE. - task: PowerShell@2 displayName: 'Copy IG license' inputs: targetType: inline script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_IG" -Destination "dist/LICENSE" - - task: PowerShell@2 - displayName: 'Copy dock-manager README' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/README_DockManager.md" -Destination "dist/README.md" - - - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - - - task: Npm@1 - displayName: '[npmjs] npm publish igniteui-react-dockmanager' - continueOnError: true - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' - verbose: ${{ parameters.verbose }} - - # grids trial release: - - task: PowerShell@2 - displayName: 'Copy grids package.json' - inputs: - targetType: inline - script: Copy-Item -Path "scripts/grids.package.json" -Destination "dist/package.json" - - task: PowerShell@2 displayName: 'Copy grids README' inputs: @@ -174,17 +128,19 @@ jobs: displayName: "Dummy combined.js" - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' + displayName: 'npm version ${{ parameters.releaseVersion }}' continueOnError: false inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + customCommand: 'version ${{ parameters.releaseVersion }} --no-git-tag-version' + # Unlike the master pipeline this does NOT continueOnError: a single package + # is being published here, so a failed publish should fail the build outright + # instead of hiding in a partially succeeded one. - task: Npm@1 - displayName: '[npmjs] npm publish' - continueOnError: true + displayName: '[npmjs] npm publish igniteui-react-grids' inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' @@ -194,6 +150,19 @@ jobs: - job: Licensed condition: ${{ parameters.publishToProdLicensed }} steps: + # see the note on the same step in the Trial job + - task: PowerShell@2 + displayName: 'Validate releaseVersion' + inputs: + targetType: inline + script: | + $version = '${{ parameters.releaseVersion }}' + if ($version -notmatch '^\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$') { + Write-Host "##vso[task.logissue type=error]'$version' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)." + exit 1 + } + Write-Host "Publishing @infragistics/igniteui-react-grids $version under npm dist-tag '$(npmPublishTag)'." + # build: - template: setup-build-test-steps.yml parameters: @@ -223,118 +192,23 @@ jobs: workingFile: '$(Build.SourcesDirectory)/.npmrc' customEndpoint: 'public proget' - # components licensed feed release: - - task: PowerShell@2 - displayName: 'Copy components package.json' - inputs: - targetType: inline - script: Copy-Item -Path "scripts/components.package.json" -Destination "dist/package.json" - - - task: PowerShell@2 - displayName: 'Copy MIT license' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_MIT" -Destination "dist/LICENSE" - - - task: PowerShell@2 - displayName: 'Copy components README' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/README_Components.md" -Destination "dist/README.md" - - - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - - - task: Npm@1 - displayName: 'update package name to @infragistics/igniteui-react' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'pkg set name="@infragistics/igniteui-react"' - - - - script: | - npm pkg set scripts.postinstall='echo "⚠️ Deprecated(@infragistics/igniteui-react): Now distributed as MIT, use igniteui-react from the npmjs.org registry instead."' - displayName: 'add deprecation postinstall script' - continueOnError: false - workingDirectory: '$(Build.SourcesDirectory)/dist' - - - task: Npm@1 - displayName: '[IG Packages] npm publish' - continueOnError: true - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' - verbose: ${{ parameters.verbose }} - - # dock-manager licensed release: + # grids licensed release: - task: PowerShell@2 - displayName: 'Copy dock-manager package.json' + displayName: 'Copy grids package.json' inputs: targetType: inline script: | - $content = Get-Content -Path "scripts/dock-manager.package.json" - $updatedContent = $content -replace 'igniteui-dockmanager', '@infragistics/igniteui-dockmanager' + $content = Get-Content -Path "scripts/grids.package.json" + $updatedContent = $content -replace 'igniteui-webcomponents-grids', '@infragistics/igniteui-webcomponents-grids' Set-Content -Path "dist/package.json" -Value $updatedContent + # see the note on the same step in the Trial job - task: PowerShell@2 displayName: 'Copy IG license' inputs: targetType: inline script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_IG" -Destination "dist/LICENSE" - - task: PowerShell@2 - displayName: 'Copy components README' - inputs: - targetType: inline - script: Copy-Item -Path ".azure-pipelines/artifacts/README_DockManager.md" -Destination "dist/README.md" - - - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - - - task: Npm@1 - displayName: 'update package name to @infragistics/igniteui-react-dockmanager' - continueOnError: false - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - verbose: ${{ parameters.verbose }} - customCommand: 'pkg set name="@infragistics/igniteui-react-dockmanager"' - - - task: Npm@1 - displayName: '[IG Packages] npm publish' - continueOnError: true - inputs: - command: 'custom' - workingDir: '$(Build.SourcesDirectory)/dist' - customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' - verbose: ${{ parameters.verbose }} - - # grids licensed release: - - task: PowerShell@2 - displayName: 'Copy grids package.json' - inputs: - targetType: inline - script: | - $content = Get-Content -Path "scripts/grids.package.json" - $updatedContent = $content -replace 'igniteui-webcomponents-grids', '@infragistics/igniteui-webcomponents-grids' - Set-Content -Path "dist/package.json" -Value $updatedContent - - task: PowerShell@2 displayName: 'Copy grids README' inputs: @@ -353,13 +227,13 @@ jobs: displayName: "Dummy combined.js" - task: Npm@1 - displayName: 'npm version for tag $(Build.SourceBranchName)' + displayName: 'npm version ${{ parameters.releaseVersion }}' continueOnError: false inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' verbose: ${{ parameters.verbose }} - customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + customCommand: 'version ${{ parameters.releaseVersion }} --no-git-tag-version' - task: Npm@1 displayName: 'update package name to @infragistics/igniteui-react-grids' @@ -370,9 +244,9 @@ jobs: verbose: ${{ parameters.verbose }} customCommand: 'pkg set name="@infragistics/igniteui-react-grids"' + # see the note on the same step in the Trial job - task: Npm@1 displayName: '[IG Packages] npm publish' - continueOnError: true inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' From 17444e1fda7b5f95e72b74b20644787407f31f23 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Wed, 30 Sep 2026 18:52:38 +0300 Subject: [PATCH 2/8] feat(*): updating to webcomponents-grids 7.3.0 --- package-lock.json | 8 ++++---- package.json | 2 +- scripts/grids.package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33d23a7..d785c60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.2.1", + "igniteui-webcomponents-grids": "~7.3.0", "lit": "^3.3.3" }, "devDependencies": { @@ -3422,9 +3422,9 @@ } }, "node_modules/igniteui-webcomponents-grids": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.2.1.tgz", - "integrity": "sha512-G0lm9LiT6GjRcDw6X5n6xcrfiLrhWQ9jD8c+BtlBaSc4kJ2uK1UphNw3roEmlCs18bL/iVokEJT2G68E5x6nMA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.0.tgz", + "integrity": "sha512-FUT/fmDuUwW/w2wP4XsCNMUmZLrYRBmE9vBXoNx+wMf/8WTF8dspMjTFYQKzle+hOY6QauP67FY6COuTHtSTFg==", "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "igniteui-i18n-core": "^1.0.3", diff --git a/package.json b/package.json index 2f509bb..5b41947 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.2.1", + "igniteui-webcomponents-grids": "~7.3.0", "lit": "^3.3.3" }, "devDependencies": { diff --git a/scripts/grids.package.json b/scripts/grids.package.json index 2cc88f5..8fa450d 100644 --- a/scripts/grids.package.json +++ b/scripts/grids.package.json @@ -21,7 +21,7 @@ "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "@lit/react": "^1.0.7", - "igniteui-webcomponents-grids": "~7.2.1", + "igniteui-webcomponents-grids": "~7.3.0", "lit": "^3.3.0" }, "typings": "grids.d.ts", From 3ac2818abac8e531554d13d46980e29d63e7f190 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Thu, 1 Oct 2026 12:03:47 +0300 Subject: [PATCH 3/8] chore(*): trying 7.3.1-beta.0 --- package-lock.json | 8 ++++---- package.json | 2 +- scripts/grids.package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d785c60..337a53f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.3.0", + "igniteui-webcomponents-grids": "7.3.1-beta.0", "lit": "^3.3.3" }, "devDependencies": { @@ -3422,9 +3422,9 @@ } }, "node_modules/igniteui-webcomponents-grids": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.0.tgz", - "integrity": "sha512-FUT/fmDuUwW/w2wP4XsCNMUmZLrYRBmE9vBXoNx+wMf/8WTF8dspMjTFYQKzle+hOY6QauP67FY6COuTHtSTFg==", + "version": "7.3.1-beta.0", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.1-beta.0.tgz", + "integrity": "sha512-C0PXII5eRWQLcMsKNZPXLnB4woO6Wfl/uRiOcdW363c9KOpOBIwzBnF2Kld9RFMSlAu3i99MPu8CIFhaWfyNww==", "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "igniteui-i18n-core": "^1.0.3", diff --git a/package.json b/package.json index 5b41947..9303902 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.3.0", + "igniteui-webcomponents-grids": "7.3.1-beta.0", "lit": "^3.3.3" }, "devDependencies": { diff --git a/scripts/grids.package.json b/scripts/grids.package.json index 8fa450d..f60309d 100644 --- a/scripts/grids.package.json +++ b/scripts/grids.package.json @@ -21,7 +21,7 @@ "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "@lit/react": "^1.0.7", - "igniteui-webcomponents-grids": "~7.3.0", + "igniteui-webcomponents-grids": "7.3.1-beta.0", "lit": "^3.3.0" }, "typings": "grids.d.ts", From 8206882409a7e8be583f1e1a1de73baaf1e90566 Mon Sep 17 00:00:00 2001 From: Radoslav Karaivanov Date: Thu, 1 Oct 2026 14:33:48 +0300 Subject: [PATCH 4/8] test: Add explicit height to the grid --- tests/grids/Grid.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/grids/Grid.tsx b/tests/grids/Grid.tsx index 73a5bf4..bd3f0cd 100644 --- a/tests/grids/Grid.tsx +++ b/tests/grids/Grid.tsx @@ -87,6 +87,8 @@ export default function Grid() { Date: Thu, 1 Oct 2026 17:24:55 +0300 Subject: [PATCH 5/8] chore(*): updatng to working 7.3.1 version --- package-lock.json | 8 ++++---- package.json | 2 +- scripts/grids.package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 337a53f..d0f1202 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "7.3.1-beta.0", + "igniteui-webcomponents-grids": "~7.3.1", "lit": "^3.3.3" }, "devDependencies": { @@ -3422,9 +3422,9 @@ } }, "node_modules/igniteui-webcomponents-grids": { - "version": "7.3.1-beta.0", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.1-beta.0.tgz", - "integrity": "sha512-C0PXII5eRWQLcMsKNZPXLnB4woO6Wfl/uRiOcdW363c9KOpOBIwzBnF2Kld9RFMSlAu3i99MPu8CIFhaWfyNww==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.1.tgz", + "integrity": "sha512-+hDTh6dVdV9J7OviIi0JlOaTZhl5BVipqNMGZ1FTw8nYgq1w1l8S4DWmnnjL0qo8S90AkngbJOO6SjP4XFLqFQ==", "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "igniteui-i18n-core": "^1.0.3", diff --git a/package.json b/package.json index 9303902..6e6ca29 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "7.3.1-beta.0", + "igniteui-webcomponents-grids": "~7.3.1", "lit": "^3.3.3" }, "devDependencies": { diff --git a/scripts/grids.package.json b/scripts/grids.package.json index f60309d..7374e7d 100644 --- a/scripts/grids.package.json +++ b/scripts/grids.package.json @@ -21,7 +21,7 @@ "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "@lit/react": "^1.0.7", - "igniteui-webcomponents-grids": "7.3.1-beta.0", + "igniteui-webcomponents-grids": "~7.3.1", "lit": "^3.3.0" }, "typings": "grids.d.ts", From 1c0cabafe2c40f80da5db1e332e75707f6960524 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Thu, 1 Oct 2026 19:13:08 +0300 Subject: [PATCH 6/8] fix(cd): moving the grid only release to the proper pipe --- .azure-pipelines/release.yml | 268 ++++++++++++++++++------- .github/workflows/npm-publish.yml | 323 ++++++------------------------ 2 files changed, 260 insertions(+), 331 deletions(-) diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml index 4672cfb..2808c8e 100644 --- a/.azure-pipelines/release.yml +++ b/.azure-pipelines/release.yml @@ -1,26 +1,12 @@ -# ONE-OFF BRANCH VERSION - do not merge into master. -# -# Publishes igniteui-react-grids ONLY, from a manually queued run. Differences -# from the master copy of this file: -# * no tag trigger - the run is queued by hand against this branch, -# * the version is typed into the `releaseVersion` parameter instead of being -# read from the tag name, -# * components and dock-manager are not published at all. -# -# Delete this branch once the one-off release is out; master keeps the real, -# tag-driven release pipeline. - -trigger: none -pr: none +trigger: + tags: + include: + - '*' pool: vmImage: ubuntu-latest parameters: -- name: releaseVersion - displayName: 'Version to publish - exact semver, e.g. 21.0.1 or 21.1.0-beta.0' - type: string - - name: publishToNpm displayName: 'Publish to npm registry?' type: boolean @@ -28,7 +14,7 @@ parameters: - name: publishToProdLicensed displayName: 'Publish to Production/External Licensed Feed (ProGet)?' - type: boolean + type: boolean default: true - name: verbose @@ -37,35 +23,18 @@ parameters: default: false variables: - # Same rule the tag-driven pipeline applies to the tag name, applied here to - # the typed version. - name: npmPublishTag - ${{ if or(contains(parameters.releaseVersion, 'rc'), contains(parameters.releaseVersion, 'alpha'), contains(parameters.releaseVersion, 'beta')) }}: + ${{ if or(contains(variables['Build.SourceBranchName'], 'rc'), contains(variables['Build.SourceBranchName'], 'alpha'),contains(variables['Build.SourceBranchName'], 'beta')) }}: value: 'next' ${{ else }}: value: 'latest' -name: $(BuildDefinitionName)_grids_${{ parameters.releaseVersion }}_$(Date:yyyy-MM-dd).$(Rev:r) +name: $(BuildDefinitionName)_$(Build.SourceBranchName)_$(Date:yyyy-MM-dd).$(Rev:r) jobs: - job: Trial condition: ${{ parameters.publishToNpm }} steps: - # Fail in seconds on a bad version rather than after the full build: `npm - # version` also accepts keywords like `patch`/`minor`, which would silently - # bump off the manifest's placeholder 0.0.0 and publish nonsense. - - task: PowerShell@2 - displayName: 'Validate releaseVersion' - inputs: - targetType: inline - script: | - $version = '${{ parameters.releaseVersion }}' - if ($version -notmatch '^\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$') { - Write-Host "##vso[task.logissue type=error]'$version' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)." - exit 1 - } - Write-Host "Publishing igniteui-react-grids $version under npm dist-tag '$(npmPublishTag)'." - # build: - template: setup-build-test-steps.yml parameters: @@ -94,22 +63,99 @@ jobs: workingFile: '$(Build.SourcesDirectory)/.npmrc' customEndpoint: 'NPMJS.ORG PUBLIC-NetAdvantage' - # grids trial release: + # components release: - task: PowerShell@2 - displayName: 'Copy grids package.json' + displayName: 'Copy components package.json' inputs: targetType: inline - script: Copy-Item -Path "scripts/grids.package.json" -Destination "dist/package.json" + script: Copy-Item -Path "scripts/components.package.json" -Destination "dist/package.json" + + - task: PowerShell@2 + displayName: 'Copy MIT license' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_MIT" -Destination "dist/LICENSE" + + - task: PowerShell@2 + displayName: 'Copy skills folder' + inputs: + targetType: inline + script: Copy-Item -Path "skills" -Destination "dist/skills" -Recurse + + - task: PowerShell@2 + displayName: 'Copy components README' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/README_Components.md" -Destination "dist/README.md" + + - task: Npm@1 + displayName: 'npm version for tag $(Build.SourceBranchName)' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + + - task: Npm@1 + displayName: '[npmjs] npm publish igniteui-react' + continueOnError: true + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' + verbose: ${{ parameters.verbose }} + + - task: PowerShell@2 + displayName: 'Remove skills folder' + inputs: + targetType: inline + script: Remove-Item -Path "dist/skills" -Recurse -Force + + # dock-manager trial release: + - task: PowerShell@2 + displayName: 'Copy dock-manager package.json' + inputs: + targetType: inline + script: Copy-Item -Path "scripts/dock-manager.package.json" -Destination "dist/package.json" - # The master pipeline gets away without this because the dock-manager release - # right before it already left LICENSE_IG in dist/; publishing grids on its - # own has to copy it explicitly or the package ships with no LICENSE. - task: PowerShell@2 displayName: 'Copy IG license' inputs: targetType: inline script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_IG" -Destination "dist/LICENSE" + - task: PowerShell@2 + displayName: 'Copy dock-manager README' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/README_DockManager.md" -Destination "dist/README.md" + + - task: Npm@1 + displayName: 'npm version for tag $(Build.SourceBranchName)' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + + - task: Npm@1 + displayName: '[npmjs] npm publish igniteui-react-dockmanager' + continueOnError: true + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' + verbose: ${{ parameters.verbose }} + + # grids trial release: + - task: PowerShell@2 + displayName: 'Copy grids package.json' + inputs: + targetType: inline + script: Copy-Item -Path "scripts/grids.package.json" -Destination "dist/package.json" + - task: PowerShell@2 displayName: 'Copy grids README' inputs: @@ -128,19 +174,17 @@ jobs: displayName: "Dummy combined.js" - task: Npm@1 - displayName: 'npm version ${{ parameters.releaseVersion }}' + displayName: 'npm version for tag $(Build.SourceBranchName)' continueOnError: false inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' verbose: ${{ parameters.verbose }} - customCommand: 'version ${{ parameters.releaseVersion }} --no-git-tag-version' + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - # Unlike the master pipeline this does NOT continueOnError: a single package - # is being published here, so a failed publish should fail the build outright - # instead of hiding in a partially succeeded one. - task: Npm@1 - displayName: '[npmjs] npm publish igniteui-react-grids' + displayName: '[npmjs] npm publish' + continueOnError: true inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' @@ -150,19 +194,6 @@ jobs: - job: Licensed condition: ${{ parameters.publishToProdLicensed }} steps: - # see the note on the same step in the Trial job - - task: PowerShell@2 - displayName: 'Validate releaseVersion' - inputs: - targetType: inline - script: | - $version = '${{ parameters.releaseVersion }}' - if ($version -notmatch '^\d+\.\d+\.\d+(-[0-9A-Za-z-.]+)?$') { - Write-Host "##vso[task.logissue type=error]'$version' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)." - exit 1 - } - Write-Host "Publishing @infragistics/igniteui-react-grids $version under npm dist-tag '$(npmPublishTag)'." - # build: - template: setup-build-test-steps.yml parameters: @@ -192,23 +223,118 @@ jobs: workingFile: '$(Build.SourcesDirectory)/.npmrc' customEndpoint: 'public proget' - # grids licensed release: + # components licensed feed release: - task: PowerShell@2 - displayName: 'Copy grids package.json' + displayName: 'Copy components package.json' + inputs: + targetType: inline + script: Copy-Item -Path "scripts/components.package.json" -Destination "dist/package.json" + + - task: PowerShell@2 + displayName: 'Copy MIT license' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_MIT" -Destination "dist/LICENSE" + + - task: PowerShell@2 + displayName: 'Copy components README' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/README_Components.md" -Destination "dist/README.md" + + - task: Npm@1 + displayName: 'npm version for tag $(Build.SourceBranchName)' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + + - task: Npm@1 + displayName: 'update package name to @infragistics/igniteui-react' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'pkg set name="@infragistics/igniteui-react"' + + + - script: | + npm pkg set scripts.postinstall='echo "⚠️ Deprecated(@infragistics/igniteui-react): Now distributed as MIT, use igniteui-react from the npmjs.org registry instead."' + displayName: 'add deprecation postinstall script' + continueOnError: false + workingDirectory: '$(Build.SourcesDirectory)/dist' + + - task: Npm@1 + displayName: '[IG Packages] npm publish' + continueOnError: true + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' + verbose: ${{ parameters.verbose }} + + # dock-manager licensed release: + - task: PowerShell@2 + displayName: 'Copy dock-manager package.json' inputs: targetType: inline script: | - $content = Get-Content -Path "scripts/grids.package.json" - $updatedContent = $content -replace 'igniteui-webcomponents-grids', '@infragistics/igniteui-webcomponents-grids' + $content = Get-Content -Path "scripts/dock-manager.package.json" + $updatedContent = $content -replace 'igniteui-dockmanager', '@infragistics/igniteui-dockmanager' Set-Content -Path "dist/package.json" -Value $updatedContent - # see the note on the same step in the Trial job - task: PowerShell@2 displayName: 'Copy IG license' inputs: targetType: inline script: Copy-Item -Path ".azure-pipelines/artifacts/LICENSE_IG" -Destination "dist/LICENSE" + - task: PowerShell@2 + displayName: 'Copy components README' + inputs: + targetType: inline + script: Copy-Item -Path ".azure-pipelines/artifacts/README_DockManager.md" -Destination "dist/README.md" + + - task: Npm@1 + displayName: 'npm version for tag $(Build.SourceBranchName)' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' + + - task: Npm@1 + displayName: 'update package name to @infragistics/igniteui-react-dockmanager' + continueOnError: false + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + verbose: ${{ parameters.verbose }} + customCommand: 'pkg set name="@infragistics/igniteui-react-dockmanager"' + + - task: Npm@1 + displayName: '[IG Packages] npm publish' + continueOnError: true + inputs: + command: 'custom' + workingDir: '$(Build.SourcesDirectory)/dist' + customCommand: 'publish --tag $(npmPublishTag) -userconfig ../.npmrc' + verbose: ${{ parameters.verbose }} + + # grids licensed release: + - task: PowerShell@2 + displayName: 'Copy grids package.json' + inputs: + targetType: inline + script: | + $content = Get-Content -Path "scripts/grids.package.json" + $updatedContent = $content -replace 'igniteui-webcomponents-grids', '@infragistics/igniteui-webcomponents-grids' + Set-Content -Path "dist/package.json" -Value $updatedContent + - task: PowerShell@2 displayName: 'Copy grids README' inputs: @@ -227,13 +353,13 @@ jobs: displayName: "Dummy combined.js" - task: Npm@1 - displayName: 'npm version ${{ parameters.releaseVersion }}' + displayName: 'npm version for tag $(Build.SourceBranchName)' continueOnError: false inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' verbose: ${{ parameters.verbose }} - customCommand: 'version ${{ parameters.releaseVersion }} --no-git-tag-version' + customCommand: 'version $(Build.SourceBranchName) --no-git-tag-version' - task: Npm@1 displayName: 'update package name to @infragistics/igniteui-react-grids' @@ -244,9 +370,9 @@ jobs: verbose: ${{ parameters.verbose }} customCommand: 'pkg set name="@infragistics/igniteui-react-grids"' - # see the note on the same step in the Trial job - task: Npm@1 displayName: '[IG Packages] npm publish' + continueOnError: true inputs: command: 'custom' workingDir: '$(Build.SourcesDirectory)/dist' diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 60b8dac..50c9ecb 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -1,13 +1,23 @@ name: Npm.js deploy -# Replaces the Azure DevOps release pipeline (.azure-pipelines/release.yml). All release logic -# lives inline in this file on purpose - there is no steps-template equivalent to Azure's -# setup-build-test-steps.yml here. +# ONE-OFF BRANCH VERSION - do not merge into master. +# +# Publishes igniteui-react-grids ONLY, from a manually dispatched run with a typed version. +# Differences from the master copy of this file: +# * no `release: published` trigger - dispatch only, so nothing fires off a tag, +# * the version comes from the `releaseVersion` input instead of the release tag name, +# * components and dock-manager are not built, attested or published, +# * the "attach release evidence" job is gone - there is no GitHub release to attach to. +# +# Delete this branch once the one-off release is out; master keeps the real, +# release-triggered workflow. on: - release: - types: [published] workflow_dispatch: inputs: + releaseVersion: + description: 'Version to publish - exact semver, e.g. 21.0.1 or 21.1.0-beta.0' + type: string + required: true verbose: description: 'Get verbose output from steps - where configurable' type: boolean @@ -20,9 +30,8 @@ concurrency: env: NODE_VERSION: '24.x' - # release.tag_name for a real release; falls back to the ref name so this can be exercised - # via workflow_dispatch against a tag while publishing is disabled. - VERSION: ${{ github.event.release.tag_name || github.ref_name }} + # Typed at dispatch time rather than read from a release tag. + VERSION: ${{ inputs.releaseVersion }} jobs: # Builds and inventories the npmjs.org release. Holds no publishing rights and no OIDC token. @@ -34,17 +43,20 @@ jobs: contents: read outputs: npm-tag: ${{ steps.npm-tag.outputs.npm-tag }} - components-tarball: ${{ steps.pack-components.outputs.tarball }} - components-sha256: ${{ steps.pack-components.outputs.sha256 }} - components-sbom: ${{ steps.sbom.outputs.components }} - dockmanager-tarball: ${{ steps.pack-dockmanager.outputs.tarball }} - dockmanager-sha256: ${{ steps.pack-dockmanager.outputs.sha256 }} - dockmanager-sbom: ${{ steps.sbom.outputs.dockmanager }} grids-tarball: ${{ steps.pack-grids.outputs.tarball }} grids-sha256: ${{ steps.pack-grids.outputs.sha256 }} grids-sbom: ${{ steps.sbom.outputs.grids }} steps: + # `npm version` also accepts keywords like `patch`/`minor`, which would silently bump off + # the manifest's placeholder 0.0.0 and publish nonsense. Fail before anything is built. + - name: Validate releaseVersion + run: | + set -euo pipefail + [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]] \ + || { echo "::error::'$VERSION' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)."; exit 1; } + echo "Publishing igniteui-react-grids $VERSION." + - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -88,69 +100,16 @@ jobs: echo "npm-tag=latest" >> "$GITHUB_OUTPUT" fi - # components release: - - name: Copy components package.json - run: cp scripts/components.package.json dist/package.json - - - name: Copy MIT license - run: cp .azure-pipelines/artifacts/LICENSE_MIT dist/LICENSE - - - name: Copy skills folder - run: cp -r skills dist/skills - - - name: Copy components README - run: cp .azure-pipelines/artifacts/README_Components.md dist/README.md - - - name: Version components package - run: npm version "$VERSION" --no-git-tag-version - working-directory: dist - - - name: Pack components package - id: pack-components - run: | - set -euo pipefail - mkdir -p artifacts - file=$(npm pack ./dist --pack-destination artifacts --json | node -e " - const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); - const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; - console.log(e.filename); - ") - echo "tarball=${file}" >> "$GITHUB_OUTPUT" - echo "sha256=$(sha256sum "artifacts/${file}" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - - - name: Remove skills folder - run: rm -rf dist/skills - - # dock-manager release: - - name: Copy dock-manager package.json - run: cp scripts/dock-manager.package.json dist/package.json - - - name: Copy IG license - run: cp .azure-pipelines/artifacts/LICENSE_IG dist/LICENSE - - - name: Copy dock-manager README - run: cp .azure-pipelines/artifacts/README_DockManager.md dist/README.md - - - name: Version dock-manager package - run: npm version "$VERSION" --no-git-tag-version - working-directory: dist - - - name: Pack dock-manager package - id: pack-dockmanager - run: | - set -euo pipefail - file=$(npm pack ./dist --pack-destination artifacts --json | node -e " - const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); - const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; - console.log(e.filename); - ") - echo "tarball=${file}" >> "$GITHUB_OUTPUT" - echo "sha256=$(sha256sum "artifacts/${file}" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - # grids release: - name: Copy grids package.json run: cp scripts/grids.package.json dist/package.json + # The master workflow gets away without this because the dock-manager release right before + # it already left LICENSE_IG in dist/; publishing grids on its own has to copy it + # explicitly or the package ships with no LICENSE. + - name: Copy IG license + run: cp .azure-pipelines/artifacts/LICENSE_IG dist/LICENSE + - name: Copy grids README run: cp .azure-pipelines/artifacts/README_Grids.md dist/README.md @@ -172,6 +131,7 @@ jobs: id: pack-grids run: | set -euo pipefail + mkdir -p artifacts file=$(npm pack ./dist --pack-destination artifacts --json | node -e " const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; @@ -180,34 +140,28 @@ jobs: echo "tarball=${file}" >> "$GITHUB_OUTPUT" echo "sha256=$(sha256sum "artifacts/${file}" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - # One SBOM per package: the packed tarball plus the production dependency tree a consumer - # installs. Unpacked outside the workspace so the repo's lockfile and dev tooling can't leak in. - - name: Generate per-package SBOMs (CycloneDX 1.6) + # The packed tarball plus the production dependency tree a consumer installs. Unpacked + # outside the workspace so the repo's lockfile and dev tooling can't leak in. + - name: Generate SBOM (CycloneDX 1.6) id: sbom env: - COMPONENTS: ${{ steps.pack-components.outputs.tarball }} - DOCKMANAGER: ${{ steps.pack-dockmanager.outputs.tarball }} GRIDS: ${{ steps.pack-grids.outputs.tarball }} run: | set -euo pipefail # The pinned devDependency, invoked by path so it is never downloaded at release time. cyclonedx="$GITHUB_WORKSPACE/node_modules/.bin/cyclonedx-npm" - for entry in "components=$COMPONENTS" "dockmanager=$DOCKMANAGER" "grids=$GRIDS"; do - key=${entry%%=*} - tarball=${entry#*=} - sbom="${tarball%.tgz}.cdx.json" - workdir="$RUNNER_TEMP/sbom-$key" - mkdir -p "$workdir" - tar -xzf "artifacts/$tarball" -C "$workdir" - ( - cd "$workdir/package" - npm install --omit=dev --ignore-scripts --no-audit --no-fund - # Not --output-reproducible: it drops serialNumber, which actions/attest requires. - "$cyclonedx" --spec-version 1.6 --output-format JSON --mc-type library --omit dev --validate \ - --output-file "$GITHUB_WORKSPACE/artifacts/$sbom" - ) - echo "$key=$sbom" >> "$GITHUB_OUTPUT" - done + sbom="${GRIDS%.tgz}.cdx.json" + workdir="$RUNNER_TEMP/sbom-grids" + mkdir -p "$workdir" + tar -xzf "artifacts/$GRIDS" -C "$workdir" + ( + cd "$workdir/package" + npm install --omit=dev --ignore-scripts --no-audit --no-fund + # Not --output-reproducible: it drops serialNumber, which actions/attest requires. + "$cyclonedx" --spec-version 1.6 --output-format JSON --mc-type library --omit dev --validate \ + --output-file "$GITHUB_WORKSPACE/artifacts/$sbom" + ) + echo "grids=$sbom" >> "$GITHUB_OUTPUT" - name: Summarize packed artifacts run: | @@ -233,8 +187,6 @@ jobs: env: # Artifact attestations are unavailable in private repositories outside GitHub Enterprise Cloud. ATTESTATIONS_ENABLED: ${{ !github.event.repository.private }} - COMPONENTS_SBOM: ${{ needs.build-npmjs.outputs.components-sbom }} - DOCKMANAGER_SBOM: ${{ needs.build-npmjs.outputs.dockmanager-sbom }} GRIDS_SBOM: ${{ needs.build-npmjs.outputs.grids-sbom }} steps: @@ -247,8 +199,6 @@ jobs: - name: Verify packed artifacts match the build env: EXPECTED: | - ${{ needs.build-npmjs.outputs.components-sha256 }} ${{ needs.build-npmjs.outputs.components-tarball }} - ${{ needs.build-npmjs.outputs.dockmanager-sha256 }} ${{ needs.build-npmjs.outputs.dockmanager-tarball }} ${{ needs.build-npmjs.outputs.grids-sha256 }} ${{ needs.build-npmjs.outputs.grids-tarball }} run: | set -euo pipefail @@ -262,22 +212,6 @@ jobs: with: subject-path: artifacts/*.tgz - - name: Attest SBOM (igniteui-react) - id: attest-sbom-components - if: env.ATTESTATIONS_ENABLED == 'true' - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 - with: - subject-path: artifacts/${{ needs.build-npmjs.outputs.components-tarball }} - sbom-path: artifacts/${{ env.COMPONENTS_SBOM }} - - - name: Attest SBOM (igniteui-react-dockmanager) - id: attest-sbom-dockmanager - if: env.ATTESTATIONS_ENABLED == 'true' - uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2 - with: - subject-path: artifacts/${{ needs.build-npmjs.outputs.dockmanager-tarball }} - sbom-path: artifacts/${{ env.DOCKMANAGER_SBOM }} - - name: Attest SBOM (igniteui-react-grids) id: attest-sbom-grids if: env.ATTESTATIONS_ENABLED == 'true' @@ -286,22 +220,18 @@ jobs: subject-path: artifacts/${{ needs.build-npmjs.outputs.grids-tarball }} sbom-path: artifacts/${{ env.GRIDS_SBOM }} - # Each .cdx.json is released next to its signed .cdx.sigstore.json. + # The .cdx.json is released next to its signed .cdx.sigstore.json. - name: Collect attestation bundles if: env.ATTESTATIONS_ENABLED == 'true' run: | set -euo pipefail mkdir -p attestations cp "${{ steps.attest-provenance.outputs.bundle-path }}" attestations/provenance.sigstore.json - cp "${{ steps.attest-sbom-components.outputs.bundle-path }}" "attestations/${COMPONENTS_SBOM%.json}.sigstore.json" - cp "${{ steps.attest-sbom-dockmanager.outputs.bundle-path }}" "attestations/${DOCKMANAGER_SBOM%.json}.sigstore.json" cp "${{ steps.attest-sbom-grids.outputs.bundle-path }}" "attestations/${GRIDS_SBOM%.json}.sigstore.json" { echo "### Attestations" - echo "- Provenance (all packages): ${{ steps.attest-provenance.outputs.attestation-url }}" - echo "- SBOM igniteui-react: ${{ steps.attest-sbom-components.outputs.attestation-url }}" - echo "- SBOM igniteui-react-dockmanager: ${{ steps.attest-sbom-dockmanager.outputs.attestation-url }}" + echo "- Provenance: ${{ steps.attest-provenance.outputs.attestation-url }}" echo "- SBOM igniteui-react-grids: ${{ steps.attest-sbom-grids.outputs.attestation-url }}" } >> "$GITHUB_STEP_SUMMARY" @@ -340,8 +270,6 @@ jobs: - name: Verify packed artifacts match the build env: EXPECTED: | - ${{ needs.build-npmjs.outputs.components-sha256 }} ${{ needs.build-npmjs.outputs.components-tarball }} - ${{ needs.build-npmjs.outputs.dockmanager-sha256 }} ${{ needs.build-npmjs.outputs.dockmanager-tarball }} ${{ needs.build-npmjs.outputs.grids-sha256 }} ${{ needs.build-npmjs.outputs.grids-tarball }} run: | set -euo pipefail @@ -350,57 +278,12 @@ jobs: # Publishing the packed tarball guarantees the published bytes are the attested bytes. # Authentication and npm provenance both come from the OIDC token - no npm token needed. - - name: Publish igniteui-react - env: - NPM_TAG: ${{ needs.build-npmjs.outputs.npm-tag }} - TARBALL: ${{ needs.build-npmjs.outputs.components-tarball }} - run: npm publish "./artifacts/$TARBALL" --tag "$NPM_TAG" --provenance - - - name: Publish igniteui-react-dockmanager - env: - NPM_TAG: ${{ needs.build-npmjs.outputs.npm-tag }} - TARBALL: ${{ needs.build-npmjs.outputs.dockmanager-tarball }} - run: npm publish "./artifacts/$TARBALL" --tag "$NPM_TAG" --provenance - - name: Publish igniteui-react-grids env: NPM_TAG: ${{ needs.build-npmjs.outputs.npm-tag }} TARBALL: ${{ needs.build-npmjs.outputs.grids-tarball }} run: npm publish "./artifacts/$TARBALL" --tag "$NPM_TAG" --provenance - attach-release-npmjs: - name: Attach release evidence (npmjs.org) - needs: [build-npmjs, attest-npmjs] - if: github.event_name == 'release' - runs-on: ubuntu-latest - timeout-minutes: 10 - permissions: - contents: write - - steps: - - name: Download release artifacts - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - name: npmjs-release-artifacts - path: artifacts - - - name: Download attestation bundles - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - continue-on-error: true - with: - name: npmjs-attestations - path: attestations - - - name: Attach evidence to the release - env: - GH_TOKEN: ${{ github.token }} - run: | - set -euo pipefail - gh release upload "$VERSION" --clobber -R "${{ github.repository }}" \ - artifacts/*.tgz \ - artifacts/*.cdx.json \ - $(ls attestations/*.json 2>/dev/null || true) - # Builds and inventories the licensed (@infragistics-scoped) release for the ProGet feed. # Holds no publishing rights. build-proget: @@ -411,14 +294,18 @@ jobs: contents: read outputs: npm-tag: ${{ steps.npm-tag.outputs.npm-tag }} - components-tarball: ${{ steps.pack-components.outputs.tarball }} - components-sha256: ${{ steps.pack-components.outputs.sha256 }} - dockmanager-tarball: ${{ steps.pack-dockmanager.outputs.tarball }} - dockmanager-sha256: ${{ steps.pack-dockmanager.outputs.sha256 }} grids-tarball: ${{ steps.pack-grids.outputs.tarball }} grids-sha256: ${{ steps.pack-grids.outputs.sha256 }} steps: + # see the note on the same step in build-npmjs + - name: Validate releaseVersion + run: | + set -euo pipefail + [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$ ]] \ + || { echo "::error::'$VERSION' is not an exact semver version (e.g. 21.0.1 or 21.1.0-beta.0)."; exit 1; } + echo "Publishing @infragistics/igniteui-react-grids $VERSION." + - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -464,83 +351,14 @@ jobs: echo "npm-tag=latest" >> "$GITHUB_OUTPUT" fi - # components licensed release: - - name: Copy components package.json - run: cp scripts/components.package.json dist/package.json - - - name: Copy MIT license - run: cp .azure-pipelines/artifacts/LICENSE_MIT dist/LICENSE - - - name: Copy components README - run: cp .azure-pipelines/artifacts/README_Components.md dist/README.md - - - name: Version components package - run: npm version "$VERSION" --no-git-tag-version - working-directory: dist - - - name: Rename package to @infragistics/igniteui-react - run: npm pkg set name="@infragistics/igniteui-react" - working-directory: dist - - - name: Add deprecation postinstall script - run: | - npm pkg set scripts.postinstall='echo "⚠️ Deprecated(@infragistics/igniteui-react): Now distributed as MIT, use igniteui-react from the npmjs.org registry instead."' - working-directory: dist - - - name: Pack components package - id: pack-components - run: | - set -euo pipefail - mkdir -p artifacts - file=$(npm pack ./dist --pack-destination artifacts --json | node -e " - const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); - const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; - console.log(e.filename); - ") - echo "tarball=${file}" >> "$GITHUB_OUTPUT" - echo "sha256=$(sha256sum "artifacts/${file}" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - - # dock-manager licensed release: - - name: Copy dock-manager package.json - run: cp scripts/dock-manager.package.json dist/package.json - - - name: Copy IG license - run: cp .azure-pipelines/artifacts/LICENSE_IG dist/LICENSE - - - name: Copy dock-manager README - run: cp .azure-pipelines/artifacts/README_DockManager.md dist/README.md - - - name: Version dock-manager package - run: npm version "$VERSION" --no-git-tag-version - working-directory: dist - - # The licensed wrappers import @infragistics/igniteui-dockmanager, so its dependency moves scope too. - - name: Rename package and its dependency to @infragistics scope - run: | - set -euo pipefail - npm pkg set name="@infragistics/igniteui-react-dockmanager" - range=$(npm pkg get dependencies.igniteui-dockmanager | tr -d '"') - [[ "$range" != "{}" ]] || { echo "::error::igniteui-dockmanager is not in dependencies"; exit 1; } - npm pkg set "dependencies.@infragistics/igniteui-dockmanager=$range" - npm pkg delete dependencies.igniteui-dockmanager - working-directory: dist - - - name: Pack dock-manager package - id: pack-dockmanager - run: | - set -euo pipefail - file=$(npm pack ./dist --pack-destination artifacts --json | node -e " - const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); - const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; - console.log(e.filename); - ") - echo "tarball=${file}" >> "$GITHUB_OUTPUT" - echo "sha256=$(sha256sum "artifacts/${file}" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" - # grids licensed release: - name: Copy grids package.json run: cp scripts/grids.package.json dist/package.json + # see the note on the same step in build-npmjs + - name: Copy IG license + run: cp .azure-pipelines/artifacts/LICENSE_IG dist/LICENSE + - name: Copy grids README run: cp .azure-pipelines/artifacts/README_Grids.md dist/README.md @@ -573,6 +391,7 @@ jobs: id: pack-grids run: | set -euo pipefail + mkdir -p artifacts file=$(npm pack ./dist --pack-destination artifacts --json | node -e " const p = JSON.parse(require('fs').readFileSync(0, 'utf8')); const e = Array.isArray(p) ? p[0] : Object.values(p)[0]; @@ -630,28 +449,12 @@ jobs: - name: Verify packed artifacts match the build env: EXPECTED: | - ${{ needs.build-proget.outputs.components-sha256 }} ${{ needs.build-proget.outputs.components-tarball }} - ${{ needs.build-proget.outputs.dockmanager-sha256 }} ${{ needs.build-proget.outputs.dockmanager-tarball }} ${{ needs.build-proget.outputs.grids-sha256 }} ${{ needs.build-proget.outputs.grids-tarball }} run: | set -euo pipefail cd artifacts printf '%s\n' "$EXPECTED" | sha256sum --check --strict - - name: Publish @infragistics/igniteui-react - env: - PROGET_NPM_AUTH: ${{ secrets.PACKAGES_INFRAGISTICS_COM_NPM_TOKEN }} - NPM_TAG: ${{ needs.build-proget.outputs.npm-tag }} - TARBALL: ${{ needs.build-proget.outputs.components-tarball }} - run: npm publish "./artifacts/$TARBALL" --tag "$NPM_TAG" - - - name: Publish @infragistics/igniteui-react-dockmanager - env: - PROGET_NPM_AUTH: ${{ secrets.PACKAGES_INFRAGISTICS_COM_NPM_TOKEN }} - NPM_TAG: ${{ needs.build-proget.outputs.npm-tag }} - TARBALL: ${{ needs.build-proget.outputs.dockmanager-tarball }} - run: npm publish "./artifacts/$TARBALL" --tag "$NPM_TAG" - - name: Publish @infragistics/igniteui-react-grids env: PROGET_NPM_AUTH: ${{ secrets.PACKAGES_INFRAGISTICS_COM_NPM_TOKEN }} From 98adc57fb56ce75b1131081e858766b063272487 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Fri, 2 Oct 2026 13:49:11 +0300 Subject: [PATCH 7/8] feat(*): updating to 7.3.2-beta.0 --- package-lock.json | 8 ++++---- package.json | 2 +- scripts/grids.package.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0f1202..19dc7bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.3.1", + "igniteui-webcomponents-grids": "7.3.2-beta.0", "lit": "^3.3.3" }, "devDependencies": { @@ -3422,9 +3422,9 @@ } }, "node_modules/igniteui-webcomponents-grids": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.1.tgz", - "integrity": "sha512-+hDTh6dVdV9J7OviIi0JlOaTZhl5BVipqNMGZ1FTw8nYgq1w1l8S4DWmnnjL0qo8S90AkngbJOO6SjP4XFLqFQ==", + "version": "7.3.2-beta.0", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.2-beta.0.tgz", + "integrity": "sha512-/9KmzwKutrLSJjZT+Qw/T7iSMCBwSN02aUD9+uLou3OzPtXT2iFQtxabJloTGP91OmPTsThKzmU94xP95zMFKQ==", "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "igniteui-i18n-core": "^1.0.3", diff --git a/package.json b/package.json index 6e6ca29..6a096d0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "~7.3.1", + "igniteui-webcomponents-grids": "7.3.2-beta.0", "lit": "^3.3.3" }, "devDependencies": { diff --git a/scripts/grids.package.json b/scripts/grids.package.json index 7374e7d..bea432f 100644 --- a/scripts/grids.package.json +++ b/scripts/grids.package.json @@ -21,7 +21,7 @@ "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "@lit/react": "^1.0.7", - "igniteui-webcomponents-grids": "~7.3.1", + "igniteui-webcomponents-grids": "7.3.2-beta.0", "lit": "^3.3.0" }, "typings": "grids.d.ts", From 7d053d120aecb498c87e060a3cba9b9f4e566dc9 Mon Sep 17 00:00:00 2001 From: Stamen Stoychev Date: Mon, 5 Oct 2026 11:04:56 +0300 Subject: [PATCH 8/8] feat(*): update to working wc-grids --- package-lock.json | 14 +++++++------- package.json | 2 +- scripts/grids.package.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19dc7bd..7722bd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "7.3.2-beta.0", + "igniteui-webcomponents-grids": "~7.3.2", "lit": "^3.3.3" }, "devDependencies": { @@ -3236,9 +3236,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz", + "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==", "dev": true, "license": "BSD-2-Clause", "optional": true @@ -3422,9 +3422,9 @@ } }, "node_modules/igniteui-webcomponents-grids": { - "version": "7.3.2-beta.0", - "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.2-beta.0.tgz", - "integrity": "sha512-/9KmzwKutrLSJjZT+Qw/T7iSMCBwSN02aUD9+uLou3OzPtXT2iFQtxabJloTGP91OmPTsThKzmU94xP95zMFKQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/igniteui-webcomponents-grids/-/igniteui-webcomponents-grids-7.3.2.tgz", + "integrity": "sha512-hzLrCqZ4JkEDKaoFIhmOKV3w1jPhe2k3/9+/Y6+uCprqK/39okSzMZ43jwI1sWWpwJrOq1iwt+Imimc0rRTpzg==", "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "igniteui-i18n-core": "^1.0.3", diff --git a/package.json b/package.json index 6a096d0..471d010 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "igniteui-dockmanager": "~2.2.1", "igniteui-grid-lite": "~0.11.0", "igniteui-webcomponents": "~7.4.1", - "igniteui-webcomponents-grids": "7.3.2-beta.0", + "igniteui-webcomponents-grids": "~7.3.2", "lit": "^3.3.3" }, "devDependencies": { diff --git a/scripts/grids.package.json b/scripts/grids.package.json index bea432f..1e56169 100644 --- a/scripts/grids.package.json +++ b/scripts/grids.package.json @@ -21,7 +21,7 @@ "license": "Infragistics(R) Ultimate license (http://www.infragistics.com/legal/ultimate/license/)", "dependencies": { "@lit/react": "^1.0.7", - "igniteui-webcomponents-grids": "7.3.2-beta.0", + "igniteui-webcomponents-grids": "~7.3.2", "lit": "^3.3.0" }, "typings": "grids.d.ts",