# 5. Use Python for scripting inside and outside containers

Date: 2022-11-30

## Status

Accepted

## Context

Inside the container, we use the `ibek` tool for scripting. Outside we
use `ec` from `epics-containers-cli`.

Much of what these tools do is
call command line tools like `docker`, `helm`, `kubectl`, compilers,
etc. This seems like a natural fit for bash scripts.

These features were originally implemented in bash but were converted to
python for the following reasons:

- python provides for much richer command line arguments
- it is also much easier to provide rich help
- managing errors is vastly improved with exception handling
- the unit testing framework allows good test coverage in continuous integration
- complex string handling is a common requirement and is much easier in python
- there is a clear versioning strategy and packages can be installed with pip,
  meaning that you can check which version of the script you are running and
  report bugs against a specific version
- the code is much easier to read and maintain
- because the packages can be pip installed they can be used in CI and inside
  multiple containers without having to copy the scripts around

## Decision

We always prefer Python and keep bash scripts to a minimum

## Consequences

Scripting is much easier to maintain and is more reliable.