homesec 1.0.0__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 (112) hide show
  1. {homesec-1.0.0 → homesec-1.0.2}/.github/workflows/ci.yml +1 -1
  2. {homesec-1.0.0 → homesec-1.0.2}/.github/workflows/release.yaml +18 -15
  3. homesec-1.0.2/CHANGELOG.md +24 -0
  4. {homesec-1.0.0 → homesec-1.0.2}/PKG-INFO +1 -1
  5. {homesec-1.0.0 → homesec-1.0.2}/pyproject.toml +3 -2
  6. homesec-1.0.0/CHANGELOG.md +0 -7
  7. {homesec-1.0.0 → homesec-1.0.2}/.dockerignore +0 -0
  8. {homesec-1.0.0 → homesec-1.0.2}/.env.example +0 -0
  9. {homesec-1.0.0 → homesec-1.0.2}/.github/workflows/validate-pr-title.yaml +0 -0
  10. {homesec-1.0.0 → homesec-1.0.2}/.gitignore +0 -0
  11. {homesec-1.0.0 → homesec-1.0.2}/AGENTS.md +0 -0
  12. {homesec-1.0.0 → homesec-1.0.2}/DESIGN.md +0 -0
  13. {homesec-1.0.0 → homesec-1.0.2}/Dockerfile +0 -0
  14. {homesec-1.0.0 → homesec-1.0.2}/LICENSE +0 -0
  15. {homesec-1.0.0 → homesec-1.0.2}/Makefile +0 -0
  16. {homesec-1.0.0 → homesec-1.0.2}/README.md +0 -0
  17. {homesec-1.0.0 → homesec-1.0.2}/alembic/env.py +0 -0
  18. {homesec-1.0.0 → homesec-1.0.2}/alembic/script.py.mako +0 -0
  19. {homesec-1.0.0 → homesec-1.0.2}/alembic/versions/e6f25df0df90_initial.py +0 -0
  20. {homesec-1.0.0 → homesec-1.0.2}/alembic.ini +0 -0
  21. {homesec-1.0.0 → homesec-1.0.2}/config/example.yaml +0 -0
  22. {homesec-1.0.0 → homesec-1.0.2}/docker-compose.yml +0 -0
  23. {homesec-1.0.0 → homesec-1.0.2}/docker-entrypoint.sh +0 -0
  24. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/__init__.py +0 -0
  25. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/app.py +0 -0
  26. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/cli.py +0 -0
  27. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/config/__init__.py +0 -0
  28. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/config/loader.py +0 -0
  29. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/config/validation.py +0 -0
  30. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/errors.py +0 -0
  31. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/health/__init__.py +0 -0
  32. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/health/server.py +0 -0
  33. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/interfaces.py +0 -0
  34. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/logging_setup.py +0 -0
  35. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/maintenance/__init__.py +0 -0
  36. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/maintenance/cleanup_clips.py +0 -0
  37. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/__init__.py +0 -0
  38. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/alert.py +0 -0
  39. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/clip.py +0 -0
  40. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/config.py +0 -0
  41. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/events.py +0 -0
  42. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/filter.py +0 -0
  43. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/source.py +0 -0
  44. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/storage.py +0 -0
  45. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/models/vlm.py +0 -0
  46. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/pipeline/__init__.py +0 -0
  47. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/pipeline/alert_policy.py +0 -0
  48. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/pipeline/core.py +0 -0
  49. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/__init__.py +0 -0
  50. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/alert_policies/__init__.py +0 -0
  51. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/alert_policies/default.py +0 -0
  52. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/alert_policies/noop.py +0 -0
  53. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/analyzers/__init__.py +0 -0
  54. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/analyzers/openai.py +0 -0
  55. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/filters/__init__.py +0 -0
  56. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/filters/yolo.py +0 -0
  57. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/notifiers/__init__.py +0 -0
  58. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/notifiers/mqtt.py +0 -0
  59. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/notifiers/multiplex.py +0 -0
  60. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/notifiers/sendgrid_email.py +0 -0
  61. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/storage/__init__.py +0 -0
  62. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/storage/dropbox.py +0 -0
  63. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/storage/local.py +0 -0
  64. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/plugins/utils.py +0 -0
  65. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/py.typed +0 -0
  66. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/repository/__init__.py +0 -0
  67. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/repository/clip_repository.py +0 -0
  68. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/sources/__init__.py +0 -0
  69. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/sources/base.py +0 -0
  70. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/sources/ftp.py +0 -0
  71. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/sources/local_folder.py +0 -0
  72. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/sources/rtsp.py +0 -0
  73. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/state/__init__.py +0 -0
  74. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/state/postgres.py +0 -0
  75. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/storage_paths.py +0 -0
  76. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/telemetry/__init__.py +0 -0
  77. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/telemetry/db/__init__.py +0 -0
  78. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/telemetry/db/log_table.py +0 -0
  79. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/telemetry/db_log_handler.py +0 -0
  80. {homesec-1.0.0 → homesec-1.0.2}/src/homesec/telemetry/postgres_settings.py +0 -0
  81. {homesec-1.0.0 → homesec-1.0.2}/tests/__init__.py +0 -0
  82. {homesec-1.0.0 → homesec-1.0.2}/tests/conftest.py +0 -0
  83. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/__init__.py +0 -0
  84. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/conftest.py +0 -0
  85. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/__init__.py +0 -0
  86. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/event_store.py +0 -0
  87. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/filter.py +0 -0
  88. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/notifier.py +0 -0
  89. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/state_store.py +0 -0
  90. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/storage.py +0 -0
  91. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/mocks/vlm.py +0 -0
  92. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_alert_policy.py +0 -0
  93. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_app.py +0 -0
  94. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_cleanup_clips.py +0 -0
  95. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_clip_repository.py +0 -0
  96. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_clip_sources.py +0 -0
  97. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_config.py +0 -0
  98. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_dropbox_storage.py +0 -0
  99. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_event_store.py +0 -0
  100. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_health.py +0 -0
  101. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_integration.py +0 -0
  102. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_local_folder_deduplication.py +0 -0
  103. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_mqtt_notifier.py +0 -0
  104. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_notifiers.py +0 -0
  105. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_openai_vlm.py +0 -0
  106. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_pipeline.py +0 -0
  107. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_pipeline_events.py +0 -0
  108. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_plugin_registration.py +0 -0
  109. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_rtsp_helpers.py +0 -0
  110. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_state_store.py +0 -0
  111. {homesec-1.0.0 → homesec-1.0.2}/tests/homesec/test_yolo_filter.py +0 -0
  112. {homesec-1.0.0 → homesec-1.0.2}/uv.lock +0 -0
