Public Access
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6bd4e8f63 | ||
|
|
d47e3833bc | ||
|
|
c00e9e3d7b | ||
|
|
40e95bc96f | ||
|
|
3aa9681404 | ||
|
|
e96f63cb40 | ||
|
|
6d6c8cceec | ||
|
|
d9489b5387 | ||
|
|
35f7bc92cd | ||
|
|
55bcd8fa01 |
@@ -2,6 +2,24 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [0.51.9] - 2026-08-26
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Exclude docs/plans/* from PR size check
|
||||||
|
|
||||||
|
## [0.51.8] - 2026-08-26
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Accept deps: as valid conventional commit type
|
||||||
|
|
||||||
|
## [0.51.7] - 2026-08-26
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Increase HTTP 500 retry count to 5 with longer backoff and visible logging
|
||||||
|
|
||||||
## [0.51.6] - 2026-08-26
|
## [0.51.6] - 2026-08-26
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ extra index and list devx in your dependencies:
|
|||||||
```toml
|
```toml
|
||||||
[project]
|
[project]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"devx>=0.51.6",
|
"devx>=0.51.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.pip]
|
[tool.pip]
|
||||||
@@ -101,8 +101,8 @@ pip install -e .
|
|||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** If your project requires a specific devx version, pin it in
|
> **Note:** If your project requires a specific devx version, pin it in
|
||||||
> `dependencies` (for example, `"devx==0.51.6"`) or use a version constraint
|
> `dependencies` (for example, `"devx==0.51.9"`) or use a version constraint
|
||||||
> (for example, `"devx>=0.51.6,<0.52"`).
|
> (for example, `"devx>=0.51.9,<0.52"`).
|
||||||
|
|
||||||
### Optional extras
|
### Optional extras
|
||||||
|
|
||||||
|
|||||||
+8
-8
@@ -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
|
||||||
|
|
||||||
@@ -74,14 +74,14 @@ Add devx to your `pyproject.toml` dependencies and configure the registry:
|
|||||||
```toml
|
```toml
|
||||||
[project]
|
[project]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"devx>=0.51.6",
|
"devx>=0.51.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.pip]
|
[tool.pip]
|
||||||
extra-index-url = "https://git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple"
|
extra-index-url = "https://git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple"
|
||||||
```
|
```
|
||||||
|
|
||||||
Pin a specific version if needed: `"devx==0.51.6"` or `"devx>=0.51.6,<0.52"`.
|
Pin a specific version if needed: `"devx==0.51.9"` or `"devx>=0.51.9,<0.52"`.
|
||||||
|
|
||||||
### Optional extras
|
### Optional extras
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# DEVX-164: Increase HTTP 500 retry count and backoff for docker push
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
The HTTP 500 retry logic (DEVX-162, DEVX-163) works correctly — 3 retry
|
||||||
|
attempts are made. But all 3 attempts fail because the Gitea registry's
|
||||||
|
"offset mismatch" race condition needs more than ~15s to recover. The
|
||||||
|
current backoff is 5s-20s with 3 attempts (total ~15s of waiting).
|
||||||
|
|
||||||
|
## Approach
|
||||||
|
Increase retry count from 3 to 5 and backoff from 5-20s to 10-60s,
|
||||||
|
giving the registry up to ~2 minutes to recover. Add visible logging
|
||||||
|
between retry attempts so the CI logs show the retry happening.
|
||||||
|
|
||||||
|
REQ-1: Increase retry count from 3 to 5
|
||||||
|
REQ-2: Increase backoff from 5-20s to 10-60s exponential
|
||||||
|
REQ-3: Add visible logging between retry attempts (click.echo)
|
||||||
|
REQ-4: All tests pass with 100% coverage
|
||||||
|
|
||||||
|
## Test Plan
|
||||||
|
- Unit tests verify retry count and backoff parameters
|
||||||
|
- Unit tests verify logging output on retry
|
||||||
|
- Manual: trigger build-images workflow and verify retries visible in logs
|
||||||
|
|
||||||
|
## Deploy Plan
|
||||||
|
- Merge to master
|
||||||
|
|
||||||
|
## Rollback Plan
|
||||||
|
- Revert the merge commit
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- [x] REQ-1: Increase retry count from 3 to 5
|
||||||
|
- [x] REQ-2: Increase backoff from 5-20s to 10-60s exponential
|
||||||
|
- [x] REQ-3: Add visible logging between retry attempts (click.echo)
|
||||||
|
- [x] REQ-4: All tests pass with 100% coverage
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# DEVX-165: Accept deps: as valid conventional commit type
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
The commit validator rejects `deps:` as a conventional commit type, causing
|
||||||
|
post-merge CI failures on grm and sso-bridge repos where automated dependency
|
||||||
|
bump PRs use `deps: bump devx...` as the commit message.
|
||||||
|
|
||||||
|
## Approach
|
||||||
|
REQ-1: Add `deps` to `CONVENTIONAL_RE` in `src/devx/config.py`
|
||||||
|
REQ-2: Update the allowed types list in the error message in
|
||||||
|
`src/devx/ci/validate_commit_msg.py`
|
||||||
|
REQ-3: Add test coverage for `deps:` type in `tests/unit/test_config.py`
|
||||||
|
and `tests/unit/test_validate_commit_msg.py`
|
||||||
|
|
||||||
|
## Test Plan
|
||||||
|
- `make pytest-cov` passes with 100% coverage
|
||||||
|
- `make lint-all` passes
|
||||||
|
|
||||||
|
## Deploy Plan
|
||||||
|
- Merge to master → post-merge auto-publishes new devx version
|
||||||
|
- grm and sso-bridge bump devx version to pick up the fix
|
||||||
|
|
||||||
|
## Rollback Plan
|
||||||
|
- Revert the merge commit
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- [x] REQ-1: Add `deps` to `CONVENTIONAL_RE` in `src/devx/config.py`
|
||||||
|
- [x] REQ-2: Update the allowed types list in the error message in
|
||||||
|
`src/devx/ci/validate_commit_msg.py`
|
||||||
|
- [x] REQ-3: Add test coverage for `deps:` type in `tests/unit/test_config.py`
|
||||||
|
and `tests/unit/test_validate_commit_msg.py`
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# DEVX-166: Exclude docs/plans/* from PR size check
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
Planning docs in `docs/plans/` are legitimately large (700+ lines) but
|
||||||
|
fail the PR size check (max 500 lines). This blocks PRs that only add
|
||||||
|
planning documents.
|
||||||
|
|
||||||
|
## Approach
|
||||||
|
REQ-1: Add `docs/plans/*` to `DEFAULT_EXCLUDED_PATTERNS` in
|
||||||
|
`src/devx/ci/check_pr_size.py`
|
||||||
|
REQ-2: Add test coverage for the new exclusion pattern
|
||||||
|
|
||||||
|
## Test Plan
|
||||||
|
- `make pytest-cov` passes with 100% coverage
|
||||||
|
- `make lint-all` passes
|
||||||
|
|
||||||
|
## Deploy Plan
|
||||||
|
- Merge to master → post-merge auto-publishes new devx version
|
||||||
|
- Infra PR #1179 picks up the fix once devx is bumped
|
||||||
|
|
||||||
|
## Rollback Plan
|
||||||
|
- Revert the merge commit
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- [x] REQ-1: Add `docs/plans/*` to `DEFAULT_EXCLUDED_PATTERNS` in
|
||||||
|
`src/devx/ci/check_pr_size.py`
|
||||||
|
- [x] REQ-2: Add test coverage for the new exclusion pattern
|
||||||
@@ -48,12 +48,12 @@ Add devx to your `pyproject.toml`:
|
|||||||
```toml
|
```toml
|
||||||
[project]
|
[project]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"devx>=0.51.6",
|
"devx>=0.51.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
dev = [
|
dev = [
|
||||||
"devx>=0.51.6",
|
"devx>=0.51.9",
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ create_dependency_pr, auto_merge, release, publish), developer tooling
|
|||||||
molecule testing helpers for Ansible projects.
|
molecule testing helpers for Ansible projects.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "0.51.6"
|
__version__ = "0.51.9"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ DEFAULT_EXCLUDED_PATTERNS = [
|
|||||||
"CHANGELOG.md",
|
"CHANGELOG.md",
|
||||||
"README.md",
|
"README.md",
|
||||||
"docs/index.md",
|
"docs/index.md",
|
||||||
|
"docs/plans/*",
|
||||||
"*.svg",
|
"*.svg",
|
||||||
"uv.lock",
|
"uv.lock",
|
||||||
"poetry.lock",
|
"poetry.lock",
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ def main(commit_msg_file: str | None, branch: str | None, from_git: bool) -> Non
|
|||||||
" Expected: <type>: <description>\n"
|
" Expected: <type>: <description>\n"
|
||||||
" Got: {subject}\n"
|
" Got: {subject}\n"
|
||||||
" Allowed types: feat, fix, chore, docs, style, refactor,\n"
|
" Allowed types: feat, fix, chore, docs, style, refactor,\n"
|
||||||
" perf, test, ci, build, revert, BREAKING CHANGE",
|
" perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
subject=subject,
|
subject=subject,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -93,4 +93,4 @@ RETRY_BACKOFF_BASE = 2 # seconds: 2, 4, 8
|
|||||||
RETRY_STATUS_CODES = {429, 500, 502, 503, 504}
|
RETRY_STATUS_CODES = {429, 500, 502, 503, 504}
|
||||||
|
|
||||||
# Conventional commit regex — used by validate_commit_msg.py
|
# Conventional commit regex — used by validate_commit_msg.py
|
||||||
CONVENTIONAL_RE = re.compile(r"^(feat|fix|chore|docs|style|refactor|perf|test|ci|build|revert)(\(.+\))?: .+")
|
CONVENTIONAL_RE = re.compile(r"^(feat|fix|chore|docs|style|refactor|perf|test|ci|build|revert|deps)(\(.+\))?: .+")
|
||||||
|
|||||||
@@ -315,9 +315,17 @@ def push_image(
|
|||||||
click.echo(f"Pushing {ft}...")
|
click.echo(f"Pushing {ft}...")
|
||||||
|
|
||||||
@retry(
|
@retry(
|
||||||
stop=stop_after_attempt(3),
|
stop=stop_after_attempt(5),
|
||||||
wait=wait_exponential(multiplier=5, min=5, max=20),
|
wait=wait_exponential(multiplier=10, min=10, max=60),
|
||||||
retry=retry_if_exception_type(PushHTTP500Error),
|
retry=retry_if_exception_type(PushHTTP500Error),
|
||||||
|
before_sleep=lambda retry_state: click.echo(
|
||||||
|
_(
|
||||||
|
" HTTP 500 from registry, retrying in {wait:.0f}s (attempt {attempt}/5)...",
|
||||||
|
wait=retry_state.next_action.sleep if retry_state.next_action else 0,
|
||||||
|
attempt=retry_state.attempt_number + 1,
|
||||||
|
),
|
||||||
|
err=True,
|
||||||
|
),
|
||||||
reraise=True,
|
reraise=True,
|
||||||
)
|
)
|
||||||
def _attempt(_cmd: list[str] = cmd) -> subprocess.CompletedProcess[str]:
|
def _attempt(_cmd: list[str] = cmd) -> subprocess.CompletedProcess[str]:
|
||||||
|
|||||||
@@ -2999,13 +2999,13 @@
|
|||||||
"PR number for label check": "PR number for label check",
|
"PR number for label check": "PR number for label check",
|
||||||
"Repo (owner/name) for label check": "Repo (owner/name) for label check"
|
"Repo (owner/name) for label check": "Repo (owner/name) for label check"
|
||||||
},
|
},
|
||||||
"Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE": {
|
"Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE": {
|
||||||
"bg": "Опа! Съобщението за commit трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {subject}\n Разрешени типове: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"bg": "Опа! Съобщението за commit трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {subject}\n Разрешени типове: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"de": "Ups! Commit-Nachricht muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {subject}\n Erlaubte Typen: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"de": "Ups! Commit-Nachricht muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {subject}\n Erlaubte Typen: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"en": "Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"en": "Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"pl": "Ups! Wiadomość commit musi być w formacie conventional commit.\n Oczekiwano: <typ>: <opis>\n Otrzymano: {subject}\n Dozwolone typy: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"pl": "Ups! Wiadomość commit musi być w formacie conventional commit.\n Oczekiwano: <typ>: <opis>\n Otrzymano: {subject}\n Dozwolone typy: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"ru": "Ой! Сообщение коммита должно соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {subject}\n Допустимые типы: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"ru": "Ой! Сообщение коммита должно соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {subject}\n Допустимые типы: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"zh": "哎呀!提交消息必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {subject}\n 允许的类型: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
"zh": "哎呀!提交消息必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {subject}\n 允许的类型: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, deps, revert, BREAKING CHANGE",
|
||||||
"PR number for label check": "PR number for label check",
|
"PR number for label check": "PR number for label check",
|
||||||
"Repo (owner/name) for label check": "Repo (owner/name) for label check"
|
"Repo (owner/name) for label check": "Repo (owner/name) for label check"
|
||||||
},
|
},
|
||||||
@@ -5152,5 +5152,13 @@
|
|||||||
"pl": "PR has 'refactoring' label — size check bypassed.",
|
"pl": "PR has 'refactoring' label — size check bypassed.",
|
||||||
"ru": "PR has 'refactoring' label — size check bypassed.",
|
"ru": "PR has 'refactoring' label — size check bypassed.",
|
||||||
"zh": "PR has 'refactoring' label — size check bypassed."
|
"zh": "PR has 'refactoring' label — size check bypassed."
|
||||||
|
},
|
||||||
|
" HTTP 500 from registry, retrying in {wait:.0f}s (attempt {attempt}/5)...": {
|
||||||
|
"en": "HTTP 500 from registry, retrying in {wait:.0f}s (attempt {attempt}/5)...",
|
||||||
|
"bg": " HTTP 500 от регистъра, повторен опит след {wait:.0f}с (опит {attempt}/5)...",
|
||||||
|
"de": " HTTP 500 vom Registry, Wiederholung in {wait:.0f}s (Versuch {attempt}/5)...",
|
||||||
|
"pl": " HTTP 500 z rejestru, ponawianie za {wait:.0f}s (próba {attempt}/5)...",
|
||||||
|
"ru": " HTTP 500 от реестра, повтор через {wait:.0f}с (попытка {attempt}/5)...",
|
||||||
|
"zh": " 注册表返回 HTTP 500,{wait:.0f}秒后重试(第{attempt}/5次尝试)..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ class TestIsExcluded:
|
|||||||
def test_excludes_readme(self) -> None:
|
def test_excludes_readme(self) -> None:
|
||||||
assert is_excluded("README.md", ["README.md"])
|
assert is_excluded("README.md", ["README.md"])
|
||||||
|
|
||||||
|
def test_excludes_plans_glob(self) -> None:
|
||||||
|
assert is_excluded("docs/plans/sso-bridge-full-extraction.md", ["docs/plans/*"])
|
||||||
|
|
||||||
|
def test_does_not_exclude_specs(self) -> None:
|
||||||
|
assert not is_excluded("docs/specs/DEVX-165.md", ["docs/plans/*"])
|
||||||
|
|
||||||
|
|
||||||
class TestCheckSize:
|
class TestCheckSize:
|
||||||
def test_under_limits_passes(self) -> None:
|
def test_under_limits_passes(self) -> None:
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ class TestConfigConstants:
|
|||||||
def test_conventional_re(self) -> None:
|
def test_conventional_re(self) -> None:
|
||||||
assert CONVENTIONAL_RE.match("feat: add feature")
|
assert CONVENTIONAL_RE.match("feat: add feature")
|
||||||
assert CONVENTIONAL_RE.match("fix(scope): bug fix")
|
assert CONVENTIONAL_RE.match("fix(scope): bug fix")
|
||||||
|
assert CONVENTIONAL_RE.match("deps: bump devx from v0.50.2 to v0.51.0")
|
||||||
assert not CONVENTIONAL_RE.match("random message")
|
assert not CONVENTIONAL_RE.match("random message")
|
||||||
assert not CONVENTIONAL_RE.match("feat:")
|
assert not CONVENTIONAL_RE.match("feat:")
|
||||||
assert not CONVENTIONAL_RE.match("BREAKING CHANGE: something")
|
assert not CONVENTIONAL_RE.match("BREAKING CHANGE: something")
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ class TestHelpers:
|
|||||||
assert CONVENTIONAL_RE.match("test: add tests")
|
assert CONVENTIONAL_RE.match("test: add tests")
|
||||||
assert CONVENTIONAL_RE.match("ci: update workflow")
|
assert CONVENTIONAL_RE.match("ci: update workflow")
|
||||||
assert CONVENTIONAL_RE.match("build: update deps")
|
assert CONVENTIONAL_RE.match("build: update deps")
|
||||||
|
assert CONVENTIONAL_RE.match("deps: bump devx from v0.50.2 to v0.51.0")
|
||||||
assert CONVENTIONAL_RE.match("revert: undo change")
|
assert CONVENTIONAL_RE.match("revert: undo change")
|
||||||
|
|
||||||
def test_conventional_re_allows_scope(self) -> None:
|
def test_conventional_re_allows_scope(self) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user