zfs-encrypt-migrate 0.1.1__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 (62) hide show
  1. zfs_encrypt_migrate-0.1.1/.envrc +1 -0
  2. zfs_encrypt_migrate-0.1.1/.github/release-drafter.yml +43 -0
  3. zfs_encrypt_migrate-0.1.1/.github/renovate.json +35 -0
  4. zfs_encrypt_migrate-0.1.1/.github/workflows/docs.yml +57 -0
  5. zfs_encrypt_migrate-0.1.1/.github/workflows/pytest.yml +68 -0
  6. zfs_encrypt_migrate-0.1.1/.github/workflows/release-drafter.yml +22 -0
  7. zfs_encrypt_migrate-0.1.1/.github/workflows/release.yml +30 -0
  8. zfs_encrypt_migrate-0.1.1/.github/workflows/toc.yml +19 -0
  9. zfs_encrypt_migrate-0.1.1/.github/workflows/update-readme.yml +89 -0
  10. zfs_encrypt_migrate-0.1.1/.gitignore +169 -0
  11. zfs_encrypt_migrate-0.1.1/.pre-commit-config.yaml +45 -0
  12. zfs_encrypt_migrate-0.1.1/.yamllint +7 -0
  13. zfs_encrypt_migrate-0.1.1/LICENSE +21 -0
  14. zfs_encrypt_migrate-0.1.1/PKG-INFO +373 -0
  15. zfs_encrypt_migrate-0.1.1/README.md +344 -0
  16. zfs_encrypt_migrate-0.1.1/VERSION +1 -0
  17. zfs_encrypt_migrate-0.1.1/devbox.json +13 -0
  18. zfs_encrypt_migrate-0.1.1/docs/CNAME +1 -0
  19. zfs_encrypt_migrate-0.1.1/docs/assets/logo.svg +103 -0
  20. zfs_encrypt_migrate-0.1.1/docs/contributing.md +104 -0
  21. zfs_encrypt_migrate-0.1.1/docs/getting-started.md +149 -0
  22. zfs_encrypt_migrate-0.1.1/docs/guides.md +390 -0
  23. zfs_encrypt_migrate-0.1.1/docs/index.md +101 -0
  24. zfs_encrypt_migrate-0.1.1/docs/logo.svg +103 -0
  25. zfs_encrypt_migrate-0.1.1/docs/usage.md +390 -0
  26. zfs_encrypt_migrate-0.1.1/flake.lock +27 -0
  27. zfs_encrypt_migrate-0.1.1/flake.nix +128 -0
  28. zfs_encrypt_migrate-0.1.1/nix/integration-test.nix +397 -0
  29. zfs_encrypt_migrate-0.1.1/nix/nixos-module.nix +113 -0
  30. zfs_encrypt_migrate-0.1.1/pyproject.toml +93 -0
  31. zfs_encrypt_migrate-0.1.1/tests/__init__.py +1 -0
  32. zfs_encrypt_migrate-0.1.1/tests/conftest.py +71 -0
  33. zfs_encrypt_migrate-0.1.1/tests/helpers.py +52 -0
  34. zfs_encrypt_migrate-0.1.1/tests/test_audit.py +69 -0
  35. zfs_encrypt_migrate-0.1.1/tests/test_cli.py +499 -0
  36. zfs_encrypt_migrate-0.1.1/tests/test_main.py +31 -0
  37. zfs_encrypt_migrate-0.1.1/tests/test_migrate.py +1021 -0
  38. zfs_encrypt_migrate-0.1.1/tests/test_nixos_module.py +151 -0
  39. zfs_encrypt_migrate-0.1.1/tests/test_packaging.py +56 -0
  40. zfs_encrypt_migrate-0.1.1/tests/test_process.py +117 -0
  41. zfs_encrypt_migrate-0.1.1/tests/test_sizes.py +31 -0
  42. zfs_encrypt_migrate-0.1.1/tests/test_tree.py +902 -0
  43. zfs_encrypt_migrate-0.1.1/tests/test_workflows.py +43 -0
  44. zfs_encrypt_migrate-0.1.1/tests/test_zfs.py +224 -0
  45. zfs_encrypt_migrate-0.1.1/tests/zfs_sim.py +243 -0
  46. zfs_encrypt_migrate-0.1.1/uv.lock +975 -0
  47. zfs_encrypt_migrate-0.1.1/zensical.toml +113 -0
  48. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/__init__.py +7 -0
  49. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/__main__.py +8 -0
  50. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/_version.py +24 -0
  51. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/audit.py +29 -0
  52. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/cli.py +333 -0
  53. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/constants.py +11 -0
  54. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/errors.py +36 -0
  55. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/migrate.py +454 -0
  56. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/output.py +21 -0
  57. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/process.py +143 -0
  58. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/py.typed +0 -0
  59. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/sizes.py +18 -0
  60. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/tree.py +206 -0
  61. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/version.py +13 -0
  62. zfs_encrypt_migrate-0.1.1/zfs_encrypt_migrate/zfs.py +168 -0
