From 0082b9f271c3e772deffde1de18f0ed6616ed69b Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Wed, 16 Sep 2026 15:11:33 +0530 Subject: [PATCH 1/7] ci: set up Release Please Adds release-please-config.json, .release-please-manifest.json (seeded at 6.0.0), the Release Please workflow, and the Release-As sync workflow used by the other ImageKit SDK repos. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/release-please.yml | 20 ++++++++ .github/workflows/sync-release-as.yml | 63 ++++++++++++++++++++++++ .release-please-manifest.json | 3 ++ release-please-config.json | 70 +++++++++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 .github/workflows/release-please.yml create mode 100644 .github/workflows/sync-release-as.yml create mode 100644 .release-please-manifest.json create mode 100644 release-please-config.json diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 00000000..e7bc35d4 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,20 @@ +name: Release Please +on: + push: + branches: + - master + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + if: github.repository == 'imagekit-developer/imagekit-angular' + runs-on: ubuntu-latest + + steps: + - uses: googleapis/release-please-action@5c625bfb5d1ff62eadeeb3772007f7f66fdcf071 # v4.4.1 + id: release + with: + token: ${{ secrets.RELEASE_PLEASE_TOKEN }} diff --git a/.github/workflows/sync-release-as.yml b/.github/workflows/sync-release-as.yml new file mode 100644 index 00000000..31620ede --- /dev/null +++ b/.github/workflows/sync-release-as.yml @@ -0,0 +1,63 @@ +name: Sync Release-As from release PR title + +on: + pull_request: + types: [edited] + +permissions: + contents: write + +jobs: + sync: + if: >- + github.event.pull_request.base.ref == 'master' && + startsWith(github.event.pull_request.head.ref, 'release-please--') && + github.event.changes.title != null + runs-on: ubuntu-latest + steps: + - name: Extract versions from old and new title + id: parse + env: + NEW_TITLE: ${{ github.event.pull_request.title }} + OLD_TITLE: ${{ github.event.changes.title.from }} + run: | + # Anchored on pull-request-title-pattern "release: ${version}" from release-please-config.json. + extract() { + echo "$1" | grep -oE '^release:[[:space:]]+v?[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?' \ + | sed -E 's/^release:[[:space:]]+v?//' + } + NEW_VERSION=$(extract "$NEW_TITLE") + OLD_VERSION=$(extract "$OLD_TITLE") + echo "old=$OLD_VERSION" + echo "new=$NEW_VERSION" + if [ -z "$NEW_VERSION" ]; then + echo "::notice::No semver in new title; nothing to do." + echo "skip=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + if [ "$NEW_VERSION" = "$OLD_VERSION" ]; then + echo "::notice::Version unchanged ($NEW_VERSION); not pushing." + echo "skip=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT" + + - name: Check out main + if: steps.parse.outputs.skip != 'true' + uses: actions/checkout@v6 + with: + ref: master + token: ${{ secrets.RELEASE_PLEASE_TOKEN }} + fetch-depth: 1 + + - name: Push empty Release-As commit + if: steps.parse.outputs.skip != 'true' + env: + VERSION: ${{ steps.parse.outputs.version }} + run: | + git config user.name "release-as-bot" + git config user.email "release-as-bot@users.noreply.github.com" + git commit --allow-empty -m "chore: pin next release + + Release-As: ${VERSION}" + git push origin master diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..a3a12f49 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "6.0.0" +} diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 00000000..73036207 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "node", + "package-name": "@imagekit/angular", + "extra-files": [ + { + "type": "json", + "path": "projects/imagekit-angular/package.json", + "jsonpath": "$.version" + } + ] + } + }, + "include-v-in-tag": false, + "include-component-in-tag": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "pull-request-header": "Automated Release PR", + "pull-request-title-pattern": "release: ${version}", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "chore", + "section": "Chores" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "style", + "section": "Styles" + }, + { + "type": "refactor", + "section": "Refactors" + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System" + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true + } + ] +} From 9be3fcdbdbf7874cb27a3f190d4bfcf65dfe1592 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Wed, 16 Sep 2026 15:11:33 +0530 Subject: [PATCH 2/7] fix(deps): require @imagekit/javascript ^5.5.0 for density transformation support Raises the minimum @imagekit/javascript to 5.5.0, which adds the `density` transformation (serialized as `dn`). Consumers with an older lockfile pin would otherwise keep 5.4.x and silently drop the parameter. Co-Authored-By: Claude Fable 5.1 --- package-lock.json | 14 +++++++------- package.json | 4 ++-- projects/imagekit-angular/package.json | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1fe8973e..7a788105 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "imagekit-angular-workspace", - "version": "0.0.0", + "version": "6.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "imagekit-angular-workspace", - "version": "0.0.0", + "version": "6.0.0", "dependencies": { "@angular/common": "^15.0.0", "@angular/core": "^15.0.0", "@angular/platform-browser": "^15.0.0", - "@imagekit/javascript": "^5.1.0" + "@imagekit/javascript": "^5.5.0" }, "devDependencies": { "@angular-devkit/build-angular": "^15.0.0", @@ -2852,10 +2852,10 @@ "license": "MIT" }, "node_modules/@imagekit/javascript": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@imagekit/javascript/-/javascript-5.1.0.tgz", - "integrity": "sha512-P12NaxlO6Qu4GROFagX9qgP5kKde236mCu5jJB1cWJ6mPaVdjyk0Mw3ciGIWdKXST/jP1cFqS2ZoBVRSq1SWow==", - "license": "MIT" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@imagekit/javascript/-/javascript-5.5.0.tgz", + "integrity": "sha512-eu2lLzSwTj4awP6CeB8NUHnKz+GZk4og3ztZsb7MDjoy1NcfCVqB1gBxH8Q9xzCkBrP50SvGuSrK/ZGNzrXXDA==", + "license": "Apache-2.0" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", diff --git a/package.json b/package.json index 9946b9f5..349c4d69 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagekit-angular-workspace", - "version": "0.0.0", + "version": "6.0.0", "engines": { "node": ">=18.0.0" }, @@ -23,7 +23,7 @@ "@angular/common": "^15.0.0", "@angular/core": "^15.0.0", "@angular/platform-browser": "^15.0.0", - "@imagekit/javascript": "^5.1.0" + "@imagekit/javascript": "^5.5.0" }, "devDependencies": { "@angular-devkit/build-angular": "^15.0.0", diff --git a/projects/imagekit-angular/package.json b/projects/imagekit-angular/package.json index a9fe5d2b..db7eccba 100644 --- a/projects/imagekit-angular/package.json +++ b/projects/imagekit-angular/package.json @@ -22,7 +22,7 @@ "@angular/core": ">=14.0.0 <22.0.0" }, "dependencies": { - "@imagekit/javascript": "^5.1.0", + "@imagekit/javascript": "^5.5.0", "tslib": "^2.3.0" } } From 2118b1d5fd4d99172498be75ebc26d83980d4d83 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Thu, 17 Sep 2026 11:47:21 +0530 Subject: [PATCH 3/7] test(e2e): normalize ng-version before snapshot comparison The test app has no lockfile, so `npm install` picks up each new Angular patch release and the `ng-version` attribute on drifts, failing the CSR and SSR snapshots since 20.3.16 -> 20.3.31. Replace the value with a placeholder before comparing and update the stored snapshots to match. Co-Authored-By: Claude Fable 5.1 --- test-app/e2e/csr.spec.ts | 6 +++++- .../e2e/csr.spec.ts-snapshots/CSR-test-case-1-chromium.txt | 2 +- .../csr.spec.ts-snapshots/CSR-test-case-1-mobile-chrome.txt | 2 +- .../csr.spec.ts-snapshots/CSR-test-case-1-mobile-safari.txt | 2 +- .../e2e/csr.spec.ts-snapshots/CSR-test-case-1-webkit.txt | 2 +- test-app/e2e/ssr.spec.ts | 6 +++++- .../e2e/ssr.spec.ts-snapshots/SSR-test-case-1-chromium.txt | 2 +- .../ssr.spec.ts-snapshots/SSR-test-case-1-mobile-chrome.txt | 2 +- .../ssr.spec.ts-snapshots/SSR-test-case-1-mobile-safari.txt | 2 +- .../e2e/ssr.spec.ts-snapshots/SSR-test-case-1-webkit.txt | 2 +- 10 files changed, 18 insertions(+), 10 deletions(-) diff --git a/test-app/e2e/csr.spec.ts b/test-app/e2e/csr.spec.ts index 4bcf1baf..f45b5550 100644 --- a/test-app/e2e/csr.spec.ts +++ b/test-app/e2e/csr.spec.ts @@ -18,6 +18,10 @@ test("CSR test case", async ({ page }) => { // Grab the entire HTML from the element const outputHtml = await outputElement.evaluate(el => el.outerHTML); + // Angular stamps its exact version on the root element; normalize it so the + // snapshot doesn't break on every Angular patch release. + const normalizedHtml = outputHtml.replace(/ng-version="[^"]*"/g, 'ng-version="x.y.z"'); + // Compare against a stored snapshot - expect(outputHtml).toMatchSnapshot(); + expect(normalizedHtml).toMatchSnapshot(); }); \ No newline at end of file diff --git a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-chromium.txt b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-chromium.txt index 2a54d49e..28b8c914 100644 --- a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-chromium.txt +++ b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-chromium.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-chrome.txt b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-chrome.txt index 2a54d49e..28b8c914 100644 --- a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-chrome.txt +++ b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-chrome.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-safari.txt b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-safari.txt index 2a54d49e..28b8c914 100644 --- a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-safari.txt +++ b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-mobile-safari.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-webkit.txt b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-webkit.txt index 2a54d49e..28b8c914 100644 --- a/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-webkit.txt +++ b/test-app/e2e/csr.spec.ts-snapshots/CSR-test-case-1-webkit.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/ssr.spec.ts b/test-app/e2e/ssr.spec.ts index 697a3c0a..3ffe6054 100644 --- a/test-app/e2e/ssr.spec.ts +++ b/test-app/e2e/ssr.spec.ts @@ -17,6 +17,10 @@ test("SSR test case", async ({ page }) => { // Grab the entire HTML from the element const outputHtml = await outputElement.evaluate(el => el.outerHTML); + // Angular stamps its exact version on the root element; normalize it so the + // snapshot doesn't break on every Angular patch release. + const normalizedHtml = outputHtml.replace(/ng-version="[^"]*"/g, 'ng-version="x.y.z"'); + // Compare against a stored snapshot - expect(outputHtml).toMatchSnapshot(); + expect(normalizedHtml).toMatchSnapshot(); }); diff --git a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-chromium.txt b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-chromium.txt index 494fb1e6..db3d39fa 100644 --- a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-chromium.txt +++ b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-chromium.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-chrome.txt b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-chrome.txt index 494fb1e6..db3d39fa 100644 --- a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-chrome.txt +++ b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-chrome.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-safari.txt b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-safari.txt index 494fb1e6..db3d39fa 100644 --- a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-safari.txt +++ b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-mobile-safari.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file diff --git a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-webkit.txt b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-webkit.txt index 494fb1e6..db3d39fa 100644 --- a/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-webkit.txt +++ b/test-app/e2e/ssr.spec.ts-snapshots/SSR-test-case-1-webkit.txt @@ -1 +1 @@ -

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file +

