Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5807b39766 | ||
|
|
175068782b | ||
|
|
14296ffaac | ||
|
|
7eb11e3261 | ||
|
|
0ac2bf4a8c | ||
|
|
d0e3f3918b | ||
|
|
2704ec45b5 |
@@ -16,12 +16,12 @@ quality badges.
|
|||||||
|
|
||||||
[](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/src/branch/master/LICENSE)
|
[](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/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/wiki)
|
||||||
[](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/releases)
|
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
|
|
||||||
## Why devx?
|
## 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/actions)
|
||||||
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/src/branch/master/LICENSE)
|
[](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/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/wiki)
|
||||||
[](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/releases)
|
[](https://git.oblachno.oblachno.fyi/oblachno-oss/devx/releases)
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
|
|
||||||
## Overview
|
## 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"
|
__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.
|
legitimate refactoring PRs that touch many files in a coordinated way.
|
||||||
|
|
||||||
Usage:
|
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``
|
In CI, pass ``--github-output`` to set ``pr-size-ok`` and ``pr-size-detail``
|
||||||
for downstream steps.
|
for downstream steps.
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ load_dotenv()
|
|||||||
# Where infra pins dependency versions
|
# Where infra pins dependency versions
|
||||||
PYPROJECT_PATH = "pyproject.toml"
|
PYPROJECT_PATH = "pyproject.toml"
|
||||||
IMAGES_YML_PATH = "ansible/group_vars/all/images.yml"
|
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:
|
def find_pinned_version(package: str, file_path: str) -> str | None:
|
||||||
@@ -130,7 +131,7 @@ def cli(
|
|||||||
# Find current pinned version
|
# Find current pinned version
|
||||||
old_version = None
|
old_version = None
|
||||||
changed_file = 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)
|
old_version = find_pinned_version(package, f)
|
||||||
if old_version:
|
if old_version:
|
||||||
changed_file = f
|
changed_file = f
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
"""Validate that a PR has a spec file with required sections and acceptance criteria.
|
"""Validate that a PR has a spec file with required sections and acceptance criteria.
|
||||||
|
|
||||||
Spec-driven development gate. Runs in CI before expensive jobs.
|
Spec-driven development gate. Runs in CI before expensive jobs.
|
||||||
|
Used by grm, infra, sso-bridge, and devx itself.
|
||||||
|
|
||||||
Validates:
|
Validates:
|
||||||
1. A spec file exists at ``docs/specs/<TASK-ID>.md`` (TASK-ID extracted from branch).
|
1. A spec file exists at ``docs/specs/<TASK-ID>.md`` (TASK-ID extracted from branch).
|
||||||
|
|||||||
Reference in New Issue
Block a user