- Make sure you have Node.js version >= 18 installed
- Run script to patch your
/etc/hosts - Make sure you are using Red Hat proxy
- Install dependencies with
npm install - Run development server with
npm run start:proxy - Local version of the app will be available at https://stage.foo.redhat.com:1337/insights/advisor/
In case you want to use the stable environment instead of beta you can run the app with npm run start:proxy and access it from https://stage.foo.redhat.com:1337/insights/advisor/. Usually there is no difference between these two environments unless there is a large feature in progress which is hidden behind isBeta flag.
To test PDF generation features locally, you'll need to run additional services alongside the advisor frontend.
Clone the required repositories:
-
Authenticate with quay.io - Login once to access Red Hat container images:
podman login quay.io
Your credentials will be saved persistently and you won't need to login again after reboot.
-
Configure insights-chrome - Add routing for
/apps/advisor/and/api/crc-pdf-generator/in the insights-chromeconfig/webpack.config.jsroutes object:routes: { '/apps/advisor/': { host: 'http://localhost:8003' }, '/api/crc-pdf-generator/': { host: 'http://localhost:8000' }, ...(process.env.CHROME_SERVICE && { ...
-
Start services in separate terminals:
Terminal 1 - insights-chrome:
cd ../insights-chrome npm run devTerminal 2 - pdf-generator containers:
cd ../pdf-generator cat <<EOF > .env MINIO_ACCESS_KEY="minioadmin" MINIO_SECRET_KEY="minioadmin" MAX_CONCURRENCY=2 EOF podman-compose up
Terminal 3 - pdf-generator server:
cd ../pdf-generator PROXY_AGENT=http://squid.corp.redhat.com:3128/ \ ASSETS_HOST=https://localhost:1337/ \ API_HOST=https://console.stage.redhat.com/ \ npm run start:serverTerminal 4 - advisor frontend:
npm run static
-
Access the app at https://stage.foo.redhat.com:1337/insights/advisor
If you want to test Advisor with another application deployed locally, you can utilise LOCAL_APPS environment variable and deploy the needed application on separate ports. To learn more about the variable, see https://github.com/RedHatInsights/frontend-components/tree/master/packages/config#running-multiple-local-frontend-applications.
We'll take for example insights-inventory-frontend.
Open new terminal, navigate to Inventory repository, and run it on a separate port without proxy:
npm run start -- --port=8003
In a separate terminal, run Advisor with proxy enabled and list Inventory:
LOCAL_APPS=inventory:8003~http npm run start:proxy
An alternative approach to test Advisor and Inventory integration is to use Chrome as the proxy and run both apps in static mode.
Clone the required repositories:
-
Configure insights-chrome - Add routing for both apps in
config/webpack.config.js:'/apps/inventory': { host: `http://localhost:8003`, }, '/apps/advisor': { host: `http://localhost:8004`, },
-
Start services in separate terminals:
Terminal 1 - insights-chrome:
cd insights-chrome npm run devTerminal 2 - inventory-frontend:
cd insights-inventory-frontend npm run staticTerminal 3 - advisor-frontend:
npm run static -- --port=8004
-
Access the app at https://stage.foo.redhat.com:1337/insights/advisor
Travis is used to test the build for this code.
npm run testwill run tests.npm run lintwill run all linters.
Before opening a pull request, you can run npm run verify:local to make sure your changes pass automated tests (Jest and Cypress) and linter (both JS and CSS linters).
The app uses containerized builds which are configured in app-interface.
| Push to branch in this repo | Updated branch in build repo | Environment | Available at |
|---|---|---|---|
| master | stage-beta | stage beta | master branch |
| master-stable | stage-stable | stage stable | master branch |
| prod-beta | prod-beta | production beta | up to the commit configured in app-interface |
| prod-stable | prod-stable | production stable | up to the commit configured in app-interface |
Translation keys are saved in messages.js.
Each time you add a new translation keys you need to run npm run translations, which will automatically generate JSON files for every language into locales/ folder based on the entries in the messages.js.
There are two ways to use translated strings:
- With
intl.formatMessage(messages.messageId) - With
<FormattedMessage {...messages.messageId}/>
This project uses Patternfly React.
This app imports components from Insights Front-end Components library. ESI tags are used to import Insights Chrome which takes care of the header, sidebar, and footer.