diff --git a/.gitlab/ci/.build-binaries.yml b/.gitlab/ci/.build-binaries.yml index 174203fdcd52622712b38ef0718612d6cf873a94..4877cd1697d13de412485f281f2bf2b46a8b1019 100644 --- a/.gitlab/ci/.build-binaries.yml +++ b/.gitlab/ci/.build-binaries.yml @@ -16,5 +16,6 @@ build-all-binaries: - artifacts/venv-manager - artifacts/inventory-manager - artifacts/plugin-registry + - artifacts/react-ui expire_in: 1 week <<: *build-binaries diff --git a/.gitlab/ci/.build-container-images.yml b/.gitlab/ci/.build-container-images.yml index da70dcba2d6ae122b967c2417c014750cbed26b0..79e22bc637b30fcd14e3953f9ce8f95cbf568c30 100644 --- a/.gitlab/ci/.build-container-images.yml +++ b/.gitlab/ci/.build-container-images.yml @@ -75,6 +75,16 @@ build-inventory-manager-image: - docker push "$INVENTORY_MANAGER_IMAGE_NAME:$CI_COMMIT_REF_SLUG" <<: *build +build-react-ui-image: + script: + - REACT_UI_IMAGE_NAME="${CI_REGISTRY_IMAGE}/react-ui" + - docker buildx build -t "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/react-ui/docker/webserver/Dockerfile" ./react-ui + - docker push "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" + - docker tag "$REACT_UI_IMAGE_NAME:$CI_COMMIT_SHA" "$REACT_UI_IMAGE_NAME:$CI_COMMIT_REF_SLUG" + - docker push "$REACT_UI_IMAGE_NAME:$CI_COMMIT_REF_SLUG" + <<: *build + + build-integration-test-images: needs: ["build-controller-image"] script: diff --git a/.gitlab/ci/.react-ui.yml b/.gitlab/ci/.react-ui.yml deleted file mode 100644 index 873b694c892b39870eb60ad629f836055089734b..0000000000000000000000000000000000000000 --- a/.gitlab/ci/.react-ui.yml +++ /dev/null @@ -1,3 +0,0 @@ -build-react-ui: - stage: build - \ No newline at end of file diff --git a/Makefile b/Makefile index 888644abed5135d8bf2364302499eefd2f2ea0e4..73ae77b6ad32c9a6528dfb699b8a312826713a7d 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ lint-fix: install-tools build: pre build-gosdn build-gosdnc build-plugin-registry build-venv-manager build-arista-routing-engine-app build-hostname-checker-app build-basic-interface-monitoring-app build-inventory-manager -containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry containerize-venv-manager containerize-arista-routing-engine-app containerize-inventory-manager +containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry containerize-venv-manager containerize-arista-routing-engine-app containerize-inventory-manager containerize-react-ui generate-all-certs: pre generate-root-ca generate-gosdn-certs generate-gnmi-target-certs diff --git a/dev_env_data/clab/gosdn_slim.clab.yaml b/dev_env_data/clab/gosdn_slim.clab.yaml index f4d76846cddf22b054f8cee3c4e39d70589cb7ea..b3ef8eb088890c2e63d349c11d4d7de5f60a5e65 100644 --- a/dev_env_data/clab/gosdn_slim.clab.yaml +++ b/dev_env_data/clab/gosdn_slim.clab.yaml @@ -13,6 +13,13 @@ topology: image: plugin-registry mgmt-ipv4: 172.100.0.16 + react-ui: + kind: linux + image: react-ui + ports: + - 127.0.0.1:8088:80 + mgmt-ipv4: 172.100.0.6 + gosdn: kind: linux image: gosdn diff --git a/dev_env_data/docker-compose/basic_docker-compose.yml b/dev_env_data/docker-compose/basic_docker-compose.yml index 4e7664161a7a65487281e203f52d866271815d7c..2544e7b0f3728d57d64b3138dd7f5d6f74f7f4cc 100644 --- a/dev_env_data/docker-compose/basic_docker-compose.yml +++ b/dev_env_data/docker-compose/basic_docker-compose.yml @@ -75,5 +75,10 @@ services: command: start --cert /etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt --key /etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key --ca_file /etc/gnmi-target/ssl/ca.crt + react-ui: + image: react-ui + ports: + - 127.0.0.1:8088:80 + volumes: mongo-db-basic: diff --git a/makefiles/container/Makefile b/makefiles/container/Makefile index c9c21b9728af4606335ea425a187a55dd09f5ad1..6e3b97242bdd968d9e4236440721c9bea30bc805 100644 --- a/makefiles/container/Makefile +++ b/makefiles/container/Makefile @@ -25,3 +25,6 @@ containerize-ws-events-app: containerize-inventory-manager: docker buildx build --rm -t venv-manager --load -f applications/inventory-manager/inventory-manager.Dockerfile . + +containerize-react-ui: + docker buildx build --rm --load -t react-ui -f react-ui/docker/webserver/Dockerfile . diff --git a/plugin-registry/plugin-registry.Dockerfile b/plugin-registry/plugin-registry.Dockerfile index 05d3aad83fd593051616bfc5345367d961f8adeb..292a134fd5707a0508ad136b8a01d8e2f3d0890d 100644 --- a/plugin-registry/plugin-registry.Dockerfile +++ b/plugin-registry/plugin-registry.Dockerfile @@ -4,8 +4,9 @@ ARG GITLAB_PROXY FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-bookworm as builder WORKDIR /plugin-registry/ -RUN apt-get update -RUN apt-get -y install --no-install-recommends zip +RUN apt-get update && \ + apt-get -y install --no-install-recommends zip && \ + rm -rf /var/lib/apt/lists/* COPY . . RUN --mount=type=cache,target=/root/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ @@ -21,4 +22,4 @@ WORKDIR /app/ COPY --from=builder /plugin-registry/artifacts/plugin-registry . COPY --from=builder /plugin-registry/plugin-registry/plugins ./plugins COPY --from=builder /plugin-registry/dev_env_data/plugin-registry/plugin-store.json ./plugin-store.json -ENTRYPOINT ["./plugin-registry", "-socket", "55057"] +ENTRYPOINT ["./plugin-registry", "-socket", "55057"] \ No newline at end of file diff --git a/react-ui/.dockerignore b/react-ui/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..5ecec04724f8685ae46c6f5ddf66a4c92844754f --- /dev/null +++ b/react-ui/.dockerignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +vite/ +tmp/ +.vscode/ \ No newline at end of file diff --git a/react-ui/docker/webserver/Dockerfile b/react-ui/docker/webserver/Dockerfile index f4644ee1036b55d30673e0290d3a89aec8a68c60..71127c09b528b49714281e3dfc703b18d1902103 100644 --- a/react-ui/docker/webserver/Dockerfile +++ b/react-ui/docker/webserver/Dockerfile @@ -1,4 +1,13 @@ -FROM nginx:alpine3.20 +FROM node:alpine3.20 as builder + +COPY ./api/openapiv2/gosdn_northbound.swagger.json /app/api/openapiv2/gosdn_northbound.swagger.json +COPY ./react-ui /app/react-ui + +RUN cd /app/react-ui && yarn && yarn build -COPY dist /usr/share/nginx/html -COPY docker/webserver/nginx.conf /etc/nginx/nginx.conf \ No newline at end of file + +# webserver +FROM nginx:alpine3.20 +COPY --from=builder /app/react-ui/dist /usr/share/nginx/html +COPY --from=builder /app/react-ui/docker/webserver/nginx.conf /etc/nginx/nginx.conf +EXPOSE 80 \ No newline at end of file diff --git a/react-ui/docker/webserver/nginx.conf b/react-ui/docker/webserver/nginx.conf index 87066f6ab89b1a840816f93fedc989e0d0736bfb..eb4fc2be925602e892b2bdb0a134d5016cc2c736 100644 --- a/react-ui/docker/webserver/nginx.conf +++ b/react-ui/docker/webserver/nginx.conf @@ -41,7 +41,6 @@ http { #access_log logs/host.access.log main; - location ^~ /api/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/react-ui/scripts/build.sh b/react-ui/scripts/build.sh index ad0f0cd0b20382110f1dbff59206f95c1d5a14f2..fb6cb2a21737c17e269f4dbc7fd1b2befdd5e6ae 100755 --- a/react-ui/scripts/build.sh +++ b/react-ui/scripts/build.sh @@ -7,7 +7,7 @@ docker run --rm \ -w /app \ -u $(id -u):$(id -g) \ $IMAGE \ - yarn install && yarn build + yarn && yarn build if [ $? -ne 0 ]; then echo "Error while building frontend app" diff --git a/react-ui/vite.config.mjs b/react-ui/vite.config.mjs index fefafe05a692ebf39a8879ac440fcff0f549ec60..fc4ce4a01c9588f72d40aee0e7aeb16d002e068e 100755 --- a/react-ui/vite.config.mjs +++ b/react-ui/vite.config.mjs @@ -8,10 +8,11 @@ export default defineConfig({ }, // develop server server: { + host: true, port: 3000, proxy: { '/api': { - target: 'http://127.0.0.1:8080', + target: 'http://clab-gosdn_csbi_arista_base-gosdn:8080', changeOrigin: true, secure: false, rewrite: (path) => path.replace(/^\/api/, ''),