primitive 0.2.52__tar.gz → 0.2.53__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 (113) hide show
  1. {primitive-0.2.52 → primitive-0.2.53}/PKG-INFO +1 -1
  2. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/__about__.py +1 -1
  3. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/agent/actions.py +40 -41
  4. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/agent/uploader.py +12 -10
  5. {primitive-0.2.52 → primitive-0.2.53}/.git-hooks/pre-commit +0 -0
  6. {primitive-0.2.52 → primitive-0.2.53}/.gitattributes +0 -0
  7. {primitive-0.2.52 → primitive-0.2.53}/.github/workflows/lint.yml +0 -0
  8. {primitive-0.2.52 → primitive-0.2.53}/.github/workflows/publish.yml +0 -0
  9. {primitive-0.2.52 → primitive-0.2.53}/.github/workflows/pyright.yml +0 -0
  10. {primitive-0.2.52 → primitive-0.2.53}/.gitignore +0 -0
  11. {primitive-0.2.52 → primitive-0.2.53}/.vscode/extensions.json +0 -0
  12. {primitive-0.2.52 → primitive-0.2.53}/.vscode/settings.json +0 -0
  13. {primitive-0.2.52 → primitive-0.2.53}/LICENSE.txt +0 -0
  14. {primitive-0.2.52 → primitive-0.2.53}/Makefile +0 -0
  15. {primitive-0.2.52 → primitive-0.2.53}/README.md +0 -0
  16. {primitive-0.2.52 → primitive-0.2.53}/linux setup.md +0 -0
  17. {primitive-0.2.52 → primitive-0.2.53}/pyproject.toml +0 -0
  18. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/__init__.py +0 -0
  19. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/agent/__init__.py +0 -0
  20. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/agent/commands.py +0 -0
  21. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/agent/runner.py +0 -0
  22. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/auth/__init__.py +0 -0
  23. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/auth/actions.py +0 -0
  24. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/auth/commands.py +0 -0
  25. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/auth/graphql/__init__.py +0 -0
  26. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/auth/graphql/queries.py +0 -0
  27. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/cli.py +0 -0
  28. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/client.py +0 -0
  29. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/__init__.py +0 -0
  30. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/actions.py +0 -0
  31. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/commands.py +0 -0
  32. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/launch_agents.py +0 -0
  33. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/launch_service.py +0 -0
  34. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/daemons/ui.py +0 -0
  35. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/exec/__init__.py +0 -0
  36. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/exec/actions.py +0 -0
  37. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/exec/commands.py +0 -0
  38. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/exec/interactive.py +0 -0
  39. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/__init__.py +0 -0
  40. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/actions.py +0 -0
  41. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/commands.py +0 -0
  42. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/graphql/__init__.py +0 -0
  43. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/graphql/fragments.py +0 -0
  44. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/graphql/mutations.py +0 -0
  45. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/files/graphql/queries.py +0 -0
  46. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/git/__init__.py +0 -0
  47. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/git/actions.py +0 -0
  48. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/git/commands.py +0 -0
  49. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/git/graphql/__init__.py +0 -0
  50. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/git/graphql/queries.py +0 -0
  51. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/graphql/__init__.py +0 -0
  52. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/graphql/relay.py +0 -0
  53. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/graphql/sdk.py +0 -0
  54. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/graphql/utility_fragments.py +0 -0
  55. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/__init__.py +0 -0
  56. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/actions.py +0 -0
  57. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/android.py +0 -0
  58. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/commands.py +0 -0
  59. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/graphql/__init__.py +0 -0
  60. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/graphql/fragments.py +0 -0
  61. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/graphql/mutations.py +0 -0
  62. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/graphql/queries.py +0 -0
  63. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/hardware/ui.py +0 -0
  64. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/__init__.py +0 -0
  65. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/actions.py +0 -0
  66. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/commands.py +0 -0
  67. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/graphql/__init__.py +0 -0
  68. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/graphql/fragments.py +0 -0
  69. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/graphql/mutations.py +0 -0
  70. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/jobs/graphql/queries.py +0 -0
  71. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/monitor/actions.py +0 -0
  72. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/monitor/commands.py +0 -0
  73. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/__init__.py +0 -0
  74. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/actions.py +0 -0
  75. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/commands.py +0 -0
  76. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/graphql/__init__.py +0 -0
  77. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/graphql/fragments.py +0 -0
  78. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/graphql/mutations.py +0 -0
  79. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/organizations/graphql/queries.py +0 -0
  80. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/__init__.py +0 -0
  81. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/actions.py +0 -0
  82. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/commands.py +0 -0
  83. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/graphql/__init__.py +0 -0
  84. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/graphql/fragments.py +0 -0
  85. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/graphql/mutations.py +0 -0
  86. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/projects/graphql/queries.py +0 -0
  87. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/provisioning/__init__.py +0 -0
  88. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/provisioning/actions.py +0 -0
  89. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/provisioning/graphql/__init__.py +0 -0
  90. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/provisioning/graphql/queries.py +0 -0
  91. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/__init__.py +0 -0
  92. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/actions.py +0 -0
  93. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/commands.py +0 -0
  94. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/graphql/__init__.py +0 -0
  95. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/graphql/fragments.py +0 -0
  96. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/graphql/mutations.py +0 -0
  97. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/reservations/graphql/queries.py +0 -0
  98. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/__init__.py +0 -0
  99. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/actions.py +0 -0
  100. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/auth.py +0 -0
  101. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/cache.py +0 -0
  102. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/chunk_size.py +0 -0
  103. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/config.py +0 -0
  104. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/daemons.py +0 -0
  105. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/exceptions.py +0 -0
  106. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/logging.py +0 -0
  107. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/memory_size.py +0 -0
  108. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/printer.py +0 -0
  109. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/psutil.py +0 -0
  110. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/shell.py +0 -0
  111. {primitive-0.2.52 → primitive-0.2.53}/src/primitive/utils/text.py +0 -0
  112. {primitive-0.2.52 → primitive-0.2.53}/tests/__init__.py +0 -0
  113. {primitive-0.2.52 → primitive-0.2.53}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: primitive
