Skip to content

Commit

Permalink
add Docker + IPM
Browse files Browse the repository at this point in the history
  • Loading branch information
r-cemper committed May 24, 2024
1 parent 2a998e4 commit 0d1e37a
Show file tree
Hide file tree
Showing 18 changed files with 374 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
**/.DS_Store
iris-main.log
.git
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
*.cls linguist-language=ObjectScript
*.mac linguist-language=ObjectScript
*.int linguist-language=ObjectScript
*.inc linguist-language=ObjectScript
*.csp linguist-language=Html

*.sh text eol=lf
*.cls text eol=lf
*.mac text eol=lf
*.int text eol=lf
Dockerfil* text eol=lf
12 changes: 12 additions & 0 deletions .github/workflows/objectscript-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: objectscriptquality
on: push

jobs:
linux:
name: Linux build
runs-on: ubuntu-latest

steps:
- name: Execute ObjectScript Quality Analysis
run: wget https://raw.githubusercontent.com/litesolutions/objectscriptquality-jenkins-integration/master/iris-community-hook.sh && sh ./iris-community-hook.sh

19 changes: 19 additions & 0 deletions .github/workflows_build-push-gcr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Cloud Run Deploy

on:
push:
branches:
- master
- main
workflow_dispatch:

jobs:
deploy:
uses: intersystems-community/demo-deployment/.github/workflows/deployment.yml@master
with:
# Replace the name: parameter below to have your application deployed at
# https://project-name.demo.community.intersystems.com/
name: project-name
secrets:
# Do not forget to add Secret in GitHub Repoository Settings with name SERVICE_ACCOUNT_KEY
SERVICE_ACCOUNT_KEY: ${{ secrets.SERVICE_ACCOUNT_KEY }}
28 changes: 28 additions & 0 deletions .github/workflows_bump-module-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: versionbump

on:
push:
branches:
- master
- main
release:
types:
- released
permissions:
contents: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Bump version
run: |
git config --global user.name 'ProjectBot'
git config --global user.email '[email protected]'
VERSION=$(sed -n '0,/.*<Version>\(.*\)<\/Version>.*/s//\1/p' module.xml)
VERSION=`echo $VERSION | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.`
sed -i "0,/<Version>\(.*\)<\/Version>/s//<Version>$VERSION<\/Version>/" module.xml
git add module.xml
git commit -m 'auto bump version'
git push
25 changes: 25 additions & 0 deletions .github/workflows_github-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Build and publish a Docker image to ghcr.io
on:

# publish on pushes to the main branch (image tagged as "latest")
# image name: will be: ghcr.io/${{ github.repository }}:latest
# e.g.: ghcr.io/intersystems-community/intersystems-iris-dev-template:latest
push:
branches:
- master

jobs:
docker_publish:
runs-on: "ubuntu-20.04"

steps:
- uses: actions/checkout@v2

# https://github.com/marketplace/actions/push-to-ghcr
- name: Build and publish a Docker image for ${{ github.repository }}
uses: macbre/push-to-ghcr@master
with:
image_name: ${{ github.repository }}
github_token: ${{ secrets.GITHUB_TOKEN }}
# optionally push to the Docker Hub (docker.io)
# docker_io_token: ${{ secrets.DOCKER_IO_ACCESS_TOKEN }} # see https://hub.docker.com/settings/security
28 changes: 28 additions & 0 deletions .github/workflows_runtests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: unittest

on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main
release:
types:
- released

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build and Test
uses: docker/build-push-action@v2
with:
context: .
push: false
load: true
tags: ${{ github.repository }}:${{ github.sha }}
build-args: TESTS=1
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/.project
/.buildpath
17 changes: 17 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"recommendations": [
"eamodio.gitlens",
"georgejames.gjlocate",
"github.copilot",
"intersystems-community.servermanager",
"intersystems-community.sqltools-intersystems-driver",
"intersystems-community.testingmanager",
"intersystems-community.vscode-objectscript",
"intersystems.language-server",
"mohsen1.prettify-json",
"ms-azuretools.vscode-docker",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-vscode-remote.remote-containers"
]
}
18 changes: 18 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "objectscript",
"request": "launch",
"name": "ObjectScript Debug Class",
"program": "##class(dc.sample.ObjectScript).Test()",
},
{
"type": "objectscript",
"request": "attach",
"name": "ObjectScript Attach",
"processId": "${command:PickProcess}",
"system": true
}
]
}
22 changes: 22 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"files.associations": {

"Dockerfile*": "dockerfile",
"iris.script": "objectscript"
},
"objectscript.conn" :{
"active": true,
"ns": "USER",
"username": "_SYSTEM",
"password": "SYS",
"docker-compose": {
"service": "iris",
"internalPort": 52773
},
"links": {
"UnitTest Portal": "${serverUrl}/csp/sys/%25UnitTest.Portal.Home.cls?$NAMESPACE=IRISAPP"
}
},
"intersystems.testingManager.client.relativeTestRoot": "tests"

}
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# fake for OEX docker detection
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,29 @@ More docs are in the code docs. The utility works only in a current namespace.
## Requirements