Directive

IKImageDirective

Image without ImageKit providerImage with ImageKit providerImage with width not number, should produce larger srcsetWith transformationImage with queryParametersResponsive image with sizesResponsive image with sizes - should have very large srcset for all breakpointsImage with urlEndpoint overrideImage with classImage with lazy loading eagerImage with path transformationImage with path transformation + custom transformationspath not respected with absolute urlNo widthCustom deviceBreakpointsImage with responsive off

IKVideoDirective

\ No newline at end of file From ed885a3ce676334b746b2742c4eba1b53aae7c71 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Thu, 17 Sep 2026 12:54:58 +0530 Subject: [PATCH 4/7] ci: add Changelog heading for Release Please Release Please inserts new entries before the first version heading that is preceded by a newline. With the file starting directly at '## x.y.z', the first match was the second heading and new releases would land out of order. A top-level heading fixes the insertion point. Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc478cc0..84f7f577 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +# Changelog + ## 6.0.0 This is a major release that includes breaking changes. Please refer to the [official documentation](https://imagekit.io/docs/integration/angular) for up-to-date usage instructions. From dbbe8c6c9329030e6f18656db86ab106b03f8ef7 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Thu, 17 Sep 2026 13:08:42 +0530 Subject: [PATCH 5/7] ci: publish without re-running the e2e suite The e2e tests already run on every PR, including the Release Please release PR, so the gate belongs there. Running them again inside the publish workflow fails after the tag and GitHub release already exist, leaving a version with no npm package. Matches the Vue and Astro repos and the Stainless-generated SDKs. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/publish.yml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 460e7e6d..5cf3792d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,34 +5,7 @@ on: types: [published] jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [20.x] - - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: Build and Test - run: | - npm install - npm run pack - cd test-app - npm install - npm install ../dist/imagekit-angular/imagekit-angular-*.tgz --no-save - npx playwright install --with-deps - npm run test:e2e - env: - CI: true - - publish: - needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 From b1ed454d4337aec9b2c35f27292ccb47c89872f4 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Thu, 17 Sep 2026 13:29:44 +0530 Subject: [PATCH 6/7] ci: publish to npm with OIDC trusted publishing Same shape as imagekit-javascript's publish workflow: - id-token: write, no NODE_AUTH_TOKEN, no `npm whoami` - Node 24 with npm pinned to the 11 line (>= 11.5.1 needed; npm@latest is 12 and refuses older Node) - `npm publish --provenance` - workflow_dispatch so a failed publish can be re-run from the default branch without re-tagging The trusted publisher on npmjs.com must reference this file's name, `publish.yml`. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/publish.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5cf3792d..551e4d25 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,25 +3,34 @@ name: Publish on: release: types: [published] + # Manual re-run from the default branch, e.g. when a release publish failed. + workflow_dispatch: jobs: publish: runs-on: ubuntu-latest + permissions: + contents: read + id-token: write steps: - - uses: actions/checkout@v1 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v4 + - name: Use Node.js 24.x + uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24.x registry-url: https://registry.npmjs.org/ + - name: Upgrade npm for OIDC trusted publishing + # Trusted publishing needs npm >= 11.5.1. Pin the 11 line: npm@latest + # is now 12.x, which refuses to install on older Node runners. + run: | + npm install -g npm@11 + npm --version - name: NPM Publish run: | npm install npm run build cd dist/imagekit-angular - npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN - # print the NPM user name for validation - npm whoami - VERSION=$(node -p "require('./package.json').version" ) + VERSION=$(node -p "require('./package.json').version") # Only publish stable versions to the latest tag if [[ "$VERSION" =~ ^[^-]+$ ]]; then NPM_TAG="latest" @@ -29,7 +38,6 @@ jobs: NPM_TAG="beta" fi echo "Publishing $VERSION with $NPM_TAG tag." - npm publish --tag $NPM_TAG --access public + npm publish --tag $NPM_TAG --provenance --access public env: - NODE_AUTH_TOKEN: ${{secrets.npm_token}} CI: true From d7c70af89583360b9306d80189a55efa8fc0f7d9 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Thu, 17 Sep 2026 13:45:20 +0530 Subject: [PATCH 7/7] ci: allow manual Release Please runs Add workflow_dispatch so Release Please can be triggered by hand, e.g. when GitHub drops the push event for a merge. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/release-please.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index e7bc35d4..ca62fc8d 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -3,6 +3,8 @@ on: push: branches: - master + # Manual trigger, e.g. when GitHub drops the push event for a merge. + workflow_dispatch: permissions: contents: write