Repository navigation
feat(#1949): Preparing for CHT 5.0, remove existing upgrades dir #1953
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 28 commits
Commits
Show all changes
48 commits
Select commit
Hold shift + click to select a range
b5a067c
feat(#1949): Preparing for CHT 5.0, remove existing upgrades dir
mrjones-plip b12ecb0
add all breaking changes, settle on final layout of page
mrjones-plip eed8d14
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 28c8a80
move links to relref and remove localhost per feedback
mrjones-plip 91e494c
4.20 is not 4.2.0 ;)
mrjones-plip 390decf
add related updates section per feedback
mrjones-plip 3e952b4
add two more breaking changes to the list
mrjones-plip 8da6b82
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip c03cd43
merge main to branch
mrjones-plip 1de6800
fix merge conflict from main merge on last commit
mrjones-plip 8290919
order by breaking changes vs non-breaking changes per feedback
mrjones-plip 7dfff48
add more explination to language setting
mrjones-plip dd553bb
move from tk to todo (but still keep tks)
mrjones-plip 359562f
remove repetive content per feedback
mrjones-plip dd08c0e
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip 9ffb120
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip 2372a63
add info about needs_signoff change
mrjones-plip bd5a22f
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip 81945fb
add info for checking chrome version for angular 20
mrjones-plip d36ed8d
fix angular link, ensure CLI tools are installed
mrjones-plip 3540494
tweak wording about angular, re-order steps
mrjones-plip 2211e43
tidy up big ol' command to find browser versions
mrjones-plip e5cf530
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip ece15a9
add work around for upgrade crashing
mrjones-plip 711bfbc
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip d957c70
add final links to helm chart info
mrjones-plip f04f644
Merge branch 'main' into 1949-preparing-for-5x
mrjones-plip 6920b11
add final info for Declarative Configuration
mrjones-plip c13de56
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 1e41198
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip ee0ca15
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip b4ed013
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 8caf2d3
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 9836d22
Update content/en/hosting/cht/upgrade-troubleshooting.md
mrjones-plip aef3265
Update content/en/hosting/cht/upgrade-troubleshooting.md
mrjones-plip 41df9ab
Update content/en/hosting/cht/upgrade-troubleshooting.md
mrjones-plip 4da46ca
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip a56c158
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip b2073fb
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 905c49f
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 406748a
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 10714c8
Update content/en/hosting/cht/migration/preparing-for-5.md
mrjones-plip 7d24f6c
remove upgrade warning per feedback
mrjones-plip fa2872c
add k8s staging screenshot, tidy up helm chart wording per feedback
mrjones-plip 54e1559
remove empty dir and files per feedback
mrjones-plip d6b1206
add front matter to helm charts migrate page, change weights for toc …
mrjones-plip ae895a6
remove note about self hosting in 4.x per feedback
mrjones-plip 6dcdf61
remove confusing line about language settings UI
mrjones-plip File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Empty file.
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,161 @@ | ||
| --- | ||
| title: "Preparing to upgrade to CHT 5.0" | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
| linkTitle: "Preparing for 5.0" | ||
| weight: | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
| description: > | ||
| Steps to ensure your CHT App will run smoothly on CHT 5.0 and later | ||
|
|
||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
| --- | ||
|
|
||
| ## Introduction | ||
|
|
||
| CHT releases use [Semantic Versioning](https://en.wikipedia.org/wiki/Semver#Semantic_versioning) (also known as "SemVer"), which means that the CHT upgrade from the major 4.x version to the 5.x version denotes there are breaking changes. The key to a successful upgrade will be to understand and plan for these breaking changes. | ||
|
|
||
| As with all upgrades, major or minor, you should always: | ||
| * Have [backups]({{< relref "/hosting/cht/docker/backups/" >}}) that have been tested to work | ||
| * Ensure your [CHT Conf]({{< relref "/community/contributing/code/cht-conf/" >}}) version is up to date | ||
| * Review the change log to understand how end users might be affected | ||
| * Check [troubleshooting upgrades](/hosting/cht/upgrade-troubleshooting/) guide if the upgrade doesn't succeed | ||
|
|
||
| Read though this entire document before upgrading and pay special attention to the "Breaking Changes" section to know which of of the changes are applicable. | ||
|
|
||
| ## Breaking Changes | ||
|
|
||
| ### Upgrade service removed from Kubernetes | ||
|
|
||
| {{< callout type="info" >}} Applies to: [Kubernetes]({{< relref "/hosting/cht/kubernetes/" >}}) hosted CHT instances {{< /callout >}} | ||
|
|
||
| In CHT 4.x there are two ways to upgrade a Kubernetes hosted CHT instance: | ||
|
|
||
| 1. Click "Stage" and then "Upgrade" in the CHT administration interface. | ||
| 2. Push a new helm chart to Kubernetes that specified different versions. | ||
|
|
||
| A recurring problem seen on production deployments was that, over time, CHT administrators would use the CHT administration interface to upgrade. Then, during a migration or a restore from backup, Kubernetes administrators would inadvertently downgrade a CHT instance by using an out of date Helm chart. | ||
|
|
||
| To avoid this situation, the upgrade service has been removed from Kubernetes based deployments. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Kubernetes based deployments will need to follow the migration steps from the deprecated [CHT 4.x Helm Charts repository](https://github.com/medic/helm-charts/) to the new [CHT 5.x Helm Charts](https://github.com/medic/cht-core/tree/master/scripts/build/helm) in the main CHT repository. Please see the [technical guide](/hosting/cht/migration/helm-charts-4x-to-5x-migration/) on how to migrate Kubernetes based deployments to 5.0. | ||
|
|
||
| Background information: | ||
| * [Add documentation for migrating from 4.x medic/helm-charts to the new production charts in 5.x cht-core](https://github.com/medic/cht-docs/issues/1943) | ||
| * [Hide upgrade button in admin app for k8s deployments, while still allowing staging upgrades](https://github.com/medic/cht-core/issues/9954) | ||
| * [Remove upgrade service from Helm charts](https://github.com/medic/cht-core/issues/10186) | ||
|
|
||
| ### Token login requires `app_url` | ||
|
|
||
| {{< callout type="info" >}} Applies to: Instances that use [token login]({{< relref "/building/login/#magic-links-for-logging-in-token-login" >}}) {{< /callout >}} | ||
|
|
||
| For instances that use token login, be sure declare `app_url` in your [settings file]({{< relref "/building/reference/app-settings/token_login/#app_settingsjson-token_login" >}}). This is backwards compatible and safe to do while still on CHT 4.x. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Background information: | ||
| * [Require `app_url` to be set when enabling `token_login`](https://github.com/medic/cht-core/issues/9983) | ||
|
|
||
| ### Enabling languages via generated docs | ||
|
|
||
| {{< callout type="info" >}} Applies to: Instances that enable languages via web interface {{< /callout >}} | ||
|
|
||
| As of [CHT 4.2.0]({{< relref "/releases/4_2_0/#technical-improvements" >}}), deployment administrators can enable or disable supported languages [via the settings file]({{< relref "/building/reference/app-settings/#app_settingsjson" >}}). CHT 5.0 removes this web interface to enable or disable languages and requires this to be done via App Settings. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Before upgrading, ensure [your app settings]({{< relref "/building/reference/app-settings/#app_settingsjson" >}}) has the correct languages enabled. This is backwards compatible and safe to do while still on CHT 4.x. If you're unsure if this applies to you, double check your app settings. | ||
|
|
||
| If `launguages` is not set, the login screen will show all languages. Fix it by declaring the `launguages` per above. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Background information: | ||
| * [Deprecate enabling languages through generated docs](https://github.com/medic/cht-core/issues/8157) | ||
| * [Allow app builders to specify disabled languages in config](https://github.com/medic/cht-core/issues/6281) | ||
|
|
||
|
|
||
| ### Declarative Configuration | ||
|
|
||
| {{< callout type="info" >}}Applies to: All Instances{{< /callout >}} | ||
|
|
||
| Deployments that have not compiled their app settings config in a very long time with a new version of CHT Conf, when logging in as an offline user may see, `Error: Rules Engine: Rules are not declarative. Updates are required.` | ||
|
|
||
| Additionally, the web developer console will show: | ||
|
|
||
| ```shell | ||
| Error selecting contact Error: Rules Engine: Rules are not declarative. Updates are required. | ||
| ERROR Error: Uncaught (in promise): TypeError: Cannot read properties of null (reading 'doc') | ||
| TypeError: Cannot read properties of null (reading 'doc') | ||
| ``` | ||
|
|
||
| The fix is to: | ||
| 1. Update [CHT Conf](/community/contributing/code/cht-conf/) to be current | ||
| 2. Recompile the app settings and upload them to the CHT. Be sure to replace the value of `--url` to the current password, URL and port: `cht --url=https://medic:password@example.com:12345 compile-app-settings upload-app-settings` | ||
|
|
||
|
|
||
| Background information: | ||
| * [Make declarative config mandatory](https://github.com/medic/cht-core/issues/5906) | ||
|
|
||
| ### Increase ecmaVersion ES linting to version 6 | ||
|
|
||
| {{< callout type="info" >}} Applies to: CHT versions between 4.0 and 4.4 {{< /callout >}} | ||
|
|
||
| Deployments running CHT Version 4.0 and 4.4 must upgrade to version 4.5 or later before upgrading to version 5.x. | ||
|
|
||
| Background information: | ||
| * [Increase ecmaversion linting for ddocs](https://github.com/medic/cht-core/issues/9202) | ||
|
|
||
| ### Ensure booleans are used with signoff fields | ||
|
|
||
| {{< callout type="info" >}} Applies to: Instances where `needs_signoff` triggers replication of reports {{< /callout >}} | ||
|
|
||
| In some scenarios where `needs_signoff` is set to string `"false"` instead of boolean `false`, replication will happen when it shouldn't. This is because the string of `"false"` is a truthy value. | ||
|
|
||
| CHT 5.0 now correctly enforces this to be a boolean. Deployments to make sure that workflows that use `needs_signoff` field have a boolean instead of a string. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Background information: | ||
| * [Replication fails to filter out reports with `needs_signoff` set to false](https://github.com/medic/cht-core/issues/10183) | ||
|
|
||
| ### Angular 20 requires Chrome 107 or later | ||
|
|
||
| {{< callout type="info" >}} Applies to: all instances {{< /callout >}} | ||
|
|
||
| CHT 5.0 is preparing fo an upgraded version of [Angular](https://blog.angular.dev/announcing-angular-v20-b5c9c06cf301). As this version of Angular will require Chrome 107 or later, we're making this a requirement in 5.0 as a breaking change to pave the path for the upgrade later. When [researching the impact of this upgrade](https://github.com/medic/cht-core/issues/10029#issuecomment-3358338361) we surveyed over 100,000 end users devices and found that less than 0.5% of users are affected. These users are running Chrome 106 released 3 years ago at this writing. A best practice is to have users always run the latest version if possible. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| To check if any of your users are impacted, check the [user-devices API](/building/reference/api/#get-apiv2exportuser-devices). This is an authenticated API endpoint and will return JSON for all users for all time. As this may include multiple entries per user, it's important to filter out duplicate users and of course filter out users who are running Chrome 107 or later. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Before starting, be sure `curl`, `jq` and `sort` are installed. In Ubuntu server, this looks like: `sudo apt update&&sudo apt install jq coreutils curl`. After confirming these tools are installed, save the output of the API to a JSON file being sure to replace `user`, `password` and `URL` with their correct values for your production instance: | ||
|
|
||
| ```shell | ||
| curl https://user:password:URL/api/v2/export/user-devices > devices.json | ||
| ``` | ||
|
|
||
| **Note**: for large instances with more than 2,000 users, run the API call after hours. It can have an adverse impact on CHT server performance. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Now that you have the `devices.json` JSON file, flatten it into a CSV file with just one row per user. Note that we're only finding users of the APK (`select(.apk|length> 0)`) and the Chrome browser (`select(.browser.name == "Chrome"`). This excludes desktop and Firefox users which will show up in the JSON as well. Finally, we're also only showing users active since `2025-04-01`, 6 months ago as of this writing (`select(.date > "2025-04-01")`). Be sure to update this date to be a relative 6 months ago from when you run the command: | ||
|
|
||
| ```shell | ||
| jq -r '.[] | select(.apk|length> 0) | ||
| | select(.browser.name == "Chrome") | ||
| | select(.date > "2025-04-01") | ||
| | "\(.deviceId) \(.user) \(.date) \(.browser.version)"' \ | ||
| devices.json | sort -u -k1,2r \ | ||
| | sort -u -k1,1 | cut -f2,3,4 -d' '| sort -rh -k3 \ | ||
| | sed 's/ /,/g' > devices.csv | ||
| ``` | ||
|
|
||
| The resulting file `devices.csv` will have all of your users sorted by the version of Chrome they use. Scroll to the bottom and find any users running a version lower than `107` and ensure they update to a newer version. The easiest way to upgrade is to open the Play Store and update any out of date software, being sure to update [WebView](https://play.google.com/store/apps/details?id=com.google.android.webview&hl=en). | ||
|
|
||
| For instances with users who share devices, or have multiple devices they log in on, they may have multiple entries. Thi is because the CHT creates one entry per device per user. Be sure to upgrade all affected devices! | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Background information: | ||
| * [Upgrade to Angular 20](https://github.com/medic/cht-core/issues/10029) | ||
|
|
||
|
|
||
| ## Non-Breaking Changes | ||
|
|
||
| These changes apply to all deployments. No specific action needs to be taken, but administrators should be aware of the changes. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| ### CouchDB Nouveau | ||
|
|
||
| A major feature of CHT 5.0 is replacing the old freetext search in 4.x with CouchDB Nouveau. The addition of Nouveau [decreases the amount of disk space](https://github.com/medic/cht-core/issues/9898#issuecomment-2864545914) used by the CHT. Disk space has been shown to be a major contributor to hosting costs, hence Nouveau is the first feature to [reduce Hosting Total Cost of Ownership (TCO)](https://github.com/medic/cht-roadmap/issues/171). | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
|
|
||
| Nouveau has the following impact on all CHT deployments upgrading to 5.0: | ||
|
|
||
| * Offline users' devices will have their search indexes rebuilt after the upgrade. During the rebuild, search functionality will be initially unavailable. However, once the indexing is complete, the search behavior will be unchanged from before for all users: the search experience is the same in both CHT 4.x and CHT 5.x. | ||
|
mrjones-plip marked this conversation as resolved.
Resolved
|
||
| * The Nouveau index data on the server will be stored in `${COUCHDB_DATA}/nouveau` for single-node CouchDBs and in `${DB1_DATA}/nouveau` for clustered CouchDBs. | ||
| * The following `medic-client` views no longer exist. Be sure to update any custom scripts which use them: `contacts_by_freetext`, `contacts_by_type_freetext` and `reports_by_freetext` . | ||
|
|
||
| Background information: | ||
| * [Reduce disk space with CouchDB Nouveau (TCO)](https://github.com/medic/cht-core/issues/9542) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.