horbach-cli 0.2.1__tar.gz → 1.0.2__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 (33) hide show
  1. horbach_cli-1.0.2/.claude/settings.local.json +20 -0
  2. horbach_cli-1.0.2/.github/workflows/lint.yml +65 -0
  3. horbach_cli-1.0.2/.github/workflows/release.yml +71 -0
  4. horbach_cli-1.0.2/.gitignore +7 -0
  5. horbach_cli-1.0.2/CHANGELOG.md +50 -0
  6. horbach_cli-1.0.2/Dockerfile +8 -0
  7. horbach_cli-1.0.2/PKG-INFO +27 -0
  8. horbach_cli-1.0.2/README.md +14 -0
  9. horbach_cli-1.0.2/Taskfile.yml +46 -0
  10. horbach_cli-1.0.2/hacks/.yamllint.yml +19 -0
  11. horbach_cli-1.0.2/horbach_cli/README.md +269 -0
  12. horbach_cli-1.0.2/horbach_cli/__init__.py +6 -0
  13. {horbach_cli-0.2.1 → horbach_cli-1.0.2}/horbach_cli/converter.py +76 -46
  14. {horbach_cli-0.2.1 → horbach_cli-1.0.2}/horbach_cli/deduplicator.py +40 -40
  15. {horbach_cli-0.2.1 → horbach_cli-1.0.2}/horbach_cli/libs/common.py +17 -17
  16. horbach_cli-1.0.2/horbach_cli/libs/common_xsh.xsh +14 -0
  17. horbach_cli-1.0.2/horbach_cli/libs/converter.py +38 -0
  18. horbach_cli-1.0.2/horbach_cli/main.py +138 -0
  19. horbach_cli-1.0.2/horbach_cli/uninstall.py +85 -0
  20. horbach_cli-1.0.2/horbach_cli/warp.xsh +83 -0
  21. horbach_cli-1.0.2/pyproject.toml +54 -0
  22. horbach_cli-1.0.2/tests/__init__.py +0 -0
  23. horbach_cli-1.0.2/tests/test_converter.py +145 -0
  24. horbach_cli-1.0.2/tests/test_uninstall.py +77 -0
  25. horbach_cli-1.0.2/uv.lock +1387 -0
  26. horbach_cli-0.2.1/PKG-INFO +0 -21
  27. horbach_cli-0.2.1/README.md +0 -4
  28. horbach_cli-0.2.1/horbach_cli/README.md +0 -112
  29. horbach_cli-0.2.1/horbach_cli/__init__.py +0 -1
  30. horbach_cli-0.2.1/horbach_cli/libs/converter.py +0 -20
  31. horbach_cli-0.2.1/horbach_cli/main.py +0 -55
  32. horbach_cli-0.2.1/pyproject.toml +0 -39
  33. {horbach_cli-0.2.1 → horbach_cli-1.0.2}/horbach_cli/libs/__init__.py +0 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python:*)",