3
- Version: 0.2.52
3
+ Version: 0.2.53
4
4
  Project-URL: Documentation, https://github.com//primitivecorp/primitive-cli#readme
5
5
  Project-URL: Issues, https://github.com//primitivecorp/primitive-cli/issues
6
6
  Project-URL: Source, https://github.com//primitivecorp/primitive-cli
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Dylan Stein <dylan@primitive.tech>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.2.52"
4
+ __version__ = "0.2.53"
@@ -118,56 +118,55 @@ class Agent(BaseAction):
118
118
  logger.error(
119
119
  f"JobRun {job_run_data.get('name')} is already completed with conclusion {job_run_data.get('jobRun', {}).get('conclusion', 'unknown')}. Exiting."
120
120
  )
121
- if RUNNING_IN_CONTAINER:
122
- logger.info("Running in container, exiting after job run")
123
- break
121
+ break
124
122
 
125
- logger.info(
126
- f"Waiting for JobRun {job_run_data.get('id')} to be in_progress. Current status: {job_run_status}"
127
- )
128
123
  job_run_result = self.primitive.jobs.get_job_run(id=job_run_id)
129
124
  if job_run_result.data is not None:
130
125
  job_run_data = job_run_result.data.get("jobRun", {})
131
126
  job_run_status = job_run_data.get("status", None)
132
-
133
- sleep(1)
134
-
135
- try:
136
- runner = Runner(
137
- primitive=self.primitive,
138
- job_run=job_run_data,
139
- )
140
- runner.setup()
141
- except Exception as exception:
142
- logger.exception(
143
- f"Exception while initializing runner: {exception}"
144
- )
145
- self.primitive.jobs.job_run_update(
146
- id=job_run_id,
147
- status="request_completed",
148
- conclusion="failure",
127
+ logger.info(
128
+ f"Waiting for JobRun {job_run_data.get('id')} to be in_progress. Current status: {job_run_status}"
149
129
  )
150
- continue
130
+ sleep(1)
151
131
 
152
- try:
153
- runner.execute_job_run()
154
- except Exception as exception:
155
- logger.exception(f"Exception while executing job: {exception}")
156
- self.primitive.jobs.job_run_update(
157
- id=job_run_id,
158
- status="request_completed",
159
- conclusion="failure",
160
- )
161
- finally:
162
- runner.cleanup()
132
+ # the backend has said it's okay for the agent to run this job
133
+ if job_run_status == "in_progress":
134
+ try:
135
+ runner = Runner(
136
+ primitive=self.primitive,
137
+ job_run=job_run_data,
138
+ )
139
+ runner.setup()
140
+ except Exception as exception:
141
+ logger.exception(
142
+ f"Exception while initializing runner: {exception}"
143
+ )
144
+ self.primitive.jobs.job_run_update(
145
+ id=job_run_id,
146
+ status="request_completed",
147
+ conclusion="failure",
148
+ )
149
+ continue
150
+
151
+ try:
152
+ runner.execute_job_run()
153
+ except Exception as exception:
154
+ logger.exception(f"Exception while executing job: {exception}")
155
+ self.primitive.jobs.job_run_update(
156
+ id=job_run_id,
157
+ status="request_completed",
158
+ conclusion="failure",
159
+ )
160
+ finally:
161
+ runner.cleanup()
163
162
 
164
- # NOTE: also run scan here to force upload of artifacts
165
- # This should probably eventually be another daemon?
166
- uploader.scan()
163
+ # NOTE: also run scan here to force upload of artifacts
164
+ # This should probably eventually be another daemon?
165
+ uploader.scan()
167
166
 
168
- if RUNNING_IN_CONTAINER:
169
- logger.info("Running in container, exiting after job run")
170
- break
167
+ if RUNNING_IN_CONTAINER:
168
+ logger.info("Running in container, exiting after job run")
169
+ break
171
170
 
172
171
  sleep(5)
173
172
  except KeyboardInterrupt:
@@ -46,22 +46,24 @@ class Uploader:
46
46
 
47
47
  for file in files:
48
48
  try:
49
- result = self.primitive.files.upload_file_direct(
49
+ upload_file_result = self.primitive.files.upload_file_direct(
50
50
  path=file,
51
51
  key_prefix=str(PurePath(file).relative_to(cache.parent).parent),
52
52
  )
53
- except Exception as exception:
54
- if "is empty" in str(exception):
55
- logger.warning(f"{file} is empty, skipping upload")
56
- continue
57
53
 
58
- upload_id = result.data["fileUpdate"]["id"]
54
+ if upload_file_result and upload_file_result.data is not None:
55
+ upload_file_data = upload_file_result.data
56
+ upload_id = upload_file_data.get("fileUpdate", {}).get("id")
59
57
 
60
- if upload_id:
61
- file_ids.append(upload_id)
62
- continue
58
+ if upload_id:
59
+ file_ids.append(upload_id)
60
+ continue
63
61
 
64
- logger.error(f"Unable to upload file {file}")
62
+ logger.error(f"Unable to upload file {file}")
63
+ except Exception as exception:
64
+ if "is empty" in str(exception):
65
+ logger.warning(f"{file} is empty, skipping upload")
66
+ continue
65
67
 
66
68
  # Clean up job cache
67
69
  shutil.rmtree(path=cache)
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