|
| 1 | +# Container Images and Github Actions |
| 2 | + |
| 3 | +Aries Cloud Agent - Python is most frequently deployed using containers. From |
| 4 | +the first release of ACA-Py up through 0.7.4, much of the community has built |
| 5 | +their Aries stack using the container images graciously provided by BC Gov and |
| 6 | +hosted through their `bcgovimages` docker hub account. These images have been |
| 7 | +critical to the adoption of not only ACA-Py but also Hyperledger Aries and SSI |
| 8 | +more generally. |
| 9 | + |
| 10 | +Recognizing how critical these images are to the success of ACA-Py and |
| 11 | +consistent with Hyperledger's commitment to open collaboration, container images |
| 12 | +are now built and published directly from the Aries Cloud Agent - Python project |
| 13 | +repository and made available through the [Github Packages Container |
| 14 | +Registry](https://ghcr.io). |
| 15 | + |
| 16 | + |
| 17 | +## Image |
| 18 | + |
| 19 | +This project builds and publishes the `ghcr.io/hyperledger/aries-cloudagent-python` image. |
| 20 | +Multiple variants are available; see [Tags](#tags). |
| 21 | + |
| 22 | +### Tags |
| 23 | + |
| 24 | +ACA-Py is a foundation for building decentralized identity applications; to this |
| 25 | +end, there are multiple variants of ACA-Py built to suit the needs of a variety |
| 26 | +of environments and workflows. There are currently two main variants: |
| 27 | + |
| 28 | +- "Standard" - The default configuration of ACA-Py, including: |
| 29 | + - Aries Askar for secure storage |
| 30 | + - Indy VDR for Indy ledger communication |
| 31 | + - Indy Shared Libraries for AnonCreds |
| 32 | +- "Indy" - The legacy configuration of ACA-Py, including: |
| 33 | + - Indy SDK Wallet for secure storage |
| 34 | + - Indy SDK Ledger for Indy ledger communication |
| 35 | + - Indy SDK for AnonCreds |
| 36 | + |
| 37 | +These two image variants are largely distinguished by providers for Indy Network |
| 38 | +and AnonCreds support. The Standard variant is recommended for new projects. |
| 39 | +Migration from an Indy based image (whether the new Indy image variant or the |
| 40 | +original BC Gov images) to the Standard image is outside of the scope of this |
| 41 | +document. |
| 42 | + |
| 43 | +The ACA-Py images built by this project are tagged to indicate which of the |
| 44 | +above variants it is. Other tags may also be generated for use by developers. |
| 45 | + |
| 46 | +Below is a table of all generated images and their tags: |
| 47 | + |
| 48 | +Tag | Variant | Example | Description | |
| 49 | +------------------------|----------|--------------------------|-------------------------------------------------------------------------------------------------| |
| 50 | +py3.6-X.Y.Z | Standard | py3.6-0.7.4 | Standard image variant built on Python 3.6 for ACA-Py version X.Y.Z | |
| 51 | +py3.7-X.Y.Z | Standard | py3.7-0.7.4 | Standard image variant built on Python 3.7 for ACA-Py version X.Y.Z | |
| 52 | +py3.8-X.Y.Z | Standard | py3.8-0.7.4 | Standard image variant built on Python 3.8 for ACA-Py version X.Y.Z | |
| 53 | +py3.9-X.Y.Z | Standard | py3.9-0.7.4 | Standard image variant built on Python 3.9 for ACA-Py version X.Y.Z | |
| 54 | +py3.10-X.Y.Z | Standard | py3.10-0.7.4 | Standard image variant built on Python 3.10 for ACA-Py version X.Y.Z | |
| 55 | +py3.7-indy-A.B.C-X.Y.Z | Indy | py3.7-indy-1.16.0-0.7.4 | Standard image variant built on Python 3.7 for ACA-Py version X.Y.Z and Indy SDK Version A.B.C | |
| 56 | +py3.8-indy-A.B.C-X.Y.Z | Indy | py3.8-indy-1.16.0-0.7.4 | Standard image variant built on Python 3.8 for ACA-Py version X.Y.Z and Indy SDK Version A.B.C | |
| 57 | +py3.9-indy-A.B.C-X.Y.Z | Indy | py3.9-indy-1.16.0-0.7.4 | Standard image variant built on Python 3.9 for ACA-Py version X.Y.Z and Indy SDK Version A.B.C | |
| 58 | +py3.10-indy-A.B.C-X.Y.Z | Indy | py3.10-indy-1.16.0-0.7.4 | Standard image variant built on Python 3.10 for ACA-Py version X.Y.Z and Indy SDK Version A.B.C | |
| 59 | + |
| 60 | +### Image Comparison |
| 61 | + |
| 62 | +There are several key differences that should be noted between the two image |
| 63 | +variants and between the BC Gov ACA-Py images. |
| 64 | + |
| 65 | +- Standard Image |
| 66 | + - Based on slim variant of Debian |
| 67 | + - Does **NOT** include `libindy` |
| 68 | + - Default user is `aries` |
| 69 | + - Uses container's system python environment rather than `pyenv` |
| 70 | + - Askar and Indy Shared libraries are installed as dependencies of ACA-Py through pip from pre-compiled binaries included in the python wrappers |
| 71 | + - Built from repo contents |
| 72 | +- Indy Image |
| 73 | + - Based on slim variant of Debian |
| 74 | + - Built from multi-stage build step (`indy-base` in the Dockerfile) which includes Indy dependencies; this could be replaced with an explicit `indy-python` image from the Indy SDK repo |
| 75 | + - Includes `libindy` but does **NOT** include the Indy CLI |
| 76 | + - Default user is `indy` |
| 77 | + - Uses container's system python environment rather than `pyenv` |
| 78 | + - Askar and Indy Shared libraries are installed as dependencies of ACA-Py through pip from pre-compiled binaries included in the python wrappers |
| 79 | + - Built from repo contents |
| 80 | + - Includes Indy postgres storage plugin |
| 81 | +- `bcgovimages/aries-cloudagent` |
| 82 | + - (Usually) based on Ubuntu |
| 83 | + - Based on `von-image` |
| 84 | + - Default user is `indy` |
| 85 | + - Includes `libindy` and Indy CLI |
| 86 | + - Uses `pyenv` |
| 87 | + - Askar and Indy Shared libraries built from source |
| 88 | + - Built from ACA-Py python package uploaded to PyPI |
| 89 | + - Includes Indy postgres storage plugin |
| 90 | + |
| 91 | +## Github Actions |
| 92 | + |
| 93 | +- Tests (`.github/workflows/tests.yml`) - A reusable workflow that runs tests |
| 94 | + for the Standard ACA-Py variant for a given python version. |
| 95 | +- Tests (Indy) (`.github/workflows/tests-indy.yml`) - A reusable workflow that |
| 96 | + runs tests for the Indy ACA-Py variant for a given python and indy version. |
| 97 | +- PR Tests (`.github/workflows/pr-tests.yml`) - Run on pull requests; runs tests |
| 98 | + for the Standard and Indy ACA-Py variants for a "default" python version. |
| 99 | + Check this workflow for the current default python and Indy versions in use. |
| 100 | +- Nightly Tests (`.github/workflows/nightly-tests.yml`) - Run nightly; runs |
| 101 | + tests for the Standard and Indy ACA-Py variants for all currently supported |
| 102 | + python versions. Check this workflow for the set of currently supported |
| 103 | + versions and Indy version(s) in use. |
| 104 | +- Publish (`.github/workflows/publish.yml`) - Run on new release published or |
| 105 | + when manually triggered; builds and pushes the Standard ACA-Py variant to the |
| 106 | + Github Container Registry. |
| 107 | +- Publish (Indy) (`.github/workflows/publish-indy.yml`) - Run on new release |
| 108 | + published or when manually triggered; builds and pushes the Indy ACA-Py |
| 109 | + variant to the Github Container Registry. |
| 110 | +- Integration Tests (`.github/workflows/integrationtests.yml`) - Run on pull |
| 111 | + requests (to the hyperledger fork only); runs BDD integration tests. |
| 112 | +- Black Format (`.github/workflows/blackformat.yml`) - Run on pull requests; |
| 113 | + checks formatting of files modified by the PR. |
| 114 | +- CodeQL (`.github/workflows/codeql.yml`) - Run on pull requests; performs |
| 115 | + CodeQL analysis. |
| 116 | +- Python Publish (`.github/workflows/pythonpublish.yml`) - Run on release |
| 117 | + created; publishes ACA-Py python package to PyPI. |
| 118 | +- PIP Audit (`.github/workflows/pipaudit.yml`) - Run when manually triggered; |
| 119 | + performs pip audit. |
0 commit comments