This project is subject to the Ubuntu Code of Conduct to foster an open and welcoming place to contribute. By participating in the project (in the form of code contributions, issues, comments, and other activities), you agree to abide by its terms.
Changes to this project should be proposed as pull requests on GitHub at: https://github.com/canonical/ubuntu-desktop-installer.
This project is subject to the Canonical contributor license agreement, please make sure you have signed it before (or shortly after) submitting your first pull request.
UI and UX specifications are published as GitHub issues. Any specification issue without an assignee is up for grabs, if you start work on one of them please make sure to comment on the issue to say so, a project administrator will assign it to you.
Bugs are also tracked as GitHub issues.
Translations for the Ubuntu desktop installer are managed with Flutter's tools for internationalization.
The template containing all the messages to be translated lives in lib/l10n/app_en.arb
. When starting translations for a new language, that file needs to be copied to lib/l10n/app_LANGCODE.arb
(e.g. lib/l10n/app_fr.arb
), and messages should be translated in this new file.
When new messages are added in the source code, they also need to be added to the translation template.
The translation template has one special string (languageName
) that is used to determine whether that language should be offered to the user on the welcome screen. If a translation isn't complete enough, or of insufficient quality, just make languageName
an empty string (by default it inherits the value from the English template, so it's not empty), and it won't show up as available in the UI.
This project uses freezed and
json_serializable to generate
immutable data classes with JSON serialization support. Adding new types or
members to classes annotated with @freezed
or @JsonSerializable
requires
the code to be re-generated (see also the Melos section below):
melos run generate
The project provides a Melos configuration to make it straightforward to execute certain tasks across the project tree.
Install Melos:
dart pub global activate melos
Bootstrap the workspace:
melos bootstrap
Select a task interactively:
melos run
Run a specific task directly:
melos run coverage