Skip to content

Adding zpm "ci" command to install from a lock file#1080

Open
isc-jlechtne wants to merge 14 commits into
mainfrom
ipm-ci
Open

Adding zpm "ci" command to install from a lock file#1080
isc-jlechtne wants to merge 14 commits into
mainfrom
ipm-ci

Conversation

@isc-jlechtne

Copy link
Copy Markdown
Collaborator

No description provided.

@isc-dchui isc-dchui left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good overall! Just a few small things. Also you'll want to add a description.

Comment thread src/cls/IPM/General/LockFile.cls Outdated
Comment thread src/cls/IPM/Main.cls Outdated
Comment thread CHANGELOG.md Outdated
Comment thread src/cls/IPM/Main.cls Outdated
Comment thread src/cls/IPM/Main.cls Outdated
set verbose = $get(commandInfo("data","Verbose"))
set log = ##class(%IPM.General.HistoryTemp).CleanInstallInit(moduleName)

// TODO: Add "path"? (see Update() for more info of calling install v load)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When is this todo being done or removed?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is being done. This was just a reminder to myself when putting up the first commit and PR for comments that I still need to account for that case.

do ##class(%IPM.Main).Shell("repo -delete -name "_orasRepo)

// Install from Module G's lock file
do ..AssertInstallFromLockFileAsExpected(..#ModuleG)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing I noticed here is that the creation of the remote and oras repositories do not include username/password values as environment variables are not set. The repositories and test do still seem to pass but does anyone know if there's a way to set them in this test or should we add them as variables to the docker-compose.yml file?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the ORAS repo doesn't require username/password and the remote one is being configured with it (see line 142)

@isc-dchui isc-dchui left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few things! Also still needs a description

set commandInfo("parameters","module") = repository_"/"_depName
set commandInfo("parameters", "version") = version
set commandInfo("data", "LockFileInstallStarted") = 1
set commandInfo("data","FromLockFile") = 1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need both "LockFileInstallStarted" and "FromLockFile"?

{
<Mapping xmlns="http://www.intersystems.com/jsonmapping">
<Property Name="LockFileType" FieldName="type" />
<Property Name="OverriddenSortOrder" FieldName="overriddenSortOrder" />

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity, what's the reason we're removing this?

set modifiers("url") = lockFileValues.%Get("url")
set modifiers("namespace") = lockFileValues.%Get("orasNamespace")

// The following variables are set as system level variables for us to get

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should end up being documented somewhere else too. Definitely in the wiki and maybe even in the help text from zpm "help"

do ##class(%IPM.Main).Shell("repo -delete -name "_orasRepo)

// Install from Module G's lock file
do ..AssertInstallFromLockFileAsExpected(..#ModuleG)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the ORAS repo doesn't require username/password and the remote one is being configured with it (see line 142)

@@ -310,13 +414,35 @@ ClassMethod AreLockFilesEqual(
expectedLockFilePath As %String) As %Boolean

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be As %Status

set sc = ##class(%IPM.Main).Shell("install " _ moduleName)
do $$$AssertStatusOK(sc, "Successfully installed " _ moduleName)

set packagePath = "/home/irisowner/zpm/tests/integration_tests/Test/PM/Integration/_data/lock-test/package/pack"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A bit brittle: this will break if running outside of containers

// First install without a lock file and confirm that the latest version of module H was chosen
set sc = ##class(%IPM.Main).Shell("install " _ moduleName)
do $$$AssertStatusOK(sc, "Successfully installed " _ moduleName _ " and dependencies using ""install""")
zpm "list-installed"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leftover debug code?

// Now install using module M's lock file
set sc = ##class(%IPM.Main).Shell("install -from-lockfile " _ moduleName)
do $$$AssertStatusOK(sc, "Successfully installed " _ moduleName _ " and dependencies using its lock file")
zpm "list-installed"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above?

Comment thread src/cls/IPM/Main.cls
set tSC = $$$ADDSC(tSC, tmpRepoMgr.CleanUp())
$$$ThrowOnError(tSC)
if ($get(pCommandInfo("data", "FromLockFile"))) {
do ##class(%IPM.General.LockFile).InstallFromLockFile(tTargetDirectory, .tParams)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the load path will not install the parent module since that's only in the "else" path and it slips past test10 accidentally.

do ..AssertInstallCreatesLockFileAsExpected(moduleName)

set sc = ##class(%IPM.Main).Shell("install " _ moduleName)
do $$$AssertStatusOK(sc, "Successfully installed " _ moduleName)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should also verify that the modules and dependencies have been actually installed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants