Skip to content

UI Plugins that provides various extensions to the oVirt Administration Portal.

License

Notifications You must be signed in to change notification settings

oVirt/ovirt-engine-ui-extensions

Repository files navigation

oVirt UI Extensions

last build

Introduction

This project contains UI plugins that provides various extensions to oVirt administration UI.

This extension is installed during oVirt Engine installation and upgraded via engine-setup. This means no manual steps are required in order to install this extension in an production environment.

Setting up development environment

Prerequisites

  • Install Node.js (LTS). nvm can be used to manage multiple Node.js versions. Run node -v to check the current Node.js version.

  • Install Yarn package manager.

  • Build and configure oVirt Engine according to its developer instructions.

  • Checkout the sources from GitHub.

Note
Required versions of nodejs and yarn can be seen in the current rpm spec template.

Setting up the extension

  • yarn install to install dependencies

  • yarn lint to lint the source code

  • yarn test to run tests (single run)

  • yarn test:watch for continuous testing (watch & rerun tests on change)

  • yarn dev for development build

  • yarn dev:watch for continuous development (watch & rebuild on change)

  • yarn build for production build

Setting up Engine

Build the extension with yarn dev or yarn build to generate ${PLUGIN_REPO}/dist.

Symlink the extension’s plugin resources to ui-plugins directory of your developer engine as follows:

 % cd ${PREFIX}/share/ovirt-engine/ui-plugins/
 % ln -s ${PLUGIN_REPO}/dist/ui-extensions.json ui-extensions.json
 % ln -s ${PLUGIN_REPO}/dist/ui-extensions-resources ui-extensions-resources

Symlink the extensions’s ansible resources to playbooks directory of your developer engine as follows:

 % cd ${PREFIX}/share/ovirt-engine/ansible-runner-service-project/project
 % ln -s ${PLUGIN_REPO}/ansible-playbooks/*
Note
If you add additional playbook yml files after the initial symlink, the process will need to be repeated.

Accessing the plugins

Open WebAdmin in your browser, you should land on Dashboard place automatically:

https://engine.example:8443/ovirt-engine/webadmin/

Internationalization and Localization

Introduction

This project has the ability to render in different languages. Internally all the different locales are saved in the intl/locales/ folder. The strings provided in these files are accessible through the msg object created in intl-messages.js.

The locale is set in the app-init.js service based on the locale provided by the ovirt-engine application.

The following languages are currently supported: - Czech (Czechia) - German (Germany) - English (United States) - Spanish (Spain) - French (France) - Italian (Italy) - Japanese (Japan) - Korean (South Korea) - Portuguese (Brazil) - Simplified Chinese (China) - Georgian (Georgia)

Weblate setup

intl/locales/en-US.json is the file that is used as the base for all the strings. To add new strings 2 steps need to be taken:

  1. Add a new entry to intl/messages.js as a uniquely named object containing an id, defaultMessage and description fields. This object name should match the parameter used for the msg object.

  2. Add at least the English translation in intl/locales/en-US.json with the id used in the previous step.

After these steps the string will be available for the translators to be translated on Weblate.

The Weblate site, https://translate.ovirt.tech/projects/ovirt-engine-ui-extensions/ui-extension/, is linked to a branch on github to collect changes for periodic and bundled updates to the string resources.

Instructions for maintainers

Managing dependencies

Dependencies not related to production build (not needed for yarn build) should go into devDependencies. Try to keep as few dependencies as possible.

Whenever dependencies are changed, they need to be pre-seeded to ovirt-engine-nodejs-modules for CI to pass offline builds.

Package versioning

  • alpha and beta builds (pre-releases): x.y.z-0.N where version stays the same

  • RC and GA builds (releases): x.y.z-N where version grows between releases

version in package.json is reflected into the RPM x.y.z version.

Release process

Only covers release builds (RC and GA).

Stable branches

To create new stable branch:

  1. create new branch on the GitHub repo

  2. rebase on top of the newly created branch

Then, update the master branch:

  • submit pull request with following changes:

    • package.json - bump version

    • packaging/spec.in - reset Release number to 1 and update %changelog

TODO: Do any changes need to be made to copr, for builds, or a github actions, for CI, if a new stable branch is added?

Releases

To perform new release:

  1. switch to appropriate stable branch

  2. submit pull request that prepares the branch for release:

    1. package.json - ensure proper version (e.g. bump .z component)

    2. packaging/spec.in - ensure proper Release number and update %changelog

  3. pull changes from remote

  4. tag release-prep patch and push the tag to remote:

    1. git tag -a <tag-name>

    2. git push origin <tag-name>

  5. trigger CI build on release-prep patch

  6. update oVirt release config in releng-tools repo

Tag name example: ovirt-engine-ui-extensions-1.0.0-1

Building RPM

GitHub pull request

GitHub actions that run CI on each pull request do a full rpm build. To access the RPMs for a pull request, open the checks tab. If the offline / ovirt-engine-nodejs-modules check passed, the artifacts should be available on that page or on the action run’s page.

Manual build

Alternatively, a RPM can be built locally using the packaging/build.sh script. To build online (skipping ovirt-engine-nodejs-modules), you will need to install the packages listed in the packaging/spec.in file BuildRequires lines. As of 2022-Feb-15, install:

  % sudo dnf install git jq rpmlit rpm-build yarn nodejs

Then build with the command:

  % OFFLINE_BUILD=0 ./packaging/build.sh

Upon a successful build, the RPMs will be located in the exported-artifacts/ folder.