pyrs-yaml 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. pyrs_yaml-0.6.0/.cargo/config.toml +5 -0
  2. pyrs_yaml-0.6.0/.codegraph/.gitignore +5 -0
  3. pyrs_yaml-0.6.0/.github/workflows/ci.yml +138 -0
  4. pyrs_yaml-0.6.0/.github/workflows/docs.yml +61 -0
  5. pyrs_yaml-0.6.0/.github/workflows/publish.yml +265 -0
  6. pyrs_yaml-0.6.0/.gitignore +13 -0
  7. pyrs_yaml-0.6.0/.rumdl.toml +27 -0
  8. pyrs_yaml-0.6.0/AGENTS.md +279 -0
  9. pyrs_yaml-0.6.0/CHANGELOG.md +159 -0
  10. pyrs_yaml-0.6.0/CLAUDE.md +16 -0
  11. pyrs_yaml-0.6.0/Cargo.lock +1240 -0
  12. pyrs_yaml-0.6.0/Cargo.toml +40 -0
  13. pyrs_yaml-0.6.0/LICENSE-APACHE +199 -0
  14. pyrs_yaml-0.6.0/LICENSE-MIT +21 -0
  15. pyrs_yaml-0.6.0/PKG-INFO +286 -0
  16. pyrs_yaml-0.6.0/README.md +251 -0
  17. pyrs_yaml-0.6.0/ROADMAP.md +124 -0
  18. pyrs_yaml-0.6.0/benches/yaml_bench.rs +206 -0
  19. pyrs_yaml-0.6.0/build.rs +3 -0
  20. pyrs_yaml-0.6.0/docs/en/api/exceptions.md +139 -0
  21. pyrs_yaml-0.6.0/docs/en/api/reference.md +274 -0
  22. pyrs_yaml-0.6.0/docs/en/api/yaml-document.md +285 -0
  23. pyrs_yaml-0.6.0/docs/en/changelog.md +159 -0
  24. pyrs_yaml-0.6.0/docs/en/contributing/architecture.md +177 -0
  25. pyrs_yaml-0.6.0/docs/en/contributing/setup.md +98 -0
  26. pyrs_yaml-0.6.0/docs/en/contributing/standards.md +128 -0
  27. pyrs_yaml-0.6.0/docs/en/contributing/tests.md +113 -0
  28. pyrs_yaml-0.6.0/docs/en/features.md +169 -0
  29. pyrs_yaml-0.6.0/docs/en/guides/frontmatter.md +108 -0
  30. pyrs_yaml-0.6.0/docs/en/guides/i18n.md +244 -0
  31. pyrs_yaml-0.6.0/docs/en/guides/numpy.md +109 -0
  32. pyrs_yaml-0.6.0/docs/en/guides/parsing.md +92 -0
  33. pyrs_yaml-0.6.0/docs/en/guides/pyyaml-compat.md +80 -0
  34. pyrs_yaml-0.6.0/docs/en/guides/round-trip.md +76 -0
  35. pyrs_yaml-0.6.0/docs/en/guides/serialization.md +110 -0
  36. pyrs_yaml-0.6.0/docs/en/index.md +65 -0
  37. pyrs_yaml-0.6.0/docs/en/installation.md +42 -0
  38. pyrs_yaml-0.6.0/docs/en/license.md +69 -0
  39. pyrs_yaml-0.6.0/docs/en/performance/benchmarks.md +69 -0
  40. pyrs_yaml-0.6.0/docs/en/performance/comparison.md +95 -0
  41. pyrs_yaml-0.6.0/docs/en/quick-start.md +170 -0
  42. pyrs_yaml-0.6.0/docs/ja/api/exceptions.md +135 -0
  43. pyrs_yaml-0.6.0/docs/ja/api/reference.md +279 -0
  44. pyrs_yaml-0.6.0/docs/ja/api/yaml-document.md +223 -0
  45. pyrs_yaml-0.6.0/docs/ja/changelog.md +91 -0
  46. pyrs_yaml-0.6.0/docs/ja/contributing/architecture.md +156 -0
  47. pyrs_yaml-0.6.0/docs/ja/contributing/setup.md +89 -0
  48. pyrs_yaml-0.6.0/docs/ja/contributing/standards.md +132 -0
  49. pyrs_yaml-0.6.0/docs/ja/contributing/tests.md +118 -0
  50. pyrs_yaml-0.6.0/docs/ja/features.md +174 -0
  51. pyrs_yaml-0.6.0/docs/ja/guides/frontmatter.md +114 -0
  52. pyrs_yaml-0.6.0/docs/ja/guides/i18n.md +255 -0
  53. pyrs_yaml-0.6.0/docs/ja/guides/numpy.md +114 -0
  54. pyrs_yaml-0.6.0/docs/ja/guides/parsing.md +98 -0
  55. pyrs_yaml-0.6.0/docs/ja/guides/pyyaml-compat.md +84 -0
  56. pyrs_yaml-0.6.0/docs/ja/guides/round-trip.md +81 -0
  57. pyrs_yaml-0.6.0/docs/ja/guides/serialization.md +115 -0
  58. pyrs_yaml-0.6.0/docs/ja/index.md +72 -0
  59. pyrs_yaml-0.6.0/docs/ja/installation.md +45 -0
  60. pyrs_yaml-0.6.0/docs/ja/license.md +74 -0
  61. pyrs_yaml-0.6.0/docs/ja/performance/benchmarks.md +74 -0
  62. pyrs_yaml-0.6.0/docs/ja/performance/comparison.md +100 -0
  63. pyrs_yaml-0.6.0/docs/ja/quick-start.md +174 -0
  64. pyrs_yaml-0.6.0/docs/ko/api/exceptions.md +135 -0
  65. pyrs_yaml-0.6.0/docs/ko/api/reference.md +279 -0
  66. pyrs_yaml-0.6.0/docs/ko/api/yaml-document.md +223 -0
  67. pyrs_yaml-0.6.0/docs/ko/changelog.md +91 -0
  68. pyrs_yaml-0.6.0/docs/ko/contributing/architecture.md +156 -0
  69. pyrs_yaml-0.6.0/docs/ko/contributing/setup.md +89 -0
  70. pyrs_yaml-0.6.0/docs/ko/contributing/standards.md +133 -0
  71. pyrs_yaml-0.6.0/docs/ko/contributing/tests.md +118 -0
  72. pyrs_yaml-0.6.0/docs/ko/features.md +174 -0
  73. pyrs_yaml-0.6.0/docs/ko/guides/frontmatter.md +114 -0
  74. pyrs_yaml-0.6.0/docs/ko/guides/i18n.md +255 -0
  75. pyrs_yaml-0.6.0/docs/ko/guides/numpy.md +114 -0
  76. pyrs_yaml-0.6.0/docs/ko/guides/parsing.md +98 -0
  77. pyrs_yaml-0.6.0/docs/ko/guides/pyyaml-compat.md +84 -0
  78. pyrs_yaml-0.6.0/docs/ko/guides/round-trip.md +81 -0
  79. pyrs_yaml-0.6.0/docs/ko/guides/serialization.md +115 -0
  80. pyrs_yaml-0.6.0/docs/ko/index.md +72 -0
  81. pyrs_yaml-0.6.0/docs/ko/installation.md +45 -0
  82. pyrs_yaml-0.6.0/docs/ko/license.md +74 -0
  83. pyrs_yaml-0.6.0/docs/ko/performance/benchmarks.md +74 -0
  84. pyrs_yaml-0.6.0/docs/ko/performance/comparison.md +100 -0
  85. pyrs_yaml-0.6.0/docs/ko/quick-start.md +174 -0
  86. pyrs_yaml-0.6.0/docs/zh/api/exceptions.md +135 -0
  87. pyrs_yaml-0.6.0/docs/zh/api/reference.md +279 -0
  88. pyrs_yaml-0.6.0/docs/zh/api/yaml-document.md +223 -0
  89. pyrs_yaml-0.6.0/docs/zh/changelog.md +91 -0
  90. pyrs_yaml-0.6.0/docs/zh/contributing/architecture.md +156 -0
  91. pyrs_yaml-0.6.0/docs/zh/contributing/setup.md +89 -0
  92. pyrs_yaml-0.6.0/docs/zh/contributing/standards.md +133 -0
  93. pyrs_yaml-0.6.0/docs/zh/contributing/tests.md +118 -0
  94. pyrs_yaml-0.6.0/docs/zh/features.md +174 -0
  95. pyrs_yaml-0.6.0/docs/zh/guides/frontmatter.md +114 -0
  96. pyrs_yaml-0.6.0/docs/zh/guides/i18n.md +252 -0
  97. pyrs_yaml-0.6.0/docs/zh/guides/numpy.md +114 -0
  98. pyrs_yaml-0.6.0/docs/zh/guides/parsing.md +98 -0
  99. pyrs_yaml-0.6.0/docs/zh/guides/pyyaml-compat.md +84 -0
  100. pyrs_yaml-0.6.0/docs/zh/guides/round-trip.md +81 -0
  101. pyrs_yaml-0.6.0/docs/zh/guides/serialization.md +115 -0
  102. pyrs_yaml-0.6.0/docs/zh/index.md +72 -0
  103. pyrs_yaml-0.6.0/docs/zh/installation.md +47 -0
  104. pyrs_yaml-0.6.0/docs/zh/license.md +74 -0
  105. pyrs_yaml-0.6.0/docs/zh/performance/benchmarks.md +74 -0
  106. pyrs_yaml-0.6.0/docs/zh/performance/comparison.md +100 -0
  107. pyrs_yaml-0.6.0/docs/zh/quick-start.md +176 -0
  108. pyrs_yaml-0.6.0/prek.toml +67 -0
  109. pyrs_yaml-0.6.0/pyproject.toml +83 -0
  110. pyrs_yaml-0.6.0/pytest.ini +12 -0
  111. pyrs_yaml-0.6.0/python/pyrs_yaml/__init__.py +87 -0
  112. pyrs_yaml-0.6.0/python/pyrs_yaml/async_dump.py +66 -0
  113. pyrs_yaml-0.6.0/python/pyrs_yaml/py.typed +0 -0
  114. pyrs_yaml-0.6.0/ruff.toml +24 -0
  115. pyrs_yaml-0.6.0/rustfmt.toml +5 -0
  116. pyrs_yaml-0.6.0/scripts/build-docs.py +92 -0
  117. pyrs_yaml-0.6.0/src/ast.rs +595 -0
  118. pyrs_yaml-0.6.0/src/i18n/locales/en.yml +15 -0
  119. pyrs_yaml-0.6.0/src/i18n/locales/ja-JP.yml +15 -0
  120. pyrs_yaml-0.6.0/src/i18n/locales/ko-KR.yml +15 -0
  121. pyrs_yaml-0.6.0/src/i18n/locales/zh-CN.yml +15 -0
  122. pyrs_yaml-0.6.0/src/i18n.rs +424 -0
  123. pyrs_yaml-0.6.0/src/integration/mod.rs +4 -0
  124. pyrs_yaml-0.6.0/src/integration/saphyr.rs +37 -0
  125. pyrs_yaml-0.6.0/src/integration/yaml_suite.rs +71 -0
  126. pyrs_yaml-0.6.0/src/lib.rs +25 -0
  127. pyrs_yaml-0.6.0/src/parser/mod.rs +591 -0
  128. pyrs_yaml-0.6.0/src/parser/stream.rs +611 -0
  129. pyrs_yaml-0.6.0/src/parser/yaml/comment.rs +385 -0
  130. pyrs_yaml-0.6.0/src/parser/yaml/merge.rs +238 -0
  131. pyrs_yaml-0.6.0/src/parser/yaml/mod.rs +14 -0
  132. pyrs_yaml-0.6.0/src/parser/yaml/scalar.rs +209 -0
  133. pyrs_yaml-0.6.0/src/parser/yaml/schema.rs +366 -0
  134. pyrs_yaml-0.6.0/src/parser/yaml/types.rs +204 -0
  135. pyrs_yaml-0.6.0/src/py/convert.rs +169 -0
  136. pyrs_yaml-0.6.0/src/py/mod.rs +638 -0
  137. pyrs_yaml-0.6.0/src/py/ndarray.rs +87 -0
  138. pyrs_yaml-0.6.0/src/py/python_types.rs +106 -0
  139. pyrs_yaml-0.6.0/src/py/stream_events.rs +136 -0
  140. pyrs_yaml-0.6.0/src/serializer.rs +671 -0
  141. pyrs_yaml-0.6.0/tests/benchmark_compare.py +327 -0
  142. pyrs_yaml-0.6.0/tests/conftest.py +49 -0
  143. pyrs_yaml-0.6.0/tests/roundtrip.yaml +54 -0
  144. pyrs_yaml-0.6.0/tests/test_async.py +88 -0
  145. pyrs_yaml-0.6.0/tests/test_edge_cases.py +112 -0
  146. pyrs_yaml-0.6.0/tests/test_errors.py +112 -0
  147. pyrs_yaml-0.6.0/tests/test_escape.py +57 -0
  148. pyrs_yaml-0.6.0/tests/test_features.py +58 -0
  149. pyrs_yaml-0.6.0/tests/test_gaps.py +929 -0
  150. pyrs_yaml-0.6.0/tests/test_json.py +63 -0
  151. pyrs_yaml-0.6.0/tests/test_numpy.py +301 -0
  152. pyrs_yaml-0.6.0/tests/test_parse.py +290 -0
  153. pyrs_yaml-0.6.0/tests/test_performance.py +27 -0
  154. pyrs_yaml-0.6.0/tests/test_reparse.py +67 -0
  155. pyrs_yaml-0.6.0/tests/test_roundtrip.py +147 -0
  156. pyrs_yaml-0.6.0/tests/test_schema_profiles.py +261 -0
  157. pyrs_yaml-0.6.0/tests/test_serialize.py +65 -0
  158. pyrs_yaml-0.6.0/tests/test_streaming.py +194 -0
  159. pyrs_yaml-0.6.0/tests/test_tabs.py +51 -0
  160. pyrs_yaml-0.6.0/tests/test_validate.py +109 -0
  161. pyrs_yaml-0.6.0/tests/test_yaml_suite.py +206 -0
  162. pyrs_yaml-0.6.0/uv.lock +2605 -0
  163. pyrs_yaml-0.6.0/zensical.toml +153 -0