@@ -0,0 +1 @@
1
+ source .venv/bin/activate
@@ -0,0 +1,43 @@
1
+ ---
2
+ name-template: "v$RESOLVED_VERSION"
3
+ tag-template: "v$RESOLVED_VERSION"
4
+ categories:
5
+ - title: "🔒 Security"
6
+ labels: ["security"]
7
+ - title: "🚀 Features"
8
+ labels: ["feature", "enhancement"]
9
+ - title: "🐛 Bug Fixes"
10
+ labels: ["fix", "bug", "bugfix"]
11
+ - title: "❄️ Nix"
12
+ labels: ["nix"]
13
+ - title: "🧰 CI & Maintenance"
14
+ labels: ["ci", "chore", "dependencies"]
15
+ - title: "📚 Documentation"
16
+ labels: ["documentation", "docs"]
17
+ change-template: "- $TITLE (#$NUMBER) @$AUTHOR"
18
+ change-title-escapes: '\<*_&'
19
+ version-resolver:
20
+ major:
21
+ labels: ["major", "breaking"]
22
+ minor:
23
+ labels: ["minor", "feature", "enhancement"]
24
+ patch:
25
+ labels: ["patch", "fix", "bug", "bugfix", "ci", "chore", "dependencies", "documentation", "docs", "security", "nix"]
26
+ default: patch
27
+ autolabeler:
28
+ - label: "security"
29
+ title: ["/security/i"]
30
+ - label: "fix"
31
+ title: ["/^fix/i"]
32
+ - label: "feature"
33
+ title: ["/^feat/i"]
34
+ - label: "ci"
35
+ title: ["/^ci/i"]
36
+ - label: "documentation"
37
+ title: ["/^docs/i"]
38
+ - label: "nix"
39
+ title: ["/nix/i"]
40
+ template: |
41
+ ## What’s Changed
42
+
43
+ $CHANGES
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "rebaseWhen": "behind-base-branch",
4
+ "dependencyDashboard": true,
5
+ "labels": [
6
+ "dependencies",
7
+ "no-stale"
8
+ ],
9
+ "commitMessagePrefix": "⬆️",
10
+ "commitMessageTopic": "{{depName}}",
11
+ "prBodyDefinitions": {
12
+ "Release": "yes"
13
+ },
14
+ "packageRules": [
15
+ {
16
+ "matchManagers": [
17
+ "github-actions"
18
+ ],
19
+ "addLabels": [
20
+ "github_actions"
21
+ ],
22
+ "rangeStrategy": "pin"
23
+ },
24
+ {
25
+ "matchManagers": [
26
+ "github-actions"
27
+ ],
28
+ "matchUpdateTypes": [
29
+ "minor",
30
+ "patch"
31
+ ],
32
+ "automerge": true
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: Documentation
3
+
4
+ on:
5
+ push:
6
+ branches: [main]
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: "pages"
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout repository
22
+ uses: actions/checkout@v6
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: "3.14"
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v7
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ uv sync --group docs
35
+
36
+ - name: Build documentation
37
+ run: uv run zensical build
38
+
39
+ - name: Upload artifact
40
+ uses: actions/upload-pages-artifact@v4
41
+ with:
42
+ path: ./site
43
+
44
+ deploy:
45
+ if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
46
+ permissions:
47
+ pages: write
48
+ id-token: write
49
+ environment:
50
+ name: github-pages
51
+ url: ${{ steps.deployment.outputs.page_url }}
52
+ runs-on: ubuntu-latest
53
+ needs: build
54
+ steps:
55
+ - name: Deploy to GitHub Pages
56
+ id: deployment
57
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: Test
3
+
4
+ on:
5
+ push:
6
+ branches: [main]
7
+ pull_request:
8
+ branches: [main]
9
+ workflow_call:
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v7
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ run: uv python install ${{ matrix.python-version }}
23
+ - name: Install dependencies
24
+ run: uv sync --dev
25
+ - name: Lint
26
+ run: uv run ruff check .
27
+ - name: Format check
28
+ run: uv run ruff format --check .
29
+ - name: Type check
30
+ run: uv run mypy zfs_encrypt_migrate
31
+ - name: Test
32
+ run: uv run pytest --cov=zfs_encrypt_migrate --cov-report=term-missing
33
+
34
+ nix:
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v6
38
+ # Expose /dev/kvm to the Nix build users before the daemon starts, so the
39
+ # NixOS VM integration test runs with hardware acceleration instead of
40
+ # slow TCG emulation. Must precede "Install Nix" so the daemon detects
41
+ # KVM at startup.
42
+ - name: Enable KVM for VM tests
43
+ run: |
44
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
45
+ | sudo tee /etc/udev/rules.d/99-kvm4all.rules
46
+ sudo udevadm control --reload-rules
47
+ sudo udevadm trigger --name-match=kvm
48
+ - name: Install Nix
49
+ uses: cachix/install-nix-action@v31
50
+ with:
51
+ extra_nix_config: |
52
+ system-features = nixos-test benchmark big-parallel kvm
53
+ - name: Install uv
54
+ uses: astral-sh/setup-uv@v7
55
+ - name: Set up Python
56
+ run: uv python install 3.14
57
+ - name: Install dependencies
58
+ run: uv sync --dev
59
+ - name: Check flake
60
+ run: nix flake check --all-systems --no-write-lock-file
61
+ - name: Build Nix package
62
+ run: nix build .#packages.x86_64-linux.default --no-link --no-write-lock-file
63
+ - name: Build Nix module check
64
+ run: nix build .#checks.x86_64-linux.module --no-link --no-write-lock-file
65
+ - name: Run ZFS integration VM test
66
+ run: nix build .#checks.x86_64-linux.integration --no-link --no-write-lock-file --print-build-logs
67
+ - name: Test NixOS modules
68
+ run: uv run pytest tests/test_nixos_module.py -q
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: Release Drafter
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ # The autolabeler needs to see PRs to apply category labels.
9
+ pull_request:
10
+ types: [opened, reopened, synchronize]
11
+
12
+ permissions:
13
+ contents: write
14
+ pull-requests: write
15
+
16
+ jobs:
17
+ update_release_draft:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: release-drafter/release-drafter@v6
21
+ env:
22
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: Upload Python Package
3
+
4
+ on:
5
+ release:
6
+ types: [published]
7
+
8
+ jobs:
9
+ test:
10
+ uses: ./.github/workflows/pytest.yml
11
+
12
+ deploy:
13
+ needs: test
14
+ runs-on: ubuntu-latest
15
+ environment:
16
+ name: pypi
17
+ url: https://pypi.org/project/zfs-encrypt-migrate/
18
+ permissions:
19
+ contents: read
20
+ id-token: write
21
+ steps:
22
+ - uses: actions/checkout@v6
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v7
25
+ - name: Check release tag matches VERSION
26
+ run: test "${GITHUB_REF_NAME}" = "v$(cat VERSION)"
27
+ - name: Build
28
+ run: uv build
29
+ - name: Publish package distributions to PyPI
30
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: TOC Generator
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ generateTOC:
14
+ name: TOC Generator
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: technote-space/toc-generator@9e238e7974de5fcf7b17b7acc54c896160dda0a3 # v4.3.1
18
+ with:
19
+ TOC_TITLE: ""
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: Update README.md
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ pull_request:
9
+
10
+ # Least privilege by default. Pull request runs execute untrusted code
11
+ # (the PR's own package via `uvx --with .` and README CODE blocks), so they
12
+ # must never receive a writable token. Only the push-to-main job elevates.
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ verify:
18
+ # Pull requests: regenerate the README with untrusted PR code under a
19
+ # read-only token and fail if it is out of date. No write access.
20
+ if: github.event_name == 'pull_request'
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+ steps:
25
+ - name: Check out repository
26
+ uses: actions/checkout@v6
27
+ with:
28
+ persist-credentials: false
29
+ fetch-depth: 0
30
+
31
+ - name: Set up Python
32
+ uses: actions/setup-python@v6
33
+
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v7
36
+
37
+ - name: Run markdown-code-runner
38
+ run: uvx --with . markdown-code-runner README.md
39
+
40
+ - name: Verify README.md is up to date
41
+ run: |
42
+ if ! git diff --quiet README.md; then
43
+ echo "::error::README.md is out of date; run markdown-code-runner and commit."
44
+ git diff README.md
45
+ exit 1
46
+ fi
47
+
48
+ update_readme:
49
+ # Push to main: trusted code path that may commit the regenerated README.
50
+ if: github.event_name == 'push'
51
+ runs-on: ubuntu-latest
52
+ permissions:
53
+ contents: write
54
+ steps:
55
+ - name: Check out repository
56
+ uses: actions/checkout@v6
57
+ with:
58
+ persist-credentials: false
59
+ fetch-depth: 0
60
+
61
+ - name: Set up Python
62
+ uses: actions/setup-python@v6
63
+
64
+ - name: Install uv
65
+ uses: astral-sh/setup-uv@v7
66
+
67
+ - name: Run markdown-code-runner
68
+ run: uvx --with . markdown-code-runner README.md
69
+
70
+ - name: Commit updated README.md
71
+ id: commit
72
+ run: |
73
+ git add README.md
74
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
75
+ git config --local user.name "github-actions[bot]"
76
+ if git diff --quiet && git diff --staged --quiet; then
77
+ echo "No changes in README.md, skipping commit."
78
+ echo "commit_status=skipped" >> $GITHUB_ENV
79
+ else
80
+ git commit -m "Update README.md"
81
+ echo "commit_status=committed" >> $GITHUB_ENV
82
+ fi
83
+
84
+ - name: Push changes
85
+ if: env.commit_status == 'committed'
86
+ uses: ad-m/github-push-action@881a6320fdb16eb5318c5054f31c218aec2b324c # v1.3.0
87
+ with:
88
+ github_token: ${{ secrets.GITHUB_TOKEN }}
89
+ branch: ${{ github.ref_name }}
@@ -0,0 +1,169 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # ruff
147
+ .ruff_cache/
148
+
149
+ # Pyre type checker
150
+ .pyre/
151
+
152
+ # hatch-vcs generated version file
153
+ _version.py
154
+
155
+ # pytype static type analyzer
156
+ .pytype/
157
+
158
+ # Cython debug symbols
159
+ cython_debug/
160
+
161
+ # PyCharm
162
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
163
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
164
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
165
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
166
+ #.idea/
167
+
168
+ # Nix build output
169
+ result
@@ -0,0 +1,45 @@
1
+ ---
2
+ ci:
3
+ skip: [mypy, pytest]
4
+
5
+ repos:
6
+ - repo: https://github.com/pre-commit/pre-commit-hooks
7
+ rev: v5.0.0
8
+ hooks:
9
+ - id: trailing-whitespace
10
+ - id: end-of-file-fixer
11
+ - id: check-yaml
12
+ - id: check-added-large-files
13
+ - repo: https://github.com/codespell-project/codespell
14
+ rev: v2.4.1
15
+ hooks:
16
+ - id: codespell
17
+ - repo: https://github.com/adrienverge/yamllint
18
+ rev: v1.37.1
19
+ hooks:
20
+ - id: yamllint
21
+ - repo: https://github.com/astral-sh/ruff-pre-commit
22
+ rev: v0.8.4
23
+ hooks:
24
+ - id: ruff
25
+ args: [--fix]
26
+ - id: ruff-format
27
+ - repo: https://github.com/basnijholt/privata
28
+ rev: v0.2.1
29
+ hooks:
30
+ - id: privata
31
+ - repo: local
32
+ hooks:
33
+ - id: mypy
34
+ name: mypy
35
+ entry: uv run mypy
36
+ language: system
37
+ types: [python]
38
+ pass_filenames: false
39
+ args: [zfs_encrypt_migrate]
40
+ - id: pytest
41
+ name: pytest
42
+ entry: uv run pytest
43
+ language: system
44
+ types: [python]
45
+ pass_filenames: false
@@ -0,0 +1,7 @@
1
+ ---
2
+ extends: default
3
+ rules:
4
+ truthy:
5
+ allowed-values: ["true", "false", "on"]
6
+ line-length:
7
+ max: 120
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Bas Nijholt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.