diff --git a/AGENTS.md b/AGENTS.md index 3fce067..b3f68b8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -52,14 +52,14 @@ src/devx/ ├── gitea_cli.py # TeaCLI — wrapper around tea CLI with JSON parsing ├── i18n.py # Translation system (gettext-based, translations.json) ├── exceptions.py # Custom exception types -├── translations.json # Translation strings (en, bg) +├── translations.json # Translation strings (en, bg, de, pl, ru, zh) ├── ci/ # CI/CD automation modules (run by workflows) │ ├── release.py # Automated versioning, tagging, changelog │ ├── publish.py # Build and publish to Gitea PyPI registry (--skip-build for non-Python repos) │ ├── auto_merge.py # Squash-merge PRs with task ID validation │ ├── check_auto_merge_ready.py # Pre-merge validation gate (branch, PR title, Vikunja, behind-master) │ ├── _shared.py # Shared utilities (get_latest_tag) -│ ├── classify_changes.py # User-facing vs workflow-only change detection +│ ├── classify_changes.py # User-facing vs infrastructure change detection │ ├── detect_release_commit.py # Detect release commits on master │ ├── validate_commit_msg.py # Conventional commit validation │ ├── pr_review.py # Automated PR review + manual reviews (--event, --body, --checklist-confirmed) @@ -84,21 +84,24 @@ src/devx/ │ ├── check_pyproject_deps.py # Validate pyproject.toml deps have documentation comments │ ├── check_test_coverage.py # Ensure changed files have corresponding tests (configurable rules) │ ├── check_agent_docs.py # Validate docs for stale file references (configurable patterns) +│ ├── check_config.py # Validate pyproject.toml [tool.devx] config │ ├── configure_repo.py # Branch protection and label setup │ ├── generate_badges.py # Badge SVG generation +│ ├── generate_cliff_config.py # Generate git-cliff config (cliff.toml) │ ├── create_task.py # Create Vikunja tasks │ ├── create_pr.py # Create PRs with auto-derived title from Vikunja │ ├── pr_status.py # Check CI status for a PR/commit (--wait polls) │ ├── pr_logs.py # Fetch logs for failed CI jobs │ ├── pr_label.py # Add labels to PRs (idempotent) -│ ├── rebase.py # Rebase current branch onto origin/master + force-push -│ └── pr_rebase.py # Rebase a PR's head branch via Gitea API (server-side) +│ ├── pre_push_check.py # Validate Vikunja task existence before push +│ └── _shared.py # Shared tool utilities ├── opentofu.py # OpenTofu output helpers (get_tofu_output, get_tofu_vm_ip, get_tofu_vm_field) └── molecule/ # Optional molecule testing helpers (for Ansible projects) ├── discover_runners.py # Dynamic Gitea runner discovery ├── distribute_molecule.py # Distribute molecule scenarios across runners (LPT scheduling, --roles-root for multi-role) ├── molecule_ci_guard.py # Run molecule with cross-runner fail-fast (--roles-root) ├── molecule_all.py # Run all molecule scenarios locally + ├── start_docker.py # Ensure Docker daemon is running for molecule tests └── platforms.py # Supported molecule platforms ``` @@ -183,12 +186,6 @@ the PR. Then add the `ready-to-merge` label. The auto-merge workflow will: 5. The post-merge workflow marks the Vikunja task as done 6. The release workflow automatically versions, tags, and publishes -**If the branch is behind master** (another PR merged first), auto-merge -automatically rebases the PR's head branch via the Gitea API -(`POST /pulls/{index}/update?style=rebase`). This triggers a new CI run. -The next auto-merge attempt will find the branch up-to-date and merge -successfully. No manual intervention needed. - > **IMPORTANT**: Never manually merge PRs via the API. Always use the auto-merge > workflow by adding the `ready-to-merge` label. @@ -372,7 +369,7 @@ devx uses environment variables with `.env` file fallback for configuration. | `DEVX_REPO_NAME` | **(none — must be set)** | Repository name (or `owner/repo`) | | `DEVX_TASK_PREFIX` | `DEVX` | Task ID prefix (GRM, OBL-INFRA, etc.) | | `DEVX_VIKUNJA_PROJECT_ID` | `6` | Vikunja project ID | -| `DEVX_LANG` | `en` | Language for i18n (en, bg) | +| `DEVX_LANG` | `en` | Language for i18n (en, bg, de, pl, ru, zh) | | `CI_GITEA_TOKEN` | (from .env) | Gitea API token | | `VIKUNJA_TOKEN` | (from .env) | Vikunja API token | @@ -417,8 +414,6 @@ projects. | `devx-pr-logs` | Fetch logs for failed CI jobs (`PR=`, `JOB=`, `TAIL=`) | | `devx-pr-label` | Add a label to a PR (`PR=`, `LABEL=ready-to-merge`) | | `devx-pr-review` | Post a review on a PR (`PR=`, `EVENT=`, `BODY=`, `CHECKLIST=`) | -| `devx-rebase` | Rebase current branch onto origin/master + force-push (`NO_PUSH=1` for local only) | -| `devx-pr-rebase` | Rebase a PR's head branch via Gitea API — server-side, no local git needed (`PR=`) | | `devx-check-config` | Validate devx configuration | | `devx-configure-gitea-pypi` | Configure Gitea private PyPI registry | | `devx-env` | Create .env from .env.example | diff --git a/README.md b/README.md index 3a4afbe..e1aa02a 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ extra index and list devx in your dependencies: ```toml [project] dependencies = [ - "devx>=0.11.1", + "devx>=0.27.0", ] [tool.pip] @@ -101,8 +101,8 @@ pip install -e . ``` > **Note:** If your project requires a specific devx version, pin it in -> `dependencies` (e.g., `"devx==0.11.1"`) or use a version constraint -> (e.g., `"devx>=0.11.1,<0.12"`). +> `dependencies` (e.g., `"devx==0.27.0"`) or use a version constraint +> (e.g., `"devx>=0.27.0,<0.28"`). ### Optional extras diff --git a/docs/index.md b/docs/index.md index 195c146..5a67634 100644 --- a/docs/index.md +++ b/docs/index.md @@ -74,14 +74,14 @@ Add devx to your `pyproject.toml` dependencies and configure the registry: ```toml [project] dependencies = [ - "devx>=0.11.1", + "devx>=0.27.0", ] [tool.pip] extra-index-url = "https://git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple" ``` -Pin a specific version if needed: `"devx==0.11.1"` or `"devx>=0.11.1,<0.12"`. +Pin a specific version if needed: `"devx==0.27.0"` or `"devx>=0.27.0,<0.28"`. ### Optional extras diff --git a/docs/tech/architecture.md b/docs/tech/architecture.md index 3a911b8..db5bfa5 100644 --- a/docs/tech/architecture.md +++ b/docs/tech/architecture.md @@ -103,7 +103,7 @@ Custom exception hierarchy: ### `i18n.py` Simple i18n system using a JSON translations file (`translations.json`). -Supports five languages: `en`, `bg`, `de`, `ru`, `zh`. The `_()` function +Supports six languages: `en`, `bg`, `de`, `pl`, `ru`, `zh`. The `_()` function wraps user-facing strings for translation. Projects can extend translations by setting `DEVX_TRANSLATIONS_PATH` to a diff --git a/docs/user/getting-started.md b/docs/user/getting-started.md index b5bfd1d..2aa6480 100644 --- a/docs/user/getting-started.md +++ b/docs/user/getting-started.md @@ -48,12 +48,12 @@ Add devx to your `pyproject.toml`: ```toml [project] dependencies = [ - "devx>=0.26.0", + "devx>=0.27.0", ] [project.optional-dependencies] dev = [ - "devx[dev]>=0.26.0", + "devx[dev]>=0.27.0", ] ``` @@ -115,8 +115,8 @@ Add `[tool.devx]` section to `pyproject.toml` for project-specific config: vikunja_project_id = 6 [tool.devx.classify] -# File patterns that are workflow-only (no release needed) -workflow_only = [ +# File patterns that are infrastructure (no release needed) +infrastructure = [ ".gitea/**", "docs/**", "tests/**",