Clear filter
Announcement
Anastasia Dyubaylo · Mar 4, 2021
Hey Developers,
See how the InterSystems IRIS FHIR Server allows you to develop and deploy your FHIR applications on AWS without manual configuration and deployment:
⏯ Getting Started with the InterSystems IRIS FHIR Server on AWS
👉🏼 Subscribe to InterSystems Developers YouTube.
Enjoy and stay tuned!
Announcement
Anastasia Dyubaylo · Mar 19, 2021
Hi Community,
Please welcome the new video on InterSystems Developers YouTube:
⏯ Deploying InterSystems IRIS Solutions into Kubernetes Google Cloud
See how an InterSystems IRIS data platform application is deployed into a Kubernetes cluster, specifically on Google Kubernetes Engine (GKE), using Terraform to create a cluster and a CI/CD GitHub implementation called GitHub Actions to automate deployment steps.
⬇️ Access all code samples here.
🗣 Presenter: @Mikhail.Khomenko, DevOps Engineer
Additional materials to this video you can find in this InterSystems Online Learning Course.
Enjoy watching this video! 👍🏼
Announcement
Anastasia Dyubaylo · May 4, 2021
Hi Developers,
Enjoy watching this new video presented by @Evgeny.Shvarov:
⏯ Package First Development Approach with InterSystems IRIS and ZPM
A demo of package first development approach with InterSystems IRIS and ZPM Package manager. Develop the code as it is already deployed.
⬇️ ObjectScript Package Manager on Open Exchange
➡️ Join ZPM discussion in our Discord
✅ Follow DC ZMP tag to be up to date with the latest post on ZMP
Stay tuned!
Announcement
Anastasia Dyubaylo · Nov 28, 2022
Hi Community,
It's voting time! Cast your votes for the best applications in our IRIS for Health Programming Contest focused on building FHIR solutions for Women's Health:
🔥 VOTE FOR THE BEST APPS 🔥
How to vote? Details below.
Experts nomination:
InterSystems experienced jury will choose the best apps to nominate the prizes in the Experts Nomination. Please welcome our experts:
⭐️ @Alexander.Koblov, Support Specialist⭐️ @Alexander.Woodhead, Technical Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Alberto.Fuentes, Sales Engineer⭐️ @Dmitry.Zasypkin, Senior Sales Engineer⭐️ @Daniel.Kutac, Senior Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Nicholai.Mitchko, Manager, Solution Partner Sales Engineering⭐️ @Timothy.Leavitt, Development Manager⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Aya.Heshmat, Product Specialist⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations
Community nomination:
For each user, a higher score is selected from two categories below:
Conditions
Place
1st
2nd
3rd
If you have an article posted on DC and an app uploaded to Open Exchange (OEX)
9
6
3
If you have at least 1 article posted on DC or 1 app uploaded to OEX
6
4
2
If you make any valid contribution to DC (posted a comment/question, etc.)
3
2
1
Level
Place
1st
2nd
3rd
VIP Global Masters level or ISC Product Managers
15
10
5
Ambassador GM level
12
8
4
Expert GM level or DC Moderators
9
6
3
Specialist GM level
6
4
2
Advocate GM level or ISC Employees
3
2
1
Blind vote!
The number of votes for each app will be hidden from everyone. Once a day we will publish the leaderboard in the comments to this post.
The order of projects on the contest page will be as follows: the earlier an application was submitted to the competition, the higher it will be on the list.
P.S. Don't forget to subscribe to this post (click on the bell icon) to be notified of new comments.
To take part in the voting, you need:
Sign in to Open Exchange – DC credentials will work.
Make any valid contribution to the Developer Community – answer or ask questions, write an article, contribute applications on Open Exchange – and you'll be able to vote. Check this post on the options to make helpful contributions to the Developer Community.
If you changed your mind, cancel the choice and give your vote to another application!
Support the application you like!
Note: contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases! Hello everyone,
Check out the V2 of my application for the InterSystems FHIR contest !!
This time, we will see how to go from CSV to FHIR to SQL to JUPYTER all in one go and using only Python !!!
Check this out here : https://community.intersystems.com/post/incredible-csv-fhir-sql-jupyter-fhir-contest-v2 thanks for your contributions, Lucas! :) Hey, Developers!
Since the start of the contest, here are the top 5 apps!
Expert Nomination, Top 5
Pregnancy Symptoms Tracker by @José.Pereira
fhir-healthy-pregnancy by @Edmara.Francisco
FemTech Reminder by @KATSIARYNA.Shaustruk
FHIR Questionnaires by @Yuri.Gomes
Contest-FHIR by @Lucas.Enard2487
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José.Pereira
FHIR Questionnaires by @Yuri.Gomes
fhir-healthy-pregnancy by @Edmara.Francisco
FemTech Reminder by @KATSIARYNA.Shaustruk
Contest-FHIR by @Lucas.Enard2487
➡️ Voting is here.
Support the application you like! Devs!
Here are the results after two days of voting!
Expert Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
FemTech Reminder by @Katsiaryna Shaustruk
Beat Savior by @Jan.Skála
Contest-FHIR by @Lucas Enard
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
FemTech Reminder by @Katsiaryna Shaustruk
Contest-FHIR by @Lucas Enard
Beat Savior by @Jan.Skála
➡️ Voting is here. Hi Developers!
At the moment we can see the next results of the voting:
Expert Nomination, Top 5
FemTech Reminder by @Katsiaryna Shaustruk
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
iris-fhir-app by @Oliver.Wilms
NeuraHeart by @Grzegorz.Koperwas
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
FemTech Reminder by @Katsiaryna Shaustruk
fhir-healthy-pregnancy by @Edmara Francisco
FHIR Questionnaires by @Yuri.Gomes
iris-fhir-app by @Oliver.Wilms
➡️ Voting is here.
Support participants with your votes! Developers!
Last call!Only a few hours left to the end of voting!
Cast your votes for applications you like!
Announcement
Shane Nowack · Oct 19, 2022
Get certified on InterSystems IRIS System Administration!
Hello Community,
After beta testing the new InterSystems IRIS System Administration Specialist exam, the Certification Team of InterSystems Learning Services has performed the necessary calibration and adjustments to release it to our community. It is now ready for purchase and scheduling in the InterSystems certification exam catalog. Potential candidates can review the exam topics and the practice questions to help orient them to exam question approaches and content. Passing the exam allows you to claim an electronic certification badge that can be embedded in social media accounts such as Linkedin.
If you are new to InterSystems Certification, please review our program pages that include information on taking exams, exam policies, FAQ and more. Also, check out our Organizational Certification that can help your organization access valuable business opportunities and establish your organization as a solid provider of InterSystems solutions in our marketplace.
The Certification Team of InterSystems Learning Services is excited about this new exam and we are also looking forward to working with you to create new certifications that can help you advance your career. We are always open to ideas and suggestions at certification@intersystems.com.
Looking forward to celebrating your success,
Shane Nowack - Certification Exam Developer, InterSystems @Shane.Nowack - congratulations on his launch!! Very exciting and a great addition to the Professional Certification Exam portfolio for ISC technology :)
Announcement
Anastasia Dyubaylo · Mar 24, 2023
Hi Developers,
Often we create and edit InterSystems IRIS Interoperability solutions via a set of UI tools that is provided with IRIS. But it is sometimes difficult to setup the development environment to handle changes we make in the UI to source control.
This video illustrates how git-source-control helps with source control Interoperability components while changing it in the UI.
⏯ Git Source Control for InterSystems IRIS Interoperability with Docker and VSCode
Add these two lines in your iris.script during docker build:
zpm "install git-source-control"
do ##class(%Studio.SourceControl.Interface).SourceControlClassSet("SourceControl.Git.Extension")
And Interoperability UI components will start working with git.
Example application.
Announcement
Anastasia Dyubaylo · Apr 17, 2023
Hi Community,
It's voting time! Cast your votes for the best applications in our InterSystems IRIS Cloud SQL and IntegratedML Contest:
🔥 VOTE FOR THE BEST APPS 🔥
How to vote? Details below.
Experts nomination:
InterSystems experienced jury will choose the best apps to nominate the prizes in the Experts Nomination. Please welcome our experts:
⭐️ @Alexander.Koblov, Support Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Timothy.Leavitt, Development Manager⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations⭐️ @Alexander.Woodhead, Senior Systems Developer⭐️ @Andreas.Dieckow , Principal Product Manager⭐️ @Aya.Heshmat, Product Specialist⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Carmen.Logue , Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Luca.Ravazzolo, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Steven.LeBlanc, Product Specialist⭐️ @Thomas.Dyar, Product Specialist
Community nomination:
For each user, a higher score is selected from two categories below:
Conditions
Place
1st
2nd
3rd
If you have an article posted on DC and an app uploaded to Open Exchange (OEX)
9
6
3
If you have at least 1 article posted on DC or 1 app uploaded to OEX
6
4
2
If you make any valid contribution to DC (posted a comment/question, etc.)
3
2
1
Level
Place
1st
2nd
3rd
VIP Global Masters level or ISC Product Managers
15
10
5
Ambassador GM level
12
8
4
Expert GM level or DC Moderators
9
6
3
Specialist GM level
6
4
2
Advocate GM level or ISC Employees
3
2
1
Blind vote!
The number of votes for each app will be hidden from everyone. Once a day we will publish the leaderboard in the comments to this post.
The order of projects on the contest page will be as follows: the earlier an application was submitted to the competition, the higher it will be on the list.
P.S. Don't forget to subscribe to this post (click on the bell icon) to be notified of new comments.
To take part in the voting, you need:
Sign in to Open Exchange – DC credentials will work.
Make any valid contribution to the Developer Community – answer or ask questions, write an article, contribute applications on Open Exchange – and you'll be able to vote. Check this post on the options to make helpful contributions to the Developer Community.
If you changed your mind, cancel the choice and give your vote to another application!
Support the application you like!
Note: contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases! Since the beginning of the voting we have the results:
Expert Nomination, Top 5
superset-iris by @Dmitry.Maslennikov
Sheep’s Galaxy by @Maria.Gladkova
iris-mlm-explainer by @Muhammad.Waseem
IntegratedML-IRIS-Cloud-Height-prediction by @珊珊.喻
Customer churn predictor by @Oleh.Dontsov
➡️ Voting is here.
Community Nomination, Top 5
superset-iris by @Dmitry.Maslennikov
Sheep’s Galaxy by @Maria.Gladkova
iris-mlm-explainer by @Muhammad.Waseem
IntegratedML-IRIS-Cloud-Height-prediction by @珊珊.喻
Customer churn predictor by @Oleh.Dontsov
➡️ Voting is here.
So, the voting continues.
Please support the application you like! Devs!
Here are the top 5 for now:
Expert Nomination, Top 5
superset-iris by @Dmitry Maslennikov
Sheep’s Galaxy by @Maria Gladkova
Customer churn predictor by @Oleh Dontsov
audit-consolidator by @Oliver.Wilms
iris-mlm-explainer by @Muhammad Waseem
➡️ Voting is here.
Community Nomination, Top 5
superset-iris by @Dmitry Maslennikov
IntegratedML-IRIS-Cloud-Height-prediction by @Shanshan Yu
Sheep’s Galaxy by @Maria Gladkova
iris-mlm-explainer by @Muhammad Waseem
AI text detection by @Oleh Dontsov
➡️ Voting is here.
Experts, we are waiting for your votes! 🔥
Support our participants with your votes! Hi Developers!
At the moment we can see the next results of the voting:
Expert Nomination, Top 5
Sheep’s Galaxy by @Maria Gladkova
superset-iris by @Dmitry Maslennikov
AI text detection by @Oleh Dontsov
iris-mlm-explainer by @Muhammad Waseem
Customer churn predictor by @Oleh Dontsov
➡️ Voting is here.
Community Nomination, Top 5
Sheep’s Galaxy by @Maria Gladkova
superset-iris by @Dmitry Maslennikov
IntegratedML-IRIS-Cloud-Height-prediction by @Shanshan Yu
AI text detection by @Oleh Dontsov
iris-mlm-explainer by @Muhammad Waseem
➡️ Voting is here. Hi, Dev's!
And here're the results at the moment:
Expert Nomination, Top 5
Sheep’s Galaxy by @Maria Gladkova
AI text detection by @Oleh Dontsov
superset-iris by @Dmitry Maslennikov
Customer churn predictor by @Oleh Dontsov
iris-mlm-explainer by @Muhammad Waseem
➡️ Voting is here.
Community Nomination, Top 5
Sheep’s Galaxy by @Maria Gladkova
superset-iris by @Dmitry Maslennikov
IntegratedML-IRIS-Cloud-Height-prediction by @Shanshan Yu
AI text detection by @Oleh Dontsov
Customer churn predictor by @Oleh Dontsov
➡️ Voting is here.
Developers, only two days left to the end of the voting!Cast your votes for the application you like! Last day of voting! ⌛
Please check out the Contest Board.Our contestants need your votes! 📢
Announcement
Evgeny Shvarov · Apr 3, 2023
Here're the technology bonuses for the InterSystems IRIS Cloud SQL and IntegratedML Contest 2023 that will give you extra points in the voting:
IntegratedML usage
Online Demo
Article on Developer Community
The second article on Developer Community
Video on YouTube
First Time Contribution
Community Idea Implementation
IRIS Cloud SQL Survey
See the details below.
IntegratedML usage - 5 points
Use IntegratedML SQL extension of IRIS Cloud SQL and collect 5 extra bonus points.
Online Demo of your project - 2 pointsCollect 3 more bonus points if you provision your project to the cloud as an online demo. You can do it on your own or you can use this template - here is an Example. Here is the video on how to use it.
Article on Developer Community - 2 points
Post an article on Developer Community that describes the features of your project. Collect 2 points for each article. Translations to different languages work too.
The Second article on Developer Community - 1 point
You can collect one more bonus point for the second article or the translation regarding the application. The 3rd and more will not bring more points but the attention will all be yours.
Video on YouTube - 3 points
Make the Youtube video that demonstrates your product in action and collect 3 bonus points per each. Examples.
First Time Contribution - 3 points
Collect 3 bonus points if you participate in InterSystems Open Exchange contests for the first time!
Community Idea Implementation - 3 points
You can get 3 extra bonus points if the dev tool implements one of the ideas listed as Community Opportunity on the InterSystems Idea portal.
IRIS Cloud SQL Survey - 2 points
Please complete a survey with your feedback on your experience with InterSystems IRIS Cloud SQL and collect 2 bonus points! You should receive the survey on our email as a participant. If not please raise the question here on in discord.
The list of bonuses is subject to change. Stay tuned!
Good luck with the competition! Hello, I have written two articles and I will write one more. I also deployed online demo for audit-consolidator. Thank you We added IRIS Cloud SQL survey bonus! Don't forget to collect one!
Announcement
Anastasia Dyubaylo · Oct 12, 2022
Hi Community,
In this video you will learn about new features in InterSystems Healthshare Clinical Viewer and what's coming next:
⏯ Clinical Viewer & Navigation Application: New & Next 2022 @ Global Summit 2022
🗣 Presenter: @Julie.Smith, Clinical Product Manager, InterSystems
Stay tuned for more videos on InterSystems Developers YouTube!
Article
Evgeny Shvarov · May 16, 2023
Hi folks!
Just want to introduce you a new util to import CSV into IRIS - csvgenpy!
Install
USER>zpm "install csvgenpy"
Use:
do ##class(shvarov.csvgenpy.csv).Generate("file or url","table","schema")
Example:
USER>do ##class(shvarov.csvgenpy.csv).Generate("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv","titanic","data")
This will create table and class data.titanic in IRIS and will load the data. you can proof it with:
USER>:sql
[SQL]USER>>select * from data.titanic
[SQL]USER>>select * from data.titanic
1. select * from data.titanic
passengerid survived pclass name sex age sibsp parch ticket fare cabin embarked
1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.25 S
2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.283299999999996998 C85 C
3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9249999999999998223 S
...
So that's it!
Basically it does the same thing as csvgen does, but uses python library sqlalchemy which works because of embedded python and sqlalchemy-iris by @Dmitry.Maslennikov
P.S. csvgenpy can import some "complicated" for csvgen csv as this one. Basically it can import any kind of csv.
Feedback and Pull requests are very welcome!
Announcement
Fabiano Sanches · May 24, 2023
InterSystems announces its second preview, as part of the developer preview program for the 2023.2 release. This release will include InterSystems IRIS and InterSystems IRIS for Health.
Highlights
Many updates and enhancements have been added in 2023.2 and there are also brand-new capabilities, such as Time-Aware Modeling, enhancements of Foreign Tables, and the ability to use Ready-Only Federated Tables. Note that some of these features or improvements may not be available in this current developer preview.
Another important topic is the removal of the Private Web Server (PWS) from the installers. This feature has been announced since last year and will be removed from InterSystems installers, but they are still in this first preview. See this note in the documentation.
--> If you are interested to try the installers without the PWS, please enroll in its EAP using this form, selecting the option "NoPWS". Additional information related to this EAP can be found here.
Future preview releases are expected to be updated biweekly and we will add features as they are ready. Please share your feedback through the Developer Community so we can build a better product together.
Initial documentation can be found at these links below. They will be updated over the next few weeks until launch is officially announced (General Availability - GA):
InterSystems IRIS
InterSystems IRIS for Health
Availability and Package Information
As usual, Continuous Delivery (CD) releases come with classic installation packages for all supported platforms, as well as container images in Docker container format. For a complete list, refer to the Supported Platforms document.
Installation packages and preview keys are available from the WRC's preview download site or through the evaluation services website (use the flag "Show Preview Software" to get access to the 2023.2).
Container images for both Enterprise and Community Editions of InterSystems IRIS and IRIS for Health and all corresponding components are available from the new InterSystems Container Registry web interface. For additional information about docker commands, please see this post: Announcing the InterSystems Container Registry web user interface.
The build number for this developer preview is 2023.2.0.201.0.
For a full list of the available images, please refer to the ICR documentation. Alternatively, tarball versions of all container images are available via the WRC's preview download site. What happened to ARM64 images again? Hi Dmitry. There was an issue with these images and we decided to not publish them.
We're going to publish in the next drop, during next week.
Announcement
Emily Geary · Jun 1, 2023
Hello Community,
The Certification Team of InterSystems Learning Services is excited to announce the release of our new InterSystems HL7® Interface Specialist exam. This is an updated and rebranded version of our previous HL7 exam, formerly know as HealthShare Health Connect HL7® Interface Specialist. It is now available for purchase and scheduling in InterSystems exam catalog. Potential candidates can review the exam topics and the practice questions to help orient them to exam question approaches and content. Candidates who successfully pass the exam will receive a digital certification badge that can be shared on social media accounts like LinkedIn.
If you are new to InterSystems Certification, please review our program pages that include information on taking exams, exam policies, FAQ and more. Also, check out our Organizational Certification, which can help your organization access valuable business opportunities and establish itself as a reliable provider of InterSystems solutions in our marketplace.
If you have ideas about creating new certifications that can help you advance your career, the Certification Team of InterSystems Learning Services is always open to ideas and suggestions. Please contact us at certification@intersystems.com if you would like to share any ideas.
Looking forward to celebrating your success,
Emily Geary - Certification Operation Specialist, InterSystems
Announcement
Fabiano Sanches · Jun 7, 2023
InterSystems announces its third preview, as part of the developer preview program for the 2023.2 release. This release will include InterSystems IRIS and InterSystems IRIS for Health.
Highlights
Many updates and enhancements have been added in 2023.2 and there are also brand-new capabilities, such as Time-Aware Modeling, enhancements of Foreign Tables, and the ability to use Ready-Only Federated Tables. Note that some of these features or improvements may not be available in this current developer preview.
Another important topic is the removal of the Private Web Server (PWS) from the installers. This feature has been announced since last year and will be removed from InterSystems installers, but they are still in this first preview. See this note in the documentation.
--> If you are interested to try the installers without the PWS, please enroll in its EAP using this form, selecting the option "NoPWS". Additional information related to this EAP can be found here.
Future preview releases are expected to be updated biweekly and we will add features as they are ready. Please share your feedback through the Developer Community so we can build a better product together.
Initial documentation can be found at these links below. They will be updated over the next few weeks until launch is officially announced (General Availability - GA):
InterSystems IRIS
InterSystems IRIS for Health
Availability and Package Information
As usual, Continuous Delivery (CD) releases come with classic installation packages for all supported platforms, as well as container images in Docker container format. For a complete list, refer to the Supported Platforms document.
Installation packages and preview keys are available from the WRC's preview download site or through the evaluation services website (use the flag "Show Preview Software" to get access to the 2023.2).
Container images for both Enterprise and Community Editions of InterSystems IRIS and IRIS for Health and all corresponding components are available from the new InterSystems Container Registry web interface. For additional information about docker commands, please see this post: Announcing the InterSystems Container Registry web user interface.
The build number for this developer preview is 2023.2.0.202.0.
For a full list of the available images, please refer to the ICR documentation. Alternatively, tarball versions of all container images are available via the WRC's preview download site.
Announcement
Jeff Fried · Nov 4, 2019
The 2019.1.1 versions of InterSystems IRIS and IRIS for Health are now Generally Available!
These are maintenance releases in the EM (Extended Maintenance) stream. The changes are reflected in the 2019.1 documentation, which is available online and features a new look including a card-style TOC layout.
The build number for these releases is 2019.1.1.612.0. A full set of kits and containers for both products are available from the WRC Software Distribution site, including community editions of InterSystems IRIS and IRIS for Health.
This release also adds support for Red Hat Enterprise Linux 8, in addition to the previously supported platforms detailed in the 2019.1 Supported Platforms document.
InterSystems IRIS Data Platform 2019.1.1 includes maintenance updates in a number of areas, as described in the online documentation here.
It also includes three new features, described in the online documentation here:
Support for the InterSystems API Manager
X12 element validation.
In-place conversion from Caché and Ensemble to InterSystems IRIS
IRIS for Health 2019.1.1 includes maintenance updates in a number of areas, as described in the online documentation here.
It also includes two new features, described in the online documentation here:
Support for the InterSystems API Manager
X12 element validation
Article
Mikhail Khomenko · Feb 11, 2020
In an earlier article (hope, you’ve read it), we took a look at the CircleCI deployment system, which integrates perfectly with GitHub. Why then would we want to look any further? Well, GitHub has its own CI/CD platform called GitHub Actions, which is worth exploring. With GitHub Actions, you don’t need to rely on some external, albeit cool, service.
In this article we’re going to try using GitHub Actions to deploy the server part of InterSystems Package Manager, ZPM-registry, on Google Kubernetes Engine (GKE).
As with all systems, the build/deploy process essentially comes down to “do this, go there, do that,” and so on. With GitHub Actions, each such action is a job that consists of one or more steps, together known as a workflow. GitHub will search for a description of the workflow in the YAML file (any filename ending in .yml or .yaml) in your .github/workflows directory. See Core concepts for GitHub Actions for more details.
All further actions will be performed in the fork of the ZPM-registry repository. We’ll call this fork "zpm-registry" and refer to its root directory as "<root_repo_dir>" throughout this article. To learn more about the ZPM application itself see Introducing InterSystems ObjectScript Package Manager and The Anatomy of ZPM Module: Packaging Your InterSystems Solution.
All code samples are stored in this repository to simplify copying and pasting. The prerequisites are the same as in the article Automating GKE creation on CircleCI builds.
We’ll assume you’ve read the earlier article and already have a Google account, and that you’ve created a project named "Development," as in the previous article. In this article, its ID is shown as <PROJECT_ID>. In the examples below, change it to the ID of your own project.
Keep in mind that Google isn’t free, although it has a free tier. Be sure to control your expenses.
Workflow Basics
Let’s get started.
A simple and useless workflow file might look like this:
$ cd <root_repo_dir>$ mkdir -p .github/workflows$ cat <root_repo_dir>/.github/workflows/workflow.yaml name: Traditional Hello Worldon: [push]jobs: courtesy: name: Greeting runs-on: ubuntu-latest steps: - name: Hello world run: echo "Hello, world!
When pushing to the repository, you need to execute a job named "Greeting," which consists of a single step: printing a welcome phrase. The job should run on a GitHub-hosted virtual machine called the Runner, with the latest version of Ubuntu installed.After pushing this file to the repository, you should see on the Code GitHub tab that everything went well:
If the job had failed, you’d see a red X instead of a green checkmark. To see more, click on the green checkmark and then on Details. Or you can immediately go to the Actions tab:
You can learn all about the workflow syntax in the help document Workflow syntax for GitHub Actions.
If your repository contains a Dockerfile for the image build, you could replace the "Hello world" step with something more useful like this example from starter-workflows:
steps:- uses: actions/checkout@v2- name: Build the Docker image run: docker build . --file Dockerfile --tag my-image:$(date +%s)
Notice that a new step, "uses: action/checkout@v2", was added here. Judging by the name "checkout", it clones the repository, but where to find out more?
As in the case of CircleCI, many useful steps don’t need to be rewritten. Instead, you can take them from the shared resource called Marketplace. Look there for the desired action, and note that it’s better to take those that are marked as "By actions" (when you hover over - "Creator verified by Github").
The "uses" clause in the workflow reflects our intention to use a ready-made module, rather than writing one ourselves.
The implementations of the actions themselves can be written in almost any language, but JavaScript is preferred. If your action is written in JavaScript (or TypeScript), it will be executed directly on the Runner machine. For other implementations, the Docker container you specify will run with the desired environment inside, which is obviously somewhat slower. You can read more about actions in the aptly titled article, About actions.
The checkout action is written in TypeScript. And in our example, Terraform action is a regular bash script launched in Docker Alpine.
There’s a Dockerfile in our cloned repository, so let's try to apply our new knowledge. We’ll build the image of the ZPM registry and push it into the Google Container Registry. In parallel, we’ll create the Kubernetes cluster in which this image will run, and we’ll use Kubernetes manifests to do this.
Here’s what our plan, in a language that GitHub understands, will look like (but keep in mind that this is a bird's eye view with many lines omitted for simplification, so don’t actually use this config):
name: Workflow description# Trigger condition. In this case, only on push to ‘master’ branchon: push: branches: - master
# Here we describe environment variables available # for all further jobs and their steps# These variables can be initialized on GitHub Secrets page# We add “${{ secrets }}” to refer themenv: PROJECT_ID: ${{ secrets.PROJECT_ID }}
# Define a jobs list. Jobs/steps names could be random but# it’s better to have they meaningfuljobs: gcloud-setup-and-build-and-publish-to-GCR: name: Setup gcloud utility, Build ZPM image and Publish it to Container Registry runs-on: ubuntu-18.04 steps: - name: Checkout - name: Setup gcloud cli - name: Configure docker to use the gcloud as a credential helper - name: Build ZPM image - name: Publish ZPM image to Google Container Registry
gke-provisioner: name: Provision GKE cluster runs-on: ubuntu-18.04 steps: - name: Checkout - name: Terraform init - name: Terraform validate - name: Terraform plan - name: Terraform apply
kubernetes-deploy: name: Deploy Kubernetes manifests to GKE cluster needs: - gcloud-setup-and-build-and-publish-to-GCR - gke-provisioner runs-on: ubuntu-18.04 steps: - name: Checkout - name: Replace placeholders with values in statefulset template - name: Setup gcloud cli - name: Apply Kubernetes manifests
This is the skeleton of the working config in which there are no muscles, the real actions for each step. Actions can be accomplished with a simple console command ("run" or "run |" if there are several commands):
- name: Configure docker to use gcloud as a credential helper run: | gcloud auth configure-docker
You can also launch actions as a module with "uses":
- name: Checkout uses: actions/checkout@v2
By default, all jobs run in parallel, and the steps in them are done in sequence. But by using "needs", you can specify that one job should wait for the rest to complete:
needs:- gcloud-setup-and-build-and-publish-to-GCR- gke-provisioner
By the way, in the GitHub Web interface, such waiting jobs appear only when the jobs they’re waiting for are executed.
The "gke-provisioner" job mentions Terraform, which we examined in the previous article. The preliminary settings for its operation in the GCP environment are repeated for convenience in a separate markdown file. Here are some additional useful links:
Terraform Apply Subcommand documentation
Terraform GitHub Actions repository
Terraform GitHub Actions documentation
In the "kubernetes-deploy" job, there is a step called "Apply Kubernetes manifests". We’re going to use manifests as mentioned in the article Deploying InterSystems IRIS Solution into GCP Kubernetes Cluster GKE Using CircleCI, but with a slight change.
In the previous articles, IRIS application has been stateless. That is, when restarting the pod, all data is returned to its default place. This is great, and it’s often necessary, but for ZPM registry you need to somehow save the packages that were loaded into it, regardless of how many times you need to restart. Deployment allows you to do this, of course, but not without limitations.
For stateful applications, it’s better to choose the StatefulSet resource. Pros and cons can be found in the GKE documentation topic on Deployments vs. StatefulSets and the blog post Kubernetes Persistent Volumes with Deployment and StatefulSet.
The StatefulSet resource is in the repository. Here’s the part that’s important for us:
volumeClaimTemplates:- metadata: name: zpm-registry-volume namespace: iris spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
The code creates a 10GB read/write disk that can be mounted by a single Kubernetes worker node. This disk (and the data on it) will survive the restart of the application. It can also survive the removal of the entire StatefulSet, but for this you need to set the correct Reclaim Policy, which we won’t cover here.
Before breathing life into our workflow, let's add a few more variables to GitHub Secrets:
The following table explains the meaning of these settings (service account keys are also present):
Name
Meaning
Example
GCR_LOCATION
Global GCR location
eu.gcr.io
GKE_CLUSTER
GKE cluster name
dev-cluster
GKE_ZONE
Zone to store an image
europe-west1-b
IMAGE_NAME
Image registry name
zpm-registry
PROJECT_ID
GCP Project ID
possible-symbol-254507
SERVICE_ACCOUNT_KEY
JSON key GitHub uses to connect to GCP. Important: it has to be base64-encoded (see note below)
ewogICJ0eXB...
TF_SERVICE_ACCOUNT_KEY
JSON key Terraform uses to connect to GCP (see note below)
{…}
For SERVICE_ACCOUNT_KEY, if your JSON-key has a name, for instance, key.json, run the following command:
$ base64 key.json | tr -d '\n'
For TF_SERVICE_ACCOUNT_KEY, note that its rights are described in Automating GKE creation on CircleCI builds.
One small note about SERVICE_ACCOUNT_KEY: if you, like me, initially forgot to convert it to base64 format, you’ll see a screen like this:
Now that we’ve looked at the workflow backbone and added the necessary variables, we’re ready to examine the full version of the workflow (<root_repo_dir>/.github/workflow/workflow.yaml):
name: Build ZPM-registry image, deploy it to GCR. Run GKE. Run ZPM-registry in GKEon: push: branches: - master
# Environment variables.# ${{ secrets }} are taken from GitHub -> Settings -> Secrets# ${{ github.sha }} is the commit hashenv: PROJECT_ID: ${{ secrets.PROJECT_ID }} SERVICE_ACCOUNT_KEY: ${{ secrets.SERVICE_ACCOUNT_KEY }} GOOGLE_CREDENTIALS: ${{ secrets.TF_SERVICE_ACCOUNT_KEY }} GITHUB_SHA: ${{ github.sha }} GCR_LOCATION: ${{ secrets.GCR_LOCATION }} IMAGE_NAME: ${{ secrets.IMAGE_NAME }} GKE_CLUSTER: ${{ secrets.GKE_CLUSTER }} GKE_ZONE: ${{ secrets.GKE_ZONE }} K8S_NAMESPACE: iris STATEFULSET_NAME: zpm-registry
jobs: gcloud-setup-and-build-and-publish-to-GCR: name: Setup gcloud utility, Build ZPM image and Publish it to Container Registry runs-on: ubuntu-18.04 steps: - name: Checkout uses: actions/checkout@v2
- name: Setup gcloud cli uses: GoogleCloudPlatform/github-actions/setup-gcloud@master with: version: '275.0.0' service_account_key: ${{ secrets.SERVICE_ACCOUNT_KEY }}
- name: Configure docker to use the gcloud as a credential helper run: | gcloud auth configure-docker
- name: Build ZPM image run: | docker build -t ${GCR_LOCATION}/${PROJECT_ID}/${IMAGE_NAME}:${GITHUB_SHA} .
- name: Publish ZPM image to Google Container Registry run: | docker push ${GCR_LOCATION}/${PROJECT_ID}/${IMAGE_NAME}:${GITHUB_SHA}
gke-provisioner: # Inspired by: ## https://www.terraform.io/docs/github-actions/getting-started.html ## https://github.com/hashicorp/terraform-github-actions name: Provision GKE cluster runs-on: ubuntu-18.04 steps: - name: Checkout uses: actions/checkout@v2
- name: Terraform init uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.17 tf_actions_subcommand: 'init' tf_actions_working_dir: 'terraform'
- name: Terraform validate uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.17 tf_actions_subcommand: 'validate' tf_actions_working_dir: 'terraform'
- name: Terraform plan uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.17 tf_actions_subcommand: 'plan' tf_actions_working_dir: 'terraform'
- name: Terraform apply uses: hashicorp/terraform-github-actions@master with: tf_actions_version: 0.12.17 tf_actions_subcommand: 'apply' tf_actions_working_dir: 'terraform'
kubernetes-deploy: name: Deploy Kubernetes manifests to GKE cluster needs: - gcloud-setup-and-build-and-publish-to-GCR - gke-provisioner runs-on: ubuntu-18.04 steps: - name: Checkout uses: actions/checkout@v2
- name: Replace placeholders with values in statefulset template working-directory: ./k8s/ run: | cat statefulset.tpl |\ sed "s|DOCKER_REPO_NAME|${GCR_LOCATION}/${PROJECT_ID}/${IMAGE_NAME}|" |\ sed "s|DOCKER_IMAGE_TAG|${GITHUB_SHA}|" > statefulset.yaml cat statefulset.yaml
- name: Setup gcloud cli uses: GoogleCloudPlatform/github-actions/setup-gcloud@master with: version: '275.0.0' service_account_key: ${{ secrets.SERVICE_ACCOUNT_KEY }}
- name: Apply Kubernetes manifests working-directory: ./k8s/ run: | gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_ZONE} --project ${PROJECT_ID} kubectl apply -f namespace.yaml kubectl apply -f service.yaml kubectl apply -f statefulset.yaml kubectl -n ${K8S_NAMESPACE} rollout status statefulset/${STATEFULSET_NAME}
Before you push to a repository, you should take the terraform-code from the Terraform directory of github-gke-zpm-registry repository, replace placeholders as noted in main.tf comment, and put it inside the terraform/ directory. Remember that Terraform uses a remote bucket that should be initially created as noted in Automating GKE creation on CircleCI builds article.
Also, Kubernetes-code should be taken from the K8S directory of github-gke-zpm-registry repository and put inside the k8s/ directory. These code sources were omitted in this article to save space.
Then you can trigger a deploy:
$ cd <root_repo_dir>/$ git add .github/workflow/workflow.yaml k8s/ terraform/$ git commit -m “Add GitHub Actions deploy”$ git push
After pushing the changes to our forked ZPM repository, we can take a look at the implementation of the steps we described:
There are only two jobs so far. The third, "kubernetes-deploy", will appear after the completion of those on which it depends.Note that building and publishing Docker images requires some time:
And you can check the result in the GCR console:
The "Provision GKE cluster" job takes longer the first time as it creates the GKE cluster. You’ll see a waiting screen for a few minutes:
But, finally, it finishes and you can be happy:
The Kubernetes resources are also happy:
$ gcloud container clusters get-credentials <CLUSTER_NAME> --zone <GKE_ZONE> --project <PROJECT_ID>
$ kubectl get nodesNAME STATUS ROLES AGE VERSIONgke-dev-cluster-dev-cluster-node-pool-98cef283-dfq2 Ready <none> 8m51s v1.13.11-gke.23
$ kubectl -n iris get poNAME READY STATUS RESTARTS AGEzpm-registry-0 1/1 Running 0 8m25s
It's a good idea to wait for Running status, then check other things:
$ kubectl -n iris get stsNAME READY AGEzpm-registry 1/1 8m25s
$ kubectl -n iris get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEzpm-registry LoadBalancer 10.23.248.234 104.199.6.32 52773:32725/TCP 8m29s
Even the disks are happy:
$ kubectl get pv -oyaml | grep pdName pdName: gke-dev-cluster-5fe434-pvc-5db4f5ed-4055-11ea-a6ab-42010af00286
And happiest of all is the ZPM registry (we took the External-IP output of "kubectl -n iris get svc"):
$ curl -u _system:SYS 104.199.6.32:52773/registry/_ping{"message":"ping"}
Handling the login/password over HTTP is a shame, but I hope to do something about this in future articles.
By the way, you can find more information about endpoints in the source code: see the XData UrlMap section.
We can test this repo by pushing a package to it. There’s a cool ability to push just a direct GitHub link. Let’s try with the math library for InterSystems ObjectScript. Run this from your local machine:
$ curl -XGET -u _system:SYS 104.199.6.32:52773/registry/packages/-/all[]$ curl -i -XPOST -u _system:SYS -H "Content-Type: application/json" -d '{"repository":"https://github.com/psteiwer/ObjectScript-Math"}' 'http://104.199.6.32:52773/registry/package'HTTP/1.1 200 OK$ curl -XGET -u _system:SYS 104.199.6.32:52773/registry/packages/-/all[{"name":"objectscript-math","versions":["0.0.4"]}]
Restart a pod to be sure that the data is in place:
$ kubectl -n iris scale --replicas=0 sts zpm-registry$ kubectl -n iris scale --replicas=1 sts zpm-registry$ kubectl -n iris get po -w
Wait for a running pod. Then what I hope you’ll see:
$ curl -XGET -u _system:SYS 104.199.6.32:52773/registry/packages/-/all[{"name":"objectscript-math","versions":["0.0.4"]}]
Let’s install this math package from your repository on your local IRIS instance. Choose the one where the ZPM client is already installed:
$ docker exec -it $(docker run -d intersystemsdc/iris-community:2019.4.0.383.0-zpm) bash$ iris session irisUSER>write ##class(Math.Math).Factorial(5)<CLASS DOES NOT EXIST> *Math.MathUSER>zpmzpm: USER>listzpm: USER>repo -listregistry Source: https://pm.community.intersystems.com Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yeszpm: USER>repo -n registry -r -url http://104.199.6.32:52773/registry/ -user _system -pass SYSzpm: USER>repo -list registry Source: http://104.199.6.32:52773/registry/ Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yes Username: _system Password: <set>zpm: USER>repo -list-modules -n registryobjectscript-math 0.0.4zpm: USER>install objectscript-math[objectscript-math] Reload START...[objectscript-math] Activate SUCCESS
zpm: USER>quitUSER>write ##class(Math.Math).Factorial(5) 120
Congratulations!Don’t forget to remove the GKE cluster when you don’t need it anymore:
Conclusion
There are not many references to GitHub Actions within the InterSystems community. I found only one mention from guru @mdaimor. But GitHub Actions can be quite useful for developers storing code on GitHub. Native actions supported only in JavaScript, but this could be dictated by a desire to describe steps in code, which most developers are familiar with. In any case, you can use Docker actions if you don’t know JavaScript.
Regarding the GitHub Actions UI, along the way I discovered a couple of inconveniences that you should be aware of:
You cannot check what is going on until a job step is finished. It’s not clickable, like in the step "Terraform apply".
While you can rerun a failed workflow, I didn’t find a way to rerun a successful workflow.
A workaround for the second point is to use the command:
$ git commit --allow-empty -m "trigger GitHub actions"
You can learn more about this in the StackOverflow question How do I re-run Github Actions? 💡 This article is considered as InterSystems Data Platform Best Practice.