]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: push frontend build logic down
authorKefu Chai <kchai@redhat.com>
Tue, 20 Jul 2021 12:38:45 +0000 (20:38 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 22 Jul 2021 08:35:12 +0000 (16:35 +0800)
it's simpler to build frontend in frontend/CMakeLists.txt

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/pybind/mgr/dashboard/CMakeLists.txt
src/pybind/mgr/dashboard/frontend/CMakeLists.txt [new file with mode: 0644]
src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
src/pybind/mgr/dashboard/run-frontend-unittests.sh

index b8d558f0ce87eaa5da2395a0985801ea82899110..04a7dc17de18d475fb0985e6b6828c82603d9775 100644 (file)
@@ -1,145 +1,4 @@
-include(CMakeParseArguments)
-function(add_npm_command)
-  set(options NODEENV)
-  set(single_kw OUTPUT COMMENT WORKING_DIRECTORY)
-  set(multi_kw COMMAND DEPENDS)
-  cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN})
-  string(REPLACE ";" " " command "${NC_COMMAND}")
-  if(NC_NODEENV)
-    string(REGEX REPLACE "^(.*(npm|npx) .*)$" ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" command ${command})
-  endif()
-  string(REPLACE " " ";" command "${command}")
-  add_custom_command(
-    OUTPUT "${NC_OUTPUT}"
-    COMMAND ${command}
-    DEPENDS ${NC_DEPENDS}
-    WORKING_DIRECTORY "${NC_WORKING_DIRECTORY}"
-    COMMENT ${NC_COMMENT})
-  set_property(DIRECTORY APPEND
-    PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${NC_OUTPUT}")
-endfunction(add_npm_command)
-
-function(add_npm_options)
-  set(commands)
-  cmake_parse_arguments(NC "" "NODEENV_DIR;TARGET" "OPTION" ${ARGN})
-  foreach(opt ${NC_OPTION})
-    string(REPLACE "=" ";" opt ${opt})
-    list(GET opt 0 key)
-    list(GET opt 1 value)
-    list(APPEND commands
-      COMMAND
-      . ${NC_NODEENV_DIR}/bin/activate &&
-      npm config set ${key} ${value} --userconfig ${NC_NODEENV_DIR}/.npmrc &&
-      deactivate)
-  endforeach()
-  add_custom_target(${NC_TARGET}
-    ${commands}
-    DEPENDS ${NC_NODEENV_DIR}/bin/npm
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-endfunction(add_npm_options)
-
-if(WITH_SYSTEM_NPM)
-  set(mgr-dashboard-nodeenv-dir )
-  set(nodeenv "")
-  add_custom_target(mgr-dashboard-frontend-deps
-    DEPENDS frontend/node_modules
-    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
-  )
-else(WITH_SYSTEM_NPM)
-  set(mgr-dashboard-nodeenv-dir ${CMAKE_CURRENT_BINARY_DIR}/node-env)
-  set(nodeenv NODEENV)
-  set(mgr-dashboard-userconfig --userconfig ${mgr-dashboard-nodeenv-dir}/.npmrc)
-  if(DEFINED ENV{NODE_MIRROR})
-    set(node_mirror_opt "--mirror=$ENV{NODE_MIRROR}")
-  endif()
-  add_custom_command(
-    OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
-    COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
-    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
-    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=12.18.2
-    COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-    COMMENT "dashboard nodeenv is being installed"
-    )
-  if(DEFINED ENV{NPM_REGISTRY})
-    set(npm_registry_opts "OPTION" "registry=$ENV{NPM_REGISTRY}")
-  endif()
-  add_npm_options(
-    NODEENV_DIR ${mgr-dashboard-nodeenv-dir}
-    TARGET mgr-dashboard-nodeenv
-    OPTION python=${MGR_PYTHON_EXECUTABLE}
-    OPTION cache=${mgr-dashboard-nodeenv-dir}/.npm
-    ${npm_registry_opts})
-  add_custom_target(mgr-dashboard-frontend-deps
-    DEPENDS frontend/node_modules mgr-dashboard-nodeenv
-    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
-  )
-endif(WITH_SYSTEM_NPM)
-
-add_npm_command(
-  OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/node_modules"
-  COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false npm ci ${mgr-dashboard-userconfig}
-  DEPENDS frontend/package.json
-  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
-  COMMENT "dashboard frontend dependencies are being installed"
-  ${nodeenv}
-)
-
-# Glob some frontend files.
-file(
-  GLOB_RECURSE frontend_src
-  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
-  frontend/src/*.ts
-  frontend/src/*.html)
-
-# these files are generated during build
-list(REMOVE_ITEM frontend_src
-  frontend/src/environments/environment.prod.ts
-  frontend/src/environments/environment.ts)
-
-execute_process(
-    COMMAND bash -c "jq -r .config.locale ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/package.json"
-    OUTPUT_VARIABLE default_lang
-    OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-set(frontend_dist_dir "${CMAKE_CURRENT_BINARY_DIR}/frontend/dist")
-set(npm_args "--output-path ${frontend_dist_dir}")
-if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
-  string(APPEND npm_args " --prod --progress=false")
-else()
-  string(APPEND npm_args " --progress=false")
-endif()
-
-add_npm_command(
-  OUTPUT "${frontend_dist_dir}"
-  COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" npm run build:localize -- ${npm_args}
-  DEPENDS ${frontend_src} frontend/node_modules
-  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
-  COMMENT "dashboard frontend is being created"
-  ${nodeenv}
-)
-
-add_custom_command(
-  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/frontend/package.json
-  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/frontend/package.json
-  COMMAND ${CMAKE_COMMAND} -E copy_if_different
-    ${CMAKE_CURRENT_SOURCE_DIR}/frontend/package.json
-    ${CMAKE_CURRENT_BINARY_DIR}/frontend/package.json)
-
-add_custom_target(mgr-dashboard-frontend-build
-  ALL
-  DEPENDS
-    ${frontend_dist_dir}
-    ${CMAKE_CURRENT_BINARY_DIR}/frontend/package.json
-    mgr-dashboard-frontend-deps
-  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend)
-
-add_dependencies(tests mgr-dashboard-frontend-build)
-
-install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/frontend/dist
-  DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/frontend/package.json
-  DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend)
+add_subdirectory(frontend)
 
 if(WITH_TESTS)
   include(AddCephTest)
diff --git a/src/pybind/mgr/dashboard/frontend/CMakeLists.txt b/src/pybind/mgr/dashboard/frontend/CMakeLists.txt
new file mode 100644 (file)
index 0000000..48ef908
--- /dev/null
@@ -0,0 +1,137 @@
+include(CMakeParseArguments)
+function(add_npm_command)
+  set(options NODEENV)
+  set(single_kw OUTPUT COMMENT WORKING_DIRECTORY)
+  set(multi_kw COMMAND DEPENDS)
+  cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN})
+  string(REPLACE ";" " " command "${NC_COMMAND}")
+  if(NC_NODEENV)
+    string(REGEX REPLACE "^(.*(npm|npx) .*)$" ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" command ${command})
+  endif()
+  string(REPLACE " " ";" command "${command}")
+  add_custom_command(
+    OUTPUT "${NC_OUTPUT}"
+    COMMAND ${command}
+    DEPENDS ${NC_DEPENDS}
+    WORKING_DIRECTORY "${NC_WORKING_DIRECTORY}"
+    COMMENT ${NC_COMMENT})
+  set_property(DIRECTORY APPEND
+    PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${NC_OUTPUT}")
+endfunction(add_npm_command)
+
+function(add_npm_options)
+  set(commands)
+  cmake_parse_arguments(NC "" "NODEENV_DIR;TARGET" "OPTION" ${ARGN})
+  foreach(opt ${NC_OPTION})
+    string(REPLACE "=" ";" opt ${opt})
+    list(GET opt 0 key)
+    list(GET opt 1 value)
+    list(APPEND commands
+      COMMAND
+      . ${NC_NODEENV_DIR}/bin/activate &&
+      npm config set ${key} ${value} --userconfig ${NC_NODEENV_DIR}/.npmrc &&
+      deactivate)
+  endforeach()
+  add_custom_target(${NC_TARGET}
+    ${commands}
+    DEPENDS ${NC_NODEENV_DIR}/bin/npm
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+endfunction(add_npm_options)
+
+if(WITH_SYSTEM_NPM)
+  set(mgr-dashboard-nodeenv-dir )
+  set(nodeenv "")
+  add_custom_target(mgr-dashboard-frontend-deps
+    DEPENDS node_modules
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+else(WITH_SYSTEM_NPM)
+  set(mgr-dashboard-nodeenv-dir ${CMAKE_CURRENT_BINARY_DIR}/node-env)
+  set(nodeenv NODEENV)
+  set(mgr-dashboard-userconfig --userconfig ${mgr-dashboard-nodeenv-dir}/.npmrc)
+  if(DEFINED ENV{NODE_MIRROR})
+    set(node_mirror_opt "--mirror=$ENV{NODE_MIRROR}")
+  endif()
+  add_custom_command(
+    OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
+    COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
+    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
+    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=12.18.2
+    COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    COMMENT "dashboard nodeenv is being installed")
+  if(DEFINED ENV{NPM_REGISTRY})
+    set(npm_registry_opts "OPTION" "registry=$ENV{NPM_REGISTRY}")
+  endif()
+  add_npm_options(
+    NODEENV_DIR ${mgr-dashboard-nodeenv-dir}
+    TARGET mgr-dashboard-nodeenv
+    OPTION python=${MGR_PYTHON_EXECUTABLE}
+    OPTION cache=${mgr-dashboard-nodeenv-dir}/.npm
+    ${npm_registry_opts})
+  add_custom_target(mgr-dashboard-frontend-deps
+    DEPENDS node_modules mgr-dashboard-nodeenv
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+endif(WITH_SYSTEM_NPM)
+
+add_npm_command(
+  OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/node_modules"
+  COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false npm ci ${mgr-dashboard-userconfig}
+  DEPENDS package.json
+  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+  COMMENT "dashboard frontend dependencies are being installed"
+  ${nodeenv})
+
+# Glob some frontend files.
+file(
+  GLOB_RECURSE frontend_src
+  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+  src/*.ts
+  src/*.html)
+
+# these files are generated during build
+list(REMOVE_ITEM frontend_src
+  src/environments/environment.prod.ts
+  src/environments/environment.ts)
+
+execute_process(
+    COMMAND bash -c "jq -r .config.locale ${CMAKE_CURRENT_SOURCE_DIR}/package.json"
+    OUTPUT_VARIABLE default_lang
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+set(frontend_dist_dir "${CMAKE_CURRENT_BINARY_DIR}/dist")
+set(npm_args "--output-path ${frontend_dist_dir}")
+if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
+  string(APPEND npm_args " --prod --progress=false")
+else()
+  string(APPEND npm_args " --progress=false")
+endif()
+
+add_npm_command(
+  OUTPUT "${frontend_dist_dir}"
+  COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" npm run build:localize -- ${npm_args}
+  DEPENDS ${frontend_src} node_modules
+  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+  COMMENT "dashboard frontend is being created"
+  ${nodeenv})
+
+add_custom_command(
+  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/package.json
+  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/package.json
+  COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    ${CMAKE_CURRENT_SOURCE_DIR}/package.json
+    ${CMAKE_CURRENT_BINARY_DIR}/package.json)
+
+add_custom_target(mgr-dashboard-frontend-build
+  ALL
+  DEPENDS
+    ${frontend_dist_dir}
+    ${CMAKE_CURRENT_BINARY_DIR}/package.json
+    mgr-dashboard-frontend-deps
+  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+add_dependencies(tests mgr-dashboard-frontend-build)
+
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist
+  DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/package.json
+  DESTINATION ${CEPH_INSTALL_DATADIR}/mgr/dashboard/frontend)
index c375d677812e4e48b8138f90533de8668ef06d61..2c82069f996400a46eec64cec4ddde88de9391b2 100755 (executable)
@@ -83,7 +83,7 @@ DASH_DIR=`pwd`
 cd ../../../../${BUILD_DIR}
 FULL_PATH_BUILD_DIR=`pwd`
 
-[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/node-env/bin/activate
+[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/frontend/node-env/bin/activate
 
 : ${CYPRESS_CACHE_FOLDER:="${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/cypress"}
 
index 2cfb81fb5182b20b6673d211e8f3047236763abb..8432c6f9546bfc661058af3961d007bb3cfbedaf 100755 (executable)
@@ -7,7 +7,7 @@ SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
 cd $CEPH_ROOT/src/pybind/mgr/dashboard/frontend
 [ -z "$BUILD_DIR" ] && BUILD_DIR=build
 if [ `uname` != "FreeBSD" ]; then
-  .  $CEPH_ROOT/${BUILD_DIR}/src/pybind/mgr/dashboard/node-env/bin/activate
+  .  $CEPH_ROOT/${BUILD_DIR}/src/pybind/mgr/dashboard/frontend/node-env/bin/activate
 fi
 
 # Build