Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This command allows for auto completion (Shell Completion — Click Documentation (8.1.x) (palletsprojects.com):

Code Block
eval "$(_BS_COMPLETE=bash_source bs)"

Example:
Image Added

TODO: See if we can add it to every user's .bashrc (or maybe just call that within the CLI once)

Current:


Sample build workflow using CLI

  1. Add test-ioc repo to db
Code Block
pnispero@PC100942:~/BuildSystem/bs_cli$ ./bs create repo -c test-ioc -u https://github.com/ad-build-test/test-ioc
[?] Specify organization name: ad-build-test
[?] Specify testing criteria: all
[?] Specify approval rule: all
[?] Specify component description: Test IOC used for BuildSystem testing
INFO-root:[create_commands.py:38 - repo() ] | {'linux_username': 'pnispero', 'github_username': 'test'}
INFO-root:[create_commands.py:39 - repo() ] | {'name': 'test-ioc', 'description': 'Test IOC used for BuildSystem testing', 'testingCriteria': 'all', 'approvalRule': 'all', 'organization': 'ad-build-test', 'url': 'https://github.com/ad-build-test/test-ioc'}
INFO-root:[create_commands.py:40 - repo() ] | 201
INFO-root:[create_commands.py:41 - repo() ] | {'errorCode': 0, 'payload': '66720253fd891a5aac14b3cf'}
INFO-root:[create_commands.py:42 - repo() ] | https://accel-webapp-dev.slac.stanford.edu/api/cbs/v1/component
INFO-root:[create_commands.py:43 - repo() ] | b'{"name": "test-ioc", "description": "Test IOC used for BuildSystem testing", "testingCriteria": "all", "approvalRule": "all", "organization": "ad-build-test", "url": "https://github.com/ad-build-test/test-ioc"}'
INFO-root:[create_commands.py:44 - repo() ] | {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '210', 'Content-Type': 'application/json'}
pnispero@PC100942:~/BuildSystem/bs_cli$

2. Add dev branch to db

Code Block
pnispero@PC100942:~/test-ioc$ bs create branch -a
Checking current directory if a component...
[?] Specify what to branch from:
 > branch
   tag
   commit

Specify name of branch: main
main
Specify name of branch: main
[?] Specify type of branch to create:
   fix
   feat
 > dev

Specify name of issue number (or dev name): patrick
INFO-root:[create_commands.py:128 - branch() ] | 200
INFO-root:[create_commands.py:129 - branch() ] | {'errorCode': 0, 'payload': True}
INFO-root:[create_commands.py:130 - branch() ] | https://accel-webapp-dev.slac.stanford.edu/api/cbs/v1/component/test-ioc/branch
INFO-root:[create_commands.py:131 - branch() ] | b'{"type": "branch", "branchPoint": "main", "branchName": "dev-patrick"}'
INFO-root:[create_commands.py:132 - branch() ] | {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '70', 'Content-Type': 'application/json'}
pnispero@PC100942:~/test-ioc$

3. Start a build

Code Block
pnispero@PC100942:~/test-ioc$ bs run build
Checking current directory if a component...
INFO-root:[run_commands.py:27 - build() ] | 201
INFO-root:[run_commands.py:28 - build() ] | {'errorCode': 0, 'payload': ['66721557fd891a5aac14b3d0']}
INFO-root:[run_commands.py:29 - build() ] | https://accel-webapp-dev.slac.stanford.edu/api/cbs/v1/build/component/test-ioc/branch/dev-patrick
INFO-root:[run_commands.py:30 - build() ] | b'{}'
INFO-root:[run_commands.py:31 - build() ] | {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '2', 'Content-Type': 'application/json'}
pnispero@PC100942:~/test-ioc$

4. Check build (didn't make cli for this yet)

Code Block
pnispero@PC100942:~/BuildSystem$ curl -X 'GET' \
  'https://accel-webapp-dev.slac.stanford.edu/api/cbs/v1/build/component/test-ioc/branch/dev-patrick' \
  -H 'accept: application/json'
{"errorCode":0,"payload":[{"id":"66721557fd891a5aac14b3d0","buildOs":"ROCKY9","buildStatus":"PENDING"}]}

5. Check log (didn't make cli for this yet - don't know if we want a command for this or to automatically show when 'bs run build'. Also Claudio is still working on this endpoint)

Code Block
pnispero@PC100942:~$ curl -X 'GET' \
  'https://accel-webapp-dev.slac.stanford.edu/api/cbs/v1/build/66721557fd891a5aac14b3d0/log' \
  -H 'accept: application/json'{"errorCode":0,"payload":[{},{},{},{},{},{},{},{},{},{},{},{},{},{}.....}

Build Results working (checked manually)

Code Block
languagebash
linenumberstrue
collapsetrue
bash-5.1$ pwd
/mnt/eed/ad-build/scratch/66721557fd891a5aac14b3d0-ROCKY9-test-ioc-dev-patrick/iocBoot/iocGuardianTest
bash-5.1$ ./st.cmd
#!../../bin/linux-x86_64/Guardian
< envPaths
epicsEnvSet("IOC","iocGuardianTest")
epicsEnvSet("TOP","/mnt/eed/ad-build/scratch/66721557fd891a5aac14b3d0-ROCKY9-test-ioc-dev-patrick")
epicsEnvSet("ASYN","/build/asyn")
epicsEnvSet("EPICS_BASE","/build/epics-base")
cd "/mnt/eed/ad-build/scratch/66721557fd891a5aac14b3d0-ROCKY9-test-ioc-dev-patrick"
## Register all support components
dbLoadDatabase "dbd/Guardian.dbd"
Guardian_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=GUARDIAN")
dbLoadRecords("db/test.db") # PATRICK TODO: Temp here for testing
dbLoadRecords("db/guardian_snapshot.db", "BASE=SIOC:B34:GD_PATRICK") # PATRICK TODO: Temp add patrick so its unique
dbLoadRecords("db/guardian_device_data.db", "BASE=SIOC:B34:GD_PATRICK") # PATRICK TODO: Temp add patrick so its unique
## Configure Guardian driver
# GuardianDriverConfigure(
#    Port Name,                 # Name given to this port driver
GuardianDriverConfigure("GUARDIAN")
cd "/mnt/eed/ad-build/scratch/66721557fd891a5aac14b3d0-ROCKY9-test-ioc-dev-patrick/iocBoot/iocGuardianTest"
iocInit
Starting iocInit
############################################################################
## EPICS R7.0.8.1-DEV
## Rev. R7.0.8-43-g72d50ce2749bbc791907
## Rev. Date Git: 2024-06-14 16:45:07 -0700
############################################################################
iocRun: All initialization complete
## Start any sequence programs
#seq sncxxx,"user=GUARDIAN"
epics> dbl
SIOC:B34:GD_PATRICK:FEL_PULSE_E
FBCK:FB02:GN01:S2DES_STORED_RBV
FBCK:FB02:GN01:S2DES_TEST
FBCK:FB02:GN01:S2DES_STORED
SIOC:B34:GD_PATRICK:SNAPSHOT_TRG_RBV
SIOC:B34:GD_PATRICK:SNAPSHOT_TRG_EN
epics> status: 0
curVal after get : 1
status: 0
curVal after get : 1
status: 0
curVal after set : 1
status: 0
curVal after get : 1
^C
bash-5.1$


UPDATE (With core-build-system running on ad-build-dev cluster now)

Note - ignore the long syntax 'python3 ../Buildsystem/bs_cli/bs', that is because I was modifying code while testing.

  1. Add test-ioc repo to db
    1. Code Block
      languagebash
      pnispero@PC100942:~/test-ioc$ python3 ../BuildSystem/bs_cli/bs create repo -c test-ioc -u https://github.com/ad-build-test/test-ioc
      [?] Specify organization name: ad-build-test
      [?] Specify testing criteria: all
      [?] Specify approval rule: all
      [?] Specify component description: Test IOC used for BuildSystem testing
      [?] What are the operating systems this app runs on? (Arrow left and right for selection, enter if done):
         [X] ROCKY9
         [ ] UBUNTU
       > [X] RHEL8
         [ ] RHEL7
         [ ] RHEL6
         [ ] RHEL5
      
      {'buildOs': ['ROCKY9', 'RHEL8']}
      INFO-root:[request.py:37 - log_api_response() ] 201
      INFO-root:[request.py:38 - log_api_response() ] {'errorCode': 0, 'payload': '66a29eee43902607cda2cacb'}
      INFO-root:[request.py:39 - log_api_response() ] https://ad-build-dev.slac.stanford.edu/api/cbs/v1/component
      INFO-root:[request.py:40 - log_api_response() ] b'{"name": "test-ioc", "description": "Test IOC used for BuildSystem testing", "testingCriteria": "all", "approvalRule": "all", "organization": "ad-build-test", "buildOs": ["ROCKY9", "RHEL8"], "url": "https://github.com/ad-build-test/test-ioc"}'
      INFO-root:[request.py:41 - log_api_response() ] {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '242', 'Content-Type': 'application/json'}
      pnispero@PC100942:~/test-ioc$
  2. Add existing branch
    1. Code Block
      pnispero@PC100942:~/test-ioc$ python3 ../BuildSystem/bs_cli/bs create branch -a
      Checking current directory if a component...
      [?] Specify branch point you branched off of:
       > branch
         tag
         commit
      
      Specify name of branch: main
      Specify name of existing branch: dev-patrick
      INFO-root:[request.py:37 - log_api_response() ] 200
      INFO-root:[request.py:38 - log_api_response() ] {'errorCode': 0, 'payload': True}
      INFO-root:[request.py:39 - log_api_response() ] https://ad-build-dev.slac.stanford.edu/api/cbs/v1/component/test-ioc/branch
      INFO-root:[request.py:40 - log_api_response() ] b'{"type": "branch", "branchPoint": "main", "branchName": "dev-patrick"}'
      INFO-root:[request.py:41 - log_api_response() ] {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '70', 'Content-Type': 'application/json'}
      pnispero@PC100942:~/test-ioc$
  3. start a build
    1. Code Block
      pnispero@PC100942:~/test-ioc$ python3 ../BuildSystem/bs_cli/bs run build
      Checking current directory if a component...
      INFO-root:[request.py:37 - log_api_response() ] 201
      INFO-root:[request.py:38 - log_api_response() ] {'errorCode': 0, 'payload': ['66a29f5143902607cda2cacc', '66a29f5143902607cda2cacd']}
      INFO-root:[request.py:39 - log_api_response() ] https://ad-build-dev.slac.stanford.edu/api/cbs/v1/build/component/test-ioc/branch/dev-patrick
      INFO-root:[request.py:40 - log_api_response() ] b'{}'
      INFO-root:[request.py:41 - log_api_response() ] {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'linux_username': 'pnispero', 'github_username': 'test', 'Content-Length': '2', 'Content-Type': 'application/json'}
    2. output ex:
    3. Code Block
      languagebash
      linenumberstrue
      collapsetrue
      pnispero@PC100942:~/BuildSystem$ kubectl logs test-build-rocky9-dev-deployment-6bd4597588-r29bl
      $ cd /build/
      $ pwd && ls
      /build
      __pycache__
      podman_builder.sh
      podman_script.py
      start_build.py
      start_test.py
      $ python3 start_build.py
      /usr/lib64/python3.9/tarfile.py:2239: RuntimeWarning: The default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed and some mode bits are cleared. See https://access.redhat.com/articles/7004769 for more details.
        warnings.warn(
      Dev Version
      == ADBS == Current dir: /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main
      Parsed YAML data:
      {'format': 1, 'repo': 'test-ioc', 'organization': 'ad-build-test', 'build': 'build.sh', 'deploy': 'test-deployment.yaml', 'environments': ['rocky9', 'rhel7'], 'dependencies': [{'epics-base': 'R7.0.8'}, {'asyn': 'R4.39-1.0.1'}], 'python': 'requirements.txt'}
      == ADBS == Installing dependencies
      [{'epics-base': 'R7.0.8'}, {'asyn': 'R4.39-1.0.1'}]
      epics-base R7.0.8
      {'component': 'epics-base', 'tag': 'R7.0.8', 'arch': 'rocky9'}
      == ADBS == Get component epics-base,R7.0.8 request to artifact storage...
      == ADBS == Tarball downloaded successfully
      == ADBS == R7.0.8.tar.gz extracted to /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base
      asyn R4.39-1.0.1
      {'component': 'asyn', 'tag': 'R4.39-1.0.1', 'arch': 'rocky9'}
      == ADBS == Get component asyn,R4.39-1.0.1 request to artifact storage...
      == ADBS == Tarball downloaded successfully
      == ADBS == R4.39-1.0.1.tar.gz extracted to /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn
      == ADBS == Installing python packages from requirements.txt
      WARNING: The directory '/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
      Defaulting to user installation because normal site-packages is not writeable
      Collecting PyYAML==5.4.1
        Downloading PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl (630 kB)
      Installing collected packages: PyYAML
      ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/.local'
      Check the permissions.
      
      
      == ADBS == Running Build:
      os.environ=environ({'KUBERNETES_SERVICE_PORT_HTTPS': '443', 'KUBERNETES_SERVICE_PORT': '443', 'HOSTNAME': 'test-build-rocky9-dev-deployment-6bd4597588-r29bl', 'ADBS_COMPONENT': 'test-ioc', 'ADBS_SOURCE': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'PWD': '/build', 'HOME': '/', 'KUBERNETES_PORT_443_TCP': 'tcp://10.110.197.238:443', 'SHLVL': '1', 'KUBERNETES_PORT_443_TCP_PROTO': 'tcp', 'ADBS_OS_ENVIRONMENT': 'rocky9', 'KUBERNETES_PORT_443_TCP_ADDR': '10.110.197.238', 'KUBERNETES_SERVICE_HOST': '10.110.197.238', 'KUBERNETES_PORT': 'tcp://10.110.197.238:443', 'KUBERNETES_PORT_443_TCP_PORT': '443', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'ADBS_BRANCH': 'main', 'ADBS_OUTPUT': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'ADBS_BUILD_TYPE': 'normal', 'OLDPWD': '/', '_': '/usr/bin/python3', 'LC_CTYPE': 'C.UTF-8'})
      self.env={'KUBERNETES_SERVICE_PORT_HTTPS': '443', 'KUBERNETES_SERVICE_PORT': '443', 'HOSTNAME': 'test-build-rocky9-dev-deployment-6bd4597588-r29bl', 'ADBS_COMPONENT': 'test-ioc', 'ADBS_SOURCE': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'PWD': '/build', 'HOME': '/', 'KUBERNETES_PORT_443_TCP': 'tcp://10.110.197.238:443', 'SHLVL': '1', 'KUBERNETES_PORT_443_TCP_PROTO': 'tcp', 'ADBS_OS_ENVIRONMENT': 'rocky9', 'KUBERNETES_PORT_443_TCP_ADDR': '10.110.197.238', 'KUBERNETES_SERVICE_HOST': '10.110.197.238', 'KUBERNETES_PORT': 'tcp://10.110.197.238:443', 'KUBERNETES_PORT_443_TCP_PORT': '443', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'ADBS_BRANCH': 'main', 'ADBS_OUTPUT': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'ADBS_BUILD_TYPE': 'normal', 'OLDPWD': '/', '_': '/usr/bin/python3', 'LC_CTYPE': 'C.UTF-8', 'os_env': 'rocky9', 'build_type': 'normal', 'source_dir': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'output_dir': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero', 'component': 'test-ioc', 'branch': 'main', 'LD_LIBRARY_PATH': '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/lib/linux-x86_64/'}
      make -C ./configure install
      make[1]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/configure'
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../..
      mkdir -p O.Common
      make -C O.linux-x86_64 -f ../Makefile TOP=../.. \
          T_A=linux-x86_64 install
      make[2]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/configure/O.linux-x86_64'
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/convertRelease.pl checkRelease
      
      Definition of EPICS_BASE conflicts with ASYN support.
      In this application or module, a RELEASE file
      conflicts with ASYN at /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1
        Here: EPICS_BASE = /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8
        ASYN: EPICS_BASE = /mnt/eed/ad-build/registry/epics-base/R7.0.8/rocky9/epics-base
      
      make[2]: [/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/configure/RULES_BUILD:210: warnRelease] Error 1 (ignored)
      make[2]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/configure/O.linux-x86_64'
      make[1]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/configure'
      make -C ./GuardianApp install
      make[1]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp'
      make -C ./src install
      make[2]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/src'
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../../..
      mkdir -p O.Common
      make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \
          T_A=linux-x86_64 install
      make[3]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/src/O.linux-x86_64'
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -MM -MF GuardianMain.d  ../GuardianMain.cpp
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -MM -MF GuardianDriver.d  ../GuardianDriver.cpp
      Creating dbd file Guardian.dbd
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/dbdExpand.pl   -I. -I.. -I../O.Common -I../../../dbd -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/dbd -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/dbd -o Guardian.dbd base.dbd Init.dbd asyn.dbd
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/registerRecordDeviceDriver.pl   -I. -I.. -I../O.Common -I../../../dbd -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/dbd -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/dbd    -o Guardian_registerRecordDeviceDriver.cpp \
                  ../O.Common/Guardian.dbd Guardian_registerRecordDeviceDriver /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -MM -MF Guardian_registerRecordDeviceDriver.d  Guardian_registerRecordDeviceDriver.cpp
      Installing created dbd file ../../../dbd/Guardian.dbd
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -c Guardian_registerRecordDeviceDriver.cpp
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -c ../GuardianDriver.cpp
      /usr/bin/g++  -D_GNU_SOURCE -D_DEFAULT_SOURCE          -D_X86_64_ -DUNIX  -Dlinux      -O3 -g   -Wall    -std=c++0x  -mtune=generic     -m64  -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include                                    -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/include -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/compiler/gcc -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include/os/Linux -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/include        -c ../GuardianMain.cpp
      /usr/bin/g++ -o Guardian -Wl,-Bstatic -L/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/lib/linux-x86_64 -L/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/lib/linux-x86_64 -L/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/lib/linux-x86_64 -Wl,-rpath,/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/lib/linux-x86_64 -Wl,-rpath,/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/lib/linux-x86_64 -Wl,-rpath,/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/lib/linux-x86_64          -rdynamic -m64         Guardian_registerRecordDeviceDriver.o GuardianDriver.o GuardianMain.o    -ldbRecStd -ldbCore -lca -lCom -lasyn -Wl,-Bdynamic  -lpthread    -lm -lrt -ldl -lgcc
      Installing created executable ../../../bin/linux-x86_64/Guardian
      make[3]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/src/O.linux-x86_64'
      make[2]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/src'
      make -C ./Db install
      make[2]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/Db'
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../../..
      mkdir -p O.Common
      make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \
          T_A=linux-x86_64 install
      make[3]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/Db/O.linux-x86_64'
      "/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/msi" -D    -I. -I.. -I../O.Common -I../../../db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/db -o ../O.Common/guardian_device_data.db -S../guardian_device_data.substitutions ../guardian_device_data.template > guardian_device_data.db.d
      "/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/msi" -D    -I. -I.. -I../O.Common -I../../../db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/db -o ../O.Common/guardian_snapshot.db -S../guardian_snapshot.substitutions ../guardian_snapshot.template > guardian_snapshot.db.d
      Inflating database from ../guardian_snapshot.substitutions ../guardian_snapshot.template
      "/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/msi"    -I. -I.. -I../O.Common -I../../../db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/db -o guardian_snapshot.db -S../guardian_snapshot.substitutions ../guardian_snapshot.template
      Inflating database from ../guardian_device_data.substitutions ../guardian_device_data.template
      "/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/msi"    -I. -I.. -I../O.Common -I../../../db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/asyn/R4.39-1.0.1/db -I/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/db -o guardian_device_data.db -S../guardian_device_data.substitutions ../guardian_device_data.template
      Installing created db file ../../../db/guardian_snapshot.db
      Installing created db file ../../../db/guardian_device_data.db
      make[3]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/Db/O.linux-x86_64'
      make[2]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp/Db'
      make[1]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/GuardianApp'
      make -C ./iocBoot install
      make[1]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/iocBoot'
      make -C ./iocGuardianTest install
      make[2]: Entering directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/iocBoot/iocGuardianTest'
      perl -CSD /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/epics/base/R7.0.8/bin/linux-x86_64/convertRelease.pl -t /mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main envPaths
      make[2]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/iocBoot/iocGuardianTest'
      make[1]: Leaving directory '/mnt/eed/ad-build/scratch/test-ioc-main-pnispero/test-ioc-main/iocBoot'
      
      == ADBS == Running unit tests
      == ADBS == Running bash script test test.sh
      Simulate - test.sh run
      
      == ADBS == Running python script test test.py
      Simulate - test.py ran
      
      $ sleep to keep container alive for debug
      pnispero@PC100942:~/BuildSystem$
  4. swork on cli - plan of making our own, but can use gh cli as one of tools
  5. Make our own cli - can use python (for ease of development, and speed is not important since its ran from a dev's machine as just another process)
  6. Use GNU Coding Standards section 4.8 'standards for command line interfaces'
  7. Currently have a structure laid out, and have some commands available