From b5b4c3505339d334f74746db20452c0820c310d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:42:26 -0400 Subject: [PATCH 1/6] chore(deps): update dependency @capacitor/core to v7.4.1 (#30530) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.4.0` -> `7.4.1`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/7.4.0/7.4.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/7.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/7.4.0/7.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
ionic-team/capacitor (@​capacitor/core) ### [`v7.4.1`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#741-2025-07-03) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/7.4.0...7.4.1) **Note:** Version bump only for package capacitor
--- ### Configuration 📅 **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 5164df400d..ac1aaa3065 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -663,9 +663,9 @@ "dev": true }, "node_modules/@capacitor/core": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.0.tgz", - "integrity": "sha512-P6NnjoHyobZgTjynlZSn27d0SUj6j38inlNxFnKZr9qwU7/r6+0Sg2nWkGkIH/pMmXHsvGD8zVe6KUq1UncIjA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.1.tgz", + "integrity": "sha512-0ap4FzPJItaeg3QiiS1WguPNHY2aD67fQ9wr7DojCRzTFuNXQPvFB6lBkqlrVeQyJ9jCw0KV/LXv25oXjDcsyA==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -11101,9 +11101,9 @@ "dev": true }, "@capacitor/core": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.0.tgz", - "integrity": "sha512-P6NnjoHyobZgTjynlZSn27d0SUj6j38inlNxFnKZr9qwU7/r6+0Sg2nWkGkIH/pMmXHsvGD8zVe6KUq1UncIjA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.1.tgz", + "integrity": "sha512-0ap4FzPJItaeg3QiiS1WguPNHY2aD67fQ9wr7DojCRzTFuNXQPvFB6lBkqlrVeQyJ9jCw0KV/LXv25oXjDcsyA==", "dev": true, "requires": { "tslib": "^2.1.0" From 498f7c7ab2cb300dd905b4f2f498ec912c6bc019 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Tue, 8 Jul 2025 15:30:52 -0400 Subject: [PATCH 2/6] chore(ci): update PR title check to exclude chore and release titles (#30528) Updates our PR title check to ignore titles with `chore` or `release` in them, eliminating the need for a `release` label on release PRs & allowing us to write commits like `chore: update dependency`. I also specified which commit types are allowed and included `chore` and `release` here even though they are skipped in case we ever remove the if skipping them. Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- .github/workflows/conventional-commit.yml | 31 +++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/conventional-commit.yml b/.github/workflows/conventional-commit.yml index fe310a565a..f044cbd1db 100644 --- a/.github/workflows/conventional-commit.yml +++ b/.github/workflows/conventional-commit.yml @@ -9,24 +9,35 @@ jobs: runs-on: ubuntu-latest steps: - name: Validate PR title - uses: amannn/action-semantic-pull-request@v5 + if: | + !contains(github.event.pull_request.title, 'release') && + !contains(github.event.pull_request.title, 'chore') + uses: amannn/action-semantic-pull-request@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: # Configure that a scope must always be provided. requireScope: true + # Configure allowed commit types + types: | + feat + fix + docs + style + refactor + perf + test + build + ci + revert + release + chore # Configure additional validation for the subject based on a regex. # This example ensures the subject doesn't start with an uppercase character. subjectPattern: ^(?![A-Z]).+$ - # If `subjectPattern` is configured, you can use this property to - # override the default error message that is shown when the pattern - # doesn't match. The variables `subject` and `title` can be used + # If `subjectPattern` is configured, you can use this property to + # override the default error message that is shown when the pattern + # doesn't match. The variables `subject` and `title` can be used # within the message. subjectPatternError: | The subject "{subject}" found in the pull request title "{title}" didn't match the configured pattern. Please ensure that the subject doesn't start with an uppercase character. - # If the PR contains one of these newline-delimited labels, the - # validation is skipped. If you want to rerun the validation when - # labels change, you might want to use the `labeled` and `unlabeled` - # event triggers in your workflow. - ignoreLabels: | - release From 73f7b3f8394c1675f753081894ae3369c6cebf63 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Tue, 8 Jul 2025 16:18:23 -0400 Subject: [PATCH 3/6] test(item-sliding): add test for side issue with CDN (#30469) Adds test for https://github.com/ionic-team/ionic-framework/pull/29845 Must be merged after the fix in that PR is released. The test will fail while using the older version of the CDN. --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- .../test/async/item-sliding.e2e.ts | 83 +++++++++++++++++++ .../test/playwright/page/utils/set-content.ts | 24 +++++- .../playwright/playwright-declarations.ts | 6 ++ 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/core/src/components/item-sliding/test/async/item-sliding.e2e.ts b/core/src/components/item-sliding/test/async/item-sliding.e2e.ts index aa44b11292..ef3f5b8475 100644 --- a/core/src/components/item-sliding/test/async/item-sliding.e2e.ts +++ b/core/src/components/item-sliding/test/async/item-sliding.e2e.ts @@ -1,6 +1,9 @@ import { expect } from '@playwright/test'; import { configs, test } from '@utils/test/playwright'; +/** + * This behavior does not vary across modes/directions + */ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { test.describe(title('item-sliding: async'), () => { test.beforeEach(async ({ page }) => { @@ -35,5 +38,85 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => await expect(itemSlidingEl).toHaveClass(/item-sliding-active-slide/); }); + + // NOTE: This test uses the CDN version of Ionic. + // If this test fails, it is likely due to a regression in the published package. + test('should not throw errors when adding multiple items with side="end" using the Ionic CDN', async ({ + page, + }, testInfo) => { + testInfo.annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/29499', + }); + + const errors: string[] = []; + page.on('console', (msg) => { + if (msg.type() === 'error') { + errors.push(msg.text()); + } + }); + page.on('pageerror', (error) => { + errors.push(error.message); + }); + + // This issue only happens when using a CDN version of Ionic + // so we need to use the CDN by passing the `importIonicFromCDN` option + // to setContent. + await page.setContent( + ` + + + Item Sliding + + ADD ITEM + + + + + + + + + `, + { ...config, importIonicFromCDN: true } + ); + + // Click the button enough times to reproduce the issue + const addButton = page.locator('#addItem'); + await addButton.click(); + await addButton.click(); + await addButton.click(); + + await page.waitForChanges(); + + // Check that the items have been added + const items = page.locator('ion-item-sliding'); + expect(await items.count()).toBe(3); + + // Check that no errors have been logged + expect(errors.length).toBe(0); + }); }); }); diff --git a/core/src/utils/test/playwright/page/utils/set-content.ts b/core/src/utils/test/playwright/page/utils/set-content.ts index b844bac81f..b738133e73 100644 --- a/core/src/utils/test/playwright/page/utils/set-content.ts +++ b/core/src/utils/test/playwright/page/utils/set-content.ts @@ -33,6 +33,26 @@ export const setContent = async (page: Page, html: string, testInfo: TestInfo, o const baseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + // The Ionic bundle is included locally by default unless the test + // config passes in the importIonicFromCDN option. This is useful + // when testing with the CDN version of Ionic. + let ionicCSSImports = ` + + `; + let ionicJSImports = ` + + `; + + if (options?.importIonicFromCDN) { + ionicCSSImports = ` + + `; + ionicJSImports = ` + + + `; + } + const output = ` @@ -40,11 +60,11 @@ export const setContent = async (page: Page, html: string, testInfo: TestInfo, o Ionic Playwright Test - + ${ionicCSSImports} ${palette !== 'light' ? `` : ''} - + ${ionicJSImports}