@@ -0,0 +1,5 @@
1
+ [target.'cfg(all())']
2
+ rustflags = [
3
+ "-D",
4
+ "warnings",
5
+ ]
@@ -0,0 +1,5 @@
1
+ # CodeGraph data files — local to each machine, not for committing.
2
+ # Ignore everything in .codegraph/ except this file itself, so transient
3
+ # files (the database, daemon.pid, sockets, logs) never show up in git.
4
+ *
5
+ !.gitignore
@@ -0,0 +1,138 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ tags: ["*"]
7
+ pull_request:
8
+ paths-ignore:
9
+ - "docs/**"
10
+ - "*.md"
11
+ - "AGENTS.md"
12
+ - "CHANGELOG.md"
13
+ - ".gitignore"
14
+ - "prek.toml"
15
+ - ".rumdl.toml"
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ env:
22
+ CARGO_TERM_COLOR: always
23
+
24
+ jobs:
25
+ test:
26
+ strategy:
27
+ matrix:
28
+ os: [ubuntu-latest, windows-latest, macos-latest]
29
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
30
+ runs-on: ${{ matrix.os }}
31
+ steps:
32
+ - uses: actions/checkout@v6
33
+
34
+ - name: Install Rust toolchain
35
+ uses: dtolnay/rust-toolchain@stable
36
+ with:
37
+ components: clippy
38
+
39
+ - name: Set up Python
40
+ uses: actions/setup-python@v6
41
+ with:
42
+ python-version: ${{ matrix.python-version }}
43
+
44
+ - name: Install uv
45
+ uses: astral-sh/setup-uv@v7
46
+ with:
47
+ version: "latest"
48
+ enable-cache: true
49
+ cache-dependency-glob: "uv.lock"
50
+
51
+ - name: Create virtualenv
52
+ run: uv venv .venv
53
+
54
+ - name: Run cargo tests
55
+ if: matrix.os != 'macos-latest'
56
+ env:
57
+ PYO3_PYTHON: python
58
+ run: cargo test --locked
59
+
60
+ - name: Run cargo clippy
61
+ run: cargo clippy -- -D warnings
62
+
63
+ - name: Build and install
64
+ uses: PyO3/maturin-action@v1
65
+ with:
66
+ command: develop
67
+ args: --release
68
+
69
+ - name: Install Python test dependencies
70
+ run: uv pip install -q pytest pytest-asyncio numpy jsonschema
71
+
72
+ - name: Run Python tests
73
+ run: uv run pytest tests/ -v --ignore=tests/benchmark_compare.py
74
+
75
+ build:
76
+ strategy:
77
+ matrix:
78
+ os: [ubuntu-latest, windows-latest, macos-latest]
79
+ runs-on: ${{ matrix.os }}
80
+ steps:
81
+ - uses: actions/checkout@v6
82
+
83
+ - name: Build abi3 wheels
84
+ uses: PyO3/maturin-action@v1
85
+ with:
86
+ command: build
87
+ args: --release --find-interpreter --out dist
88
+
89
+ - name: Upload wheels
90
+ uses: actions/upload-artifact@v6
91
+ with:
92
+ name: wheels-${{ matrix.os }}
93
+ path: dist/
94
+
95
+ test-freethreaded:
96
+ runs-on: ubuntu-latest
97
+ steps:
98
+ - uses: actions/checkout@v6
99
+
100
+ - name: Install Rust toolchain
101
+ uses: dtolnay/rust-toolchain@stable
102
+ with:
103
+ components: clippy
104
+
105
+ - name: Set up free-threaded Python
106
+ uses: actions/setup-python@v6
107
+ with:
108
+ python-version: "3.14t"
109
+
110
+ - name: Install uv
111
+ uses: astral-sh/setup-uv@v7
112
+ with:
113
+ version: "latest"
114
+ enable-cache: true
115
+ cache-dependency-glob: "uv.lock"
116
+
117
+ - name: Create virtualenv
118
+ run: uv venv .venv
119
+
120
+ - name: Run cargo tests
121
+ env:
122
+ PYO3_PYTHON: python3.14t
123
+ run: cargo test --locked
124
+
125
+ - name: Run cargo clippy
126
+ run: cargo clippy -- -D warnings
127
+
128
+ - name: Build and install free-threaded wheel
129
+ uses: PyO3/maturin-action@v1
130
+ with:
131
+ command: develop
132
+ args: --release
133
+
134
+ - name: Install Python test dependencies
135
+ run: uv pip install -q pytest pytest-asyncio jsonschema
136
+
137
+ - name: Run Python tests
138
+ run: uv run pytest tests/ -v --ignore=tests/benchmark_compare.py -k "not numpy"
@@ -0,0 +1,61 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: ["docs/**", "scripts/build-docs.py", "zensical.toml"]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: pages
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ environment:
22
+ name: github-pages
23
+ url: ${{ steps.deployment.outputs.page_url }}
24
+ steps:
25
+ - uses: actions/checkout@v6
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v6
29
+ with:
30
+ python-version: "3.11"
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v7
34
+ with:
35
+ version: "latest"
36
+ enable-cache: true
37
+ cache-dependency-glob: "uv.lock"
38
+
39
+ - name: Create virtualenv
40
+ run: uv venv .venv
41
+
42
+ - name: Build and install
43
+ uses: PyO3/maturin-action@v1
44
+ with:
45
+ command: develop
46
+ args: --release
47
+
48
+ - name: Build docs
49
+ run: uv run --group docs python scripts/build-docs.py
50
+
51
+ - name: Setup Pages
52
+ uses: actions/configure-pages@v5
53
+
54
+ - name: Upload artifact
55
+ uses: actions/upload-pages-artifact@v3
56
+ with:
57
+ path: site
58
+
59
+ - name: Deploy to GitHub Pages
60
+ id: deployment
61
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,265 @@
1
+ # Adapted from maturin-generated template for the pyrs-yaml project
2
+ name: Publish
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ - master
9
+ tags:
10
+ - '*'
11
+ pull_request:
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ linux:
19
+ runs-on: ${{ matrix.platform.runner }}
20
+ strategy:
21
+ matrix:
22
+ platform:
23
+ - runner: ubuntu-22.04
24
+ target: x86_64
25
+ - runner: ubuntu-22.04
26
+ target: x86
27
+ - runner: ubuntu-22.04
28
+ target: aarch64
29
+ - runner: ubuntu-22.04
30
+ target: armv7
31
+ - runner: ubuntu-22.04
32
+ target: s390x
33
+ - runner: ubuntu-22.04
34
+ target: ppc64le
35
+ steps:
36
+ - uses: actions/checkout@v6
37
+ - uses: actions/setup-python@v6
38
+ with:
39
+ python-version: "3.8"
40
+ - name: Build wheels
41
+ uses: PyO3/maturin-action@v1
42
+ with:
43
+ target: ${{ matrix.platform.target }}
44
+ args: --release --out dist
45
+ sccache: false
46
+ manylinux: auto
47
+ - name: Upload wheels
48
+ uses: actions/upload-artifact@v6
49
+ with:
50
+ name: wheels-linux-${{ matrix.platform.target }}
51
+ path: dist
52
+ - uses: astral-sh/setup-uv@v7
53
+ if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
54
+ - name: pytest
55
+ if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
56
+ shell: bash
57
+ run: |
58
+ set -e
59
+ uv venv .venv
60
+ source .venv/bin/activate
61
+ uv pip install pyrs-yaml pytest pytest-asyncio numpy jsonschema PyYAML --find-links dist --reinstall
62
+ pytest tests/ -v
63
+ - name: pytest
64
+ if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }}
65
+ uses: uraimo/run-on-arch-action@v3
66
+ with:
67
+ arch: ${{ matrix.platform.target }}
68
+ distro: ubuntu24.04
69
+ install: |
70
+ apt-get update
71
+ apt-get install -y --no-install-recommends python3 python3-venv python3-dev gcc g++ build-essential
72
+ run: |
73
+ set -e
74
+ python3 -m venv .venv
75
+ source .venv/bin/activate
76
+ pip install pyrs-yaml pytest pytest-asyncio jsonschema PyYAML --find-links dist --force-reinstall
77
+ pytest tests/ -v
78
+
79
+ musllinux:
80
+ runs-on: ${{ matrix.platform.runner }}
81
+ strategy:
82
+ matrix:
83
+ platform:
84
+ - runner: ubuntu-22.04
85
+ target: x86_64
86
+ - runner: ubuntu-22.04
87
+ target: x86
88
+ - runner: ubuntu-22.04
89
+ target: aarch64
90
+ steps:
91
+ - uses: actions/checkout@v6
92
+ - uses: actions/setup-python@v6
93
+ with:
94
+ python-version: "3.8"
95
+ - name: Build wheels
96
+ uses: PyO3/maturin-action@v1
97
+ with:
98
+ target: ${{ matrix.platform.target }}
99
+ args: --release --out dist
100
+ sccache: false
101
+ manylinux: musllinux_1_2
102
+ - name: Upload wheels
103
+ uses: actions/upload-artifact@v6
104
+ with:
105
+ name: wheels-musllinux-${{ matrix.platform.target }}
106
+ path: dist
107
+ - name: pytest
108
+ if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
109
+ run: |
110
+ set -e
111
+ docker run --rm -v ${{ github.workspace }}:/io -w /io alpine:latest sh -c '
112
+ apk add py3-pip py3-virtualenv
113
+ python3 -m virtualenv .venv
114
+ source .venv/bin/activate
115
+ pip install pyrs-yaml pytest pytest-asyncio jsonschema PyYAML --find-links dist --force-reinstall
116
+ pytest tests/ -v
117
+ '
118
+ - name: pytest
119
+ if: ${{ !startsWith(matrix.platform.target, 'x86') }}
120
+ uses: uraimo/run-on-arch-action@v3
121
+ with:
122
+ arch: ${{ matrix.platform.target }}
123
+ distro: alpine_latest
124
+ install: |
125
+ apk add py3-virtualenv py3-pip python3-dev gcc g++ build-base
126
+ run: |
127
+ set -e
128
+ python3 -m virtualenv .venv
129
+ source .venv/bin/activate
130
+ pip install pyrs-yaml pytest pytest-asyncio jsonschema PyYAML --find-links dist --force-reinstall
131
+ pytest tests/ -v
132
+
133
+ windows:
134
+ runs-on: ${{ matrix.platform.runner }}
135
+ strategy:
136
+ matrix:
137
+ platform:
138
+ - runner: windows-latest
139
+ target: x64
140
+ python_arch: x64
141
+ - runner: windows-latest
142
+ target: x86
143
+ python_arch: x86
144
+ - runner: windows-11-arm
145
+ target: aarch64
146
+ python_arch: arm64
147
+ steps:
148
+ - uses: actions/checkout@v6
149
+ - uses: actions/setup-python@v6
150
+ with:
151
+ python-version: "3.13"
152
+ architecture: ${{ matrix.platform.python_arch }}
153
+ - name: Build wheels
154
+ uses: PyO3/maturin-action@v1
155
+ with:
156
+ target: ${{ matrix.platform.target }}
157
+ args: --release --out dist
158
+ sccache: false
159
+ - uses: actions/setup-python@v6
160
+ with:
161
+ python-version: "3.14t"
162
+ architecture: ${{ matrix.platform.python_arch }}
163
+ - name: Build free-threaded wheels
164
+ uses: PyO3/maturin-action@v1
165
+ with:
166
+ target: ${{ matrix.platform.target }}
167
+ args: --release --out dist -i python3.14t
168
+ sccache: false
169
+ - name: Upload wheels
170
+ uses: actions/upload-artifact@v6
171
+ with:
172
+ name: wheels-windows-${{ matrix.platform.target }}
173
+ path: dist
174
+ - uses: astral-sh/setup-uv@v7
175
+ - name: pytest
176
+ shell: bash
177
+ run: |
178
+ set -e
179
+ uv venv .venv
180
+ source .venv/Scripts/activate
181
+ uv pip install pyrs-yaml pytest pytest-asyncio numpy jsonschema PyYAML --find-links dist --reinstall
182
+ pytest tests/ -v
183
+
184
+ macos:
185
+ runs-on: ${{ matrix.platform.runner }}
186
+ strategy:
187
+ matrix:
188
+ platform:
189
+ - runner: macos-15-intel
190
+ target: x86_64
191
+ - runner: macos-latest
192
+ target: aarch64
193
+ steps:
194
+ - uses: actions/checkout@v6
195
+ - uses: actions/setup-python@v6
196
+ with:
197
+ python-version: "3.8"
198
+ - name: Build wheels
199
+ uses: PyO3/maturin-action@v1
200
+ with:
201
+ target: ${{ matrix.platform.target }}
202
+ args: --release --out dist
203
+ sccache: false
204
+ - uses: actions/setup-python@v6
205
+ with:
206
+ python-version: "3.14t"
207
+ - name: Build free-threaded wheels
208
+ uses: PyO3/maturin-action@v1
209
+ with:
210
+ target: ${{ matrix.platform.target }}
211
+ args: --release --out dist -i python3.14t
212
+ sccache: false
213
+ - name: Upload wheels
214
+ uses: actions/upload-artifact@v6
215
+ with:
216
+ name: wheels-macos-${{ matrix.platform.target }}
217
+ path: dist
218
+ - uses: astral-sh/setup-uv@v7
219
+ - name: pytest
220
+ run: |
221
+ set -e
222
+ uv venv .venv
223
+ source .venv/bin/activate
224
+ uv pip install pyrs-yaml pytest pytest-asyncio numpy jsonschema PyYAML --find-links dist --reinstall
225
+ pytest tests/ -v
226
+
227
+ sdist:
228
+ runs-on: ubuntu-latest
229
+ steps:
230
+ - uses: actions/checkout@v6
231
+ - name: Build sdist
232
+ uses: PyO3/maturin-action@v1
233
+ with:
234
+ command: sdist
235
+ args: --out dist
236
+ - name: Upload sdist
237
+ uses: actions/upload-artifact@v6
238
+ with:
239
+ name: wheels-sdist
240
+ path: dist
241
+
242
+ release:
243
+ name: Release
244
+ runs-on: ubuntu-latest
245
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
246
+ needs: [linux, musllinux, windows, macos, sdist]
247
+ permissions:
248
+ # Use to sign the release artifacts
249
+ id-token: write
250
+ # Used to upload release artifacts
251
+ contents: write
252
+ # Used to generate artifact attestation
253
+ attestations: write
254
+ steps:
255
+ - uses: actions/download-artifact@v7
256
+ - name: Generate artifact attestation
257
+ uses: actions/attest@v4
258
+ with:
259
+ subject-path: 'wheels-*/*'
260
+ - name: Install uv
261
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
262
+ uses: astral-sh/setup-uv@v7
263
+ - name: Publish to PyPI
264
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
265
+ run: uv publish 'wheels-*/*'
@@ -0,0 +1,13 @@
1
+ /target
2
+ .venv/
3
+ __pycache__/
4
+ *.pyc
5
+ .pytest_cache/
6
+ *.egg-info/
7
+ *.pyd
8
+ *.pdb
9
+ /dist/
10
+ /.benchmarks/
11
+ /site/
12
+ docs/audit-plan.md
13
+ docs/experiments/
@@ -0,0 +1,27 @@
1
+ # rumdl configuration — Markdown linting for pyyaml-rs
2
+ # https://rumdl.dev/configuration/
3
+
4
+ [global]
5
+ extend-disable = ["MD013"] # line length handled by general formatting
6
+
7
+ exclude = [
8
+ ".git",
9
+ ".github",
10
+ "site",
11
+ "dist",
12
+ "target",
13
+ ".venv",
14
+ ".pytest_cache",
15
+ ".benchmarks",
16
+ "node_modules",
17
+ ]
18
+
19
+ respect-gitignore = true
20
+
21
+ [per-file-ignores]
22
+ # CLAUDE.md: no H1 heading, uses <comet-ambient-resume> HTML tags
23
+ "CLAUDE.md" = ["MD033", "MD041"]
24
+ # AGENTS.md: uses <comet-ambient-resume> HTML tags
25
+ "AGENTS.md" = ["MD033"]
26
+ # Docs: mkdocs frontmatter (---) means no H1 on first line
27
+ "docs/**/*.md" = ["MD041"]