Custom & Optional Applications in CI/CD Pipelines (Architectural Design)
1. Problem Statement
The current CI/CD pipeline infrastructure supports deploying environments with applications from the FOLIO Application Registry (FAR), where all application versions are production-ready snapshots or releases. There is no mechanism to:
Deploy environments with experimental applications that are still in development
Build application descriptors from feature branches using custom module versions stored in ECR/S3
Reference feature-branch-built application descriptors in the platform descriptor instead of FAR versions
Validate Docker images in ECR during application descriptor generation
Deploy custom UI modules from feature branches
2. Current Architecture
Environment Provisioning Flow
Key Components
Component | Role | Location |
|---|---|---|
| Central platform descriptor with app list + versions |
|
| Application descriptor registry |
|
| Jenkins pipeline logic |
|
| GitHub Actions CI for app builds |
|
| Maven plugin for descriptor generation | Okapi/S3 registries, DockerHub/NPM validation |
| Standalone module build pipeline | Compile, Docker build, ECR push, S3 descriptor |
| Feature module deploy pipeline | Build + deploy to running env |
Application Selection (Jenkins UI)
folioStringScripts.getApplicationsFromPlatformDescriptor() fetches platform-descriptor.json from GitHub raw and populates PT_CHECKBOX parameters. Currently all required and optional apps are marked as :selected (checked).
Module Registry Routing (folioHelm.determineModulePlacement())
Version Pattern | Registry | Example |
|---|---|---|
| DockerHub |
|
| DockerHub |
|
| ECR |
|
| ECR |
|
Custom module / | ECR | Any |
3. Proposed Architecture: Custom Version Deployment Flow
4. Workstreams
WS1: Experimental Applications in platform-descriptor
Objective: Allow applications to appear unchecked by default in the Jenkins pipeline UI, excluded from interface validation during CI updates.
Schema change in platform-descriptor.json (snapshot branch only):
{
"applications": {
"required": [
{"name": "app-platform-minimal", "version": "2.0.24"},
{"name": "app-platform-complete", "version": "2.1.40"}
],
"optional": [
{"name": "app-acquisitions", "version": "1.0.22"}
],
"experimental": [
{"name": "app-new-feature", "version": "0.1.0-SNAPSHOT.100100000000123"}
]
}
}
Pipeline UI: getApplicationsFromPlatformDescriptor() iterates experimental apps WITHOUT :selected suffix, so they appear unchecked in Jenkins PT_CHECKBOX.
CI update: check-apps.sh processes experimental apps for version updates from FAR but does NOT add them to app_ids[] array used for interface validation.
Affected files:
platform-lsp/platform-descriptor.jsonplatform-lsp/scripts/check-apps.shpipelines-shared-library/vars/folioStringScripts.groovy
WS2: Feature Build Support via Extended application-update-flow
Objective: Enable building application descriptors from feature branches using custom module registries, without publishing to FAR.
Approach: Extend existing application-update-flow.yml with new optional inputs:
Input | Purpose | Default |
|---|---|---|
| S3 fallback for custom module descriptors |
|
| ECR for custom Docker image validation |
|
| Skip FAR publish for feature builds |
|