blob: 2527ef23e85e5cd2d83e38ef475e23a96fd11431 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
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 .*)$"
". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate"
command ${command})
else()
string(REGEX REPLACE
"^([^ ]=[^ ] )*npm (.*)$"
"\\1${NPM_EXECUTABLE} \\2"
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()
set(npm_config_python ${MGR_PYTHON_EXECUTABLE})
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=18.17.0
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 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 -f ${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 " --configuration=production --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)
|