{"id":23122570,"url":"https://github.com/folio-org/platform-lsp","last_synced_at":"2026-01-18T02:52:12.651Z","repository":{"id":262221211,"uuid":"880475858","full_name":"folio-org/platform-lsp","owner":"folio-org","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-02T04:08:56.000Z","size":1331,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-02T05:19:50.684Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/folio-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-29T19:45:13.000Z","updated_at":"2025-03-26T15:33:18.000Z","dependencies_parsed_at":"2024-11-11T09:26:49.865Z","dependency_job_id":"2f55c6e8-487f-4952-ab0f-50eed57a6696","html_url":"https://github.com/folio-org/platform-lsp","commit_stats":null,"previous_names":["folio-org/platform-lsp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Fplatform-lsp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Fplatform-lsp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Fplatform-lsp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folio-org%2Fplatform-lsp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/folio-org","download_url":"https://codeload.github.com/folio-org/platform-lsp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247118711,"owners_count":20886606,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T07:28:11.960Z","updated_at":"2026-01-18T02:52:12.635Z","avatar_url":"https://github.com/folio-org.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# platform-lsp\n\n**FOLIO Eureka Platform State Repository** - Central source of truth for FOLIO Library Services Platform configuration and component orchestration.\n\n## Overview\n\nThe `platform-lsp` repository maintains the **definitive state** of the FOLIO Eureka platform, serving as the single source of truth for platform composition, component versions, and deployment configuration. This repository enables consistent platform deployments across environments by defining all required components, applications, and their exact versions.\n\n## 🏗️ Eureka Platform Architecture\n\nThe FOLIO Eureka deployment represents a sophisticated microservices architecture with enhanced features compared to traditional FOLIO deployments:\n\n### Core Components\n\n**Eureka-Specific Components (Stateful/Daemon Sets):**\n- **🔐 Keycloak**: Authentication and authorization service (Stateful-set)\n- **🌐 Kong**: API gateway and traffic management (Daemon-set)  \n- **📋 mgr-applications**: Application registry and management (Replica-set)\n- **🏢 mgr-tenants**: Tenant lifecycle management\n- **🔗 mgr-tenant-entitlements**: Tenant permission management\n- **🔧 folio-module-sidecar**: Service discovery and proxy sidecars\n\n**Infrastructure Services:**\n- **🗄️ PostgreSQL**: Primary data storage with multiple databases (Stateful-set)\n- **🔍 OpenSearch**: Search and analytics engine (Stateful-set)\n- **📨 Kafka**: Event streaming and messaging platform (Stateful-set)\n\n### Application Layer\n\nThe platform orchestrates **31 application repositories**, each containing domain-specific modules:\n\n```\n┌─────────────────────────────────────┐\n│         platform-lsp                │\n│    (Platform State Definition)      │\n│                                     │\n│  📄 platform-descriptor.json        │\n│  📦 package.json \u0026 yarn.lock        │\n│  ⚙️  stripes.config.js              │\n│  🔧 stripes.modules.js              │\n└─────────────────┬───────────────────┘\n                  │\n        Platform State Coordination\n                  │\n    ┌─────────────┼─────────────┐\n    │             │             │\n    ▼             ▼             ▼\n┌─────────┐  ┌─────────┐  ┌─────────┐\n│app-*    │  │app-*    │  │app-*    │\n│(31 apps)│  │(domain) │  │(modules)│\n└─────────┘  └─────────┘  └─────────┘\n```\n\n## 📄 Platform Descriptor Structure\n\nThe `platform-descriptor.json` is the **core artifact** defining the complete platform state:\n\n### Platform Metadata\n```json\n{\n  \"name\": \"Platform LSP\",\n  \"description\": \"FOLIO Library Services Platform - Eureka Implementation\",\n  \"version\": \"R2-2025-SNAPSHOT.4803\"\n}\n```\n\n### Eureka Components\n```json\n\"eureka-components\": [\n  {\"name\": \"folio-kong\", \"version\": \"3.10.0-SNAPSHOT.16\"},\n  {\"name\": \"folio-keycloak\", \"version\": \"26.3.0-SNAPSHOT.53\"},\n  {\"name\": \"folio-module-sidecar\", \"version\": \"2.0.6\"},\n  {\"name\": \"mgr-applications\", \"version\": \"4.0.0-SNAPSHOT.168\"},\n  {\"name\": \"mgr-tenants\", \"version\": \"2.0.1\"},\n  {\"name\": \"mgr-tenant-entitlements\", \"version\": \"2.0.8\"}\n]\n```\n\n### Application Definitions\n```json\n\"applications\": {\n  \"required\": [\n    {\"name\": \"app-platform-minimal\", \"version\": \"1.0.0-SNAPSHOT.4803\"},\n    {\"name\": \"app-platform-complete\", \"version\": \"1.0.0-SNAPSHOT.4808\"}\n  ],\n  \"optional\": [\n    {\"name\": \"app-erm-usage\", \"version\": \"1.0.0-SNAPSHOT.4803\"},\n    {\"name\": \"app-acquisitions\", \"version\": \"1.0.0-SNAPSHOT.4803\"},\n    {\"name\": \"app-consortia\", \"version\": \"1.1.0-SNAPSHOT.4803\"}\n  ]\n}\n```\n\n### Infrastructure Dependencies\n```json\n\"dependencies\": {\n  \"postgres\": \"\u003e=16.0\",\n  \"kafka\": \"\u003e=2.8.0\", \n  \"opensearch\": \"\u003e=1.0.0\"\n}\n```\n\n## 🌿 Branch Strategy \u0026 Platform States\n\n### Platform State Correlation\n\nEach branch represents a specific **platform state** with different purposes:\n\n| **Branch** | **Platform State** | **Purpose** | **Component Versions** |\n|------------|-------------------|-------------|----------------------|\n| **`master`** | **Current Stable Release** | Production-ready state | Latest stable release versions |\n| **`snapshot`** | **Latest Development** | Active development state | Latest SNAPSHOT versions |\n| **`R1-2025`** | **Specific Release** | Tagged release state | Fixed release versions (e.g., 1.2.0) |\n| **`R2-2024`** | **Previous Release** | Historical release state | Previous release versions |\n\n### Branch Lifecycle\n\n```\nDevelopment Flow:\nsnapshot → (development) → Rx-YYYY (release preparation) → master (stable)\n\nVersion Evolution:\n1.0.0-SNAPSHOT.xxx → 1.0.0 → 1.1.0-SNAPSHOT.xxx → 1.1.0\n```\n\n### State Transitions\n\n- **Snapshot → Release**: Component versions change from `SNAPSHOT` to fixed versions\n- **Release → Master**: Stable release state becomes current production baseline\n- **Master → Next Snapshot**: New development cycle begins with incremented SNAPSHOT versions\n\n## 🔄 Eureka CI Flow Integration\n\nThe platform-lsp repository is central to the **Eureka CI flow** as documented in the [CI flow [release]](https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/887488514/CI+flow+release):\n\n### Scan Flow (Automated)\n- **Purpose**: Continuously monitor for component updates\n- **Trigger**: Scheduled/automated\n- **Action**: Updates platform descriptor with latest available versions\n- **Output**: Pull requests with version updates\n\n### Pull Request Update Flow\n- **Purpose**: Validate platform descriptor changes\n- **Trigger**: PR creation/update\n- **Action**: Runs validation, builds, and tests\n- **Output**: Validated platform state or failure notifications\n\n### Pull Request Merge Flow  \n- **Purpose**: Finalize platform state updates\n- **Trigger**: PR approval and merge\n- **Action**: Commits new platform state, creates tags\n- **Output**: Updated platform releases and notifications\n\n### Release Preparation Flow\n- **Purpose**: Coordinate release across all applications\n- **Trigger**: Manual (Kitfox team)\n- **Action**: Creates release branches and coordinates application updates\n- **Output**: Complete platform release preparation\n\n## 📦 Release Artifacts\n\nWhen creating platform releases, **tar.gz archives** are generated containing the complete platform state as described in [Artifacts [release]](https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/889389109/Artifacts+release):\n\n### Archive Contents\n- **`platform-descriptor.json`**: Complete platform definition\n- **Application descriptors folder**: All application compositions\n- **`package.json` \u0026 `yarn.lock`**: Frontend dependency management\n- **`stripes.config.js` \u0026 `stripes.modules.js`**: Stripes framework configuration\n\n### Release Versioning\n```\nPlatform Release: R2-2025.1\n├── Eureka Components: Fixed versions (e.g., kong-3.10.0)\n├── Applications: Fixed versions (e.g., app-platform-minimal-1.0.0)\n└── Dependencies: Minimum required versions\n```\n\n## 🏗️ Platform Management\n\n### Component Categories\n\n**Required Applications**: Must be present in all FOLIO installations\n- `app-platform-minimal`: Core FOLIO functionality\n- `app-platform-complete`: Extended platform features\n\n**Optional Applications**: Installed based on institutional needs\n- Domain-specific applications (ERM, Acquisitions, etc.)\n- Specialized workflow applications\n- Integration applications (Edge services)\n\n**Eureka Components**: Eureka-specific enhancements\n- Authentication (Keycloak)\n- API Gateway (Kong) \n- Application Management (mgr-applications)\n- Service Discovery (sidecar)\n\n## 🤝 Contributing\n\n### Making Platform Changes\n\n1. **🎫 Create Feature Branch**: Use Jira ticket name (`RANCHER-XXXX`)\n2. **🔍 Impact Assessment**: Consider effects across all platform components\n3. **📋 Update Platform Descriptor**: Modify component versions as needed\n4. **🧪 Test Changes**: Validate platform composition and dependencies\n\n## 🎯 Platform Mission\n\nPlatform-lsp enables **FOLIO's Eureka implementation** by:\n\n- **🏗️ Centralizing Platform State**: Single source of truth for complete platform composition\n- **⚡ Enabling Eureka Features**: Orchestrates enhanced microservices architecture with sidecars, Kong, and Keycloak\n- **🔄 Supporting CI/CD**: Integrates with automated scanning, validation, and release processes\n- **📦 Ensuring Consistency**: Provides reproducible platform deployments through versioned artifacts\n- **🛡️ Maintaining Security**: Team-based authorization for critical platform operations\n\n---\n\n**Quick Links**: \n- [Platform Descriptor](/platform-descriptor.json) \n- [Eureka Architecture](https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/156368911/Eureka+Namespace+Architecture)\n- [CI Flow Documentation](https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/887488514/CI+flow+release)\n- [Release Artifacts](https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/889389109/Artifacts+release)\n- [FOLIO Documentation](https://wiki.folio.org)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolio-org%2Fplatform-lsp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffolio-org%2Fplatform-lsp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolio-org%2Fplatform-lsp/lists"}