{"id":45270115,"url":"https://github.com/linuxfoundation/lfx-v2-committee-service","last_synced_at":"2026-04-09T09:01:02.486Z","repository":{"id":307743525,"uuid":"1016239466","full_name":"linuxfoundation/lfx-v2-committee-service","owner":"linuxfoundation","description":"LFX v2 Platform Committee Service","archived":false,"fork":false,"pushed_at":"2026-03-30T01:20:26.000Z","size":11496,"stargazers_count":0,"open_issues_count":4,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T06:24:23.314Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linuxfoundation.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":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-08T17:42:59.000Z","updated_at":"2026-03-30T01:20:01.000Z","dependencies_parsed_at":"2025-08-02T00:29:11.441Z","dependency_job_id":"7a592739-5d87-4bc7-bba9-8f035faf9932","html_url":"https://github.com/linuxfoundation/lfx-v2-committee-service","commit_stats":null,"previous_names":["linuxfoundation/lfx-v2-committee-service"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/linuxfoundation/lfx-v2-committee-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Flfx-v2-committee-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Flfx-v2-committee-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Flfx-v2-committee-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Flfx-v2-committee-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linuxfoundation","download_url":"https://codeload.github.com/linuxfoundation/lfx-v2-committee-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxfoundation%2Flfx-v2-committee-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31382355,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T23:20:52.058Z","status":"ssl_error","status_checked_at":"2026-04-03T23:20:51.675Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2026-02-21T01:07:51.936Z","updated_at":"2026-04-04T00:09:29.031Z","avatar_url":"https://github.com/linuxfoundation.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LFX V2 Committee Service\n\nThis repository contains the source code for the LFX v2 platform committee service.\n\n## Overview\n\nThe LFX v2 Committee Service is a RESTful API service that manages committees and their members within the Linux Foundation's LFX platform. It provides endpoints for creating, reading, updating, and deleting committees and committee members with built-in authorization and audit capabilities. Committees are associated with projects and can have hierarchical structures with parent-child relationships.\n\n## File Structure\n\n```bash\n├── .github/                        # Github files\n│   └── workflows/                  # Github Action workflow files\n├── charts/                         # Helm charts for running the service in kubernetes\n├── cmd/                            # Services (main packages)\n│   └── committee-api/              # Committee service code\n│       ├── design/                 # API design specifications (Goa)\n│       ├── service/                # Service implementation\n│       ├── main.go                 # Application entry point\n│       └── http.go                 # HTTP server setup\n├── docs/                           # Feature and flow documentation\n├── gen/                            # Generated code from Goa design\n├── internal/                       # Internal service packages\n│   ├── domain/                     # Domain logic layer (business logic)\n│   │   ├── model/                  # Domain models and entities\n│   │   └── port/                   # Repository and service interfaces\n│   ├── service/                    # Service logic layer (use cases)\n│   ├── infrastructure/             # Infrastructure layer\n│   │   ├── auth/                   # Authentication implementations\n│   │   ├── nats/                   # NATS storage implementation\n│   │   └── mock/                   # Mock implementations for testing\n│   └── middleware/                 # HTTP middleware components\n└── pkg/                            # Shared packages\n```\n\n## Key Features\n\n- **RESTful API**: Full CRUD operations for committee and committee member management\n- **NATS Messaging**: Inter-service communication for committee data retrieval via NATS subjects\n- **Committee Hierarchies**: Support for parent-child committee relationships\n- **Member Management**: Comprehensive committee member operations including roles, voting status, and organization details\n- **Project Integration**: Committees are associated with projects for organizational structure\n- **Clean Architecture**: Follows clean architecture principles with clear separation of domain, service, and infrastructure layers\n- **NATS Storage**: Uses NATS key-value buckets for persistent committee data storage\n- **Authorization**: JWT-based authentication with Heimdall middleware integration\n- **OpenFGA Support**: Fine-grained authorization control for committee access (configurable)\n- **Health Checks**: Built-in `/livez` and `/readyz` endpoints\n- **Request Tracking**: Automatic request ID generation and propagation\n- **Structured Logging**: JSON-formatted logs with contextual information\n- **Committee Settings**: Configurable voting, membership, and access control settings\n\n## Documentation\n\n- [Invite \u0026 Application Flows](docs/invite-application-flows.md) — membership modes, invite/application lifecycle, state transitions, and edge cases\n\n## Releases\n\n### Creating a Release\n\nTo create a new release of the committee service:\n\n1. **Update the chart version** in `charts/lfx-v2-committee-service/Chart.yaml` prior to any project releases, or if any\n   change is made to the chart manifests or configuration:\n\n   ```yaml\n   version: 0.2.0  # Increment this version\n   appVersion: \"latest\"  # Keep this as \"latest\"\n   ```\n\n2. **After the pull request is merged**, create a GitHub release and choose the\n   option for GitHub to also tag the repository. The tag must follow the format\n   `v{version}` (e.g., `v0.2.0`). This tag does _not_ have to match the chart\n   version: it is the version for the project release, which will dynamically\n   update the `appVersion` in the released chart.\n\n3. **The GitHub Actions workflow will automatically**:\n   - Build and publish the container images (committee-api)\n   - Package and publish the Helm chart to GitHub Pages\n   - Publish the chart to GitHub Container Registry (GHCR)\n   - Sign the chart with Cosign\n   - Generate SLSA provenance\n\n### Important Notes\n\n- The `appVersion` in `Chart.yaml` should always remain `\"latest\"` in the committed code.\n- During the release process, the `ko-build-tag.yaml` workflow automatically overrides the `appVersion` with the actual tag version (e.g., `v0.2.0` becomes `0.2.0`).\n- Only update the chart `version` field when making releases - this represents the Helm chart version.\n- The container image tags are automatically managed by the consolidated CI/CD pipeline using the git tag.\n- Both container images (committee-api) and the Helm chart are published together in a single workflow.\n\n## Development\n\nTo contribute to this repository:\n\n1. Fork the repository\n2. Commit your changes to a feature branch in your fork. Ensure your commits\n   are signed with the [Developer Certificate of Origin\n   (DCO)](https://developercertificate.org/).\n   You can use the `git commit -s` command to sign your commits.\n3. Ensure the chart version in `charts/lfx-v2-committee-service/Chart.yaml` has been\n   updated following semantic version conventions if you are making changes to the chart.\n4. Submit your pull request\n\nFor detailed development instructions, including local setup, testing, and API development guidelines, see the [Committee API README](cmd/committee-api/README.md).\n\n## License\n\nCopyright The Linux Foundation and each contributor to LFX.\n\nThis project’s source code is licensed under the MIT License. A copy of the\nlicense is available in `LICENSE`.\n\nThis project’s documentation is licensed under the Creative Commons Attribution\n4.0 International License \\(CC-BY-4.0\\). A copy of the license is available in\n`LICENSE-docs`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxfoundation%2Flfx-v2-committee-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxfoundation%2Flfx-v2-committee-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxfoundation%2Flfx-v2-committee-service/lists"}