5
+ "Bash(uv lock:*)",
6
+ "Bash(uv run:*)",
7
+ "Bash(task test:*)",
8
+ "Bash(git restore:*)",
9
+ "Bash(git checkout:*)",
10
+ "Bash(git commit:*)",
11
+ "Bash(git add:*)",
12
+ "Bash(pip index:*)",
13
+ "Bash(curl -s https://pypi.org/pypi/horbach-cli/json)",
14
+ "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\(list\\(d[''''releases''''].keys\\(\\)\\)\\)\")",
15
+ "Bash(gh run:*)",
16
+ "Bash(grep -v \"^$\")",
17
+ "Bash(uv build:*)"
18
+ ]
19
+ }
20
+ }
@@ -0,0 +1,65 @@
1
+ ---
2
+
3
+ name: lint
4
+
5
+ on: [push, pull_request]
6
+
7
+ jobs:
8
+
9
+ test:
10
+ name: test
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: Install uv
15
+ uses: astral-sh/setup-uv@v4
16
+ with:
17
+ version: "latest"
18
+ - name: Set up Python
19
+ run: uv python install 3.11
20
+ - name: Install dependencies
21
+ run: uv sync --all-extras
22
+ - name: Run tests
23
+ run: uv run pytest
24
+
25
+ black:
26
+ name: black
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ - name: Install uv
31
+ uses: astral-sh/setup-uv@v4
32
+ with:
33
+ version: "latest"
34
+ - name: Set up Python
35
+ run: uv python install 3.11
36
+ - name: Install and run black
37
+ run: uv sync --all-extras && uv run black . --line-length 119 --check
38
+
39
+ flake8:
40
+ name: flake8
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+ - name: Install uv
45
+ uses: astral-sh/setup-uv@v4
46
+ with:
47
+ version: "latest"
48
+ - name: Set up Python
49
+ run: uv python install 3.11
50
+ - name: Install and run flake8
51
+ run: uv sync --all-extras && uv run flake8 . --max-line-length 119 --statistics --extend-exclude .venv,dist
52
+
53
+ yamllint:
54
+ name: yamllint
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - name: Checkout
58
+ uses: actions/checkout@v4
59
+ - name: yamllint
60
+ uses: karancode/yamllint-github-action@master
61
+ with:
62
+ yamllint_file_or_dir: .
63
+ yamllint_config_filepath: hacks/.yamllint.yml
64
+ env:
65
+ GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,71 @@
1
+ ---
2
+
3
+ name: release
4
+
5
+ on:
6
+ push:
7
+ branches: [master]
8
+ workflow_dispatch:
9
+
10
+ env:
11
+ IMAGE: docker.pkg.github.com/$(echo $GITHUB_REPOSITORY | tr '[A-Z]' '[a-z]')/h-cli
12
+
13
+ jobs:
14
+
15
+ semantic-release:
16
+ name: semantic-release
17
+ runs-on: ubuntu-latest
18
+ concurrency: release
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ with:
22
+ fetch-depth: 0
23
+ - name: Python Semantic Release
24
+ uses: relekang/python-semantic-release@master
25
+ with:
26
+ github_token: ${{ secrets.GITHUB_TOKEN }}
27
+ env:
28
+ PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
29
+ - name: Python Semantic Release - Publish
30
+ uses: relekang/python-semantic-release@master
31
+ with:
32
+ github_token: ${{ secrets.GITHUB_TOKEN }}
33
+ args: publish
34
+ env:
35
+ PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
36
+
37
+ docker:
38
+ name: docker
39
+ runs-on: ubuntu-latest
40
+ needs: semantic-release
41
+ steps:
42
+ - name: Checkout
43
+ uses: actions/checkout@v2.4.0
44
+ with:
45
+ ref: master
46
+ fetch-depth: 0
47
+ - name: Log in to GitHub Packages
48
+ run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
49
+ env:
50
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51
+ - name: Pull image
52
+ run: |
53
+ docker pull ${{ env.IMAGE }}:latest || true
54
+ - name: Build image
55
+ run: |
56
+ latest_release=$(git describe --tags --abbrev=0 | grep -o 'v[0-9]\+\.[0-9]\+\.[0-9]\+' | cut -c 2-)
57
+ echo $latest_release
58
+ # wait 2 minutes until package will be available
59
+ sleep 120
60
+
61
+ docker build \
62
+ --cache-from ${{ env.IMAGE }}:latest \
63
+ --build-arg H_CLI_VERSION=$latest_release \
64
+ --tag ${{ env.IMAGE }}:latest \
65
+ --tag ${{ env.IMAGE }}:$latest_release \
66
+ --file ./Dockerfile \
67
+ "./"
68
+ - name: Push image
69
+ run: |
70
+ # pushes all tags
71
+ docker push ${{ env.IMAGE }} --all-tags
@@ -0,0 +1,7 @@
1
+ .DS_Store
2
+
3
+ dist
4
+ __pycache__
5
+ .venv
6
+
7
+ .env
@@ -0,0 +1,50 @@
1
+ # Changelog
2
+
3
+ <!--next-version-placeholder-->
4
+
5
+ ## v0.4.0 (2026-05-24)
6
+
7
+ ### Feature
8
+
9
+ * Add uninstall tool for macOS app cleanup ([`36ba522`](https://github.com/karma-git/h-cli/commit/36ba522c8559628ec6d50788ca713ab25371f2e5))
10
+
11
+ ## v0.3.0 (2023-07-08)
12
+
13
+ ### Feature
14
+
15
+ * Add warp tool ([`359e7b4`](https://github.com/karma-git/h-cli/commit/359e7b44efb55fe28568517a6fde3bcf2139eb4e))
16
+
17
+ ## v0.2.1 (2023-07-05)
18
+
19
+ ### Fix
20
+
21
+ * Delete code dublicate ([`1ef3b16`](https://github.com/karma-git/h-cli/commit/1ef3b16171a871c00685a37d7a9ed430301b1520))
22
+
23
+ ## v0.2.0 (2023-07-05)
24
+
25
+ ### Feature
26
+
27
+ * **converter:** Add pdf merging ([`5a1be66`](https://github.com/karma-git/h-cli/commit/5a1be66ad460f8ac59bef98a6dbf9fc57ee6ba2d))
28
+
29
+ ## v0.1.6 (2023-04-05)
30
+ ### Fix
31
+ * Docker push all tags ([`0b7dd36`](https://github.com/karma-git/h-cli/commit/0b7dd3629c22bd02700ad6e32680b46b2b17742f))
32
+
33
+ ## v0.1.5 (2023-04-05)
34
+ ### Fix
35
+ * **ci:** Add wait for pypi in docker ([`4107394`](https://github.com/karma-git/h-cli/commit/41073949ea947615d852433261e6148d1257ebc1))
36
+
37
+ ## v0.1.4 (2023-04-05)
38
+ ### Fix
39
+ * **ci:** Pypi package version in docker args ([`1f3848e`](https://github.com/karma-git/h-cli/commit/1f3848ec7ffbedf4e8567e2d5b123640ab71b560))
40
+
41
+ ## v0.1.3 (2023-04-05)
42
+ ### Fix
43
+ * Ci add jobs dependency ([`e08f24a`](https://github.com/karma-git/h-cli/commit/e08f24a2c2995800b2c15ef0157e99f488a7be3f))
44
+
45
+ ### Documentation
46
+ * Update readme ([`853d713`](https://github.com/karma-git/h-cli/commit/853d713adf593151dcb2ef89a6cd1234327cdf36))
47
+
48
+ ## v0.1.2 (2023-04-05)
49
+ ### Fix
50
+ * Test ci ([`4134d0f`](https://github.com/karma-git/h-cli/commit/4134d0fb663287a98c1cb10bf5f904c65ea35529))
@@ -0,0 +1,8 @@
1
+ FROM python:3.11
2
+
3
+ ARG H_CLI_VERSION
4
+
5
+ RUN pip install --no-cache-dir horbach-cli==${H_CLI_VERSION}
6
+
7
+ ENTRYPOINT ["h-cli"]
8
+ CMD ["--version"]
@@ -0,0 +1,27 @@
1
+ Metadata-Version: 2.4
2
+ Name: horbach-cli
3
+ Version: 1.0.2
4
+ Author-email: Andrew Horbach <andrewhorbach@gmail.com>
5
+ Requires-Python: <3.12,>=3.10
6
+ Requires-Dist: difpy<4,>=3.0.10
7
+ Requires-Dist: pillow<10,>=9.5.0
8
+ Requires-Dist: pymupdf<2,>=1.22.5
9
+ Requires-Dist: setuptools>=69.2.0
10
+ Requires-Dist: typer<1,>=0.16.0
11
+ Requires-Dist: xonsh[full]<1,>=0.14.0
12
+ Description-Content-Type: text/markdown
13
+
14
+ # h-cli
15
+
16
+ - [cli-documentation](./horbach_cli/README.md)
17
+ - run in docker `docker run ghcr.io/karma-git/h-cli/h-cli:latest --help`
18
+
19
+ ## Development
20
+
21
+ Requires [uv](https://docs.astral.sh/uv/).
22
+
23
+ ```bash
24
+ uv sync --all-extras # install deps
25
+ uv run pytest # tests
26
+ uv run h-cli --help # run CLI
27
+ ```
@@ -0,0 +1,14 @@
1
+ # h-cli
2
+
3
+ - [cli-documentation](./horbach_cli/README.md)
4
+ - run in docker `docker run ghcr.io/karma-git/h-cli/h-cli:latest --help`
5
+
6
+ ## Development
7
+
8
+ Requires [uv](https://docs.astral.sh/uv/).
9
+
10
+ ```bash
11
+ uv sync --all-extras # install deps
12
+ uv run pytest # tests
13
+ uv run h-cli --help # run CLI
14
+ ```
@@ -0,0 +1,46 @@
1
+ ---
2
+ # ref: https://taskfile.dev/
3
+
4
+ version: "3"
5
+
6
+ vars:
7
+ TF_PATH: terraform/__modules
8
+
9
+ tasks:
10
+ install:
11
+ cmds:
12
+ - pipx install . --force
13
+
14
+ test:
15
+ cmds:
16
+ - uv sync
17
+ - uv run pytest
18
+
19
+ clean:
20
+ cmds:
21
+ - rm -rf dist
22
+ - rm -rf .venv
23
+
24
+ lint:
25
+ description: python linters
26
+ cmds:
27
+ - uv run black . --line-length 119
28
+ - uv run flake8 . --max-line-length 119 --statistics --extend-exclude .venv,dist
29
+ - uv run yamllint Taskfile.yml -c hacks/.yamllint.yml
30
+
31
+ common:
32
+ description: extra things
33
+ cmds:
34
+ - uv run typer --install-completion
35
+
36
+ docs:
37
+ cmds:
38
+ # ref: https://typer.tiangolo.com/typer-cli/#generate-docs-with-typer-cli
39
+ # poetry shell # activate venv
40
+ # poetry install # install python packages, especially typer-cli
41
+ - uv run typer horbach_cli.main utils docs --output horbach_cli/README.md --name h-cli
42
+
43
+ changelog:
44
+ desc: Update changelog using AI agent
45
+ cmds:
46
+ - claude --dangerously-skip-permissions -p "Update semver in horbach_cli/__init__.py and pyproject.toml according to semantic-release (branch name and commits), Update changelog for the current version, according to structure in CHANGELOG.md."
@@ -0,0 +1,19 @@
1
+ ---
2
+
3
+ yaml-files:
4
+ - '*.yaml'
5
+ - '*.yml'
6
+
7
+ # https://yamllint.readthedocs.io/en/stable/rules.html
8
+ extends: default
9
+
10
+ # How to disable rules inline:
11
+ # https://yamllint.readthedocs.io/en/stable/disable_with_comments.html
12
+
13
+ ignore: |
14
+ templates/
15
+ charts/
16
+
17
+ rules:
18
+ line-length: disable
19
+ truthy: disable
@@ -0,0 +1,269 @@
1
+ # `h-cli`
2
+
3
+ **Usage**:
4
+
5
+ ```console
6
+ $ h-cli [OPTIONS] COMMAND [ARGS]...
7
+ ```
8
+
9
+ **Options**:
10
+
11
+ * `-v, --verbose TEXT`: :mag: `LOG_LEVEL` one of: DEBUG, INFO, WARNING, ERROR, CRITICAL [default: INFO]
12
+ * `--version`
13
+ * `--install-completion`: Install completion for the current shell.
14
+ * `--show-completion`: Show completion for the current shell, to copy it or customize the installation.
15
+ * `--help`: Show this message and exit.
16
+
17
+ **Commands**:
18
+
19
+ * `uninstall`: :wastebasket: uninstall a macOS app and...
20
+ * `converter`: :rocket: manipulates files and etc.
21
+ * `dedub`: :two_men_holding_hands: dedublicates...
22
+ * `warp`: :computer: warp.dev workflows replacement
23
+
24
+ ## `h-cli uninstall`
25
+
26
+ :wastebasket: uninstall a macOS app and clean up leftovers
27
+
28
+ **Usage**:
29
+
30
+ ```console
31
+ $ h-cli uninstall [OPTIONS] NAME
32
+ ```
33
+
34
+ **Arguments**:
35
+
36
+ * `NAME`: Application name, e.g. 'Firefox' or 'docker' [required]
37
+
38
+ **Options**:
39
+
40
+ * `--clean / --no-clean`: Also remove ~/Library leftovers [default: clean]
41
+ * `-n, --dry-run`: Show what would be removed, without deleting
42
+ * `--help`: Show this message and exit.
43
+
44
+ ## `h-cli converter`
45
+
46
+ :rocket: manipulates files and etc.
47
+
48
+ **Usage**:
49
+
50
+ ```console
51
+ $ h-cli converter [OPTIONS] COMMAND [ARGS]...
52
+ ```
53
+
54
+ **Options**:
55
+
56
+ * `--help`: Show this message and exit.
57
+
58
+ **Commands**:
59
+
60
+ * `img-to-pdf`: :camera: images into :memo: pdf
61
+ * `heic-to-jpg`: :camera: images from :green_apple: heic to...
62
+ * `pdf-merge`: :camera: merge pdfs
63
+
64
+ ### `h-cli converter img-to-pdf`
65
+
66
+ :camera: images into :memo: pdf
67
+
68
+ **Usage**:
69
+
70
+ ```console
71
+ $ h-cli converter img-to-pdf [OPTIONS] IMAGES_FOLDER [PDF_FILE]
72
+ ```
73
+
74
+ **Arguments**:
75
+
76
+ * `IMAGES_FOLDER`: Path to folder with images [required]
77
+ * `[PDF_FILE]`: Result file name [default: result.pdf]
78
+
79
+ **Options**:
80
+
81
+ * `--help`: Show this message and exit.
82
+
83
+ ### `h-cli converter heic-to-jpg`
84
+
85
+ :camera: images from :green_apple: heic to jpg
86
+
87
+ **Usage**:
88
+
89
+ ```console
90
+ $ h-cli converter heic-to-jpg [OPTIONS] IMAGES_FOLDER
91
+ ```
92
+
93
+ **Arguments**:
94
+
95
+ * `IMAGES_FOLDER`: Path to folder with images [required]
96
+
97
+ **Options**:
98
+
99
+ * `--help`: Show this message and exit.
100
+
101
+ ### `h-cli converter pdf-merge`
102
+
103
+ :camera: merge pdfs
104
+
105
+ **Usage**:
106
+
107
+ ```console
108
+ $ h-cli converter pdf-merge [OPTIONS] PDFS_FOLDER
109
+ ```
110
+
111
+ **Arguments**:
112
+
113
+ * `PDFS_FOLDER`: Path to folder with pdfs [required]
114
+
115
+ **Options**:
116
+
117
+ * `--help`: Show this message and exit.
118
+
119
+ ## `h-cli dedub`
120
+
121
+ :two_men_holding_hands: dedublicates something.
122
+
123
+ **Usage**:
124
+
125
+ ```console
126
+ $ h-cli dedub [OPTIONS] COMMAND [ARGS]...
127
+ ```
128
+
129
+ **Options**:
130
+
131
+ * `--help`: Show this message and exit.
132
+
133
+ **Commands**:
134
+
135
+ * `img-dedub`: deal with dublicated :camera: images
136
+
137
+ ### `h-cli dedub img-dedub`
138
+
139
+ deal with dublicated :camera: images
140
+
141
+ **Usage**:
142
+
143
+ ```console
144
+ $ h-cli dedub img-dedub [OPTIONS] DIRS...
145
+ ```
146
+
147
+ **Arguments**:
148
+
149
+ * `DIRS...`: Path to dirs with images [required]
150
+
151
+ **Options**:
152
+
153
+ * `--delete / --no-delete`: [default: no-delete]
154
+ * `--help`: Show this message and exit.
155
+
156
+ ## `h-cli warp`
157
+
158
+ :computer: warp.dev workflows replacement
159
+
160
+ **Usage**:
161
+
162
+ ```console
163
+ $ h-cli warp [OPTIONS] COMMAND [ARGS]...
164
+ ```
165
+
166
+ **Options**:
167
+
168
+ * `--help`: Show this message and exit.
169
+
170
+ **Commands**:
171
+
172
+ * `k8s-rollout-restart-ns`: :ship: сделать rollout restart workloads в ns
173
+ * `k8s-terminate-node`: :ship: сделать terminate Node
174
+ * `k8s-ssm-node`: :ship: подключиться к Node
175
+ * `k8s-get-pods-on-node`: :ship: список Pod-ов на Node-е
176
+ * `k8s-kubeseal`: :ship: запечатать секрет в SealedSecret
177
+
178
+ ### `h-cli warp k8s-rollout-restart-ns`
179
+
180
+ :ship: сделать rollout restart workloads в ns
181
+
182
+ **Usage**:
183
+
184
+ ```console
185
+ $ h-cli warp k8s-rollout-restart-ns [OPTIONS]
186
+ ```
187
+
188
+ **Options**:
189
+
190
+ * `-ctx, --context TEXT`: kubernetes context
191
+ * `-n, --namespace TEXT`: kubernetes namespace [default: argocd]
192
+ * `--help`: Show this message and exit.
193
+
194
+ ### `h-cli warp k8s-terminate-node`
195
+
196
+ :ship: сделать terminate Node
197
+
198
+ **Usage**:
199
+
200
+ ```console
201
+ $ h-cli warp k8s-terminate-node [OPTIONS] [NODE]
202
+ ```
203
+
204
+ **Arguments**:
205
+
206
+ * `[NODE]`: kubernetes Node name
207
+
208
+ **Options**:
209
+
210
+ * `-ctx, --context TEXT`: kubernetes context
211
+ * `-p, --profile TEXT`: aws named profile [default: default]
212
+ * `-r, --region TEXT`: aws region [default: eu-west-1]
213
+ * `--help`: Show this message and exit.
214
+
215
+ ### `h-cli warp k8s-ssm-node`
216
+
217
+ :ship: подключиться к Node
218
+
219
+ **Usage**:
220
+
221
+ ```console
222
+ $ h-cli warp k8s-ssm-node [OPTIONS] [NODE]
223
+ ```
224
+
225
+ **Arguments**:
226
+
227
+ * `[NODE]`: kubernetes Node name
228
+
229
+ **Options**:
230
+
231
+ * `-ctx, --context TEXT`: kubernetes context
232
+ * `-p, --profile TEXT`: aws named profile [default: default]
233
+ * `-r, --region TEXT`: aws region [default: eu-west-1]
234
+ * `--help`: Show this message and exit.
235
+
236
+ ### `h-cli warp k8s-get-pods-on-node`
237
+
238
+ :ship: список Pod-ов на Node-е
239
+
240
+ **Usage**:
241
+
242
+ ```console
243
+ $ h-cli warp k8s-get-pods-on-node [OPTIONS] [NODE]
244
+ ```
245
+
246
+ **Arguments**:
247
+
248
+ * `[NODE]`: kubernetes Node name
249
+
250
+ **Options**:
251
+
252
+ * `-ctx, --context TEXT`: kubernetes context
253
+ * `--help`: Show this message and exit.
254
+
255
+ ### `h-cli warp k8s-kubeseal`
256
+
257
+ :ship: запечатать секрет в SealedSecret
258
+
259
+ **Usage**:
260
+
261
+ ```console
262
+ $ h-cli warp k8s-kubeseal [OPTIONS]
263
+ ```
264
+
265
+ **Options**:
266
+
267
+ * `-ctx, --context TEXT`: kubernetes context
268
+ * `-f, --file TEXT`: kubernetes context [default: config]
269
+ * `--help`: Show this message and exit.
@@ -0,0 +1,6 @@
1
+ from xonsh.main import setup
2
+
3
+ setup()
4
+ del setup
5
+
6
+ __version__ = "1.0.2"