Skip to content

Releases: LangeVC/ops-engine

ops-engine v2.1.3

07 Jun 14:13

Choose a tag to compare

ops-engine v2.1.2

04 Jun 19:07

Choose a tag to compare

Fixed

  • HealthMonitor: actually declare pyyaml>=6.0 as a runtime dependency.
    v2.1.1 claimed to fix this in the CHANGELOG but the corresponding edit to
    pyproject.toml never landed (silent Edit-call failure during release).
    This release is the real fix. Symptom on consumers without transitive
    pyyaml: ModuleNotFoundError: No module named 'yaml' at first module run.

ops-engine v2.1.1

04 Jun 19:04

Choose a tag to compare

Fixed

  • HealthMonitor: declare pyyaml>=6.0 as a runtime dependency. The
    module imports yaml to parse the consumer's config.yml but the
    package only listed pydantic + httpx in dependencies. Triggered
    ModuleNotFoundError: No module named 'yaml' on first run for any
    consumer that didn't already have pyyaml installed transitively.

ops-engine v2.1.0

04 Jun 18:56

Choose a tag to compare

Added

  • HealthMonitor (CORE-006): Scheduled HTTP probes with pluggable sinks
    • Probe targets defined in consumer's config.yml (URL, expected status, optional JSON-field assertion)
    • Sinks: stdout (CI log), file (per-run log file), webhook (POST JSON), github_issue (label-targeted)
    • Replaces the anti-pattern of writing health-check log entries back to the source repo via auto-commit
    • Module entry point: python -m ops_engine.modules.health_monitor --config <cfg> --org <name>
    • Consumer: Capacium/capacium-ops (PR #4 — replaces inline shell + commit-back)
  • MigrationRunner (CORE-007): Forward-only SQL migration runner
    • Discovers *.sql files in a directory, ordered lexicographically
    • Tracks applied migrations + checksums in schema_migrations table
    • Detects checksum drift (file edited after apply) → hard fail
    • Safely handles CREATE INDEX CONCURRENTLY (each statement outside the migration transaction)
    • Pluggable adapter ([postgres] extra ships psycopg2 fakeable adapter; SQLite trivially addable)
    • Test suite: apply-pending, checksum-mismatch, concurrent-index, idempotent, lock-timeout
    • Consumer: Capacium/capacium-ops PR #5 wires this for capacium-exchange
  • Module-side config loader (ops_engine.config_loader): validates per-module section in consumer's config.yml

Changed

  • README.md: lists both new modules in the Modules table

ops-engine v2.0.0

25 May 14:03
db9d8dd

Choose a tag to compare

What's New

New Modules

  • ReleaseHandler — Automated release creation on tag push with CHANGELOG.md parsing, tag pattern matching, and idempotency
  • MergeHandler — Auto-merge PRs when CI passes and trigger label is present
  • MirrorHandler — Cross-forge mirror drift verification (Forgejo ↔ GitHub)
  • NotificationHandler — Multi-channel dispatch (webhook, Slack, Discord) with event filtering

Infrastructure

  • QueueManager v2 — Bounded async queue with backpressure, retry, dead letter queue, metrics, graceful shutdown
  • EventDeduplicator — In-memory webhook dedup for GitHub, Forgejo, and Gitea delivery headers
  • ChangelogParser — Version-specific release notes extraction from CHANGELOG.md

ForgeAdapter

  • Complete rewrite with real httpx async HTTP (was mock-only)
  • Exponential backoff retry on 429/502/503
  • HMAC-SHA256 webhook signature verification
  • 10 new abstract methods including create_pull_request and list_pull_requests

Config

  • 5 new Pydantic models: ReleaseConfig, MergeConfig, MirrorConfig, NotificationConfig, NotificationChannel
  • Org-level inheritance (mirror is repo-specific only)
  • Backward compatible with v1 configs

Testing

  • 51 tests covering all modules, adapters, queue, dedup, config, and changelog parser

Breaking Changes

  • QueueManager constructor signature changed (new max_queue_size, max_retries params)
  • ForgeAdapter ABC has 10 new abstract methods — existing subclasses must implement them

Full Changelog

See CHANGELOG.md

Ops Engine v0.1.0

20 May 23:10

Choose a tag to compare

Initial Release: Ops Engine v0.1.0

We are proud to announce the initial open-source release of the LangeVC Ops Engine – a generic, rate-limited async webhook queue and orchestration framework for GitHub and Forgejo.

This release establishes the foundation for scalable organizational Git automation without the risk of API rate-limiting or CI/CD runner starvation (The Thundering Herd problem).

🚀 Core Architecture

  • Engine/Layover Pattern: Complete separation of infrastructure logic (the Engine) and organization-specific business rules (the Layover).
  • Config-Driven Design: All rules, thresholds, and target repositories are purely controlled via YAML/Pydantic, requiring zero hardcoded business logic.
  • Asynchronous Processing: Built on FastAPI and asyncio, the engine captures incoming webhooks instantly, preventing forge timeouts via HTTP 202 Accepted responses.

✨ Key Features

  • Rate Limit Queue (QueueManager): Processes all GitHub/Forgejo API interactions sequentially (e.g., 1 request/second) to guarantee strict adherence to API quotas.
  • Triage & Auto-Labeling (TriageHandler): Inspects newly opened PRs and Issues, applying appropriate labels based on title keywords (e.g., bug, feat) instantly.
  • Stale Cleanup (StaleManager): Centralized, cron-driven scanning across multiple repositories to mark and manage stale issues.
  • Cross-Repo Triggers (DependencyTriggerHandler): Automatically dispatches repository_dispatch events to downstream repositories whenever an upstream repository publishes a new release.
  • Centralized Dispatching (CronDispatcher): Replaces decentralized .github/workflows/ cron jobs, orchestrating heavy loads (like CodeQL) centrally and sequentially.

🛠️ Installation

pip install git+https://github.com/LangeVC/ops-engine.git@v0.1.0