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.
Issue #, if available:
Fixes #538 #726
More related issues outlined below.
Description of changes:
This PR encapsulates work to deliver version 1 of the sample application. It can be grouped in to several sets of changes.
Store redesign
The store UI has been rebuilt using Tailwind CSS instead of Bootstrap resolving #594, and its look and feel has been modernized. This also provides the ability to select different colored "themes" that switch the primary color.
The theme of the store has also been changed from watches to "secret agent gadgets". The sample data was generated with generative AI via Amazon Nova.
Better experience running UI standalone
Although it was possible to run the UI component by itself the experience was degraded from running all the components. For example, the sample product data was auto-generated and not consistent with the data in the catalog component.
Running the UI component now provides the same experience as running the full architecture, which makes running the UI component standalone more viable.
Metadata page
The UI component now provides a page that displays information about the environment the container is deployed in, resolving issue #588. This is useful for demonstrations where it is necessary to show aspects such as cross-AZ load balancing and many others.
This is implemented using OpenTelemetry resource provider implementations for Java and includes metadata for Kubernetes, Amazon EC2, Amazon ECS and AWS Lambda.
Generative AI chat bot
An optional chat bot feature has been added to the UI component which allows the application to be used to demonstrate basic LLM inference scenarios. The chat bot is compatible with Amazon Bedrock and OpenAI compatible endpoints.
Catalog persistence
The catalog component persistence layer has been migrated from sqlx to gorm. This provide the ability to run the catalog with in-memory persistence, and resolves the error reported in #154. Automated tests are also implemented resolving #87.
Consistent configuration parameters
All components now use consistent environment variable names for configuring behavior, generally starting with
RETAIL_<component_name>_...
. This provides better decoupling from the various underlying frameworks across components, especially Spring Boot. For example there is no more reliance on Spring Boot profiles to configure behavior.Configuring similar behavior across different components is also now more consistent. For example configuring persistence and messaging.
Reorganized repository
Various changes have been made to the layout of the repository:
app
component has been added for artifacts related to the entire application such as docker compose file, Helmfile, Tiltfile and Helm chart.Migrated e2e tests to Cypress
The end-to-end tests have been migrated from Playwright to Cypress
Migrated UI OpenAPI clients to kiota
The API client code generated from the OpenAPI specifications of the various components for the UI have been migrated to kiota. The eventual goal is to provide a consistent set of tooling for generating client code across all components.
Java OpenTelemetry integration
Previously OpenTelemetry for Java components was implemented by installing the agent in the Dockerfile. This has now been migrated to install the OpenTelemetry dependencies directly as Java packages. This simplifies the Dockerfile and provides a path to native executables for the Java components.
Asset component removed
The "asset" component was previously used to serve product images. This component has been removed to simplify the architecture. Images are now served by the UI component directly.
Release process
The repository now uses release-please to manage the release process, allowing the removal of the previous release notes generation artifacts.
The previous contents of the
dist
directory like the docker compose and kubernetes manifest files are now attached to the GitHub release instead of committed.Developer experience
The repository now includes optional components to help with consistent developer experience for contributing to the sample application using devenv and nx. This helps streamline developer environment setup and interaction with the various components across the monorepo.
This has also allowed us to remove the bash scripts for building/publishing container images and helm charts.
See the developer guide for more information.
Updated architecture diagram
Fixed issues #544 and #717
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.