Friday, February 21, 2014

Goal for build automation

Domino and XPages currently fall behind in build process automation (build automatically option in Domino Designer is really not what build automation means). Since 9.0.1 brings technology preview of a headless designer, I'll try to create a proof of concept for an end to end automated build.

 I've tried to do some parts of it individually in past, but now it might fit all together.

Path should be:
1. Edit application in NSF in Domino Designer / or / Edit source code using other tools
(1a) Run some local tests
2. Check-in source code into Git repository
3. Trigger checkout from repository automatically
4. Build NSF and move it to test server

5. Run test - some itegration test and some UI test using TestNG and Selenium
6. Get nice report that I didn't break anyting in step 1

It seems like a lot of work, but once you get such framework in place is should be quite easy to use for other projects. And also all modern frameworks are going in this direction, so it should be something to pursue too.

How to get Domino database from on disk project to server in a batch file

Originally posted in Sutol Connections

Martin Jinoch wrote an article about parameters required for headless designer
I did some experiments how to get the db to a server. Here are first thoughts. I'Il probably write more later.
I had to create 2 components:

1. Batch file to run it
2. NSF db that does notes operations

1. In batch file biggest issue was to find when the job is done, since it creates separate processes. Google offered some advices, so I ended up using pslist from pstools and sleep command found somewhere else.

Here is the file
designer.exe -RPARAMS -console -vmargs"true,true,trtest.nsf,importandbuild,C:\Git\Teamroom\TR\.project,trtest.nsf"

@echo off
C:\pstools\PSLIST notes2 >nul 2>&1
) ELSE (
  ECHO designer is still running
  C:\sleep\SLEEP 5 /quiet


echo "launch client to copy"

nlnotes.exe notes:///cideploy.nsf/84AD4CF25D638F66C1257C77006547DA/53D2901644D70EDFC1257C77006588AA?OpenDocument

echo "open"

explorer http://mytestserver/servertr.nsf

2. Local db that has configuration profile for the app. it is called using notes:// link (and calling it with nlnotes has nice sideeffect that it waits to complete). Biggest issue was to automatically closed notes when done.

Link actually opens document using form that has queryopen event to do the job and postopen with @Command([ExitNotes]) . It has to be called using viewunid and unid of the document, since I use form formula of the view to redirect it to form that does the job, instead of standard form that I use for configuration.

Code can be than pretty much anything I have for now just:
    Dim doc As NotesDocument
    Set doc=source.document
    Dim sourcedb As New NotesDatabase("",doc.profilekey(0))
    If sourcedb.IsOpen Then
        Dim targetdb As New NotesDatabase(doc.targetserver(0),doc.targetnsf(0))
        If targetdb.IsOpen Then
            Call targetdb.Remove
        End If
        Call sourcedb.CreateCopy(doc.targetserver(0),doc.targetnsf(0))
    End If
And that's all. I tested it with teamroom db and it worked fine.
My previous blog had just 2 posts about itself. It was 2007 and since then just didn't feel the urge to blog, or I found some other methods of sharing information.

Last autumn I left company I started with my colleagues, so things changed a bit and now I might have more ideas and information in general to share.