devs-webhook 2.0.0__tar.gz → 2.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 (53) hide show
  1. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/PKG-INFO +1 -1
  2. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/container_pool.py +32 -0
  3. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/PKG-INFO +1 -1
  4. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/pyproject.toml +1 -1
  5. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/LICENSE +0 -0
  6. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/README.md +0 -0
  7. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/__init__.py +0 -0
  8. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/app.py +0 -0
  9. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/cli/__init__.py +0 -0
  10. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/cli/worker.py +0 -0
  11. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/config.py +0 -0
  12. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/__init__.py +0 -0
  13. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/base_dispatcher.py +0 -0
  14. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/claude_dispatcher.py +0 -0
  15. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/deduplication.py +0 -0
  16. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/repository_manager.py +0 -0
  17. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/task_processor.py +0 -0
  18. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/test_dispatcher.py +0 -0
  19. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/webhook_config.py +0 -0
  20. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/core/webhook_handler.py +0 -0
  21. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/github/__init__.py +0 -0
  22. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/github/app_auth.py +0 -0
  23. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/github/client.py +0 -0
  24. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/github/models.py +0 -0
  25. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/github/parser.py +0 -0
  26. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/main_cli.py +0 -0
  27. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/sources/__init__.py +0 -0
  28. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/sources/base.py +0 -0
  29. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/sources/sqs_source.py +0 -0
  30. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/sources/webhook_source.py +0 -0
  31. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/__init__.py +0 -0
  32. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/async_utils.py +0 -0
  33. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/container_logs.py +0 -0
  34. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/github.py +0 -0
  35. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/logging.py +0 -0
  36. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/s3_artifacts.py +0 -0
  37. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook/utils/serialization.py +0 -0
  38. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/SOURCES.txt +0 -0
  39. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/dependency_links.txt +0 -0
  40. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/entry_points.txt +0 -0
  41. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/requires.txt +0 -0
  42. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/devs_webhook.egg-info/top_level.txt +0 -0
  43. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/setup.cfg +0 -0
  44. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_allowlist.py +0 -0
  45. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_authentication.py +0 -0
  46. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_authorized_users.py +0 -0
  47. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_ci_container_pool.py +0 -0
  48. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_cleanup_mode.py +0 -0
  49. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_container_logs.py +0 -0
  50. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_single_queue.py +0 -0
  51. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_sqs_burst.py +0 -0
  52. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_stop_container_after_task.py +0 -0
  53. {devs_webhook-2.0.0 → devs_webhook-2.0.2}/tests/test_webhook_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devs-webhook
3
- Version: 2.0.0
3
+ Version: 2.0.2
4
4
  Summary: GitHub webhook handler for automated devcontainer operations with Claude Code
5
5
  Author: Dan Lester
6
6
  License-Expression: MIT
@@ -901,6 +901,8 @@ class ContainerPool:
901
901
  logger.info("Checked out default branch",
902
902
  repo=repo_name,
903
903
  branch=default_branch)
904
+ # Reset to match remote branch so we pick up fetched changes
905
+ await self._reset_to_remote(repo_path, default_branch)
904
906
  # Clean untracked files after checkout
905
907
  await self._clean_untracked_files(repo_path)
906
908
  elif default_branch == "dev":
@@ -918,6 +920,8 @@ class ContainerPool:
918
920
  if process.returncode == 0:
919
921
  logger.info("Checked out main branch",
920
922
  repo=repo_name)
923
+ # Reset to match remote branch so we pick up fetched changes
924
+ await self._reset_to_remote(repo_path, "main")
921
925
  # Clean untracked files after checkout
922
926
  await self._clean_untracked_files(repo_path)
923
927
  else:
@@ -932,6 +936,34 @@ class ContainerPool:
932
936
  branch=default_branch,
933
937
  stderr=stderr.decode()[:200] if stderr else "")
934
938
 
939
+ async def _reset_to_remote(self, repo_path: Path, branch: str) -> None:
940
+ """Reset local branch to match the remote tracking branch.
941
+
942
+ After 'git fetch --all', the local branch may still be behind origin.
943
+ This ensures the working tree matches the latest fetched remote state.
944
+
945
+ Args:
946
+ repo_path: Path to the repository
947
+ branch: Branch name to reset (e.g. "main")
948
+ """
949
+ reset_cmd = ["git", "-C", str(repo_path), "reset", "--hard", f"origin/{branch}"]
950
+ process = await asyncio.create_subprocess_exec(
951
+ *reset_cmd,
952
+ stdout=asyncio.subprocess.PIPE,
953
+ stderr=asyncio.subprocess.PIPE
954
+ )
955
+ stdout, stderr = await process.communicate()
956
+
957
+ if process.returncode == 0:
958
+ logger.info("Reset branch to match remote",
959
+ repo_path=str(repo_path),
960
+ branch=branch)
961
+ else:
962
+ logger.warning("Could not reset to remote branch",
963
+ repo_path=str(repo_path),
964
+ branch=branch,
965
+ stderr=stderr.decode()[:200] if stderr else "")
966
+
935
967
  async def _clean_untracked_files(self, repo_path: Path) -> None:
936
968
  """Remove untracked files and directories from repository.
937
969
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devs-webhook
3
- Version: 2.0.0
3
+ Version: 2.0.2
4
4
  Summary: GitHub webhook handler for automated devcontainer operations with Claude Code
5
5
  Author: Dan Lester
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devs-webhook"
7
- version = "2.0.0"
7
+ version = "2.0.2"
8
8
  description = "GitHub webhook handler for automated devcontainer operations with Claude Code"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
File without changes
File without changes
File without changes