Works in 2016.2 Field Test or later.

## Docker

### Prerequisites
Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Docker desktop](https://www.docker.com/products/docker-desktop) installed.
### Installation
Clone/git pull the repo into any local directory
```
$ git clone https://github.com/rcemper/PR_SystemMethodsRemover.git
```
to build and start the container run
```
$ docker compose up -d && docker compose logs -f
```
All ready to be used.

To open IRIS Terminal do:
```
$ docker-compose exec iris iris session iris
USER>
```
or using **WebTerminal**
http://localhost:42773/terminal/

To access IRIS System Management Portal
http://localhost:42773/csp/sys/UtilHome.csp
4 changes: 4 additions & 0 deletions ascript.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cd /home/irisowner/dev
iris view
iris session iris < iris.script
exit 0
117 changes: 117 additions & 0 deletions dev.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# useful commands
## clean up docker
use it when docker says "There is no space left on device". It will remove built but not used images and other temporary files.
```
docker system prune -f
```

```
docker rm -f $(docker ps -qa)
```

## build container with no cache
```
docker-compose build --no-cache --progress=plain
```
## start iris container
```
docker-compose up -d
```

## open iris terminal in docker
```
docker exec iris iris session iris -U IRISAPP
```


## import objectscirpt code

do $System.OBJ.LoadDir("/home/irisowner/dev/src","ck",,1)
## map iris key from Mac home directory to IRIS in container
- ~/iris.key:/usr/irissys/mgr/iris.key

## install git in the docker image
## add git in dockerfile
USER root
RUN apt update && apt-get -y install git

USER ${ISC_PACKAGE_MGRUSER}


## install docker-compose
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

## load and test module
```
zpm "load /home/irisowner/dev"
zpm "test dc-sample"
```

## select zpm test registry
```
repo -n registry -r -url https://test.pm.community.intersystems.com/registry/ -user test -pass PassWord42
```

## get back to public zpm registry
```
repo -r -n registry -url https://pm.community.intersystems.com/ -user "" -pass ""
```

## export a global in runtime into the repo
```
d $System.OBJ.Export("GlobalD.GBL","/irisrun/repo/src/gbl/GlobalD.xml")
```

## create a web app in dockerfile
```
zn "%SYS" \
write "Create web application ...",! \
set webName = "/csp/irisweb" \
set webProperties("NameSpace") = "IRISAPP" \
set webProperties("Enabled") = 1 \
set webProperties("CSPZENEnabled") = 1 \
set webProperties("AutheEnabled") = 32 \
set webProperties("iKnowEnabled") = 1 \
set webProperties("DeepSeeEnabled") = 1 \
set sc = ##class(Security.Applications).Create(webName, .webProperties) \
write "Web application "_webName_" has been created!",!
```



```
do $SYSTEM.OBJ.ImportDir("/opt/irisbuild/src",, "ck")
```


### run tests described in the module

IRISAPP>zpm
IRISAPP:zpm>load /irisrun/repo
IRISAPP:zpm>test package-name

### install ZPM with one line
// Install ZPM
set $namespace="%SYS", name="DefaultSSL" do:'##class(Security.SSLConfigs).Exists(name) ##class(Security.SSLConfigs).Create(name) set url="https://pm.community.intersystems.com/packages/zpm/latest/installer" 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)




docker run --rm --name iris-sql -d -p 9091:1972 -p 9092:52773  -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community


docker run --rm --name iris-ce -d -p 9091:1972 -p 9092:52773 -e IRIS_PASSWORD=demo -e IRIS_USERNAME=demo intersystemsdc/iris-community -a "echo 'zpm \"install webterminal\"' | iriscli"



docker run --rm --name iris-sql -d -p 9092:52773 containers.intersystems.com/intersystems/iris-community:2023.1.0.229.0


docker run --rm --name iris-ce -d -p 9092:52773 containers.intersystems.com/intersystems/iris-community:2023.1.0.229.0
12 changes: 12 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: '3.6'
services:
iris:
image: intersystemsdc/iris-community
restart: always
command: -a /home/irisowner/dev/ascript.sh

ports:
- 41773:1972
- 42773:52773
volumes:
- ./:/home/irisowner/dev
16 changes: 16 additions & 0 deletions iris.script
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
zn "%SYS"

// Unexpire passwords and set up passwordless mode to simplify dev use.
do ##class(Security.Users).UnExpireUserPasswords("*")
zpm "install passwordless"

zn "USER"
// Create /_vscode web app to support intersystems-community.testingmanager VS Code extension
zpm "install vscode-per-namespace-settings"
zpm "install webterminal"

// this should be the place for individual application code.
zpm "load /home/irisowner/dev/ -v":1
zpm "list"
halt

Loading

0 comments on commit 0d1e37a

Please sign in to comment.