{"id":42023945,"url":"https://github.com/robinmordasiewicz/f5xc-api-fixed","last_synced_at":"2026-04-04T08:05:31.020Z","repository":{"id":334594413,"uuid":"1141937023","full_name":"robinmordasiewicz/f5xc-api-fixed","owner":"robinmordasiewicz","description":"Validated F5 Distributed Cloud OpenAPI specifications","archived":false,"fork":false,"pushed_at":"2026-03-28T06:28:22.000Z","size":1616,"stargazers_count":0,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T11:38:05.239Z","etag":null,"topics":["api","f5xc","openapi"],"latest_commit_sha":null,"homepage":"https://robinmordasiewicz.github.io/f5xc-api-fixed/","language":"Python","has_issues":true,"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/robinmordasiewicz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"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":"2026-01-25T17:29:10.000Z","updated_at":"2026-03-28T06:27:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"e5042938-bcc2-4d3b-b1c6-d5e507fe1ced","html_url":"https://github.com/robinmordasiewicz/f5xc-api-fixed","commit_stats":null,"previous_names":["robinmordasiewicz/f5xc-api-fixed"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/robinmordasiewicz/f5xc-api-fixed","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinmordasiewicz%2Ff5xc-api-fixed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinmordasiewicz%2Ff5xc-api-fixed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinmordasiewicz%2Ff5xc-api-fixed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinmordasiewicz%2Ff5xc-api-fixed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robinmordasiewicz","download_url":"https://codeload.github.com/robinmordasiewicz/f5xc-api-fixed/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinmordasiewicz%2Ff5xc-api-fixed/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"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":["api","f5xc","openapi"],"created_at":"2026-01-26T04:03:43.589Z","updated_at":"2026-04-01T19:33:01.852Z","avatar_url":"https://github.com/robinmordasiewicz.png","language":"Python","readme":"# F5 XC API Spec Validation Framework\n\nReconcile live F5 Distributed Cloud API behavior with published OpenAPI specs, producing validated/fixed spec files released via GitHub releases.\n\n## Overview\n\nThis framework validates F5 XC OpenAPI specifications against the live API, identifies\ndiscrepancies, and produces corrected spec files. The release package contains either:\n\n- **Fixed specs** where modifications were needed\n- **Original specs** where no modifications were needed (pass-through)\n\n## Quick Start\n\n```bash\n# Install dependencies\nmake install\n\n# Run full pipeline\nmake all\n```\n\n## Requirements\n\n- Python 3.10+\n- F5 XC API Token with appropriate permissions\n- Network access to F5 XC console\n\n## Configuration\n\nSet environment variables:\n\n```bash\nexport F5XC_API_URL=https://f5-amer-ent.console.ves.volterra.io\nexport F5XC_API_TOKEN=\u003cyour-api-token\u003e\n```\n\nOr create a `.env` file:\n\n```env\nF5XC_API_URL=https://f5-amer-ent.console.ves.volterra.io\nF5XC_API_TOKEN=your-api-token-here\n```\n\n## Usage\n\n### Individual Commands\n\n```bash\n# Download OpenAPI specs from F5\nmake download\n\n# Validate against live API\nmake validate\n\n# Dry run (no live API calls)\nmake validate-dry\n\n# Run Schemathesis property-based tests\nmake schemathesis\n\n# Generate reconciled specs\nmake reconcile\n\n# Build release package\nmake release\n```\n\n### Full Pipeline\n\n```bash\nmake all  # download → validate → reconcile → release\n```\n\n## Target Endpoints (Baseline)\n\n| Resource | API Endpoint | Domain File |\n|----------|-------------|-------------|\n| healthcheck | healthchecks | virtual.json |\n| origin_pool | origin_pools | virtual.json |\n| app_firewall | app_firewalls | virtual.json |\n| service_policy | service_policys | virtual.json |\n| api_definition | api_definitions | api.json |\n| api_discovery | api_discoverys | api.json |\n| api_groups | api_groups | api.json |\n| code_base_integration | code_base_integrations | api.json |\n| data_type | data_types | data_and_privacy_security.json |\n| sensitive_data_policy | sensitive_data_policys | data_and_privacy_security.json |\n\n## Validation Categories\n\n1. **String length** - minLength, maxLength boundaries\n2. **Pattern/regex** - pattern validation\n3. **Numeric bounds** - minimum, maximum ranges\n4. **Required fields** - required array validation\n5. **Enum values** - enumeration constraints\n6. **Array bounds** - minItems, maxItems, uniqueItems\n7. **Object structure** - additionalProperties, properties\n8. **Composition** - oneOf, anyOf, allOf\n9. **Dependencies** - dependentRequired\n10. **Data types** - type, format validation\n\n## Project Structure\n\n```\nf5xc-api-fixed/\n├── .github/workflows/\n│   └── validate-and-release.yml    # CI/CD pipeline\n├── config/\n│   ├── validation.yaml             # Main configuration\n│   └── endpoints.yaml              # Target endpoint definitions\n├── scripts/\n│   ├── download.py                 # Spec download with ETag caching\n│   ├── validate.py                 # Validation orchestrator\n│   ├── reconcile.py                # Spec reconciliation engine\n│   ├── release.py                  # Release package generator\n│   └── utils/\n│       ├── spec_loader.py          # OpenAPI spec loading\n│       ├── constraint_validator.py # Constraint validation logic\n│       ├── schemathesis_runner.py  # Schemathesis integration\n│       ├── report_generator.py     # Report generation\n│       └── auth.py                 # Authentication handling\n├── tests/                          # Unit/integration tests\n├── specs/original/                 # Downloaded specs (gitignored)\n├── release/                        # Release package (gitignored)\n└── reports/                        # Generated reports (gitignored)\n```\n\n## Release Package Contents\n\n```\nf5xc-api-fixed-vX.Y.Z.zip\n├── openapi.json              # Fixed or original\n├── openapi.yaml              # Fixed or original\n├── domains/\n│   ├── virtual.json          # Fixed or original\n│   ├── api.json              # Fixed or original\n│   └── ...                   # All domain files\n├── CHANGELOG.md              # List of fixes applied\n└── VALIDATION_REPORT.md      # Summary of validation results\n```\n\n## Development\n\n```bash\n# Install dev dependencies\nmake dev-install\n\n# Run tests\nmake test\n\n# Run linter\nmake lint\n\n# Run type checker\nmake typecheck\n```\n\n## CI/CD\n\nThe GitHub Actions workflow runs daily at 6 AM UTC:\n\n1. Downloads latest specs (with ETag check)\n2. Runs validation against live API\n3. Reconciles specs (fixed + pass-through originals)\n4. Creates GitHub release with complete spec package\n5. Uploads validation reports as artifacts\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinmordasiewicz%2Ff5xc-api-fixed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobinmordasiewicz%2Ff5xc-api-fixed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinmordasiewicz%2Ff5xc-api-fixed/lists"}