@@ -40,7 +40,7 @@ jobs:
40
40
  key: venv-${{ runner.os }}-py3.14-${{ hashFiles('uv.lock') }}
41
41
 
42
42
  - name: Sync dependencies
43
- run: uv sync
43
+ run: uv sync --group dev
44
44
 
45
45
  # Lint and typecheck run while Postgres boots
46
46
  - name: Lint
@@ -6,7 +6,7 @@ on:
6
6
  dry_run:
7
7
  description: 'Dry run (no actual release)'
8
8
  required: false
9
- default: 'false'
9
+ default: false
10
10
  type: boolean
11
11
 
12
12
  jobs:
@@ -30,38 +30,41 @@ jobs:
30
30
  - name: Install python-semantic-release
31
31
  run: pip install python-semantic-release
32
32
 
33
+ - name: Configure Git
34
+ run: |
35
+ git config user.name "github-actions[bot]"
36
+ git config user.email "github-actions[bot]@users.noreply.github.com"
37
+
33
38
  - name: Semantic Release (dry run)
34
- if: ${{ inputs.dry_run == 'true' }}
35
- run: semantic-release version --noop
39
+ if: inputs.dry_run
40
+ run: semantic-release version --print
36
41
 
37
42
  - name: Semantic Release
38
- if: ${{ inputs.dry_run != 'true' }}
43
+ if: ${{ !inputs.dry_run }}
44
+ id: semrel
39
45
  env:
