Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f223d5657 | ||
|
|
ac0ce1c158 | ||
|
|
10de782d93 | ||
|
|
bfb3a4d862 | ||
|
|
e167be1890 |
@@ -2,6 +2,12 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [0.50.6] - 2026-08-12
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Add GitHub mirror fallback for actionlint and vale downloads
|
||||
|
||||
## [0.50.5] - 2026-08-12
|
||||
|
||||
### Bug Fixes
|
||||
@@ -10,6 +16,11 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
|
||||
- `save_vault_yaml`: pass `allow_unicode=True` to `yaml.dump` to prevent
|
||||
corruption of non-ASCII vault content (matches infra's `save_yaml` pattern)
|
||||
|
||||
### Ci
|
||||
|
||||
- Add composite actions (setup-env, notify-failure, quality-checks) in `.gitea/actions/`
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -87,7 +87,7 @@ extra index and list devx in your dependencies:
|
||||
```toml
|
||||
[project]
|
||||
dependencies = [
|
||||
"devx>=0.50.5",
|
||||
"devx>=0.50.6",
|
||||
]
|
||||
|
||||
[tool.pip]
|
||||
@@ -101,8 +101,8 @@ pip install -e .
|
||||
```
|
||||
|
||||
> **Note:** If your project requires a specific devx version, pin it in
|
||||
> `dependencies` (for example, `"devx==0.50.5"`) or use a version constraint
|
||||
> (for example, `"devx>=0.50.5,<0.51"`).
|
||||
> `dependencies` (for example, `"devx==0.50.6"`) or use a version constraint
|
||||
> (for example, `"devx>=0.50.6,<0.51"`).
|
||||
|
||||
### 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/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
|
||||
|
||||
@@ -74,14 +74,14 @@ Add devx to your `pyproject.toml` dependencies and configure the registry:
|
||||
```toml
|
||||
[project]
|
||||
dependencies = [
|
||||
"devx>=0.50.5",
|
||||
"devx>=0.50.6",
|
||||
]
|
||||
|
||||
[tool.pip]
|
||||
extra-index-url = "https://git.oblachno.oblachno.fyi/api/packages/oblachno-oss/pypi/simple"
|
||||
```
|
||||
|
||||
Pin a specific version if needed: `"devx==0.50.5"` or `"devx>=0.50.5,<0.51"`.
|
||||
Pin a specific version if needed: `"devx==0.50.6"` or `"devx>=0.50.6,<0.51"`.
|
||||
|
||||
### Optional extras
|
||||
|
||||
|
||||
@@ -48,12 +48,12 @@ Add devx to your `pyproject.toml`:
|
||||
```toml
|
||||
[project]
|
||||
dependencies = [
|
||||
"devx>=0.50.5",
|
||||
"devx>=0.50.6",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"devx>=0.50.5",
|
||||
"devx>=0.50.6",
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
"""devx — reusable development and CI/CD tools for oblachno-oss projects."""
|
||||
|
||||
__version__ = "0.50.5"
|
||||
__version__ = "0.50.6"
|
||||
|
||||
@@ -102,7 +102,7 @@ def save_vault_yaml(path: Path, data: dict, vault_pass: Path | None = None) -> N
|
||||
data: Data to serialize.
|
||||
vault_pass: Path to the vault-password file (optional).
|
||||
"""
|
||||
plain = yaml.dump(data, default_flow_style=False, sort_keys=False)
|
||||
plain = yaml.dump(data, default_flow_style=False, sort_keys=False, allow_unicode=True)
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(plain)
|
||||
if vault_pass is not None and vault_pass.exists():
|
||||
|
||||
@@ -75,6 +75,25 @@ class TestSaveVaultYaml:
|
||||
content = f.read_text()
|
||||
assert "key: value" in content
|
||||
|
||||
def test_save_preserves_unicode(self, tmp_path: Path) -> None:
|
||||
"""allow_unicode=True writes UTF-8 instead of \\uXXXX escapes."""
|
||||
f = tmp_path / "output.yml"
|
||||
data = {"name": "Тест", "city": "München", "role": "管理员"}
|
||||
save_vault_yaml(f, data)
|
||||
content = f.read_text()
|
||||
assert "Тест" in content
|
||||
assert "München" in content
|
||||
assert "管理员" in content
|
||||
assert "\\u" not in content
|
||||
|
||||
def test_save_unicode_round_trip(self, tmp_path: Path) -> None:
|
||||
"""Saved unicode data loads back correctly."""
|
||||
f = tmp_path / "output.yml"
|
||||
data = {"name": "Тест", "city": "München"}
|
||||
save_vault_yaml(f, data)
|
||||
loaded = load_vault_yaml(f)
|
||||
assert loaded == data
|
||||
|
||||
def test_save_with_vault_pass_not_exists(self, tmp_path: Path) -> None:
|
||||
f = tmp_path / "output.yml"
|
||||
vp = tmp_path / "nonexistent"
|
||||
|
||||
Reference in New Issue
Block a user