From fd8f013b377b419d9a177f5dd00c94fcdc40a2ca Mon Sep 17 00:00:00 2001 From: Ted Humphrey Date: Tue, 2 Jun 2020 09:39:30 -0400 Subject: [PATCH] Add check to maven pom.xml for verifying integrity of ui-react-lib A new shell script is introduced for verifying that ui-react-lib/libIndex.js is faithfully synchronized with components maintained in ui-react/src, in order to provide an NPM onap-clamp-ui-lib Issue-ID: CLAMP-669 Change-Id: I48eb979e3fbe110b718b96c0fcee08a2ced7a36b Signed-off-by: Ted Humphrey --- pom.xml | 20 ++++++ src/main/script/checkLibIndex.sh | 122 +++++++++++++++++++++++++++++++++++ ui-react-lib/libExportExclusions.dat | 4 ++ ui-react-lib/libIndex.js | 11 ++-- 4 files changed, 152 insertions(+), 5 deletions(-) create mode 100755 src/main/script/checkLibIndex.sh create mode 100644 ui-react-lib/libExportExclusions.dat diff --git a/pom.xml b/pom.xml index 5a154098..c15b5425 100644 --- a/pom.xml +++ b/pom.xml @@ -1264,6 +1264,26 @@ sonar-maven-plugin 3.7.0.1746 + + org.codehaus.mojo + exec-maven-plugin + 1.3.2 + + + libIndexCheck + validate + + exec + + + + + bash + + ${project.basedir}/src/main/script/checkLibIndex.sh + + + diff --git a/src/main/script/checkLibIndex.sh b/src/main/script/checkLibIndex.sh new file mode 100755 index 00000000..9a28e7df --- /dev/null +++ b/src/main/script/checkLibIndex.sh @@ -0,0 +1,122 @@ +#!/bin/bash +### +# ============LICENSE_START======================================================= +# ONAP CLAMP +# ================================================================================ +# Copyright (C) 2020 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### + +baseDir=$(git rev-parse --show-toplevel) + +if [[ ! -d $baseDir ]] +then + echo "[ERROR] failed to determine git base directory" + exit 1 +fi + +tmpSrcFileList=/tmp/upldateLibIndex.$$.list +reactUiBaseDir="${baseDir}/ui-react" +reactLibIndexFile="ui-react-lib/libIndex.js" +exclusionList="ui-react-lib/libExportExclusions.dat" + + +if [[ ! -d "$reactUiBaseDir" ]] +then + echo "[ERROR] reacUiBaseDir=$reacUiBaseDir is not accessible" + exit 1 +fi + +if [[ ! -d "$baseDir/$reactLibBaseDir" ]] +then + echo "[ERROR] reactLibBaseDir=$baseDir/$reactLibBaseDir is not accessible" + exit 1 +fi + +if [[ ! -r "$baseDir/$reactLibIndexFile" ]] +then + echo "[ERROR] file reactLibIndexFile=$baseDir/$reactLibIndexFile is not accessible" + exit 1 +fi + + +if ! cd $reactUiBaseDir +then + echo "[ERROR] could not cd to reactUiBaseDir=$reactUiBaseDir" + exit 1 +fi + +find ./src -name \*.js | egrep -v "__snapshot|\.test\." 2>/dev/null | sed 's/.js$//' > $tmpSrcFileList + +if [[ ! -s $tmpSrcFileList ]] +then + echo "[ERROR] no source files found in reactUiBaseDir=$reactUiBaseDir" + rm -f $tmpSrcFileList + exit 1 +fi + +export nErrors=0 + +# Verify that any .js file found within ui-react/src other than test related files +# is also referenced in ui-react-lib/libIndex.js + +for srcFileName in `<$tmpSrcFileList` +do + if [[ -r "$baseDir/$exclusionList" ]] + then + if grep $srcFileName $baseDir/$exclusionList >/dev/null 2>&1 + then + continue + fi + fi + + if ! grep $srcFileName "$baseDir/$reactLibIndexFile" > /dev/null 2>&1 + then + echo "[ERROR] file=${srcFileName}.js is not declared in $reactLibIndexFile" + echo "[ERROR] and not found in exclsionList=${exclusionList}." + echo "[ERROR] Please either add it to $reactLibIndexFile" + echo "[ERROR] or to the exclusion list in ${exclusionList}." + echo "" + (( nErrors++ )) + fi +done + +# Verify for each entry in ui-react-lib/libIndex.js, that the referenced source file exists +# in ui-react/src; if not, developer probably forgot to remove it from libIndex.js. + +egrep '^export ' $baseDir/$reactLibIndexFile |\ +sed -e "s+.*\./src+./src+" -e "s+'.*+.js+" > $tmpSrcFileList + +for srcFileName in `<$tmpSrcFileList` +do + if [[ ! -r "$srcFileName" ]] + then + echo "[ERROR] source file=$srcFileName in libIndex.js is not accessible" + (( nErrors++ )) + fi +done + +rm -f $tmpSrcFileList + +if (( nErrors == 0 )) +then + echo "[INFO] $reactLibIndexFile passes sanity check" + exit 0 +fi + +exit $nErrors diff --git a/ui-react-lib/libExportExclusions.dat b/ui-react-lib/libExportExclusions.dat new file mode 100644 index 00000000..7194fc2a --- /dev/null +++ b/ui-react-lib/libExportExclusions.dat @@ -0,0 +1,4 @@ +./src/theme/globalStyle.js +./src/index.js +./src/setupTests.js +./src/OnapClamp.js diff --git a/ui-react-lib/libIndex.js b/ui-react-lib/libIndex.js index da98df43..9653fb01 100755 --- a/ui-react-lib/libIndex.js +++ b/ui-react-lib/libIndex.js @@ -22,30 +22,31 @@ */ export { default as ConfigurationPolicyModal } from './src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal'; -export { default as PolicyModal } from './src/components/dialogs/Policy/PolicyModal'; +export { default as CreateLoopModal } from './src/components/dialogs/Loop/CreateLoopModal'; +export { default as CreateLoopModal } from './src/components/dialogs/Loop/CreateLoopModal'; export { default as DeployLoopModal } from './src/components/dialogs/Loop/DeployLoopModal'; export { default as LoopActionService } from './src/api/LoopActionService'; export { default as LoopCache } from './src/api/LoopCache'; -export { default as LoopComponentConverter } from './src/components/loop_viewer/svg/LoopComponentConverter'; export { default as LoopLogs } from './src/components/loop_viewer/logs/LoopLogs'; export { default as LoopPropertiesModal } from './src/components/dialogs/Loop/LoopPropertiesModal'; export { default as LoopService } from './src/api/LoopService'; export { default as LoopStatus } from './src/components/loop_viewer/status/LoopStatus'; -export { default as LoopSvg } from './src/components/loop_viewer/svg/LoopSvg'; export { default as LoopUI } from './src/LoopUI'; export { default as ManageDictionaries } from './src/components/dialogs/ManageDictionaries/ManageDictionaries'; export { default as MenuBar } from './src/components/menu/MenuBar'; export { default as ModifyLoopModal } from './src/components/dialogs/Loop/ModifyLoopModal'; export { default as NotFound } from './src/NotFound'; +export { default as OnapConstants } from './src/utils/OnapConstants'; export { default as OpenLoopModal } from './src/components/dialogs/Loop/OpenLoopModal'; -export { default as CreateLoopModal } from './src/components/dialogs/Loop/CreateLoopModal'; export { default as OperationalPolicyModal } from './src/components/dialogs/OperationalPolicy/OperationalPolicyModal'; export { default as PerformActions } from './src/components/dialogs/PerformActions'; +export { default as PolicyModal } from './src/components/dialogs/Policy/PolicyModal'; export { default as PolicyToscaService } from './src/api/PolicyToscaService'; export { default as RefreshStatus } from './src/components/dialogs/RefreshStatus'; +export { default as SvgGenerator } from './src/components/loop_viewer/svg/SvgGenerator'; export { default as TemplateService } from './src/api/TemplateService'; +export { default as UploadToscaPolicyModal } from './src/components/dialogs/Tosca/UploadToscaPolicyModal'; export { default as UserInfoModal } from './src/components/dialogs/UserInfoModal'; export { default as UserService } from './src/api/UserService'; -export { default as UploadToscaPolicyModal } from './src/components/dialogs/Tosca/UploadToscaPolicyModal'; export { default as ViewLoopTemplatesModal } from './src/components/dialogs/Tosca/ViewLoopTemplatesModal'; export { default as ViewToscaPolicyModal } from './src/components/dialogs/Tosca/ViewToscaPolicyModal'; -- 2.16.6