40
46
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
47
  run: |
42
- git config user.name "github-actions[bot]"
43
- git config user.email "github-actions[bot]@users.noreply.github.com"
44
48
  semantic-release version
49
+ echo "version=$(grep 'version = ' pyproject.toml | head -1 | cut -d'\"' -f2)" >> $GITHUB_OUTPUT
45
50
 
46
51
  - name: Build Package
47
- if: ${{ inputs.dry_run != 'true' }}
52
+ if: ${{ !inputs.dry_run }}
48
53
  run: |
49
54
  pip install build
50
55
  python -m build
51
56
 
52
57
  - name: Publish to PyPI
53
- if: ${{ inputs.dry_run != 'true' }}
58
+ if: ${{ !inputs.dry_run }}
54
59
  uses: pypa/gh-action-pypi-publish@release/v1
55
60
  with:
56
61
  verbose: true
57
62
 
58
- - name: Create GitHub Release
59
- if: ${{ inputs.dry_run != 'true' }}
63
+ - name: Upload to GitHub Release
64
+ if: ${{ !inputs.dry_run }}
60
65
  env:
61
66
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
62
67
  run: |
63
- VERSION=$(grep 'version = ' pyproject.toml | head -1 | cut -d'"' -f2)
64
- gh release create "v$VERSION" \
65
- --title "v$VERSION" \
66
- --generate-notes \
67
- dist/*
68
+ VERSION=${{ steps.semrel.outputs.version }}
69
+ # Upload dist files to the release that semantic-release created
70
+ gh release upload "v$VERSION" dist/* --clobber || true
@@ -0,0 +1,24 @@
1
+ # CHANGELOG
2
+
3
+ <!-- version list -->
4
+
5
+ ## v1.0.2 (2026-01-11)
6
+
7
+ ### Bug Fixes
8
+
9
+ - CI and release workflow improvements ([#3](https://github.com/lan17/homesec/pull/3),
10
+ [`ab61e47`](https://github.com/lan17/homesec/commit/ab61e47c7c16c79e8472807c07e4974e31a13c29))
11
+
12
+
13
+ ## v1.0.1 (2026-01-11)
14
+
15
+ ### Bug Fixes
16
+
17
+ - Improve release workflow dry run and prevent major version jumps
18
+ ([#2](https://github.com/lan17/HomeSec/pull/2),
19
+ [`ba02512`](https://github.com/lan17/HomeSec/commit/ba025129de5caa984552807e4e0f376666db485e))
20
+
21
+
22
+ ## v1.0.0 (2026-01-11)
23
+
24
+ - Initial Release
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homesec
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Pluggable async home security camera pipeline with detection, VLM analysis, and alerts.
5
5
  Project-URL: Homepage, https://github.com/lan17/homesec
6
6
  Project-URL: Source, https://github.com/lan17/homesec
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "homesec"
3
- version = "1.0.0"
3
+ version = "1.0.2"
4
4
  description = "Pluggable async home security camera pipeline with detection, VLM analysis, and alerts."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -120,8 +120,9 @@ version_toml = ["pyproject.toml:project.version"]
120
120
  version_source = "tag"
121
121
  commit_message = "chore(release): v{version}"
122
122
  branch = "main"
123
+ major_on_zero = false # Don't bump to 1.0.0 on breaking changes while in 0.x
123
124
 
124
125
  [tool.semantic_release.commit_parser_options]
125
126
  # feat = minor, fix/perf/chore/docs/style/refactor = patch
126
- # BREAKING CHANGE = major
127
+ # BREAKING CHANGE = major (but blocked by major_on_zero while in 0.x)
127
128
  patch_tags = ["fix", "perf", "chore", "docs", "style", "refactor"]
@@ -1,7 +0,0 @@
1
- # CHANGELOG
2
-
3
- <!-- version list -->
4
-
5
- ## v1.0.0 (2026-01-11)
6
-
7
- - Initial Release
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes