Marcus Wurlitzer · Apr 21, 2021

Git for InterSystems IRIS - Native Git workflow for the IRIS platform

Hi Developers, I am glad to announce Git for InterSystems IRIS, my first submission to OpenExchange and part of the current Developer Tools Contest.

Git for InterSystems IRIS is a source control package that aims to facilitate a native integration of the Git workflow with the InterSystems IRIS platform. It is designed to work as a transparent link between InterSystems IRIS and a Git-enabled code directory that, once setup, requires no user interaction. A detailed description can be found on GitHub.



I am looking forward to learn what you think about this approach. Does it make sense? Would this help you with establishing a Git-based deployment pipeline? Are there any issues that may have been overlooked?

A ready-to-run docker demo is available on OpenExchange. The application is in a usable proof-of-concept state, with some features still to be implemented. I am happy to receive any feedback from you.

2 395
Discussion (8)3
Log in or sign up to continue

Thank you for publishing!!

I am curious ... did you start with one of the existing open source Git hooks for ObjectScript or did you start from scratch with this project?

Hi Ben, the project started as a fork of Caché Tortoize Git, which was a good starting point, and initially I intended to change only a few things. As development went on, however, most of the code has been rewritten and I think only 10-20% is left from the original code. There were just too many differences in the basic concepts, including the Globals structure, handling of namespaces and projects, and interaction with Git (hooks -> REST) and Studio (none).

This is really interesting - I've been starting on a similar project with the same starting point.

Got it Marcus - thanks for the history :)

Thank you Marcus, great initiative! Any thoughts about how to manage environment specific variables in the pipeline e.g. different interoperability host configurations for dev / prod?

Hello Marcus,

Thank you for sharing.

I'm building a dockerised DEV environnement.

The main issue I am encountering at this moment is the modification from the portal of Business Process or Transform for exemple. I have to export manually my new processes. If I forget it, I just lose it ...

I try to install and configure GIT directly on my image.

The aim is to link my local repo to the container. I don't want GIT at all. This way, I will have a automatical export.

But, it is quite difficult to use in command line.

I always have to perform an INIT when I start my container.

I tried to perform an init from my DockerFile (do ##class(SourceControl.Git.Utils).UserAction("","%SourceMenu,Init")) but it does not work.

Do you have a clean way to install and configure GIT from a DockerFile ?




My iris start in my DockerFile :

RUN iris start IRIS \

    && iris session IRIS -U %SYS < /tmp/iris.script \

    && iris stop IRIS quietly

my iris.script :

    //On installe ZPM

    set $namespace="%SYS", name="DefaultSSL" do:'##class(Security.SSLConfigs).Exists(name) ##class(Security.SSLConfigs).Create(name) set url="" Do ##class(%Net.URLParser).Parse(url,.comp) set ht = ##class(%Net.HttpRequest).%New(), ht.Server = comp("host"), ht.Port = 443, ht.Https=1, ht.SSLConfiguration=name, st=ht.Get(comp("path")) quit:'st $System.Status.GetErrorText(st) set xml=##class(%File).TempFilename("xml"), tFile = ##class(%Stream.FileBinary).%New(), tFile.Filename = xml do tFile.CopyFromAndSave(ht.HttpResponse.Data) do ht.%Close(), $system.OBJ.Load(xml,"ck") do ##class(%File).Delete(xml)


    do ##class(%SYSTEM.Process).CurrentDirectory("/opt/irisapp")

    //On charge les installer et les deployer

    do $SYSTEM.OBJ.Load("InstallerLibrary.cls", "ck")

    //On installe les namespaces

    set sc = ##class(App.InstallerLibrary).setup()


    // Je ne sais pas pourquoi mais je dois redéfinir le dossier de travail

    do ##class(%SYSTEM.Process).CurrentDirectory("/opt/irisapp")

    //On importe les default settings + le plugin GIT (SURTOUT LAISSER LES PASSAGES A LA LIGNE)

    zn "LIBRARY"

    zpm "install git-source-control"

    d ##class(SourceControl.Git.API).Configure()



    // Pour éviter de devoir modifier le mdp SuperUser.

    zn "%SYS"

    w ##class(Security.Users).UnExpireUserPasswords("*")

     // Pour faire fonctionner le plugin Git, il faut que le path défini existe, par défaut il est à chaine vide et cela fait planter le plugin. En l'enlevant cela fonctionne

    k ^SYS("SourceControl","Git","%gitBinPath")


    zn "LIBRARY"

    do ##class(SourceControl.Git.Utils).UserAction("","%SourceMenu,Init")


Hi Matthieu,

so you want to use Git for IRIS for an automated export of classes and set it up from the iris.script, which will be invoked in the Dockerfile.

From the code you have pasted, it seems like you use a different Git Source Control implementation (zpm "install git-source-control“). The implementation discussed in this thread would be installed with

zpm "install git-for-iris“

There, you can use the API functions in SourceControl.Git.Utils in the iris.script:

do ##class(SourceControl.Git.Utils).AddDefaultSettings()
do ##class(SourceControl.Git.Utils).AddPackageToSourceControl(„<My.Package.Name>“, „<MyNamespace>“)
do ##class(SourceControl.Git.Utils).SetSourceControlStatus(1)

A default package is added to source control via module.xml for demo purposes, as well as the /csp/user/sc web application for callbacks from git, both of which you may want to remove.

As a final step, you will have to activate the source control class in IRIS. The manual process is described here, you might look into the corresponding CSP page to find out how to do it programatically.

Hope this helps.