Public Access
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3406639f13 | ||
|
|
9f02ccb40d | ||
|
|
5206158603 |
@@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
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.33.2] - 2026-07-05
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Abort sync_wiki when list_wiki_pages fails
|
||||||
|
|
||||||
## [0.33.1] - 2026-07-05
|
## [0.33.1] - 2026-07-05
|
||||||
|
|
||||||
### 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?
|
||||||
|
|
||||||
|
|||||||
+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
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""devx — reusable development and CI/CD tools for oblachno-oss projects."""
|
"""devx — reusable development and CI/CD tools for oblachno-oss projects."""
|
||||||
|
|
||||||
__version__ = "0.33.1"
|
__version__ = "0.33.2"
|
||||||
|
|||||||
@@ -292,8 +292,10 @@ def main(dry_run: bool, repo: str | None, verify: bool, strict: bool) -> None:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
existing_pages = list_wiki_pages(client)
|
existing_pages = list_wiki_pages(client)
|
||||||
except APIError:
|
except APIError as e:
|
||||||
existing_pages = {}
|
raise click.ClickException(
|
||||||
|
_("Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.", error=e)
|
||||||
|
) from e
|
||||||
if existing_pages:
|
if existing_pages:
|
||||||
click.echo(_("Found {count} existing wiki pages.", count=len(existing_pages)))
|
click.echo(_("Found {count} existing wiki pages.", count=len(existing_pages)))
|
||||||
|
|
||||||
|
|||||||
@@ -3342,5 +3342,13 @@
|
|||||||
"pl": "Katalog do skanowania (domyślnie: tests/integration). Można powtarzać.",
|
"pl": "Katalog do skanowania (domyślnie: tests/integration). Można powtarzać.",
|
||||||
"ru": "Директория для сканирования (по умолчанию: tests/integration). Можно повторять.",
|
"ru": "Директория для сканирования (по умолчанию: tests/integration). Можно повторять.",
|
||||||
"zh": "要扫描的目录(默认:tests/integration)。可重复。"
|
"zh": "要扫描的目录(默认:tests/integration)。可重复。"
|
||||||
|
},
|
||||||
|
"Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.": {
|
||||||
|
"bg": "Неуспешно извличане на съществуващи wiki страници: {error}. Прекратяване, за да се избегне създаване на дублирани страници.",
|
||||||
|
"de": "Abrufen bestehender Wiki-Seiten fehlgeschlagen: {error}. Abbruch, um doppelte Seiten zu vermeiden.",
|
||||||
|
"en": "Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.",
|
||||||
|
"pl": "Nie udało się wylistować istniejących stron wiki: {error}. Przerywanie, aby uniknąć tworzenia zduplikowanych stron.",
|
||||||
|
"ru": "Не удалось получить список существующих wiki-страниц: {error}. Прерывание, чтобы избежать создания дубликатов страниц.",
|
||||||
|
"zh": "列出现有 wiki 页面失败:{error}。正在中止以避免创建重复页面。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -537,8 +537,8 @@ class TestMain:
|
|||||||
|
|
||||||
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True)
|
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True)
|
||||||
@patch("devx.ci.sync_wiki.GiteaClient")
|
@patch("devx.ci.sync_wiki.GiteaClient")
|
||||||
def test_initial_list_api_error_treated_as_empty(self, mock_client_cls: MagicMock) -> None:
|
def test_initial_list_api_error_aborts(self, mock_client_cls: MagicMock) -> None:
|
||||||
"""When the initial page list fails, sync proceeds treating wiki as empty."""
|
"""When the initial page list fails, sync aborts to avoid duplicate pages."""
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_client_cls.return_value = mock_client
|
mock_client_cls.return_value = mock_client
|
||||||
with patch("devx.ci.sync_wiki.MAPPING_FILE") as mock_mapping:
|
with patch("devx.ci.sync_wiki.MAPPING_FILE") as mock_mapping:
|
||||||
@@ -549,8 +549,9 @@ class TestMain:
|
|||||||
with patch("devx.ci.sync_wiki.sync_page", return_value="created"):
|
with patch("devx.ci.sync_wiki.sync_page", return_value="created"):
|
||||||
runner = CliRunner()
|
runner = CliRunner()
|
||||||
result = runner.invoke(main, ["--repo", "owner/repo"])
|
result = runner.invoke(main, ["--repo", "owner/repo"])
|
||||||
assert result.exit_code == 0
|
assert result.exit_code != 0
|
||||||
assert "Created: Home" in result.output
|
assert "Failed to list existing wiki pages" in result.output
|
||||||
|
assert "Aborting" in result.output
|
||||||
|
|
||||||
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True)
|
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True)
|
||||||
@patch("devx.ci.sync_wiki.GiteaClient")
|
@patch("devx.ci.sync_wiki.GiteaClient")
|
||||||
|
|||||||
Reference in New Issue
Block a user