-
Notifications
You must be signed in to change notification settings - Fork 228
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
O3-2309: Implement dynamic frontend docker images for e2e test (#765)
* Dynamic frontend Docker image for e2e test * Change directory * Fix tests * Update e2e/support/github/run-e2e-docker-env.sh Co-authored-by: Ian <[email protected]> * Update e2e/support/github/Dockerfile Co-authored-by: Ian <[email protected]> * Fix the port numbers * Remove unwanted MFs * Remove unwanted MFs * Remove unwanted MFs * Remove unwanted MFs * Remove unwanted MFs * Test only with login and home apps * Test with navigation, chart and home apps * (Breaking) Revert the changes related to #763 --------- Co-authored-by: Ian <[email protected]>
- Loading branch information
1 parent
52bd419
commit 012ca12
Showing
5 changed files
with
241 additions
and
124 deletions.
There are no files selected for viewing
This file contains 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 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,34 @@ | ||
# syntax=docker/dockerfile:1.3 | ||
FROM --platform=$BUILDPLATFORM node:18-alpine as dev | ||
|
||
ARG APP_SHELL_VERSION=next | ||
|
||
RUN mkdir -p /app | ||
WORKDIR /app | ||
|
||
COPY . . | ||
|
||
RUN npm_config_legacy_peer_deps=true npm install -g openmrs@${APP_SHELL_VERSION:-next} | ||
ARG CACHE_BUST | ||
RUN npm_config_legacy_peer_deps=true openmrs assemble --manifest --mode config --config spa-assemble-config.json --target ./spa | ||
|
||
FROM --platform=$BUILDPLATFORM openmrs/openmrs-reference-application-3-frontend:nightly as frontend | ||
FROM nginx:1.23-alpine | ||
|
||
RUN apk update && \ | ||
apk upgrade && \ | ||
# add more utils for sponge to support our startup script | ||
apk add --no-cache moreutils | ||
|
||
# clear any default files installed by nginx | ||
RUN rm -rf /usr/share/nginx/html/* | ||
|
||
COPY --from=frontend /etc/nginx/nginx.conf /etc/nginx/nginx.conf | ||
# this assumes that NOTHING in the framework is in a subdirectory | ||
COPY --from=frontend /usr/share/nginx/html/* /usr/share/nginx/html/ | ||
COPY --from=frontend /usr/local/bin/startup.sh /usr/local/bin/startup.sh | ||
RUN chmod +x /usr/local/bin/startup.sh | ||
|
||
COPY --from=dev /app/spa/ /usr/share/nginx/html/ | ||
|
||
CMD ["/usr/local/bin/startup.sh"] |
This file contains 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 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,49 @@ | ||
#!/usr/bin/env bash -eu | ||
|
||
# get the dir containing the script | ||
script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||
# create a temporary working directory | ||
working_dir=$(mktemp -d "${TMPDIR:-/tmp/}openmrs-e2e-frontends.XXXXXXXXXX") | ||
# get a list of all the apps in this workspace | ||
apps=$(yarn workspaces list --json | jq -r 'if ((.location == ".") or (.location | test("-app") | not)) then halt else .name end') | ||
# this array will hold all of the packed app names | ||
app_names=() | ||
|
||
echo "Creating packed archives of apps..." | ||
# for each app | ||
for app in $apps | ||
do | ||
# @openmrs/esm-whatever -> _openmrs_esm_whatever | ||
app_name=$(echo "$app" | tr '[:punct:]' '_'); | ||
# add to our array | ||
app_names+=("$app_name.tgz"); | ||
# run yarn pack for our app and add it to the working directory | ||
yarn workspace "$app" pack -o "$working_dir/$app_name.tgz" >/dev/null; | ||
done; | ||
echo "Created packed app archives" | ||
|
||
echo "Creating dynamic spa-assemble-config.json..." | ||
# dynamically assemble our list of frontend modules, prepending the login app and | ||
# primary navigation apps; apps will all be in the /app directory of the Docker | ||
# container | ||
jq -n \ | ||
--arg apps "$apps" \ | ||
--arg app_names "$(echo ${app_names[@]})" \ | ||
'{"@openmrs/esm-primary-navigation-app": "next", "@openmrs/esm-home-app": "next", "@openmrs/esm-patient-chart-app": "next"} + ( | ||
($apps | split("\n")) as $apps | ($app_names | split(" ") | map("/app/" + .)) as $app_files | ||
| [$apps, $app_files] | ||
| transpose | ||
| map({"key": .[0], "value": .[1]}) | ||
| from_entries | ||
)' | jq '{"frontendModules": .}' > "$working_dir/spa-assemble-config.json" | ||
echo "Created dynamic spa-assemble-config.json" | ||
|
||
echo "Copying Docker configuration..." | ||
cp "$script_dir/Dockerfile" "$working_dir/Dockerfile" | ||
cp "$script_dir/docker-compose.yml" "$working_dir/docker-compose.yml" | ||
|
||
cd $working_dir | ||
echo "Starting Docker containers..." | ||
# CACHE_BUST to ensure the assemble step is always run | ||
docker compose build --build-arg CACHE_BUST=$(date +%s) frontend | ||
docker compose up -d |
Oops, something went wrong.