Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5807b39766 | ||
|
|
175068782b | ||
|
|
14296ffaac | ||
|
|
7eb11e3261 | ||
|
|
0ac2bf4a8c | ||
|
|
d0e3f3918b | ||
|
|
2704ec45b5 | ||
|
|
11c4a1fc9e |
@@ -16,12 +16,12 @@ quality badges.
|
||||
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/src/branch/master/LICENSE)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/wiki)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/wiki)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
## Why devx?
|
||||
|
||||
|
||||
+6
-6
@@ -12,12 +12,12 @@ project to be reusable across all oblachno-oss repositories.
|
||||
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/src/branch/master/LICENSE)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/wiki)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/wiki)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/actions)
|
||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||
[](https://www.python.org/downloads/)
|
||||
|
||||
## Overview
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# DEVX-156: Fix commit message format and release new CI modules
|
||||
|
||||
## Problem
|
||||
The DEVX-155 merge commit on master has an invalid format
|
||||
('DEVX-155: Replace...' missing conventional commit type). This blocks
|
||||
the post-merge release workflow's `validate_commit_msg` step, preventing
|
||||
`validate_spec`, `check_pr_size`, `nightly_gate`, and `create_dependency_pr`
|
||||
from being published to the Gitea PyPI registry. All downstream repos
|
||||
(grm, infra, sso-bridge) are blocked — their CI fails with
|
||||
`No module named devx.ci.validate_spec`.
|
||||
|
||||
## Approach
|
||||
Add a trivial user-facing change (version doc comment) with a proper
|
||||
conventional commit format to trigger the post-merge release workflow.
|
||||
The release will publish the new CI modules that DEVX-155 introduced.
|
||||
|
||||
REQ-1: Add a user-facing change to src/devx/ to trigger release
|
||||
REQ-2: Ensure the commit message follows conventional format (type: description)
|
||||
|
||||
## Test Plan
|
||||
- Verify post-merge workflow runs successfully after merge
|
||||
- Verify a new release tag is created (v0.51.0 or similar)
|
||||
- Verify devx.ci.validate_spec is importable from the published package
|
||||
|
||||
## Deploy Plan
|
||||
- Merge to master via auto-merge workflow
|
||||
- Post-merge workflow auto-releases and publishes
|
||||
|
||||
## Rollback Plan
|
||||
- Revert the merge commit if release fails
|
||||
|
||||
## Acceptance Criteria
|
||||
- [x] REQ-1: A user-facing change is added to src/devx/
|
||||
- [x] REQ-2: Commit message follows conventional format
|
||||
@@ -0,0 +1,24 @@
|
||||
# DEVX-157: Add role defaults path to create_dependency_pr search
|
||||
|
||||
## Problem
|
||||
`create_dependency_pr` only searches `pyproject.toml` and the infra images vars file for pinned versions. The sso-bridge role pins its version in its role defaults file via `sso_bridge_version`, which is not searched.
|
||||
|
||||
## Approach
|
||||
Add the sso-bridge role defaults path to the search paths.
|
||||
|
||||
REQ-1: Add ROLE_DEFAULTS_PATH constant pointing to the sso-bridge role defaults file
|
||||
REQ-2: Include ROLE_DEFAULTS_PATH in the search loop
|
||||
|
||||
## Test Plan
|
||||
- Verify existing tests pass
|
||||
- Verify find_pinned_version finds sso_bridge_version in the defaults file
|
||||
|
||||
## Deploy Plan
|
||||
- Merge to master, auto-release new devx version
|
||||
|
||||
## Rollback Plan
|
||||
- Revert the merge commit
|
||||
|
||||
## Acceptance Criteria
|
||||
- [x] REQ-1: ROLE_DEFAULTS_PATH constant added
|
||||
- [x] REQ-2: search loop includes ROLE_DEFAULTS_PATH
|
||||
@@ -1,3 +1,9 @@
|
||||
"""devx — reusable development and CI/CD tools for oblachno-oss projects."""
|
||||
"""devx — reusable development and CI/CD tools for oblachno-oss projects.
|
||||
|
||||
Provides CI/CD automation (validate_spec, check_pr_size, nightly_gate,
|
||||
create_dependency_pr, auto_merge, release, publish), developer tooling
|
||||
(setup, install_tools, configure_repo, create_task, create_pr), and
|
||||
molecule testing helpers for Ansible projects.
|
||||
"""
|
||||
|
||||
__version__ = "0.50.1"
|
||||
|
||||
@@ -9,7 +9,8 @@ PRs with the ``refactoring`` label bypass the size check — large but
|
||||
legitimate refactoring PRs that touch many files in a coordinated way.
|
||||
|
||||
Usage:
|
||||
python -m devx.ci.check_pr_size --base origin/master --head HEAD
|
||||
python -m devx.ci.check_pr_size --base origin/master --head HEAD \\
|
||||
--repo oblachno-oss/grm --pr-number 123
|
||||
|
||||
In CI, pass ``--github-output`` to set ``pr-size-ok`` and ``pr-size-detail``
|
||||
for downstream steps.
|
||||
|
||||
@@ -38,6 +38,7 @@ load_dotenv()
|
||||
# Where infra pins dependency versions
|
||||
PYPROJECT_PATH = "pyproject.toml"
|
||||
IMAGES_YML_PATH = "ansible/group_vars/all/images.yml"
|
||||
ROLE_DEFAULTS_PATH = "ansible/roles/sso_bridge/defaults/main.yml"
|
||||
|
||||
|
||||
def find_pinned_version(package: str, file_path: str) -> str | None:
|
||||
@@ -130,7 +131,7 @@ def cli(
|
||||
# Find current pinned version
|
||||
old_version = None
|
||||
changed_file = None
|
||||
for f in [PYPROJECT_PATH, IMAGES_YML_PATH]:
|
||||
for f in [PYPROJECT_PATH, IMAGES_YML_PATH, ROLE_DEFAULTS_PATH]:
|
||||
old_version = find_pinned_version(package, f)
|
||||
if old_version:
|
||||
changed_file = f
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"""Validate that a PR has a spec file with required sections and acceptance criteria.
|
||||
|
||||
Spec-driven development gate. Runs in CI before expensive jobs.
|
||||
Used by grm, infra, sso-bridge, and devx itself.
|
||||
|
||||
Validates:
|
||||
1. A spec file exists at ``docs/specs/<TASK-ID>.md`` (TASK-ID extracted from branch).
|
||||
|
||||
Reference in New Issue
Block a user