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/.eslintignore b/.eslintignore new file mode 100644 index 00000000000..10ff03c8eea --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +js/views/slidesView.js 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/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000000..8c6cd329963 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,40 @@ + +### Creating an Issue + +If you have a question on how something works, or its expected functionality, you might want to visit the [Ionic Forum](http://forum.ionicframework.com/) first. + +If you think you have found a bug, or have a new feature idea, please start by making sure it hasn't already been [reported](https://github.com/driftyco/ionic/issues?state=open). You can search through existing issues to see if someone's reported one similar to yours. + +If not, then [create a codepen.io](http://codepen.io/ionic/public-list) that demonstrates the problem (try to use as little code as possible: the more minimalist, the faster we can debug it). Also, please do not group multiple topics into one issue, but instead each should be its own issue. + +Next, [create a new issue](https://github.com/driftyco/ionic/issues/new) that thoroughly explains the problem, how to reproduce the issue, and provide any additional information such as code examples and error logs. + + +### Issue Etiquette Guidelines + +Poor attitude, ranting, name-calling, bullying, being a jerk, complaining, or spamming are fruitless and unacceptable. Issues that violate the open source spirit of this community, or any of the guidelines listed here, may result in your Issue being deleted or reposted to our Forum, a better place for debate and discussion. If you wish to contribute, either make your response respectful or do not bother to respond. You’ll find it’s pretty ineffective. + +Simply put: be respectful and act like an adult. Critiques are better made on the Forum. If you can’t do that, this isn’t a community for you. + + +### Pull Request Guidelines + +When in doubt, keep your pull requests small. To give a PR the best chance of getting accepted, do not bundle more than one "feature" or bug fix per PR. Doing so makes it very hard to accept it if one of the fixes has issues. + +It's always best to create two smaller PRs than one big one. + +### Style + +Always use two spaces, no tabs. This goes for any HTML, CSS, or Javascript. + +### License + +By contributing your code to the driftyco/ionic GitHub Repository, you agree to license your contribution under the MIT license. + +## Ionic 1.x + +Please read the contributing guide on the ionic website: http://ionicframework.com/contribute/ + +## Ionic 2.x + +See the Ionic 2 [CONTRIBUTING](https://github.com/driftyco/ionic/blob/2.0/CONTRIBUTING.md) file. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 2fa1c3e3549..f38f442a2ee 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,55 +1,42 @@ - +**Note: If you are having problems formatting your issue please refer to this article on using markdown in Github:** - +https://guides.github.com/features/mastering-markdown/ - +**Note: for support questions, please use one of these channels:** - +https://forum.ionicframework.com/ +http://ionicworldwide.herokuapp.com/ -**Ionic version:** - - -[x] **4.x** -[ ] **5.x** -**I'm submitting a ...** - -[ ] bug report -[ ] feature request +#### Short description of the problem: - -**Current behavior:** - +#### What behavior are you expecting? -**Expected behavior:** - **Steps to reproduce:** - +1. +2. +3. -**Related code:** +``` +insert any relevant code between the above and below backticks +``` - +**For Ionic 1 issues** - http://plnkr.co/edit/Xo1QyAUx35ny1Xf9ODHx?p=preview -``` -insert short code snippets here -``` +**For Ionic 2 issues** - http://plnkr.co/edit/L8JN6w5mqwbMY2E14dbk?p=preview + + +**Run `ionic info` from terminal/cmd prompt:** (paste output below) -**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 index 29910b7b2b2..9df38c036f8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,12 @@ -Issue number: resolves # +#### Short description of what this resolves: ---------- - - - - -## What is the current behavior? - - -## What is the new behavior? - +#### Changes proposed in this pull request: - - - -## Does this introduce a breaking change? - -- [ ] Yes -- [ ] No - - - - -## Other information +**Ionic Version**: 1.x / 2.x - +**Fixes**: # diff --git a/.github/actions/publish-npm/action.yml b/.github/actions/publish-npm/action.yml deleted file mode 100644 index d3e06d5fb01..00000000000 --- a/.github/actions/publish-npm/action.yml +++ /dev/null @@ -1,60 +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: "Prerelease identifier such as 'alpha', 'beta', 'rc', or 'next'. Leave blank to skip prerelease tagging." - working-directory: - description: 'The directory of the package.' - folder: - default: './' - description: 'A folder containing a package.json file.' - node-version: - description: 'Node.js version to use when publishing.' - required: false - default: '24.x' -runs: - using: 'composite' - steps: - - name: 🟢 Configure Node for Publish - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: ${{ inputs.node-version }} - registry-url: 'https://registry.npmjs.org' - scope: '@ionic' - # 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: 🏷️ Set Version - run: | - if [ -z "${{ inputs.preid }}" ]; then - npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version - else - npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version --preid=${{ inputs.preid }} - fi - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: 🏗️ Run Build - run: npm run build - shell: bash - working-directory: ${{ inputs.working-directory }} - - name: 🚀 Publish to NPM - run: npm publish ${{ inputs.folder }} --tag ${{ inputs.tag }} --provenance - shell: bash - working-directory: ${{ inputs.working-directory }} - 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 d98b2a53205..00000000000 --- a/.github/ionic-issue-bot.yml +++ /dev/null @@ -1,145 +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: 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" - - "bug: external" - - "type: bug" - - "type: feature request" - - "needs: investigation" - 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 - -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 b5d37c5a9ac..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 5224f9741e0..00000000000 --- a/.github/workflows/actions/build-angular/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Build Ionic Angular' -description: 'Build Ionic Angular' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@v6 - with: - node-version: 24.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: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 5d4d0c751bd..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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 core/package.json diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml deleted file mode 100644 index 8056f964b98..00000000000 --- a/.github/workflows/actions/build-core/action.yml +++ /dev/null @@ -1,36 +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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 - # Include generated proxy files from Stencil output targets so - # framework builds can detect when they need to be updated - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts core/api.txt packages/angular/src/directives/proxies.ts packages/angular/src/directives/proxies-list.ts packages/angular/standalone/src/directives/proxies.ts packages/vue/src/proxies.ts packages/react/src/components/proxies.ts packages/react/src/components/inner-proxies.ts packages/react/src/components/routing-proxies.ts 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 c8083494b0a..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 5899335ad3e..00000000000 --- a/.github/workflows/actions/build-react/action.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: 'Build Ionic React' -description: 'Build Ionic React' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 9b07ce64973..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 5c7497ec359..00000000000 --- a/.github/workflows/actions/build-vue/action.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: 'Build Ionic Vue' -description: 'Build Ionic Vue' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 2acddf9713f..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@v8 - 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/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml deleted file mode 100644 index f12fee784e8..00000000000 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ /dev/null @@ -1,46 +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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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-angular - path: ./packages/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: 📦 Install Playwright Browsers - run: npx playwright install chromium - 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 96abc90121c..00000000000 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: 'Test Core Clean Build' -description: 'Test Core Clean Build' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.x - - - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - name: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 f9f0011719a..00000000000 --- a/.github/workflows/actions/test-core-lint/action.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: 'Test Core Lint' -description: 'Test Core Lint' -runs: - using: 'composite' - steps: - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.x - - name: 🕸️ Install Dependencies - run: npm ci - working-directory: ./core - shell: bash - - name: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 1f8699e66d4..00000000000 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ /dev/null @@ -1,85 +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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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: Clean core package.json - run: git checkout ./package.json - 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@v7 - 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 2aab4b1be94..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 a1bcbf7a4db..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 034cfdce747..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 191cd193c8a..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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.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 6ee56689b10..00000000000 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: 'Update Reference Screenshots' -description: 'Update Reference Screenshots' - -on: - workflow_dispatch: - -runs: - using: 'composite' - steps: - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24.x - - uses: actions/download-artifact@v8 - 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: Clean core package.json - run: git checkout ./package.json - shell: bash - working-directory: ./core - - 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 c09397345f9..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@v7 - 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 fc254b78976..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@af6beea6bdf1e8eb373f061c5bc168681fc6d011 # v4.0.1 - 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 f9f01b6a8b7..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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/test-core-clean-build - - test-core-lint: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19, ng20] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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 ccdc9b996d2..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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: github/codeql-action/init@v4 - with: - languages: javascript - - uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/conventional-commit.yml b/.github/workflows/conventional-commit.yml deleted file mode 100644 index 8c0bbdebb37..00000000000 --- a/.github/workflows/conventional-commit.yml +++ /dev/null @@ -1,43 +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 - if: | - !contains(github.event.pull_request.title, 'release') && - !contains(github.event.pull_request.title, 'chore') - uses: amannn/action-semantic-pull-request@v6 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - # Configure that a scope must always be provided. - requireScope: true - # Configure allowed commit types - types: | - feat - fix - docs - style - refactor - perf - test - build - ci - revert - release - chore - # Configure additional validation for the subject based on a regex. - # This example ensures the subject doesn't start with an uppercase character. - subjectPattern: ^(?![A-Z]).+$ - # If `subjectPattern` is configured, you can use this property to - # override the default error message that is shown when the pattern - # doesn't match. The variables `subject` and `title` can be used - # 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. diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml deleted file mode 100644 index 27d88644bc0..00000000000 --- a/.github/workflows/dev-build.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: 'Ionic Dev Build' - -on: - workflow_call: - -permissions: - contents: read - id-token: write - -jobs: - create-dev-hash: - runs-on: ubuntu-latest - outputs: - dev-hash: ${{ steps.create-dev-hash.outputs.DEV_HASH }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - # 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: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: dev - version: ${{ needs.create-dev-hash.outputs.dev-hash }} - - 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 7f5d8de9787..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@v6 - 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 95e579bf4b6..00000000000 --- a/.github/workflows/nightly.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: 'Ionic Nightly Build' - -on: - workflow_call: - -permissions: - contents: read - id-token: write - -jobs: - create-nightly-hash: - runs-on: ubuntu-latest - outputs: - nightly-hash: ${{ steps.create-nightly-hash.outputs.NIGHTLY_HASH }} - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - # 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: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - secrets: inherit - with: - tag: nightly - version: ${{ needs.create-nightly-hash.outputs.nightly-hash }} diff --git a/.github/workflows/release-ionic.yml b/.github/workflows/release-ionic.yml deleted file mode 100644 index 75df447f32e..00000000000 --- a/.github/workflows/release-ionic.yml +++ /dev/null @@ -1,210 +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 - -permissions: - contents: read - id-token: write - -jobs: - release-core: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/core' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'core' - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Restore @ionic/docs built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-docs - path: ./packages/docs - filename: DocsBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/docs' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/docs' - - release-angular: - needs: [release-core] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/angular' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular' - folder: './dist' - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/react' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react' - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/vue' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue' - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Restore @ionic/core built cache - uses: ./.github/workflows/actions/download-archive - with: - name: ionic-core - path: ./core - filename: CoreBuild.zip - - uses: ./.github/actions/publish-npm - with: - scope: '@ionic/angular-server' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/angular-server' - folder: './dist' - - release-react-router: - needs: [release-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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/actions/publish-npm - with: - scope: '@ionic/react-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/react-router' - - release-vue-router: - needs: [release-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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/actions/publish-npm - with: - scope: '@ionic/vue-router' - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - working-directory: 'packages/vue-router' diff --git a/.github/workflows/release-orchestrator.yml b/.github/workflows/release-orchestrator.yml deleted file mode 100644 index a0c05cbcd58..00000000000 --- a/.github/workflows/release-orchestrator.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: 'Release - Ionic Framework' - -on: - schedule: - # Run every Monday-Friday - # at 6:00 UTC (6:00 am UTC) - - cron: '00 06 * * 1-5' - workflow_dispatch: - inputs: - release-type: - description: 'Which Ionic release workflow should run?' - required: true - type: choice - default: dev - options: - - dev - - production - version: - description: 'Which version should be published? (Only for production releases)' - required: false - type: choice - options: - - patch - - minor - - major - - prepatch - - preminor - - premajor - - prerelease - tag: - description: 'Which npm tag should this be published to? (Only for production releases)' - required: false - type: choice - default: latest - options: - - latest - - next - preid: - description: 'Which prerelease identifier should be used? (Only for production releases)' - required: false - type: choice - default: '' - options: - - '' - - alpha - - beta - - rc - - next - -permissions: - contents: read - id-token: write - -jobs: - run-nightly: - if: ${{ github.event_name == 'schedule' }} - permissions: - contents: read - id-token: write - uses: ./.github/workflows/nightly.yml - secrets: inherit - - run-dev: - if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'dev' }} - permissions: - contents: read - id-token: write - uses: ./.github/workflows/dev-build.yml - secrets: inherit - - run-production: - if: ${{ github.event_name == 'workflow_dispatch' && inputs.release-type == 'production' }} - permissions: - contents: write - id-token: write - uses: ./.github/workflows/release.yml - secrets: inherit - with: - version: ${{ inputs.version }} - tag: ${{ inputs.tag }} - preid: ${{ inputs.preid }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 497c0d24269..00000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,146 +0,0 @@ -name: 'Ionic Production Release' - -on: - workflow_call: - inputs: - version: - description: 'Which version should be published?' - required: true - type: string - tag: - description: 'Which npm tag should this be published to?' - required: true - type: string - preid: - description: 'Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".' - required: false - type: string - -permissions: - contents: read - id-token: write - -jobs: - validate_version: - name: ✅ Validate Version Input - runs-on: ubuntu-latest - steps: - - name: 🔎 Ensure version is allowed - env: - VERSION: ${{ inputs.version }} - run: | - case "$VERSION" in - patch|minor|major|prepatch|preminor|premajor|prerelease) - exit 0 - ;; - *) - echo "::error::Invalid version input: '$VERSION'. Allowed values: patch, minor, major, prepatch, preminor, premajor, prerelease." - exit 1 - ;; - esac - shell: bash - - release-ionic: - needs: [validate_version] - permissions: - contents: read - id-token: write - uses: ./.github/workflows/release-ionic.yml - with: - tag: ${{ inputs.tag }} - version: ${{ inputs.version }} - preid: ${{ inputs.preid }} - - finalize-release: - needs: [release-ionic] - runs-on: ubuntu-latest - permissions: - contents: write - id-token: write - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - 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 - permissions: - contents: write - id-token: write - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - # 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@7/dist/ionic/ionic.esm.js", - "/npm/@ionic/core@8/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@7/css/ionic.bundle.css", - "/npm/@ionic/core@8/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 6a44d35a531..00000000000 --- a/.github/workflows/stencil-nightly.yml +++ /dev/null @@ -1,259 +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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/test-core-lint - - test-core-spec: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-vue - - build-vue-router: - needs: [build-vue] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-angular - - build-angular-server: - needs: [build-core-with-stencil-nightly] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-angular-server - - test-angular-e2e: - strategy: - fail-fast: false - matrix: - apps: [ng16, ng17, ng18, ng19, ng20] - needs: [build-angular, build-angular-server] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - uses: ./.github/workflows/actions/build-react - - build-react-router: - needs: [build-react] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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 - - send-success-messages: - needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] - runs-on: ubuntu-latest - if: ${{ !cancelled() && !contains(needs.*.result, 'failure') }} - steps: - - name: Notify success on Discord - run: | - curl -H "Content-Type:application/json" \ - -d '{"embeds": [{"title": "✅ Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "color": 65280, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ - ${{secrets.DISCORD_NOTIFY_WEBHOOK}} - - name: Notify success on Slack - run: | - curl -H "Content-Type:application/json" \ - -d '{"title": "✅ Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ - ${{secrets.SLACK_NOTIFY_SUCCESS_WEBHOOK}} - - send-failure-messages: - needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] - runs-on: ubuntu-latest - if: ${{ !cancelled() && contains(needs.*.result, 'failure') }} - steps: - - name: Notify failure on Discord - run: | - curl -H "Content-Type:application/json" \ - -d '{"content": "Alerting <@&1347593178580254761>!", "embeds": [{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "color": 16711680, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ - ${{secrets.DISCORD_NOTIFY_WEBHOOK}} - - name: Notify failure on Slack - run: | - curl -H "Content-Type:application/json" \ - -d '{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ - ${{secrets.SLACK_NOTIFY_FAILURE_WEBHOOK}} diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml deleted file mode 100644 index 5f463d1a6e1..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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - # 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) - -