diff --git a/.agignore b/.agignore new file mode 100644 index 00000000000..30b81dbfd01 --- /dev/null +++ b/.agignore @@ -0,0 +1 @@ +release \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index f1cc3ad329c..0eef3827dd9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,15 +1,18 @@ -# http://editorconfig.org +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org root = true [*] +end_of_line = lf charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# Tabs in JS unless otherwise specified +[**.js] indent_style = space indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true [*.md] -insert_final_newline = false trim_trailing_whitespace = false diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000000..ac980e3a038 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,44 @@ +{ + "env": { + "browser": true + }, + "globals": { + "ionic": true, + "IonicModule": true, + "angular": true, + "jqLite": true, + "forEach": true, + "isDefined": true, + "isNumber": true, + "isString": true, + "noop": true, + "extend": true, + "deprecated": true, + "cordova": true, + "DocumentTouch": true, + "describe": true, + "ddescribe": true, + "it": true, + "iit": true, + "inject": true, + "beforeEach": true, + "afterEach": true, + "expect": true + }, + "rules": { + "quotes": false, + "no-underscore-dangle": false, + "no-unused-expressions": false, + "curly": [2, "multi-line"], + "strict": false, + "no-use-before-define": false, + "eqeqeq": false, + "new-cap": [2, {"capIsNew": false}], + "dot-notation": [2, {"allowKeywords": false}], + "no-console": false, + "no-return-assign": false, + "no-shadow": false, + "comma-dangle": false, + "camelcase": [2, {"properties": "never"}] + } +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 6313b56c578..00000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index b1f04ad75d3..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,14 +0,0 @@ -# Lines starting with '#' are comments. -# Each line is a file pattern followed by one or more owners. - -# More details are here: https://help.github.com/articles/about-codeowners/ - -# The '*' pattern is global owners. - -# Order is important. The last matching pattern has the most precedence. -# The folders are ordered as follows: - -# In each subsection folders are ordered first by depth, then alphabetically. -# This should make it easy to add new rules without breaking existing ones. - -* @ionic-team/framework diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 2fa1c3e3549..00000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - -**Ionic version:** - - -[x] **4.x** -[ ] **5.x** - -**I'm submitting a ...** - -[ ] bug report -[ ] feature request - - - -**Current behavior:** - - -**Expected behavior:** - - -**Steps to reproduce:** - - -**Related code:** - - - -``` -insert short code snippets here -``` - -**Other information:** - - -**Ionic info:** - - -``` -insert the output from ionic info here -``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index e44acd31374..00000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: 🐛 Bug Report -description: Create a report to help us improve Ionic Framework -title: 'bug: ' - -body: - - type: checkboxes - id: prerequisites - attributes: - label: Prerequisites - description: Please ensure you have completed all of the following. - options: - - label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue). - required: true - - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - required: true - - label: I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success. - required: true - - - type: dropdown - id: affected-versions - attributes: - label: Ionic Framework Version - description: Which version(s) of Ionic Framework does this issue impact? [Ionic Framework 1.x to 6.x are no longer supported](https://ionicframework.com/docs/reference/support#framework-maintenance-and-support-status). For extended support, considering visiting [Ionic's Enterprise offering](https://ionic.io/enterprise). - options: - - v7.x - - v8.x - - Nightly - multiple: true - validations: - required: true - - - type: textarea - id: current-behavior - attributes: - label: Current Behavior - description: A clear description of what the bug is and how it manifests. - validations: - required: true - - - type: textarea - id: expected-behavior - attributes: - label: Expected Behavior - description: A clear description of what you expected to happen. - validations: - required: true - - - type: textarea - id: steps-to-reproduce - attributes: - label: Steps to Reproduce - description: Explain the steps required to reproduce this issue. - placeholder: | - 1. Go to '...' - 2. Click on '...' - 3. Observe: '...' - validations: - required: true - - - type: input - id: reproduction-url - attributes: - label: Code Reproduction URL - description: | - Reproduce this issue in a blank [Ionic Framework starter application](https://ionicframework.com/start#basics) or a Stackblitz example. - - You can use the Stackblitz button available on any of the [component playgrounds](https://ionicframework.com/docs/components) to open an editable example. Remember to save your changes to obtain a link to copy. - - Reproductions cases must be minimal and focused around the specific problem you are experiencing. This is the best way to ensure this issue is triaged quickly. Issues without a code reproduction may be closed if the Ionic Team cannot reproduce the issue you are reporting. - placeholder: https://github.com/... - validations: - required: true - - - type: textarea - id: ionic-info - attributes: - label: Ionic Info - description: Please run `ionic info` from within your Ionic Framework project directory and paste the output below. - validations: - required: true - - - type: textarea - id: additional-information - attributes: - label: Additional Information - description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to fix, Stack Overflow links, forum links, etc. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 25a8dbb606f..00000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -contact_links: - - name: 📚 Documentation - url: https://github.com/ionic-team/ionic-docs/issues/new/choose - about: This issue tracker is not for documentation issues. Please file documentation issues on the Ionic Docs repo. - - name: 💻 CLI - url: https://github.com/ionic-team/ionic-cli/issues/new/choose - about: This issue tracker is not for CLI issues. Please file CLI issues on the Ionic CLI repo. - - name: 🤔 Support Question - url: https://forum.ionicframework.com/ - about: This issue tracker is not for support questions. Please post your question on the Ionic Forums. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 788d41e3a2e..00000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: 💡 Feature Request -description: Suggest an idea for Ionic Framework -title: 'feat: ' -body: - - - type: checkboxes - id: prerequisites - attributes: - label: Prerequisites - description: Please ensure you have completed all of the following. - options: - - label: I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue). - required: true - - label: I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct). - required: true - - label: I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already include this feature request, without success. - required: true - - - type: textarea - id: description - attributes: - label: Describe the Feature Request - description: A clear and concise description of what the feature does. - validations: - required: true - - - type: textarea - id: use-case - attributes: - label: Describe the Use Case - description: A clear and concise use case for what problem this feature would solve. - validations: - required: true - - - type: textarea - id: proposed-solution - attributes: - label: Describe Preferred Solution - description: A clear and concise description of what you how you want this feature to be added to Ionic Framework. - - - type: textarea - id: alternatives-considered - attributes: - label: Describe Alternatives - description: A clear and concise description of any alternative solutions or features you have considered. - - - type: textarea - id: related-code - attributes: - label: Related Code - description: If you are able to illustrate the feature request with an example, please provide a sample Ionic Framework application. Try out our [Getting Started Wizard](https://ionicframework.com/start#basics) to quickly spin up an Ionic Framework starter app. - - - type: textarea - id: additional-information - attributes: - label: Additional Information - description: List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to implement, Stack Overflow links, forum links, etc. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 29910b7b2b2..00000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,34 +0,0 @@ -Issue number: resolves # - ---------- - - - - - -## What is the current behavior? - - -## What is the new behavior? - - -- -- -- - -## Does this introduce a breaking change? - -- [ ] Yes -- [ ] No - - - - -## Other information - - diff --git a/.github/assets/logo.png b/.github/assets/logo.png deleted file mode 100644 index 42c5f25bfae..00000000000 Binary files a/.github/assets/logo.png and /dev/null differ diff --git a/.github/ionic-issue-bot.yml b/.github/ionic-issue-bot.yml deleted file mode 100644 index 8db735ce2d8..00000000000 --- a/.github/ionic-issue-bot.yml +++ /dev/null @@ -1,210 +0,0 @@ -triage: - label: triage - removeLabelWhenProjectAssigned: true - dryRun: false - -comment: - labels: - - label: "help wanted" - message: > - This issue has been labeled as `help wanted`. This label is added to issues - that we believe would be good for contributors. - - - If you'd like to work on this issue, please comment here letting us know that - you would like to submit a pull request for it. This helps us to keep track of - the pull request and make sure there isn't duplicated effort. - - - For a guide on how to create a pull request and test this project locally to see - your changes, see our [contributing documentation](https://ionicframework.com/docs/building/contributing). - - - Thank you! - - label: "ionitron: needs reproduction" - message: > - Thanks for the issue! This issue has been labeled as `needs reproduction`. This label - is added to issues that need a code reproduction. - - - Please reproduce this issue in an Ionic starter application and provide a way for us to access it (GitHub repo, StackBlitz, etc). Without a reliable code reproduction, it is unlikely we will be able to resolve the issue, leading to it being closed. - - - If you have already provided a code snippet and are seeing this message, it is likely that the code snippet was not enough for our team to reproduce the issue. - - - For a guide on how to create a good reproduction, see our [Contributing Guide](https://ionicframework.com/docs/contributing/how-to-contribute#creating-a-good-code-reproduction). - - label: "community feedback wanted" - message: > - This issue has been labeled as `community feedback wanted`. This label is added to issues that we would like to hear from the community on before moving forward with any final decision on the feature request. - - - If the requested feature is something you would find useful for your applications, please react to the original post with 👍 (`+1`). If you would like to provide an additional use case for the feature, please post a comment. - - - The team will review this feedback and make a final decision. Any decision will be posted on this thread, but please note that we may ultimately decide not to pursue this feature. - - - Thank you! - dryRun: false - -closeAndLock: - labels: - - label: "ionitron: support" - message: > - Thanks for the issue! This issue appears to be a support request. We use this issue tracker exclusively for - bug reports and feature requests. Please use our [forum](https://forum.ionicframework.com) for questions about the framework. - - - Thank you for using Ionic! - - label: "ionitron: appflow" - message: > - Thanks for the issue! This issue appears to be related to Ionic Appflow. We use this issue tracker exclusively for - bug reports and feature requests. Please use the [Ionic Appflow Support Forum](https://ionic.zendesk.com/hc/en-us/requests/new) - to report this issue. - - - Thank you for using Ionic! - - label: "ionitron: missing template" - message: > - Thanks for the issue! It appears that you have not filled out the provided issue template. We use this issue - template in order to gather more information and further assist you. Please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -lockClosed: - days: 30 - maxIssuesPerRun: 100 - message: > - Thanks for the issue! This issue is being locked to prevent comments that are not relevant to the original issue. - If this is still an issue with the latest version of Ionic, please create a new issue and ensure the template is fully filled out. - dryRun: false - -stale: - days: 365 - maxIssuesPerRun: 100 - exemptLabels: - - "good first issue" - - "triage" - - "type: bug" - - "type: feature request" - exemptAssigned: true - exemptProjects: true - exemptMilestones: true - label: "ionitron: stale issue" - message: > - Thanks for the issue! This issue is being closed due to inactivity. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -noReply: - days: 14 - maxIssuesPerRun: 100 - label: "needs: reply" - responseLabel: triage - exemptProjects: true - exemptMilestones: true - message: > - Thanks for the issue! This issue is being closed due to the lack of a reply. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -noReproduction: - days: 14 - maxIssuesPerRun: 100 - label: "ionitron: needs reproduction" - responseLabel: triage - exemptProjects: true - exemptMilestones: true - message: > - Thanks for the issue! This issue is being closed due to the lack of a code reproduction. If this is still - an issue with the latest version of Ionic, please create a new issue and ensure the - template is fully filled out. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -wrongRepo: - repos: - - label: "ionitron: capacitor" - repo: capacitor - message: > - Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests - associated with the Ionic Framework. It appears that this issue is associated with Capacitor. - I am moving this issue to the Capacitor repository. Please track this issue over there. - - - Thank you for using Ionic! - - label: "ionitron: v3" - repo: ionic-v3 - message: > - Thanks for the issue! We have moved the source code and issues for Ionic 3 into a separate repository. - I am moving this issue to the repository for Ionic 3. Please track this issue over there. - - - Thank you for using Ionic! - - label: "ionitron: cli" - repo: ionic-cli - message: > - Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests - associated with the Ionic Framework. It appears that this issue is associated with the Ionic CLI. - I am moving this issue to the Ionic CLI repository. Please track this issue over there. - - - Thank you for using Ionic! - - label: "ionitron: docs" - repo: ionic-docs - message: > - Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests - associated with the Ionic Framework. It appears that this issue is associated with the Ionic Documentation. - I am moving this issue to the Ionic Docs repository. Please track this issue over there. - - - Thank you for using Ionic! - - label: "ionitron: stencil" - repo: stencil - message: > - Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests - associated with the Ionic Framework. It appears that this issue is associated with Stencil. - I am moving this issue to the Stencil repository. Please track this issue over there. - - - Thank you for using Ionic! - - label: "ionitron: native" - repo: ionic-native - message: > - Thanks for the issue! We use this issue tracker exclusively for bug reports and feature requests - associated with the Ionic Framework. It appears that this issue is associated with Ionic Native. - I am moving this issue to the Ionic Native repository. Please track this issue over there. - - - Thank you for using Ionic! - close: true - lock: true - dryRun: false - -screenshot: - appId: 18001 - checkName: "build" - baseUrl: "https://screenshot.ionicframework.com/" - dryRun: false diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 7ea70aaf7f1..00000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,22 +0,0 @@ -# This is used with the label workflow which -# will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# For more information, see: -# https://github.com/actions/labeler - -'package: core': -- changed-files: - - any-glob-to-any-file: ['core/**/*'] - -'package: angular': -- changed-files: - - any-glob-to-any-file: ['packages/angular/**/*', 'packages/angular-*/**/*'] - -'package: react': -- changed-files: - - any-glob-to-any-file: ['packages/react/**/*', 'packages/react-*/**/*'] - -'package: vue': -- changed-files: - - any-glob-to-any-file: ['packages/vue/**/*', 'packages/vue-*/**/*'] diff --git a/.github/workflows/actions/build-angular-server/action.yml b/.github/workflows/actions/build-angular-server/action.yml deleted file mode 100644 index b530d300788..00000000000 --- a/.github/workflows/actions/build-angular-server/action.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: 'Build Ionic Angular Server' -description: 'Build Ionic Angular Server' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Install Angular Server Dependencies - run: npm ci - shell: bash - working-directory: ./packages/angular-server - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/angular-server - - name: Build - run: npm run build.prod - shell: bash - working-directory: ./packages/angular-server - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular-server - output: packages/angular-server/AngularServerBuild.zip - paths: packages/angular-server/dist diff --git a/.github/workflows/actions/build-angular/action.yml b/.github/workflows/actions/build-angular/action.yml deleted file mode 100644 index 80da1c353d7..00000000000 --- a/.github/workflows/actions/build-angular/action.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Build Ionic Angular' -description: 'Build Ionic Angular' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Install Angular Dependencies - run: npm ci - shell: bash - working-directory: ./packages/angular - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/angular - - name: Lint - run: npm run lint - shell: bash - working-directory: ./packages/angular - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/angular - - name: Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/angular - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular - output: ./packages/angular/AngularBuild.zip - paths: ./packages/angular/dist diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml deleted file mode 100644 index de2a0ee98c5..00000000000 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: 'Build Ionic Core with Stencil Prerelease' -description: 'Build Ionic Core with a Prerelease Build of Stencil' -inputs: - stencil-version: - description: 'The NPM tag of @stencil/core to install.' - type: string - required: true -runs: - using: 'composite' - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - name: Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: Install Stencil ${{ inputs.stencil-version }} - working-directory: ./core - run: npm i @stencil/core@${{ inputs.stencil-version }} - shell: bash - - name: Build Core - run: npm run build -- --ci --debug --verbose - working-directory: ./core - shell: bash - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml deleted file mode 100644 index 28006742feb..00000000000 --- a/.github/workflows/actions/build-core/action.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: 'Build Ionic Core' -description: 'Build Ionic Core' -inputs: - ionicons-version: - description: 'The NPM tag of ionicons to install.' - type: string - required: false -runs: - using: 'composite' - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - name: Install Dependencies - run: npm install - working-directory: ./core - shell: bash - # If an Ionicons version was specified install that. - # Otherwise just use the version defined in the package.json. - - name: Install Ionicons Version - if: inputs.ionicons-version != '' - run: npm install ionicons@${{ inputs.ionicons-version }} - working-directory: ./core - shell: bash - - name: Build Core - run: npm run build -- --ci - working-directory: ./core - shell: bash - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts core/api.txt diff --git a/.github/workflows/actions/build-react-router/action.yml b/.github/workflows/actions/build-react-router/action.yml deleted file mode 100644 index 390378cb12d..00000000000 --- a/.github/workflows/actions/build-react-router/action.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: 'Build Ionic React Router' -description: 'Build Ionic React Router' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - name: Install Dependencies - run: npm ci - shell: bash - working-directory: ./packages/react-router - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/react-router - - name: Lint - run: npm run lint - shell: bash - working-directory: ./packages/react-router - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/react-router - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react-router - output: packages/react-router/ReactRouterBuild.zip - paths: packages/react-router/dist diff --git a/.github/workflows/actions/build-react/action.yml b/.github/workflows/actions/build-react/action.yml deleted file mode 100644 index 3ea565d62e3..00000000000 --- a/.github/workflows/actions/build-react/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Build Ionic React' -description: 'Build Ionic React' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Install React Dependencies - run: npm ci - shell: bash - working-directory: ./packages/react - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/react - - name: Lint - run: npm run lint - shell: bash - working-directory: ./packages/react - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/react - - name: Test Spec - run: npm run test.spec - shell: bash - working-directory: ./packages/react - - name: Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/react - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react - output: packages/react/ReactBuild.zip - paths: packages/react/dist packages/react/css diff --git a/.github/workflows/actions/build-vue-router/action.yml b/.github/workflows/actions/build-vue-router/action.yml deleted file mode 100644 index 623bdc4c7a1..00000000000 --- a/.github/workflows/actions/build-vue-router/action.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: 'Build Ionic Vue Router' -description: 'Builds Ionic Vue Router' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - name: Install Vue Router Dependencies - run: npm ci - shell: bash - working-directory: ./packages/vue-router - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue-router - - name: Lint - run: npm run lint - shell: bash - working-directory: ./packages/vue-router - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/vue-router - - name: Test Spec - run: npm run test.spec - shell: bash - working-directory: ./packages/vue-router - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue-router - output: ./packages/vue-router/VueRouterBuild.zip - paths: packages/vue-router/dist diff --git a/.github/workflows/actions/build-vue/action.yml b/.github/workflows/actions/build-vue/action.yml deleted file mode 100644 index f2be91e1090..00000000000 --- a/.github/workflows/actions/build-vue/action.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Build Ionic Vue' -description: 'Build Ionic Vue' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Install Vue Dependencies - run: npm ci - shell: bash - working-directory: ./packages/vue - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue - - name: Lint - run: npm run lint - shell: bash - working-directory: ./packages/vue - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/vue - - name: Check Diff - run: git diff --exit-code - shell: bash - working-directory: ./packages/vue - - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue - output: packages/vue/VueBuild.zip - paths: packages/vue/dist packages/vue/css diff --git a/.github/workflows/actions/download-archive/action.yml b/.github/workflows/actions/download-archive/action.yml deleted file mode 100644 index 04cf5108f26..00000000000 --- a/.github/workflows/actions/download-archive/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: 'Ionic Framework Archive Download' -description: 'Downloads and decompresses an archive from a previous job' -inputs: - path: - description: 'Input archive name' - filename: - description: 'Input file name' - name: - description: 'Archive name' -runs: - using: 'composite' - steps: - - uses: actions/download-artifact@v4 - with: - name: ${{ inputs.name }} - path: ${{ inputs.path }} - - name: Extract Archive - run: unzip -q -o ${{ inputs.path }}/${{ inputs.filename }} - shell: bash diff --git a/.github/workflows/actions/publish-npm/action.yml b/.github/workflows/actions/publish-npm/action.yml deleted file mode 100644 index 6bd557db3b9..00000000000 --- a/.github/workflows/actions/publish-npm/action.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: 'Release' -description: 'Releases a package' -inputs: - scope: - description: 'The package to release. Must match a package specified in lerna.json.' - version: - description: 'The type of version to release.' - tag: - description: 'The tag to publish to on NPM.' - preid: - description: 'The prerelease identifier used when doing a prerelease.' - working-directory: - description: 'The directory of the package.' - folder: - default: './' - description: 'A folder containing a package.json file.' - token: - description: 'The NPM authentication token required to publish.' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - # Provenance requires npm 9.5.0+ - - name: Install latest npm - run: npm install -g npm@latest - shell: bash - # This ensures the local version of Lerna is installed - # and that we do not use the global Lerna version - - name: Install root dependencies - run: npm ci - shell: bash - - name: Install Dependencies - run: npx lerna@5 bootstrap --include-dependencies --scope ${{ inputs.scope }} --ignore-scripts -- --legacy-peer-deps - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: Update Version - run: npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version --preid=${{ inputs.preid }} - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: Run Build - run: npm run build - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: Prepare NPM Token - run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > .npmrc - working-directory: ${{ inputs.working-directory }} - shell: bash - env: - NPM_TOKEN: ${{ inputs.token }} - - name: Publish to NPM - run: npm publish ${{ inputs.folder }} --tag ${{ inputs.tag }} --provenance - shell: bash - working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/actions/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml deleted file mode 100644 index 50c5907af03..00000000000 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Test Angular E2E' -description: 'Test Angular E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-angular - path: ./angular - filename: AngularBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-angular-server - path: ./packages/angular-server - filename: AngularServerBuild.zip - - name: Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/angular/test - - name: Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} - - name: Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} - - name: Run Tests - run: npm run test - shell: bash - working-directory: ./packages/angular/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/test-core-clean-build/action.yml b/.github/workflows/actions/test-core-clean-build/action.yml deleted file mode 100644 index d822e69468d..00000000000 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: 'Test Core Clean Build' -description: 'Test Core Clean Build' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Check Diff - run: | - git diff --exit-code || { - echo -e "\033[1;31m⚠️ Error: Differences Detected ⚠️\033[0m" - echo -e "\033[1;31mThere are uncommitted changes between the build outputs from CI and your branch.\033[0m" - echo -e "\033[1;31mPlease ensure you have followed these steps:\033[0m" - echo -e "\033[1;31m1. Run 'npm run build' locally to generate the latest build output.\033[0m" - echo -e "\033[1;31m2. Commit and push all necessary changes to your branch.\033[0m" - echo -e "\033[1;31m3. Compare and validate the differences before proceeding.\033[0m" - exit 1 - } - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-core-lint/action.yml b/.github/workflows/actions/test-core-lint/action.yml deleted file mode 100644 index a4298c2c0a1..00000000000 --- a/.github/workflows/actions/test-core-lint/action.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: 'Test Core Lint' -description: 'Test Core Lint' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - name: Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: Lint - run: npm run lint - shell: bash - working-directory: ./core - # Lint changes should be pushed - # to the branch before the branch - # is merge eligible. - - name: Check Lint Results - run: git diff --exit-code - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-core-screenshot/action.yml b/.github/workflows/actions/test-core-screenshot/action.yml deleted file mode 100644 index 588c310b462..00000000000 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: 'Test Core Screenshot' -description: 'Test Core Screenshot' -inputs: - shard: - description: 'Playwright Test Shard (ex: 2)' - totalShards: - description: 'Playwright total number of test shards (ex: 4)' - update: - description: 'Whether or not to update the reference snapshots' - component: - description: 'The component to update the reference snapshots' - -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Install Dependencies - run: npm install - shell: bash - working-directory: ./core - - name: Test - if: inputs.update != 'true' - run: npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} - shell: bash - working-directory: ./core - - name: Test and Update - id: test-and-update - if: inputs.update == 'true' - # Keep track of the files that were - # changed so they can be correctly restored - # in the combine step. - # To do this, we move only the changed files - # to a separate directory, while preserving the - # directory structure of the source. - # When, we create and archive of these results - # so that the combine step can simply - # unzip and move the changed files into place. - # We have extra logic added so that job runners - # that do not have any new screenshots do not create - # an unnecessary .zip. - # Note that we need to unzip directory to be "core" - # which is why we not using the upload-archive - # composite step here. - run: | - npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} --update-snapshots='changed' - git add src/\*.png --force - mkdir updated-screenshots - cd ../ && rsync -R --progress $(git diff --name-only --cached) core/updated-screenshots - if [ -d core/updated-screenshots/core ]; then - echo "hasUpdatedScreenshots=$(echo 'true')" >> $GITHUB_OUTPUT - cd core/updated-screenshots - zip -q -r ../../UpdatedScreenshots-${{ inputs.shard }}-${{ inputs.totalShards }}.zip core - fi - shell: bash - working-directory: ./core - - name: Archive Updated Screenshots - if: inputs.update == 'true' && steps.test-and-update.outputs.hasUpdatedScreenshots == 'true' - uses: actions/upload-artifact@v4 - with: - name: updated-screenshots-${{ inputs.shard }}-${{ inputs.totalShards }} - path: UpdatedScreenshots-${{ inputs.shard }}-${{ inputs.totalShards }}.zip - - name: Archive Test Results - # The always() ensures that this step - # runs even if the previous step fails. - # We want the test results to be archived - # even if the test fails in the previous - # step, otherwise there would be no way - # to debug these tests. - if: always() - uses: ./.github/workflows/actions/upload-archive - with: - name: test-results-${{ inputs.shard }}-${{ inputs.totalShards }} - output: core/TestResults-${{ inputs.shard }}-${{ inputs.totalShards }}.zip - paths: core/playwright-report diff --git a/.github/workflows/actions/test-core-spec/action.yml b/.github/workflows/actions/test-core-spec/action.yml deleted file mode 100644 index f6246664066..00000000000 --- a/.github/workflows/actions/test-core-spec/action.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: 'Test Core Spec' -description: 'Test Core Spec' -inputs: - stencil-version: - description: 'The NPM tag of @stencil/core to install.' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - name: Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: Install Stencil ${{ inputs.stencil-version }} - run: npm install @stencil/core@${{ inputs.stencil-version }} - shell: bash - working-directory: ./core - if: ${{ inputs.stencil-version != '' }} - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Test - run: npm run test.spec -- --ci - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/test-react-e2e/action.yml b/.github/workflows/actions/test-react-e2e/action.yml deleted file mode 100644 index ab056ac667b..00000000000 --- a/.github/workflows/actions/test-react-e2e/action.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: 'Test React E2E' -description: 'Test React E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react-router - path: ./packages/react-router - filename: ReactRouterBuild.zip - - name: Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/react/test - - name: Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - - name: Run Tests - run: npm run e2e - shell: bash - working-directory: ./packages/react/test/build/${{ inputs.app }} - diff --git a/.github/workflows/actions/test-react-router-e2e/action.yml b/.github/workflows/actions/test-react-router-e2e/action.yml deleted file mode 100644 index cf71e4da5aa..00000000000 --- a/.github/workflows/actions/test-react-router-e2e/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Test React Router E2E' -description: 'Test React Router' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react-router - path: ./packages/react-router - filename: ReactRouterBuild.zip - - name: Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/react-router/test - - name: Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: Sync Built Changes - run: npm run sync - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: Build - run: npm run build - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} - - name: Run Tests - run: npm run e2e - shell: bash - working-directory: ./packages/react-router/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/test-vue-e2e/action.yml b/.github/workflows/actions/test-vue-e2e/action.yml deleted file mode 100644 index 93a21db7855..00000000000 --- a/.github/workflows/actions/test-vue-e2e/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Test Vue E2E' -description: 'Test Vue E2E' -inputs: - app: - description: 'The specific test application' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue-router - path: ./packages/vue-router - filename: VueRouterBuild.zip - - name: Create Test App - run: ./build.sh ${{ inputs.app }} - shell: bash - working-directory: ./packages/vue/test - - name: Install Dependencies - run: npm install - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: Sync - run: npm run sync - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: Run Spec Tests - run: npm run test:unit - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} - - name: Run E2E Tests - run: npm run test:e2e - shell: bash - working-directory: ./packages/vue/test/build/${{ inputs.app }} diff --git a/.github/workflows/actions/update-reference-screenshots/action.yml b/.github/workflows/actions/update-reference-screenshots/action.yml deleted file mode 100644 index 256676fe484..00000000000 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: 'Update Reference Screenshots' -description: 'Update Reference Screenshots' - -on: - workflow_dispatch: - -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v4 - with: - node-version: 22.x - - uses: actions/download-artifact@v4 - with: - path: ./artifacts - - name: Extract Archives - # This finds all .zip files in the ./artifacts - # directory, including nested directories. - # It then unzips every .zip to the root directory - run: | - find . -type f -name 'UpdatedScreenshots-*.zip' -exec unzip -q -o -d ../ {} \; - shell: bash - working-directory: ./artifacts - - name: Push Screenshots - # Configure user as Ionitron - # and push only the changed .png snapshots - # to the remote branch. - # Non-Linux screenshots are in .gitignore - # to prevent local screenshots from getting - # pushed to Git. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - - # This adds an empty entry for new - # screenshot files so we can track them with - # git diff - git add src/\*.png -N - - if git diff --exit-code; then - echo -e "\033[1;31m⚠️ Error: No new screenshots generated ⚠️\033[0m" - echo -e "\033[1;31mThis means that there were zero visual diffs when running screenshot tests.\033[0m" - echo -e "\033[1;31mMake sure you have pushed any code changes that would result in visual diffs.\033[0m" - exit 1 - else - # This actually adds the contents - # of the screenshots (including new ones) - git add src/\*.png - git commit -m "chore(): add updated snapshots" - git push - fi - - shell: bash - working-directory: ./core diff --git a/.github/workflows/actions/upload-archive/action.yml b/.github/workflows/actions/upload-archive/action.yml deleted file mode 100644 index 966b80e3a00..00000000000 --- a/.github/workflows/actions/upload-archive/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: 'Ionic Framework Archive Upload' -description: 'Compresses and uploads an archive to be reused across jobs' -inputs: - paths: - description: 'Paths to files or directories to archive' - output: - description: 'Output file name' - name: - description: 'Archive name' -runs: - using: 'composite' - steps: - - name: Create Archive - run: zip -q -r ${{ inputs.output }} ${{ inputs.paths }} - shell: bash - - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.name }} - path: ${{ inputs.output }} diff --git a/.github/workflows/assign-issues.yml b/.github/workflows/assign-issues.yml deleted file mode 100644 index d06c1f52e10..00000000000 --- a/.github/workflows/assign-issues.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Assign issues to triage - -on: - issues: - types: [opened] - -jobs: - auto-assign: - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: 'Auto-assign issue' - uses: pozil/auto-assign-issue@39c06395cbac76e79afc4ad4e5c5c6db6ecfdd2e # v2.2.0 - with: - assignees: brandyscarney, thetaPC, ShaneK - numOfAssignee: 1 - allowSelfAssign: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7d1fedca923..00000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,217 +0,0 @@ -name: 'Ionic Framework Build' - -on: - pull_request: - branches: [ '**' ] - merge_group: - workflow_dispatch: - inputs: - ionicons_npm_release_tag: - required: false - type: string - description: What version of ionicons should be pulled from NPM? Use this if you want to test a custom version of Ionicons with Ionic. - -# When pushing a new commit we should -# cancel the previous test run to not -# consume more runners than we need to. -concurrency: - group: ${{ github.ref }} - cancel-in-progress: true - -jobs: - build-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-core - with: - ionicons-version: ${{ inputs.ionicons_npm_release_tag }} - - test-core-clean-build: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-clean-build - - test-core-lint: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-spec - - test-core-screenshot: - strategy: - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - - # Screenshots are required to pass - # in order for the branch to be merge - # eligible. However, the screenshot tests - # are run on n runners where n can change - # over time. The verify-screenshots step allows - # us to have a required status check for screenshot - # results without having to manually add each - # matrix run in the branch protection rules - # Source: https://github.community/t/status-check-for-a-matrix-jobs/127354 - verify-screenshots: - if: ${{ always() }} - needs: test-core-screenshot - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-core-screenshot.result != 'success' }} - run: exit 1 - - build-vue: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-vue-router - - test-vue-e2e: - strategy: - fail-fast: false - matrix: - apps: [vue3] - needs: [build-vue, build-vue-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-vue-e2e - with: - app: ${{ matrix.apps }} - - verify-test-vue-e2e: - if: ${{ always() }} - needs: test-vue-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-vue-e2e.result != 'success' }} - run: exit 1 - - build-angular: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-angular-e2e - with: - app: ${{ matrix.apps }} - - verify-test-angular-e2e: - if: ${{ always() }} - needs: test-angular-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-angular-e2e.result != 'success' }} - run: exit 1 - - build-react: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-react-router - - test-react-router-e2e: - strategy: - fail-fast: false - matrix: - apps: [reactrouter5] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-react-router-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-router-e2e: - if: ${{ always() }} - needs: test-react-router-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-router-e2e.result != 'success' }} - run: exit 1 - - test-react-e2e: - strategy: - fail-fast: false - matrix: - apps: [react17, react18, react19] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-react-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-e2e: - if: ${{ always() }} - needs: test-react-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-e2e.result != 'success' }} - run: exit 1 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index fbb39d4d5d6..00000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: CodeQL - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - analyze: - runs-on: ubuntu-latest - permissions: - security-events: write - steps: - - uses: actions/checkout@v4 - - uses: github/codeql-action/init@v3 - with: - languages: javascript - - uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/conventional-commit.yml b/.github/workflows/conventional-commit.yml deleted file mode 100644 index fe310a565a8..00000000000 --- a/.github/workflows/conventional-commit.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: PR Conventional Commit Validation - -on: - pull_request: - types: [opened, synchronize, reopened, edited] - -jobs: - validate-pr-title: - runs-on: ubuntu-latest - steps: - - name: Validate PR title - 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 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 - # 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 diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml deleted file mode 100644 index 48dc911c622..00000000000 --- a/.github/workflows/dev-build.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Ionic Dev Build' - -on: - workflow_dispatch: - -jobs: - create-dev-hash: - runs-on: ubuntu-latest - outputs: - dev-hash: ${{ steps.create-dev-hash.outputs.DEV_HASH }} - steps: - - uses: actions/checkout@v4 - # A 1 is required before the timestamp - # as lerna will fail when there is a leading 0 - # See https://github.com/lerna/lerna/issues/2840 - - name: Install Dependencies - run: npm ci - shell: bash - - id: create-dev-hash - name: Create Dev Hash - run: | - echo "DEV_HASH=$(node ./.scripts/bump-version.js)-dev.1$(date +%s).1$(git log -1 --format=%H | cut -c 1-7)" >> $GITHUB_OUTPUT - shell: bash - - release-ionic: - needs: [create-dev-hash] - permissions: - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: dev - version: ${{ needs.create-dev-hash.outputs.dev-hash }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - get-build: - name: Get your dev build! - runs-on: ubuntu-latest - needs: [create-dev-hash, release-ionic] - steps: - - run: echo ${{ needs.create-dev-hash.outputs.dev-hash }} - diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml deleted file mode 100644 index a4e35060dfb..00000000000 --- a/.github/workflows/label.yml +++ /dev/null @@ -1,19 +0,0 @@ -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# To use this workflow, you will need to set up a .github/labeler.yml -# file with configuration. For more information, see: -# https://github.com/actions/labeler - -name: "Pull Request Labeler" -on: -- pull_request_target - -jobs: - triage: - runs-on: ubuntu-latest - steps: - - uses: actions/labeler@v5 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" - sync-labels: true diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml deleted file mode 100644 index 6f812a02f6c..00000000000 --- a/.github/workflows/nightly.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: 'Ionic Nightly Build' - -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - -jobs: - create-nightly-hash: - runs-on: ubuntu-latest - outputs: - nightly-hash: ${{ steps.create-nightly-hash.outputs.NIGHTLY_HASH }} - steps: - - uses: actions/checkout@v4 - # A 1 is required before the timestamp - # as lerna will fail when there is a leading 0 - # See https://github.com/lerna/lerna/issues/2840 - - name: Install Dependencies - run: npm ci - shell: bash - - id: create-nightly-hash - name: Create Nightly Hash - # The date should output YYYYMMDD - # so that it is human readable - run: | - echo "NIGHTLY_HASH=$(node ./.scripts/bump-version.js)-nightly.$(date +%Y%m%d)" >> $GITHUB_OUTPUT - shell: bash - - release-ionic: - needs: [create-nightly-hash] - permissions: - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: nightly - version: ${{ needs.create-nightly-hash.outputs.nightly-hash }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release-ionic.yml b/.github/workflows/release-ionic.yml deleted file mode 100644 index 4be91285a4a..00000000000 --- a/.github/workflows/release-ionic.yml +++ /dev/null @@ -1,217 +0,0 @@ -name: 'Release Ionic' - -on: - workflow_call: - inputs: - version: - description: 'The type of version to release.' - type: string - required: true - tag: - description: 'The tag to publish to NPM.' - type: string - required: true - preid: - description: 'The prerelease identifier used when doing a prerelease.' - type: string - secrets: - NPM_TOKEN: - required: true - -jobs: - release-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/core' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'core' - token: ${{ secrets.NPM_TOKEN }} - - name: Cache Built @ionic/core - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-core - output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts - - name: Cache Built @ionic/docs - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-docs - output: packages/docs/DocsBuild.zip - paths: packages/docs/core.json packages/docs/core.d.ts - - release-docs: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/docs built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-docs - path: ./packages/docs - filename: DocsBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/docs' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/docs' - token: ${{ secrets.NPM_TOKEN }} - - release-angular: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/angular' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular' - folder: './dist' - token: ${{ secrets.NPM_TOKEN }} - - name: Cache Built @ionic/angular - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-angular - output: packages/angular/AngularBuild.zip - paths: packages/angular/dist - - release-react: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/react' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react' - token: ${{ secrets.NPM_TOKEN }} - - name: Cache Built @ionic/react - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-react - output: packages/react/ReactBuild.zip - paths: packages/react/dist packages/react/css - - release-vue: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/vue' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue' - token: ${{ secrets.NPM_TOKEN }} - - name: Cache Built @ionic/vue - uses: ./.github/workflows/actions/upload-archive - with: - name: ionic-vue - output: packages/vue/VueBuild.zip - paths: packages/vue/dist packages/vue/css - - release-angular-server: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/angular-server' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular-server' - folder: './dist' - token: ${{ secrets.NPM_TOKEN }} - - release-react-router: - needs: [release-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Restore @ionic/react built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-react - path: ./packages/react - filename: ReactBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/react-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react-router' - token: ${{ secrets.NPM_TOKEN }} - - release-vue-router: - needs: [release-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Restore @ionic/vue built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-vue - path: ./packages/vue - filename: VueBuild.zip - - uses: ./.github/workflows/actions/publish-npm - with: - scope: '@ionic/vue-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue-router' - token: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index bb27e8a5f5e..00000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: 'Ionic Production Release' - -on: - workflow_dispatch: - inputs: - version: - required: true - type: choice - description: Which version should be published? - options: - - patch - - minor - - major - - prepatch - - preminor - - premajor - - prerelease - tag: - required: true - type: choice - description: Which npm tag should this be published to? - options: - - latest - - next - preid: - type: choice - description: Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease". - options: - - '' - - alpha - - beta - - rc - - next - -jobs: - release-ionic: - permissions: - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - finalize-release: - needs: [release-ionic] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.IONITRON_TOKEN }} - fetch-depth: 0 - - name: Configure Identity - # Commits from github-actions do not - # trigger other GitHub Actions. As a result, - # we publish releases from Ionitron instead - # so actions run when merging the release branch - # back into main. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - shell: bash - - name: Create GitHub Release - run: lerna version ${{ inputs.version }} --yes --force-publish='*' --conventional-commits --create-release github --preid=${{ inputs.preid }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - - update-package-lock: - # This needs to run after finalize-release - # because we also push to the repo in that - # job. If these jobs ran in parallel then it is - # possible for them to push at the same time. - needs: [finalize-release] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - # Pull the latest version of the reference - # branch instead of the revision that triggered - # the workflow otherwise we won't get the commit - # created in the previous job and this next job - # will fail. - with: - ref: ${{ github.ref }} - - name: Configure Identity - # Commits from github-actions do not - # trigger other GitHub Actions. As a result, - # we push from Ionitron instead so actions - # run when merging the release branch - # back into main. - run: | - git config user.name ionitron - git config user.email hi@ionicframework.com - shell: bash - # Lerna does not automatically bump versions - # of Ionic dependencies that have changed, - # so we do that here. - - name: Bump Package Lock - run: | - lerna exec "npm install --package-lock-only" - git add . - git commit -m "chore(): update package lock files" - git push - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - - purge-cdn-cache: - needs: [release-ionic] - runs-on: ubuntu-latest - steps: - - name: Purge JSDelivr Cache - run: | - curl -X POST \ - https://purge.jsdelivr.net/ \ - -H 'cache-control: no-cache' \ - -H 'content-type: application/json' \ - -d '{ - "path": [ - "/npm/@ionic/core@6/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@latest/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@next/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@6/css/ionic.bundle.css", - "/npm/@ionic/core@latest/css/ionic.bundle.css" - "/npm/@ionic/core@next/css/ionic.bundle.css" - ]}' - shell: bash diff --git a/.github/workflows/stencil-nightly.yml b/.github/workflows/stencil-nightly.yml deleted file mode 100644 index f03ec871256..00000000000 --- a/.github/workflows/stencil-nightly.yml +++ /dev/null @@ -1,227 +0,0 @@ -# This workflow is intended to run against the `HEAD` of Stencil's primary branch. -# See https://github.com/ionic-team/stencil for contents of the repository -name: 'Stencil Nightly Build' - -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - workflow_dispatch: - inputs: - npm_release_tag: - required: true - type: string - description: What version should be pulled from NPM? - default: nightly - -# When pushing a new commit we should -# cancel the previous test run to not -# consume more runners than we need to. -concurrency: - group: ${{ github.ref }} - cancel-in-progress: false - -jobs: - build-core-with-stencil-nightly: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-core-stencil-prerelease - with: - stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} - - test-core-clean-build: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-clean-build - - test-core-lint: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-spec - with: - stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} - - test-core-screenshot: - strategy: - # This ensures that all screenshot shard - # failures are reported so the dev can - # review everything at once. - fail-fast: false - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - - # Screenshots are required to pass - # in order for the branch to be merge - # eligible. However, the screenshot tests - # are run on n runners where n can change - # over time. The verify-screenshots step allows - # us to have a required status check for screenshot - # results without having to manually add each - # matrix run in the branch protection rules - # Source: https://github.community/t/status-check-for-a-matrix-jobs/127354 - verify-screenshots: - if: ${{ always() }} - needs: test-core-screenshot - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-core-screenshot.result != 'success' }} - run: exit 1 - - build-vue: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-vue-router - - test-vue-e2e: - strategy: - fail-fast: false - matrix: - apps: [vue3] - needs: [build-vue, build-vue-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-vue-e2e - with: - app: ${{ matrix.apps }} - - verify-test-vue-e2e: - if: ${{ always() }} - needs: test-vue-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-vue-e2e.result != 'success' }} - run: exit 1 - - build-angular: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-angular-e2e - with: - app: ${{ matrix.apps }} - - verify-test-angular-e2e: - if: ${{ always() }} - needs: test-angular-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-angular-e2e.result != 'success' }} - run: exit 1 - - build-react: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-react-router - - test-react-router-e2e: - strategy: - fail-fast: false - matrix: - apps: [reactrouter5] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-react-router-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-router-e2e: - if: ${{ always() }} - needs: test-react-router-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-router-e2e.result != 'success' }} - run: exit 1 - - test-react-e2e: - strategy: - fail-fast: false - matrix: - apps: [react17, react18, react19] - needs: [build-react, build-react-router] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-react-e2e - with: - app: ${{ matrix.apps }} - - verify-test-react-e2e: - if: ${{ always() }} - needs: test-react-e2e - runs-on: ubuntu-latest - steps: - - name: Check build matrix status - if: ${{ needs.test-react-e2e.result != 'success' }} - run: exit 1 diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml deleted file mode 100644 index 5bb35c5905a..00000000000 --- a/.github/workflows/update-screenshots.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: 'Update Reference Screenshots' - -on: - workflow_dispatch: - inputs: - # Screenshots can be updated for all components or specified component(s). - # If the `component` variable is set, then the test has the option to - # - run all the instances of the specified component(s) in the `src/components` folder - # -- For example: if the `component` value is "item", then the following command will be: `npm run test.e2e item` - # - run the specified file path - # -- For example: if the `component` value is "src/components/item/test/basic", then the following command will be: `npm run test.e2e src/components/item/test/basic` - # - run multiple specified components based on the space-separated value - # -- For example: if the `component` value is "item basic", then the following command will be: `npm run test.e2e item basic` - # -- For example: if the `component` value is "src/components/item/test/basic src/components/item/test/a11y", then the following command will be: `npm run test.e2e src/components/item/test/basic src/components/item/test/a11y` - # - # If the `component` variable is not set, then the test will run all the instances of the components in the `src/components` folder. - # - For example: `npm run test.e2e` - # - # More common options can be found at the Playwright Command line page: https://playwright.dev/docs/test-cli - component: - description: 'What component(s) should be updated? (leave blank to update all or use a space-separated list for multiple components)' - required: false - default: '' - -jobs: - build-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/build-core - - test-core-screenshot: - strategy: - # This ensures that all screenshot shard - # failures are reported so the dev can - # review everything at once. - fail-fast: false - matrix: - # Divide the tests into n buckets - # and run those buckets in parallel. - # To increase the number of shards, - # add new items to the shard array - # and change the value of totalShards - # to be the length of the shard array. - shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - totalShards: [20] - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/test-core-screenshot - with: - shard: ${{ matrix.shard }} - totalShards: ${{ matrix.totalShards }} - update: true - component: ${{ inputs.component }} - - update-reference-screenshots: - runs-on: ubuntu-latest - needs: [test-core-screenshot] - steps: - - uses: actions/checkout@v4 - # Normally, we could just push with the - # default GITHUB_TOKEN, but that will - # not cause the build workflow - # to re-run. We use Ionitron's - # Personal Access Token instead - # to allow for this build workflow - # to run when the screenshots are pushed. - with: - token: ${{ secrets.IONITRON_TOKEN }} - - uses: ./.github/workflows/actions/update-reference-screenshots diff --git a/.gitignore b/.gitignore index e610d8a11dd..af2746ae217 100644 --- a/.gitignore +++ b/.gitignore @@ -1,96 +1,32 @@ -*~ +.DS_Store +node_modules *.sw[mnpcod] *.log -*.lock *.tmp *.tmp.* log.txt -*.sublime-project -*.sublime-workspace -*.tgz +example/cordova/iOS/www/js/framework -.idea/ -.vscode/ +example/cordova/iOS/www/js/framework .sass-cache/ -.versions/ -coverage/ -collection/ -dist/ -dist-transpiled/ -node_modules/ -tmp/ -temp/ -core/theme-builder/ -core/test-components/ -core/css/ -$RECYCLE.BIN/ +framework.sublime-project -.DS_Store -Thumbs.db +framework.sublime-workspace UserInterfaceState.xcuserstate -.env - -.package.tmp.json - -src/themes/version.scss -scripts/e2e/webpackEntryPoints.json -scripts/build/e2e-generated-tsconfig.json -*.css.ts - -stats.json -# demo stuff -demos/node_modules -demos/polyfills -demos/css -demos/fonts -demos/src/**/*.js -demos/src/**/*.map -demos/src/**/*.ngfactory.ts -demos/src/**/*.d.ts -demos/src/**/*.metadata.json -demos/src/**/*.css.shim.ts -prerender.html -prerender-domino.html -prerender-hydrated.html -prerender-static.html - -# stencil -packages/react/css/ -packages/vue/css/ -core/components/ -core/css/ -core/hydrate/ -core/loader/ -core/www/ -.stencil/ - -# playwright -core/test-results/ -core/playwright-report/ - -# ground truths generated outside of docker should not be committed to the repo -core/**/*-snapshots/* - -# new ground truths should only be generated inside of docker which will result in -linux.png screenshots -!core/**/*-snapshots/*-linux.png - -# these files are going to be different per-developer environment so do not add them to the repo -core/docker-display.txt -core/docker-display-volume.txt +*.sublime-project -# angular -packages/angular/css/ -packages/angular/test/build/ -.angular/ +*.sublime-workspace -# vue -packages/vue/test/build/ +bower_components/ +components/ +tmp +temp +dist -# react -packages/react/test/build/ +.idea -# react router -packages/react-router/test/build/ +.versions -.npmrc +# Coverage directory used by tools like istanbul +coverage/ diff --git a/.jscs.json b/.jscs.json new file mode 100644 index 00000000000..ad929f37376 --- /dev/null +++ b/.jscs.json @@ -0,0 +1,40 @@ +{ + "excludeFiles": ["src/ngLocale/**"], + "disallowKeywords": ["with"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineStrings": true, + "disallowNewlineBeforeBlockStatements": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforeBinaryOperators": [","], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpacesInAnonymousFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInFunctionDeclaration": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInsideArrayBrackets": true, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "requireCommaBeforeLineBreak": true, + "requireLineFeedAtFileEnd": true, + "requireSpaceAfterBinaryOperators": ["?", ":", "+", "-", "/", "*", "%", "==", "===", "!=", "!==", ">", ">=", "<", "<=", "&&", "||"], + "requireSpaceBeforeBinaryOperators": ["?", ":", "+", "-", "/", "*", "%", "==", "===", "!=", "!==", ">", ">=", "<", "<=", "&&", "||"], + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireSpaceBeforeBlockStatements": true, + "requireSpacesInConditionalExpression": { + "afterTest": true, + "beforeConsequent": true, + "afterConsequent": true, + "beforeAlternate": true + }, + "requireSpacesInFunction": { + "beforeOpeningCurlyBrace": true + }, + "validateLineBreaks": "LF", + "validateParameterSeparator": ", " +} diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 00000000000..6ce1b00721a --- /dev/null +++ b/.jshintignore @@ -0,0 +1,4 @@ +js/ext/angular/test/**/*.js +js/views/scrollView.js +js/views/sliderView.js +js/utils/utils.js diff --git a/.scripts/bump-version.js b/.scripts/bump-version.js deleted file mode 100644 index 4ef17c089f8..00000000000 --- a/.scripts/bump-version.js +++ /dev/null @@ -1,10 +0,0 @@ -const semver = require('semver'); - -const getDevVersion = () => { - const originalVersion = require('../lerna.json').version; - const baseVersion = semver.inc(originalVersion, 'patch'); - - return baseVersion; -} - -console.log(getDevVersion()); diff --git a/.stackblitz/codeflow.json b/.stackblitz/codeflow.json deleted file mode 100644 index 6354218ee30..00000000000 --- a/.stackblitz/codeflow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "bot": { - "issues": { - "enabled": false - }, - "pullRequests": { - "enabled": false - } - } -} diff --git a/.vercelignore b/.vercelignore deleted file mode 100644 index c18553dfa1e..00000000000 --- a/.vercelignore +++ /dev/null @@ -1 +0,0 @@ -core/src/components/**/*/*.png diff --git a/BREAKING.md b/BREAKING.md deleted file mode 100644 index bf44f563dc8..00000000000 --- a/BREAKING.md +++ /dev/null @@ -1,293 +0,0 @@ -# Breaking Changes - -This is a comprehensive list of the breaking changes introduced in the major version releases of Ionic Framework. - -## Versions - -- [Version 8.x](#version-8x) -- [Version 7.x](./BREAKING_ARCHIVE/v7.md) -- [Version 6.x](./BREAKING_ARCHIVE/v6.md) -- [Version 5.x](./BREAKING_ARCHIVE/v5.md) -- [Version 4.x](./BREAKING_ARCHIVE/v4.md) -- [Legacy](https://github.com/ionic-team/ionic-v3/blob/master/CHANGELOG.md) - -## Version 8.x - -- [Browser and Platform Support](#version-8x-browser-platform-support) -- [Dark Mode](#version-8x-dark-mode) -- [Global Styles](#version-8x-global-styles) -- [Haptics](#version-8x-haptics) -- [Components](#version-8x-components) - - [Button](#version-8x-button) - - [Checkbox](#version-8x-checkbox) - - [Content](#version-8x-content) - - [Datetime](#version-8x-datetime) - - [Input](#version-8x-input) - - [Item](#version-8x-item) - - [Modal](#version-8x-modal) - - [Nav](#version-8x-nav) - - [Picker](#version-8x-picker) - - [Progress bar](#version-8x-progress-bar) - - [Radio](#version-8x-radio) - - [Range](#version-8x-range) - - [Searchbar](#version-8x-searchbar) - - [Select](#version-8x-select) - - [Textarea](#version-8x-textarea) - - [Toggle](#version-8x-toggle) -- [Framework Specific](#version-8x-framework-specific) - - [Angular](#version-8x-angular) - -

