- Introduced global usings for Ruby analyzer. - Implemented RubyLockData, RubyLockEntry, and RubyLockParser for handling Gemfile.lock files. - Created RubyPackage and RubyPackageCollector to manage Ruby packages and vendor cache. - Developed RubyAnalyzerPlugin and RubyLanguageAnalyzer for analyzing Ruby projects. - Added tests for Ruby language analyzer with sample Gemfile.lock and expected output. - Included necessary project files and references for the Ruby analyzer. - Added third-party licenses for tree-sitter dependencies.
		
			
				
	
	
	
		
			5.6 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Issuer Directory Deployment Guide
Scope
- Applies to: Issuer Directory WebService (
stellaops/issuer-directory-web) running via the provided Docker Compose bundles (deploy/compose/docker-compose.*.yaml) or the Helm chart (deploy/helm/stellaops). - Covers: Environment prerequisites, secret handling, Compose + Helm rollout steps, and post-deploy verification.
 - Audience: Platform/DevOps engineers responsible for Identity & Signing sprint deliverables.
 
1 · Prerequisites
- Authority must be running and reachable at the issuer URL you configure (default Compose host: 
https://authority:8440). - MongoDB 4.2+ with credentials for the 
issuer-directorydatabase (Compose defaults to the root user defined in.env). - Network access to Authority, MongoDB, and (optionally) Prometheus if you scrape metrics.
 - Issuer Directory configuration file 
etc/issuer-directory.yamlchecked and customised for your environment (tenant header, audiences, telemetry level, CSAF seed path). 
Secrets: Use
etc/secrets/issuer-directory.mongo.secret.exampleas a template. Store the real connection string in an untracked file or secrets manager and reference it via environment variables (ISSUER_DIRECTORY_MONGO_CONNECTION_STRING) rather than committing credentials.
2 · Deploy with Docker Compose
- 
Prepare environment variables
cp deploy/compose/env/dev.env.example dev.env cp etc/secrets/issuer-directory.mongo.secret.example issuer-directory.mongo.env # Edit dev.env and issuer-directory.mongo.env with production-ready secrets. - 
Inspect the merged configuration
docker compose \ --env-file dev.env \ --env-file issuer-directory.mongo.env \ -f deploy/compose/docker-compose.dev.yaml configThe command confirms the new
issuer-directoryservice resolves the port (${ISSUER_DIRECTORY_PORT:-8447}) and the Mongo connection string is in place. - 
Launch the stack
docker compose \ --env-file dev.env \ --env-file issuer-directory.mongo.env \ -f deploy/compose/docker-compose.dev.yaml up -d issuer-directoryCompose automatically mounts
../../etc/issuer-directory.yamlinto the container at/etc/issuer-directory.yaml, seeds CSAF publishers, and exposes the API onhttps://localhost:8447. - 
Smoke test
curl -k https://localhost:8447/health/live stellaops-cli issuer-directory issuers list \ --base-url https://localhost:8447 \ --tenant demo \ --access-token "$(stellaops-cli auth token issue --scope issuer-directory:read)" - 
Upgrade & rollback
- Update Compose images to the desired release manifest (
deploy/releases/*.yaml), re-rundocker compose config, thendocker compose up -d. - Rollbacks follow the same steps with the previous manifest. Mongo collections are backwards compatible within 
2025.10.x. 
 - Update Compose images to the desired release manifest (
 
3 · Deploy with Helm
- 
Create or update the secret
kubectl create secret generic issuer-directory-secrets \ --from-literal=ISSUERDIRECTORY__MONGO__CONNECTIONSTRING='mongodb://stellaops:<password>@stellaops-mongo:27017' \ --dry-run=client -o yaml | kubectl apply -f -Add optional overrides (e.g.
ISSUERDIRECTORY__AUTHORITY__ISSUER) if your Authority issuer differs from the default. - 
Template for validation
helm template issuer-directory deploy/helm/stellaops \ -f deploy/helm/stellaops/values-prod.yaml \ --set services.issuer-directory.env.ISSUERDIRECTORY__AUTHORITY__ISSUER=https://authority.prod.stella-ops.org \ > /tmp/issuer-directory.yaml - 
Install / upgrade
helm upgrade --install stellaops deploy/helm/stellaops \ -f deploy/helm/stellaops/values-prod.yaml \ --set services.issuer-directory.env.ISSUERDIRECTORY__AUTHORITY__ISSUER=https://authority.prod.stella-ops.orgThe chart provisions:
- ConfigMap 
stellaops-issuer-directory-configwithIssuerDirectorysettings. - Deployment 
stellaops-issuer-directorywith readiness/liveness probes on/health/live. - Service on port 
8080(ClusterIP by default). 
 - ConfigMap 
 - 
Expose for operators (optional)
- Use an Ingress/HTTPRoute to publish 
https://issuer-directory.<env>.stella-ops.org. - Ensure the upstream includes DPoP headers if proxied through an API gateway.
 
 - Use an Ingress/HTTPRoute to publish 
 - 
Post-deploy validation
kubectl exec deploy/stellaops-issuer-directory -- \ curl -sf http://127.0.0.1:8080/health/live kubectl logs deploy/stellaops-issuer-directory | grep 'IssuerDirectory Mongo connected'Prometheus should begin scraping
issuer_directory_changes_totaland related metrics (labels:tenant,issuer,action). 
4 · Operational checklist
- Secrets: Connection strings live in 
issuer-directory-secrets(Helm) or an.envfile stored in your secrets vault (Compose). Rotate credentials via secret update + pod restart. - Audit streams: Confirm 
issuer_directory_auditcollection receives entries when CRUD operations run; export logs for compliance. - Tenants: The service enforces the 
X-StellaOps-Tenantheader. For multi-tenant staging, configure the reverse proxy to inject the correct tenant or issue scoped tokens. - CSAF seeds: 
ISSUER_DIRECTORY_SEED_CSAF=truereplaysdata/csaf-publishers.jsonon startup. Set tofalseonce production tenants are fully managed, or overridecsafSeedPathwith a curated bundle. - Release alignment: Before promotion, run 
deploy/tools/validate-profiles.shto lint Compose/Helm bundles, then verify the newissuer-directory-webentry indeploy/releases/2025.10-edge.yaml(or the relevant manifest) matches the channel you intend to ship.