diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a09057a2..95841a7c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -142,6 +142,7 @@ jobs: | docker exec -i $CONTAINER iris session iris -UUSER docker logs $CONTAINER docker stop $CONTAINER + # NOTE: commented out until 0.7.1 is released. # - name: Clean install current version and test new one. # timeout-minutes: 15 # run: | @@ -171,13 +172,13 @@ jobs: run: | curl http://localhost:52773/registry/packages/-/all | jq curl http://localhost:52773/registry/packages/zpm/ | jq - ASSET_NAME='zpm-0.7.1-beta.3.xml' + ASSET_NAME='zpm-0.7.1-beta.4.xml' ASSET_URL=`wget --header "Authorization: token ${GITHUB_TOKEN}" -qO- https://api.github.com/repos/intersystems/ipm/releases | jq -r ".[].assets[] | select(.name == \"${ASSET_NAME}\") | .browser_download_url"` wget $ASSET_URL -O /tmp/zpm.xml docker run --network zpm --rm -d ${{ steps.image.outputs.name }} ${{ steps.image.outputs.flags }} CONTAINER=`docker ps -lq` docker cp /tmp/zpm.xml $CONTAINER:/home/irisowner/zpm.xml - docker cp tests/migration/v0.7-to-v0.9/ $CONTAINER:/tmp/test-package/ + docker cp tests/migration/v0.7-to-v0.9/. $CONTAINER:/tmp/test-package/ sleep 5; docker exec $CONTAINER /usr/irissys/dev/Cloud/ICM/waitISC.sh /bin/echo -e '' \ 'set sc = ##class(%SYSTEM.OBJ).Load("/home/irisowner/zpm.xml", "ck")\n' \ @@ -196,8 +197,9 @@ jobs: timeout-minutes: 15 run: | wget http://localhost:52773/registry/packages/zpm/latest/installer -O /tmp/zpm.xml - docker run --network zpm --rm -d -v /tmp/zpm.xml:/home/irisowner/zpm.xml ${{ steps.image.outputs.name }} ${{ steps.image.outputs.flags }} + docker run --network zpm --rm -d ${{ steps.image.outputs.name }} ${{ steps.image.outputs.flags }} CONTAINER=`docker ps -lq` + docker cp /tmp/zpm.xml $CONTAINER:/home/irisowner/zpm.xml sleep 5; docker exec $CONTAINER /usr/irissys/dev/Cloud/ICM/waitISC.sh /bin/echo -e '' \ 'set sc = ##class(%SYSTEM.OBJ).Load("/home/irisowner/zpm.xml", "ck")\n' \ diff --git a/docker-compose.yml b/docker-compose.yml index 3047d126..f1b5f5b9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,9 +25,9 @@ services: - IRISUSERNAME=admin - IRISNAMESPACE=REGISTRY volumes: - - ./setup-registry.sh:/docker-entrypoint-initdb.d/setup-registry.sh + - ./scripts/setup-registry.sh:/docker-entrypoint-initdb.d/setup-registry.sh sandbox: - image: intersystems/iris-community:preview + build: ./tests/sandbox/ restart: always ports: - 52776:52773 @@ -35,3 +35,6 @@ services: - IRISPASSWORD=SYS - IRISUSERNAME=admin - IRISNAMESPACE=USER + volumes: + - ./:/home/irisowner/zpm/ + - ./tests/sandbox/:/home/irisowner/sandbox/ \ No newline at end of file diff --git a/iris.script b/iris.script index 85022f82..f417d5e9 100644 --- a/iris.script +++ b/iris.script @@ -1,5 +1,5 @@ zn "USER" - do $System.OBJ.Load("/home/irisowner/zpm/Installer.cls","ck") + do $System.OBJ.Load("/home/irisowner/zpm/preload/cls/IPM/Installer.cls","ck") do ##class(IPM.Installer).setup("/home/irisowner/zpm/",3) zpm "repo -r -name registry -url https://pm.community.intersystems.com/" halt diff --git a/module.xml b/module.xml index d63cdb84..2a632ba1 100644 --- a/module.xml +++ b/module.xml @@ -2,7 +2,7 @@ ZPM - 0.9.0+snapshot + 0.9.0-SNAPSHOT Package Management System Provides development tools and infrastructure for defining, building, distributing, and installing modules and applications. Package Manager @@ -14,9 +14,12 @@ + + + ${verbose} diff --git a/Installer.cls b/preload/cls/IPM/Installer.cls similarity index 86% rename from Installer.cls rename to preload/cls/IPM/Installer.cls index 137f83ba..7f6cb3a4 100644 --- a/Installer.cls +++ b/preload/cls/IPM/Installer.cls @@ -40,6 +40,18 @@ XData PM [ XMLNamespace = INSTALLER ] } +XData MapOnly [ XMLNamespace = INSTALLER ] +{ + + + + + + + + +} + /// This is a method generator whose code is generated by XGL. ClassMethod setup(ByRef pVars, pLogLevel As %Integer, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] { @@ -56,6 +68,21 @@ ClassMethod setup(ByRef pVars, pLogLevel As %Integer, pInstaller As %Installer.I Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "PM") } +ClassMethod Map(ByRef pVars, pLogLevel As %Integer, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] +{ + #; Let our XGL document generate code for this method. + Do %code.WriteLine(" Set pVars(""CURNS"")=$namespace") + Do %code.WriteLine(" Set prevNS = $namespace") + Do %code.WriteLine(" New $Namespace") + Do %code.WriteLine(" Set $Namespace = ""%SYS"" ") + Do %code.WriteLine(" Kill properties") + Do %code.WriteLine(" Set sc = ##class(Config.Namespaces).Get(prevNS, .properties)") + Do %code.WriteLine(" Set pVars(""CURNSRoutineDB"")=$Get(properties(""Routines""))") + Do %code.WriteLine(" Set pVars(""CURNSGlobalDB"")=$Get(properties(""Globals""))") + Do %code.WriteLine(" If ##class(Config.MapPackages).Exists(prevNS,""%IPM"") { Quit $$$OK }") + Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "MapOnly") +} + ClassMethod AsyncSetup(Args...) { Try { @@ -88,7 +115,7 @@ ClassMethod ZPMCompile() Quit ##class(%IPM.Main).Shell("ZPM compile") } -ClassMethod CreateProjection(classname As %String, ByRef parameters As %String, modified As %String, qstruct) As %Status +ClassMethod EndCompile(qstruct) As %Status { #; Behave as simple installer If (..#FILESCOUNT'>0)||(..#VERSION="") QUIT $$$OK diff --git a/setup-registry.sh b/scripts/setup-registry.sh old mode 100755 new mode 100644 similarity index 100% rename from setup-registry.sh rename to scripts/setup-registry.sh diff --git a/tests/sandbox/Dockerfile b/tests/sandbox/Dockerfile new file mode 100644 index 00000000..29c7ee93 --- /dev/null +++ b/tests/sandbox/Dockerfile @@ -0,0 +1,9 @@ +ARG BASE=containers.intersystems.com/intersystems/iris-community:2024.1 +FROM ${BASE} + +USER root + +RUN apt-get update \ + && apt-get install -y jq + +USER irisowner \ No newline at end of file diff --git a/tests/sandbox/install-artifact.sh b/tests/sandbox/install-artifact.sh new file mode 100644 index 00000000..bd87e609 --- /dev/null +++ b/tests/sandbox/install-artifact.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +if [ -z $1 ]; then + echo "Enter filename of a previous IPM release asset to install: " + read ASSET_NAME +else + ASSET_NAME=$1 +fi + +if [ "$ASSET_NAME" = "local" ]; then + ASSET_URL="http://registry:52773/registry/packages/zpm/latest/installer" +else + ASSET_URL=`wget -qO- https://api.github.com/repos/intersystems/ipm/releases | jq -r ".[].assets[] | select(.name == \"${ASSET_NAME}\") | .browser_download_url"` + if [ "$ASSET_URL" = "" ]; then + echo "Asset ${ASSET_NAME} not found." + exit + fi +fi +wget $ASSET_URL -O /home/irisowner/zpm.xml +/bin/echo " +set sc = ##class(%SYSTEM.OBJ).Load(\"/home/irisowner/zpm.xml\", \"ck\") +zpm \"list\":1 +zpm \"repo -r -name registry -url http://registry:52773/registry/ -username admin -password SYS\":1 +halt +" | iris session iris -UUSER \ No newline at end of file diff --git a/tests/sandbox/zpm.xml b/tests/sandbox/zpm.xml new file mode 100644 index 00000000..888a81c8 --- /dev/null +++ b/tests/sandbox/zpm.xml @@ -0,0 +1,6485 @@ + + + +%Projection.AbstractProjection +66956,48401.427978796 + + +Installer + + + + +Version used for autoinstall release +0.9.0 + + + + +Number of files for autoinstall release +145 + + + + +Application Definition +INSTALLER + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +INSTALLER + + + + + + + + +]]> + + + + +This is a method generator whose code is generated by XGL. +1 +1 +objectgenerator + +%Status + + + + +1 +1 +objectgenerator + +%Status + + + + +1 +Args... + + + + +1 +pRegistry:%String="",pAnalyticsTrackingID:%String="" + + + + +1 +pDirectoryName + + + + +1 + + + + +1 + +%Status +0)||(..#VERSION="") QUIT $$$OK + + #; This flag used in development + if $DATA(^%IPM("skipinstall")) QUIT $$$OK + + #; Installed version newer + if '..NeedInstall() QUIT $$$OK + + Write !,"Extract package" + $$$QuitOnError(..ExtractPackage(.tModDir)) + + Write !,"Install ZPM" + + set ts = $ZHOROLOG + set logFile = ##class(%File).TempFilename() + JOB ..AsyncSetup(tModDir, 3):(:::logFile):0 + if '$test { + quit $$$ERROR($$$GeneralError, "Job did not start") + } + + #; Wait setup + set child=$zchild + Set tSC = $$$OK + do { + hang 1 + Set $Listbuild(res, tSC) = $System.Event.WaitMsg("", 10) + Quit:res=1 + } while $data(^$JOB(child)) + + set fs=##class(%Stream.FileCharacter).%New() + set fs.Filename=logFile + while 'fs.AtEnd { + write !,fs.ReadLine() + } + if ##class(%File).Delete(logFile) + + Write !,"Time spent ",$ZHOROLOG - ts + + QUIT tSC +]]> + + + + +Check currently installed version, if any +1 +*version:%String + + + + +1 +pPackagePath:%String,pInstaller:%String + + + + +1 + +%Status + + + + +1 +pPath:%String,*pList,pRoot:%String + + + + +1 + +%Status + + + + +1 +*pFolder:%String +%String + + + + + +module.xml + + + + + +preload/src/cls/IPM/Installer.cls + + + + + +src/cls/IPM/CLI/Commands.cls + + + + + +src/cls/IPM/CLI.cls + + + + + +src/cls/IPM/DataType/GlobalReference.cls + + + + + +src/cls/IPM/DataType/ListOfOptions.cls + + + + + +src/cls/IPM/DataType/ModuleName.cls + + + + + +src/cls/IPM/DataType/RegExString.cls + + + + + +src/cls/IPM/DataType/ResourceName.cls + + + + + +src/cls/IPM/DependencyAnalyzer.cls + + + + + +src/cls/IPM/ExtensionBase/Composite.cls + + + + + +src/cls/IPM/ExtensionBase/CompositeMethodOverrides.cls + + + + + +src/cls/IPM/ExtensionBase/Constants.cls + + + + + +src/cls/IPM/ExtensionBase/ResourceMappingCache.cls + + + + + +src/cls/IPM/ExtensionBase/ServerMenu/Interface.cls + + + + + +src/cls/IPM/ExtensionBase/SourceControl/Interface.cls + + + + + +src/cls/IPM/ExtensionBase/SourceControl/ResourceInfo.cls + + + + + +src/cls/IPM/ExtensionBase/UniversalSettings.cls + + + + + +src/cls/IPM/ExtensionBase/Utils.cls + + + + + +src/cls/IPM/General/AbstractSettings.cls + + + + + +src/cls/IPM/General/Archive.cls + + + + + +src/cls/IPM/General/IConfigurable.cls + + + + + +src/cls/IPM/General/InstallContext.cls + + + + + +src/cls/IPM/General/LogManager/Message.cls + + + + + +src/cls/IPM/General/LogManager.cls + + + + + +src/cls/IPM/General/ModuleInfo.cls + + + + + +src/cls/IPM/General/SASchema.cls + + + + + +src/cls/IPM/General/SemanticVersion/Find.cls + + + + + +src/cls/IPM/General/SemanticVersion/Index.cls + + + + + +src/cls/IPM/General/SemanticVersion.cls + + + + + +src/cls/IPM/General/SemanticVersionExpression/Comparator.cls + + + + + +src/cls/IPM/General/SemanticVersionExpression/Range.cls + + + + + +src/cls/IPM/General/SemanticVersionExpression.cls + + + + + +src/cls/IPM/General/Settings.cls + + + + + +src/cls/IPM/General/Singleton.cls + + + + + +src/cls/IPM/JSON/Adaptor.cls + + + + + +src/cls/IPM/JSON/Generator.cls + + + + + +src/cls/IPM/Lifecycle/Base.cls + + + + + +src/cls/IPM/Lifecycle/DeployedModule.cls + + + + + +src/cls/IPM/Lifecycle/Module.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject/ContainerClass.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject/XDataArchive/FileBinary.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject/XDataArchive/FileCharacter.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject/XDataArchive/IFile.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject/XDataArchive.cls + + + + + +src/cls/IPM/Lifecycle/StudioProject.cls + + + + + +src/cls/IPM/Main.cls + + + + + +src/cls/IPM/Repo/Definition.cls + + + + + +src/cls/IPM/Repo/Filesystem/Cache.cls + + + + + +src/cls/IPM/Repo/Filesystem/Definition.cls + + + + + +src/cls/IPM/Repo/Filesystem/PackageService.cls + + + + + +src/cls/IPM/Repo/IPackageService.cls + + + + + +src/cls/IPM/Repo/IPublishService.cls + + + + + +src/cls/IPM/Repo/Manager.cls + + + + + +src/cls/IPM/Repo/Remote/Definition.cls + + + + + +src/cls/IPM/Repo/Remote/ModuleInfo.cls + + + + + +src/cls/IPM/Repo/Remote/PackageService.cls + + + + + +src/cls/IPM/Repo/Remote/PublishManager.cls + + + + + +src/cls/IPM/Repo/Remote/PublishService.cls + + + + + +src/cls/IPM/Repo/SearchCriteria.cls + + + + + +src/cls/IPM/Repo/UniversalSettings.cls + + + + + +src/cls/IPM/Repo/Utils.cls + + + + + +src/cls/IPM/Repo/XSLTProvider.cls + + + + + +src/cls/IPM/ResourceProcessor/Abstract.cls + + + + + +src/cls/IPM/ResourceProcessor/AbstractCompilable.cls + + + + + +src/cls/IPM/ResourceProcessor/Copy.cls + + + + + +src/cls/IPM/ResourceProcessor/CSPApplication.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Class.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/DeepSeeItem.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Document.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Global.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Include.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Interoperability.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/LocalizedMessages.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Package.cls + + + + + +src/cls/IPM/ResourceProcessor/Default/Routine.cls + + + + + +src/cls/IPM/ResourceProcessor/FileCopy.cls + + + + + +src/cls/IPM/ResourceProcessor/LegacyLocalizedMessages.cls + + + + + +src/cls/IPM/ResourceProcessor/LocalizationExport/MsgDomain.cls + + + + + +src/cls/IPM/ResourceProcessor/LocalizationExport/MsgFile.cls + + + + + +src/cls/IPM/ResourceProcessor/LocalizationExport.cls + + + + + +src/cls/IPM/ResourceProcessor/ModuleExport.cls + + + + + +src/cls/IPM/ResourceProcessor/PropertyParameters.cls + + + + + +src/cls/IPM/ResourceProcessor/Test.cls + + + + + +src/cls/IPM/ResourceProcessor/UnitTest.cls + + + + + +src/cls/IPM/Storage/InvokeReference.cls + + + + + +src/cls/IPM/Storage/LoadedResource.cls + + + + + +src/cls/IPM/Storage/MappingReference.cls + + + + + +src/cls/IPM/Storage/Module.cls + + + + + +src/cls/IPM/Storage/ModuleAuthorInfo.cls + + + + + +src/cls/IPM/Storage/ModuleInfo.cls + + + + + +src/cls/IPM/Storage/ModuleReference.cls + + + + + +src/cls/IPM/Storage/ModuleSetting/Default.cls + + + + + +src/cls/IPM/Storage/ModuleSetting/NamespaceConfig.cls + + + + + +src/cls/IPM/Storage/ModuleSetting/Parameter.cls + + + + + +src/cls/IPM/Storage/ModuleSetting/ProcessorDefault/Condition.cls + + + + + +src/cls/IPM/Storage/ModuleSetting/ProcessorDefault.cls + + + + + +src/cls/IPM/Storage/ModuleSetting.cls + + + + + +src/cls/IPM/Storage/ModuleTemplate.cls + + + + + +src/cls/IPM/Storage/QualifiedModuleInfo.cls + + + + + +src/cls/IPM/Storage/ResourceReference.cls + + + + + +src/cls/IPM/Storage/SystemRequirements.cls + + + + + +src/cls/IPM/StudioDocument/Abstract.cls + + + + + +src/cls/IPM/StudioDocument/AbstractStream.cls + + + + + +src/cls/IPM/StudioDocument/LocalizedMessages.cls + + + + + +src/cls/IPM/StudioDocument/LocalizedMessageStream.cls + + + + + +src/cls/IPM/StudioDocument/Module.cls + + + + + +src/cls/IPM/StudioDocument/ModuleStream.cls + + + + + +src/cls/IPM/StudioDocument/Projection.cls + + + + + +src/cls/IPM/Test/JUnitOutput.cls + + + + + +src/cls/IPM/Test/Manager.cls + + + + + +src/cls/IPM/Test/Utils.cls + + + + + +src/cls/IPM/Utils/Build.cls + + + + + +src/cls/IPM/Utils/Class.cls + + + + + +src/cls/IPM/Utils/CodeGeneration.cls + + + + + +src/cls/IPM/Utils/ComparisonAdaptor/PropertyParams.cls + + + + + +src/cls/IPM/Utils/ComparisonAdaptor.cls + + + + + +src/cls/IPM/Utils/File.cls + + + + + +src/cls/IPM/Utils/FileBinaryTar.cls + + + + + +src/cls/IPM/Utils/InterruptManager.cls + + + + + +src/cls/IPM/Utils/JournalManager.cls + + + + + +src/cls/IPM/Utils/LockManager.cls + + + + + +src/cls/IPM/Utils/Migration.cls + + + + + +src/cls/IPM/Utils/Module.cls + + + + + +src/cls/IPM/Utils/TempFileManager.cls + + + + + +src/cls/IPM/Utils/XMLCommentHandler.cls + + + + + +src/inc/IPM/Common.inc + + + + + +src/inc/IPM/Formatting.inc + + + + + +tests/integration_tests/Test/PM/Integration/Base.cls + + + + + +tests/integration_tests/Test/PM/Integration/ClientServer.cls + + + + + +tests/integration_tests/Test/PM/Integration/DependencyResolution.cls + + + + + +tests/integration_tests/Test/PM/Integration/InstallApplication.cls + + + + + +tests/integration_tests/Test/PM/Integration/InstallModule.cls + + + + + +tests/integration_tests/Test/PM/Integration/Resources.cls + + + + + +tests/integration_tests/Test/PM/Integration/Scopes.cls + + + + + +tests/integration_tests/Test/PM/Integration/StandaloneFormBuilder.cls + + + + + +tests/unit_tests/Test/PM/Unit/Annotations.cls + + + + + +tests/unit_tests/Test/PM/Unit/Archive.cls + + + + + +tests/unit_tests/Test/PM/Unit/CLI.cls + + + + + +tests/unit_tests/Test/PM/Unit/CSPSecurity.cls + + + + + +tests/unit_tests/Test/PM/Unit/Module.cls + + + + + +tests/unit_tests/Test/PM/Unit/ResourceProcessor/AttributeMetadata.cls + + + + + +tests/unit_tests/Test/PM/Unit/ResourceReference.cls + + + + + +tests/unit_tests/Test/PM/Unit/SemVer/Expressions.cls + + + + + +tests/unit_tests/Test/PM/Unit/SemVer/Versions.cls + + + +