Browser and Platform Support

- -This section details the desktop browser, JavaScript framework, and mobile platform versions that are supported by Ionic 8. - -**Minimum Browser Versions** -| Desktop Browser | Supported Versions | -| --------------- | ----------------- | -| Chrome | 89+ | -| Safari | 15+ | -| Firefox | 75+ | -| Edge | 89+ | - -**Minimum JavaScript Framework Versions** -| Framework | Supported Version | -| --------- | --------------------- | -| Angular | 16+ | -| React | 17+ | -| Vue | 3.0.6+ | - -**Minimum Mobile Platform Versions** -| Platform | Supported Version | -| -------- | ---------------------- | -| iOS | 15+ | -| Android | 5.1+ with Chromium 89+ | - -Ionic Framework v8 removes backwards support for CSS Animations in favor of the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). All minimum browser versions listed above support the Web Animations API. - -

Dark Mode

- - -In previous versions, it was recommended to define the dark palette in the following way: - -```css -@media (prefers-color-scheme: dark) { - body { - /* global app variables */ - } - - .ios body { - /* global ios app variables */ - } - - .md body { - /* global md app variables */ - } -} -``` - -In Ionic Framework version 8, the dark palette is being distributed via css files that can be imported. Below is an example of importing a dark palette file in Angular: - -```css -/* @import 'https://github.com/@ionic/angular/css/palettes/dark.always.css'; */ -/* @import "https://github.com/@ionic/angular/css/palettes/dark.class.css"; */ -@import "https://github.com/@ionic/angular/css/palettes/dark.system.css"; -``` - -By importing the `dark.system.css` file, the dark palette variables will be defined like the following: - -```css -@media (prefers-color-scheme: dark) { - :root { - /* global app variables */ - } - - :root.ios { - /* global ios app variables */ - } - - :root.md { - /* global md app variables */ - } -} -``` - -Notice that the dark palette is now applied to the `:root` selector instead of the `body` selector. The [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) selector represents the `` element and is identical to the selector `html`, except that its specificity is higher. - -While migrating to include the new dark palette files is unlikely to cause breaking changes, these new selectors can lead to unexpected overrides if custom CSS variables are being set on the `body` element. We recommend updating any instances where global application variables are set to target the `:root` selector instead. - -For more information on the new dark palette files, refer to the [Dark Mode documentation](https://ionicframework.com/docs/theming/dark-mode). - -

Global Styles

- -

Text Color

- -The `core.css` file has been updated to set the text color on the `body` element: - -```diff -body { -+ color: var(--ion-text-color); -} -``` - -This allows components to inherit the color properly when used outside of Ionic Framework and is required for custom themes to work properly. However, it may have unintentional side effects in apps if the color was not expected to inherit. - -

Dynamic Font

- -The `core.css` file has been updated to enable dynamic font scaling by default. - -The `--ion-default-dynamic-font` variable has been removed and replaced with `--ion-dynamic-font`. - -Developers who had previously chosen dynamic font scaling by activating it in their global stylesheets can revert to the default setting by removing their custom CSS. In doing so, their application will seamlessly continue utilizing dynamic font scaling as it did before. It's essential to note that altering the font-size of the html element should be avoided, as it may disrupt the proper functioning of dynamic font scaling. - -Developers who want to disable dynamic font scaling can set `--ion-dynamic-font: initial;` in their global stylesheets. However, this is not recommended because it may introduce accessibility challenges for users who depend on enlarged font sizes. - -For more information on the dynamic font, refer to the [Dynamic Font Scaling documentation](https://ionicframework.com/docs/layout/dynamic-font-scaling). - -

Haptics

- -- Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components. - -

Components

- -

Button

- -- Button text now wraps by default. If this behavior is not desired, add the `ion-text-nowrap` class from the [CSS Utilities](https://ionicframework.com/docs/layout/css-utilities). - -

Checkbox

- - The `legacy` property and support for the legacy syntax, which involved placing an `ion-checkbox` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy checkbox syntax, refer to the [Checkbox documentation](https://ionicframework.com/docs/api/checkbox#migrating-from-legacy-checkbox-syntax). - -

Content

- -- Content no longer sets the `--background` custom property when the `.outer-content` class is set on the host. - -

Datetime

- -- The CSS shadow part for `month-year-button` has been changed to target a `button` element instead of `ion-item`. Developers should verify their UI renders as expected for the month/year toggle button inside of `ion-datetime`. - - Developers using the CSS variables available on `ion-item` will need to migrate their CSS to use CSS properties. For example: - ```diff - ion-datetime::part(month-year-button) { - - --background: red; - - + background: red; - } - ``` - -

Input

- -- `size` has been removed from the `ion-input` component. Developers should use CSS to specify the visible width of the input. -- `accept` has been removed from the `ion-input` component. This was previously used in conjunction with the `type="file"`. However, the `file` value for `type` is not a valid value in Ionic Framework. -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-input` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy input syntax, refer to the [Input documentation](https://ionicframework.com/docs/api/input#migrating-from-legacy-input-syntax). - -

Item

- -- The `helper` slot has been removed. Developers should use the `helperText` property on `ion-input` and `ion-textarea`. -- The `error` slot has been removed. Developers should use the `errorText` property on `ion-input` and `ion-textarea`. -- Counter functionality has been removed including the `counter` and `counterFormatter` properties. Developers should use the properties of the same name on `ion-input` and `ion-textarea`. -- The `fill` property has been removed. Developers should use the property of the same name on `ion-input`, `ion-select`, and `ion-textarea`. -- The `shape` property has been removed. Developers should use the property of the same name on `ion-input`, `ion-select`, and `ion-textarea`. -- Item no longer automatically delegates focus to the first focusable element. While most developers should not need to make any changes to account for this update, usages of `ion-item` with interactive elements such as form controls (inputs, textareas, etc) should be evaluated to verify that interactions still work as expected. - -
CSS variables
- -The following deprecated CSS variables have been removed: `--highlight-height`, `--highlight-color-focused`, `--highlight-color-valid`, and `--highlight-color-invalid`. These variables were used on the bottom border highlight of an item when the form control inside of that item was focused. The form control syntax was [simplified in v7](https://ionic.io/blog/ionic-7-is-here#simplified-form-control-syntax) so that inputs, selects, and textareas would no longer be required to be used inside of an item. - -If you have not yet migrated to the modern form control syntax, migration guides for each of the form controls that added a highlight to item can be found below: -- [Input migration documentation](https://ionicframework.com/docs/api/input#migrating-from-legacy-input-syntax) -- [Select migration documentation](https://ionicframework.com/docs/api/select#migrating-from-legacy-select-syntax) -- [Textarea migration documentation](https://ionicframework.com/docs/api/textarea#migrating-from-legacy-textarea-syntax) - -Once all form controls are using the modern syntax, the same variables can be used to customize them from the form control itself: - -| Name | Description | -| ----------------------------| ----------------------------------------| -| `--highlight-color-focused` | The color of the highlight when focused | -| `--highlight-color-invalid` | The color of the highlight when invalid | -| `--highlight-color-valid` | The color of the highlight when valid | -| `--highlight-height` | The height of the highlight indicator | - -The following styles for item: - -```css -ion-item { - --highlight-color-focused: purple; - --highlight-color-valid: blue; - --highlight-color-invalid: orange; - --highlight-height: 6px; -} -``` - -will instead be applied on the form controls: - -```css -ion-input, -ion-textarea, -ion-select { - --highlight-color-focused: purple; - --highlight-color-valid: blue; - --highlight-color-invalid: orange; - --highlight-height: 6px; -} -``` - -> [!NOTE] -> The input and textarea components are scoped, which means they will automatically scope their CSS by appending each of the styles with an additional class at runtime. Overriding scoped selectors in CSS requires a [higher specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity) selector. Targeting the `ion-input` or `ion-textarea` for customization will not work; therefore we recommend adding a class and customizing it that way. - -

Modal

- -- Detection for Capacitor <= 2 with applying status bar styles has been removed. Developers should ensure they are using Capacitor 3 or later when using the card modal presentation. - -

Nav

- -- `getLength` returns `Promise` instead of ``. This method was not previously available in Nav's TypeScript interface, but developers could still access it by casting Nav as `any`. Developers should ensure they `await` their `getLength` call before accessing the returned value. - -

Picker

- -- `ion-picker` and `ion-picker-column` have been renamed to `ion-picker-legacy` and `ion-picker-legacy-column`, respectively. This change was made to accommodate the new inline picker component while allowing developers to continue to use the legacy picker during this migration period. - - Only the component names have been changed. Usages such as `ion-picker` or `IonPicker` should be changed to `ion-picker-legacy` and `IonPickerLegacy`, respectively. - - Non-component usages such as `pickerController` or `useIonPicker` remain unchanged. The new picker displays inline with your page content and does not have equivalents for these non-component usages. - -

Progress bar

- -- The `--buffer-background` CSS variable has been removed. Use `--background` instead. - -

Toast

- -- `cssClass` has been removed from the `ToastButton` interface. This was previously used to apply a custom class to the toast buttons. Developers can use the "button" shadow part to style the buttons. - -For more information on styling toast buttons, refer to the [Toast Theming documentation](https://ionicframework.com/docs/api/toast#theming). - -

Radio

- -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-radio` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy radio syntax, refer to the [Radio documentation](https://ionicframework.com/docs/api/radio#migrating-from-legacy-radio-syntax). - -

Range

- -- The `legacy` property and support for the legacy syntax, which involved placing an `ion-range` inside of an `ion-item` with an `ion-label`, have been removed. Ionic will also no longer attempt to automatically associate form controls with sibling `