]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
Add ant tasks to build ui packages from source. (#320)
authorRay Lee <ray.lee@lyrasis.org>
Thu, 23 Mar 2023 03:26:30 +0000 (23:26 -0400)
committerGitHub <noreply@github.com>
Thu, 23 Mar 2023 03:26:30 +0000 (23:26 -0400)
12 files changed:
.gitignore
build.properties
cspace-ui/anthro/build.properties
cspace-ui/bonsai/build.properties
cspace-ui/botgarden/build.properties
cspace-ui/build.xml
cspace-ui/build_js.sh [new file with mode: 0644]
cspace-ui/fcart/build.properties
cspace-ui/herbarium/build.properties
cspace-ui/lhmc/build.properties
cspace-ui/materials/build.properties
cspace-ui/publicart/build.properties

index 0c7bcc5685291328f0a09c9ceb3220568c3ae7dd..479e62cfc58f0548e75db779017b191bb09688e5 100644 (file)
@@ -6,6 +6,7 @@
 dev-master.xml
 .metadata/
 *tenant-bindings.merged.xml
+build
 target
 .settings
 .classpath
@@ -17,4 +18,4 @@ target
 m2-settings.xml
 *.log
 cspace-app-perflog.csv
-.flattened-pom.xml
\ No newline at end of file
+.flattened-pom.xml
index c02a726ca7ff2f91ae5357765b8dd86dbf62a9c9..476a4ed1a74f9f27907c4b91e7138a189dffefbb 100644 (file)
@@ -20,8 +20,11 @@ cspace.services.war=${cspace.services.context}.war
 domain.nuxeo=nuxeo-server
 
 # UI settings
+cspace.ui.package.name=cspace-ui
 cspace.ui.library.name=cspaceUI
 cspace.ui.version=7.0.0
+cspace.ui.build.branch=master
+cspace.ui.build.node.ver=14
 
 #nuxeo
 nuxeo.release=9.10-HF30
index d8fd6d44da88a0fd391c27f99b610c8c502e22b6..ffe48bca5e999d47f0e2392b289e29ab3bae2abb 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-anthro
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileAnthro
 tenant.ui.profile.plugin.version=6.0.5
+tenant.ui.profile.plugin.build.branch=master
index 0e519975d6ec32b11b1d58117cdd1e97a763fd19..589fc5e574280d2e3f2fdfe430c4d53b4a0dedea 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-bonsai
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileBonsai
 tenant.ui.profile.plugin.version=5.0.2
+tenant.ui.profile.plugin.build.branch=master
index cca27934ee972692a79f258b2f4f45d8b738ccb6..b00899d5c5b1c5491bba8de13d632277470dc07d 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-botgarden
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileBotGarden
 tenant.ui.profile.plugin.version=3.0.2
+tenant.ui.profile.plugin.build.branch=master
index 6d799d0d2191e4811fcc08ed05bbbbd69d422560..4ae1cc20d1ab30d963ecec2f77fe2b84832b4597 100644 (file)
        </scriptdef>
 
        <!-- set global properties for this build -->
-       <property name="services.trunk" value=".."/>
+       <property name="services.trunk" value=".." />
+       <property name="build.dir.name" value="build" />
+       <property name="build.dir" value="./${build.dir.name}" />
+       <property name="source.dir" value="${build.dir}/source" />
+       <property name="staging.dir" value="${build.dir}/staging" />
 
        <!-- Environment should be declared before reading build.properties -->
        <property environment="env" />
        <property file="${services.trunk}/build.properties" />
+       <propertycopy name="cspace.ui.build" from="env.CSPACE_UI_BUILD" />
 
-       <property name="cspace.ui.filename" value="${cspace.ui.library.name}@${cspace.ui.version}.min.js" />
+       <target name="clean">
+               <delete includeEmptyDirs="true">
+                       <fileset dir="." includes="**/${build.dir.name}/" defaultexcludes="no" />
+               </delete>
+       </target>
 
-       <target name="deploy_cspace_ui_js">
-               <exec executable="curl" failonerror="true">
-                       <arg line="-o ${cspace.ui.filename} --fail --insecure --remote-name --location https://unpkg.com/cspace-ui@${cspace.ui.version}/dist/${cspace.ui.library.name}.min.js"/>
+       <target name="ensure_source_dir" if="${cspace.ui.build}">
+               <mkdir dir="${source.dir}" />
+       </target>
+
+       <target name="ensure_staging_dir">
+               <mkdir dir="${staging.dir}" />
+       </target>
+
+       <target name="install_nvm" if="${cspace.ui.build}">
+               <exec executable="bash" failonerror="true">
+                       <arg value="-c" />
+                       <arg line='"curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash"' />
+               </exec>
+       </target>
+
+       <target name="install_node" depends="install_nvm" if="${cspace.ui.build}">
+               <exec executable="bash" failonerror="true">
+                       <arg value="-c" />
+                       <arg value='source "$HOME/.nvm/nvm.sh" &amp;&amp; nvm install ${cspace.ui.build.node.ver} &amp;&amp; nvm use ${cspace.ui.build.node.ver} &amp;&amp; nvm install-latest-npm' />
                </exec>
+       </target>
 
-               <move file="${cspace.ui.filename}" todir="${jee.deploy.cspace.ui.shared}"></move>
+       <target name="build_cspace_ui_js" depends="ensure_staging_dir,ensure_source_dir,install_node" if="${cspace.ui.build}">
+               <exec executable="bash" failonerror="true">
+                       <arg value="-c" />
+                       <arg value="./build_js.sh ${cspace.ui.package.name} ${cspace.ui.build.branch} ${source.dir} ${staging.dir} ${cspace.ui.library.name}"/>
+               </exec>
        </target>
 
-       <target name="undeploy_cspace_ui_js" description="undeploy collectionspace ui common components from ${jee.server.cspace}">
-               <delete file="${jee.deploy.cspace.ui.shared}/${cspace.ui.filename}" />
+       <target name="download_cspace_ui_js" depends="ensure_staging_dir" unless="${cspace.ui.build}">
+               <exec executable="curl" failonerror="true">
+                       <arg line="-o ${staging.dir}/${cspace.ui.library.name}@${cspace.ui.version}.min.js --fail --insecure --location https://cdn.jsdelivr.net/npm/cspace-ui@${cspace.ui.version}/dist/${cspace.ui.library.name}.min.js"/>
+               </exec>
+       </target>
+
+       <target name="deploy_cspace_ui_js" depends="build_cspace_ui_js,download_cspace_ui_js">
+               <pathconvert property="cspace.ui.install.filename" targetos="unix">
+                       <first>
+                               <fileset dir="${staging.dir}" includes="${cspace.ui.library.name}@*.min.js" />
+                       </first>
+
+                       <mapper type="flatten" />
+               </pathconvert>
+
+               <copy file="${staging.dir}/${cspace.ui.install.filename}" todir="${jee.deploy.cspace.ui.shared}" />
        </target>
 
        <target name="deploy_tenants" depends="deploy_cspace_ui_js">
                <subant target="deploy_tenant" genericantfile="${ant.file}" inheritall="true">
-                       <dirset dir="." includes="*" />
+                       <dirset dir="." includes="*" excludes="${build.dir.name}" />
                </subant>
        </target>
 
                <propertycopy name="tenant.create.disabled" from="env.CSPACE_${tenant.shortname.upper}_CREATE_DISABLED_OPT" />
 
                <property file="${basedir}/build.properties" />
-               <property name="tenant.ui.profile.plugin.filename" value="${tenant.ui.profile.plugin.library.name}@${tenant.ui.profile.plugin.version}.min.js" />
 
                <!-- Default values, in case these weren't set in the tenant's build.properties. -->
                <property name="tenant.ui.webapp.dir" value="cspace#${tenant.shortname}" />
                <property name="tenant.ui.basename" value="/cspace/${tenant.shortname}" />
 
+               <echo message="Deploying tenant ${tenant.shortname}" />
+
                <!-- Get the configured tenant ID from tenant bindings. This will be in the property tenant:tenantBinding.id. -->
                <xmlproperty keepRoot="false" collapseAttributes="true" file="../../services/common/src/main/cspace/config/services/tenants/${tenant.shortname}/${tenant.shortname}-tenant-bindings.delta.xml" />
 
                        <isset property="tenant:tenantBinding.id"/>
                </condition>
 
-               <antcall target="deploy_tenant_js" />
                <antcall target="deploy_tenant_webapp" />
        </target>
 
-       <target name="deploy_tenant_js" if="tenant.ui.profile.plugin.package.name" unless="${tenant.create.disabled}">
+       <target name="check_build_tenant_js">
+               <condition property="should.build.tenant.js">
+                       <and>
+                               <isset property="tenant.ui.profile.plugin.package.name" />
+                               <isfalse value="${tenant.create.disabled}" />
+                               <istrue value="${cspace.ui.build}" />
+                       </and>
+               </condition>
+       </target>
+
+       <target name="build_tenant_js" depends="check_build_tenant_js,ensure_staging_dir,ensure_source_dir,install_node" if="should.build.tenant.js">
+               <fail message="Build branch not found for ${tenant.shortname}. Set the tenant.ui.profile.plugin.build.branch property in ${basedir}/build.properties.">
+                       <condition>
+                               <not>
+                                       <isset property="tenant.ui.profile.plugin.build.branch"/>
+                               </not>
+                       </condition>
+               </fail>
+
+               <exec executable="bash" failonerror="true">
+                       <arg value="-c" />
+                       <arg value="../build_js.sh ${tenant.ui.profile.plugin.package.name} ${tenant.ui.profile.plugin.build.branch} ${source.dir} ${staging.dir} ${tenant.ui.profile.plugin.library.name}"/>
+               </exec>
+       </target>
+
+       <target name="check_download_tenant_js">
+               <condition property="should.download.tenant.js">
+                       <and>
+                               <isset property="tenant.ui.profile.plugin.package.name" />
+                               <isfalse value="${tenant.create.disabled}" />
+                               <isfalse value="${cspace.ui.build}" />
+                       </and>
+               </condition>
+       </target>
+
+       <target name="download_tenant_js" depends="check_download_tenant_js,ensure_staging_dir" if="should.download.tenant.js">
                <exec executable="curl" failonerror="true">
-                       <arg line="-o ${tenant.ui.profile.plugin.filename} --fail --insecure --remote-name --location https://unpkg.com/${tenant.ui.profile.plugin.package.name}@${tenant.ui.profile.plugin.version}/dist/${tenant.ui.profile.plugin.library.name}.min.js"/>
+                       <arg line="-o ${staging.dir}/${tenant.ui.profile.plugin.library.name}@${tenant.ui.profile.plugin.version}.min.js --fail --insecure --location https://cdn.jsdelivr.net/npm/${tenant.ui.profile.plugin.package.name}@${tenant.ui.profile.plugin.version}/dist/${tenant.ui.profile.plugin.library.name}.min.js"/>
                </exec>
+       </target>
+
+       <target name="deploy_tenant_js" depends="build_tenant_js,download_tenant_js" if="tenant.ui.profile.plugin.package.name" unless="${tenant.create.disabled}">
+               <pathconvert property="tenant.ui.profile.plugin.install.filename" targetos="unix">
+                       <first>
+                               <fileset dir="${staging.dir}" includes="${tenant.ui.profile.plugin.library.name}@*.min.js" />
+                       </first>
+
+                       <mapper type="flatten" />
+               </pathconvert>
 
-               <move file="${tenant.ui.profile.plugin.filename}" todir="${jee.deploy.cspace.ui.shared}"></move>
+               <copy file="${staging.dir}/${tenant.ui.profile.plugin.install.filename}" todir="${jee.deploy.cspace.ui.shared}" />
        </target>
 
-       <target name="deploy_tenant_webapp" unless="${tenant.create.disabled}">
-               <filter token="UI_FILENAME" value="${cspace.ui.filename}" />
-               <filter token="UI_PROFILE_PLUGIN_FILENAME" value="${tenant.ui.profile.plugin.filename}" />
+       <target name="deploy_tenant_webapp" depends="deploy_tenant_js" unless="${tenant.create.disabled}">
+               <filter token="UI_FILENAME" value="${cspace.ui.install.filename}" />
+               <filter token="UI_PROFILE_PLUGIN_FILENAME" value="${tenant.ui.profile.plugin.install.filename}" />
                <filter token="UI_PROFILE_PLUGIN_LIBRARY_NAME" value="${tenant.ui.profile.plugin.library.name}" />
                <filter token="BASENAME" value="${tenant.ui.basename}" />
                <filter token="TENANT_ID" value="${resolved.tenant.id}" />
 
                <copy todir="${jee.deploy.cspace}/${tenant.ui.webapp.dir}" failonerror="false" filtering="true" overwrite="true">
-                       <fileset dir="${basedir}" excludes="build.properties" />
+                       <fileset dir="${basedir}">
+                               <exclude name="build.properties" />
+                               <exclude name="${build.dir.name}/" />
+                       </fileset>
                </copy>
        </target>
 
                <delete dir="${jee.deploy.cspace.ui.shared}" />
        </target>
 
-       <target name="deploy" depends="deploy_tenants" description="deploy cspace ui to ${jee.server.cspace}" />
+       <target name="deploy" depends="clean,deploy_tenants" description="deploy cspace ui to ${jee.server.cspace}" />
 
-       <target name="undeploy" depends="undeploy_tenants, undeploy_js" description="undeploy collectionspace ui components from ${jee.server.cspace}" />
+       <target name="undeploy" depends="undeploy_tenants,undeploy_js" description="undeploy collectionspace ui components from ${jee.server.cspace}" />
 </project>
diff --git a/cspace-ui/build_js.sh b/cspace-ui/build_js.sh
new file mode 100644 (file)
index 0000000..662572f
--- /dev/null
@@ -0,0 +1,21 @@
+#/bin/bash
+
+PACKAGE_NAME=$1
+BRANCH_NAME=$2
+CHECKOUT_DIR=$3
+OUTPUT_DIR=$4
+LIBRARY_NAME=$5
+
+CODE_DIR=$CHECKOUT_DIR/$PACKAGE_NAME.js
+
+. "$HOME/.nvm/nvm.sh"
+
+rm -r $CODE_DIR
+git clone --branch $BRANCH_NAME --depth 1 https://github.com/collectionspace/$PACKAGE_NAME.js.git $CODE_DIR
+
+pushd $CODE_DIR
+COMMIT_HASH=`git rev-parse --short HEAD`
+npm install
+popd
+
+cp $CODE_DIR/dist/*.min.js "$OUTPUT_DIR/$LIBRARY_NAME@$COMMIT_HASH.min.js"
index 323953ee94b97fc1a865b67b18013875c227a1aa..371c95acb3e17cef2ecdcee60531f51c0a9fd092 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-fcart
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileFCart
 tenant.ui.profile.plugin.version=5.0.3
+tenant.ui.profile.plugin.build.branch=master
index 8f8c1db0585967a8579c2c430e15f507d86b460f..c5e7e47035a4253ef1837f2bbf2afc1d08e8098a 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-herbarium
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileHerbarium
 tenant.ui.profile.plugin.version=2.0.2
+tenant.ui.profile.plugin.build.branch=master
index 2140998556313b93cf196a291c50a37d2f5c467a..3bf180b9ee84e8ed8b10f849bcc6bfaee72db62c 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-lhmc
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileLHMC
 tenant.ui.profile.plugin.version=5.0.3
+tenant.ui.profile.plugin.build.branch=master
index b75eaf9b4999894f6fdec5a07fab59c7a324858f..abe17514377f7023c5a8e3d62e381253523a7cc0 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-materials
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileMaterials
 tenant.ui.profile.plugin.version=3.0.3
+tenant.ui.profile.plugin.build.branch=master
index 7912523dc185b008f4af51462c84d0f1b8cf9520..830ef2d9c7d1535175d93e4d585eb56aad12e599 100644 (file)
@@ -4,3 +4,4 @@ tenant.ui.basename=/cspace/${tenant.shortname}
 tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-publicart
 tenant.ui.profile.plugin.library.name=cspaceUIPluginProfilePublicArt
 tenant.ui.profile.plugin.version=4.0.3
+tenant.ui.profile.plugin.build.branch=master