primitive 0.2.33__tar.gz → 0.2.35__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 (114) hide show
  1. {primitive-0.2.33 → primitive-0.2.35}/PKG-INFO +1 -1
  2. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/__about__.py +1 -1
  3. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/agent/actions.py +1 -1
  4. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/agent/runner.py +28 -13
  5. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/graphql/fragments.py +1 -0
  6. {primitive-0.2.33 → primitive-0.2.35}/.git-hooks/pre-commit +0 -0
  7. {primitive-0.2.33 → primitive-0.2.35}/.gitattributes +0 -0
  8. {primitive-0.2.33 → primitive-0.2.35}/.github/workflows/lint.yml +0 -0
  9. {primitive-0.2.33 → primitive-0.2.35}/.github/workflows/publish.yml +0 -0
  10. {primitive-0.2.33 → primitive-0.2.35}/.github/workflows/pyright.yml +0 -0
  11. {primitive-0.2.33 → primitive-0.2.35}/.gitignore +0 -0
  12. {primitive-0.2.33 → primitive-0.2.35}/.vscode/extensions.json +0 -0
  13. {primitive-0.2.33 → primitive-0.2.35}/.vscode/settings.json +0 -0
  14. {primitive-0.2.33 → primitive-0.2.35}/LICENSE.txt +0 -0
  15. {primitive-0.2.33 → primitive-0.2.35}/Makefile +0 -0
  16. {primitive-0.2.33 → primitive-0.2.35}/README.md +0 -0
  17. {primitive-0.2.33 → primitive-0.2.35}/linux setup.md +0 -0
  18. {primitive-0.2.33 → primitive-0.2.35}/pyproject.toml +0 -0
  19. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/__init__.py +0 -0
  20. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/agent/__init__.py +0 -0
  21. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/agent/commands.py +0 -0
  22. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/agent/uploader.py +0 -0
  23. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/auth/__init__.py +0 -0
  24. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/auth/actions.py +0 -0
  25. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/auth/commands.py +0 -0
  26. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/auth/graphql/__init__.py +0 -0
  27. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/auth/graphql/queries.py +0 -0
  28. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/cli.py +0 -0
  29. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/client.py +0 -0
  30. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/__init__.py +0 -0
  31. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/actions.py +0 -0
  32. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/commands.py +0 -0
  33. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/launch_agents.py +0 -0
  34. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/launch_service.py +0 -0
  35. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/daemons/ui.py +0 -0
  36. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/db/base.py +0 -0
  37. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/db/models.py +0 -0
  38. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/db/sqlite.py +0 -0
  39. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/exec/__init__.py +0 -0
  40. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/exec/actions.py +0 -0
  41. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/exec/commands.py +0 -0
  42. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/exec/interactive.py +0 -0
  43. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/__init__.py +0 -0
  44. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/actions.py +0 -0
  45. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/commands.py +0 -0
  46. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/graphql/__init__.py +0 -0
  47. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/graphql/fragments.py +0 -0
  48. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/graphql/mutations.py +0 -0
  49. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/files/graphql/queries.py +0 -0
  50. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/git/__init__.py +0 -0
  51. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/git/actions.py +0 -0
  52. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/git/commands.py +0 -0
  53. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/git/graphql/__init__.py +0 -0
  54. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/git/graphql/queries.py +0 -0
  55. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/graphql/__init__.py +0 -0
  56. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/graphql/relay.py +0 -0
  57. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/graphql/sdk.py +0 -0
  58. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/graphql/utility_fragments.py +0 -0
  59. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/__init__.py +0 -0
  60. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/actions.py +0 -0
  61. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/android.py +0 -0
  62. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/commands.py +0 -0
  63. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/graphql/__init__.py +0 -0
  64. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/graphql/fragments.py +0 -0
  65. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/graphql/mutations.py +0 -0
  66. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/graphql/queries.py +0 -0
  67. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/hardware/ui.py +0 -0
  68. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/__init__.py +0 -0
  69. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/actions.py +0 -0
  70. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/commands.py +0 -0
  71. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/graphql/__init__.py +0 -0
  72. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/graphql/mutations.py +0 -0
  73. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/jobs/graphql/queries.py +0 -0
  74. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/monitor/actions.py +0 -0
  75. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/monitor/commands.py +0 -0
  76. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/__init__.py +0 -0
  77. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/actions.py +0 -0
  78. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/commands.py +0 -0
  79. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/graphql/__init__.py +0 -0
  80. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/graphql/fragments.py +0 -0
  81. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/graphql/mutations.py +0 -0
  82. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/organizations/graphql/queries.py +0 -0
  83. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/__init__.py +0 -0
  84. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/actions.py +0 -0
  85. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/commands.py +0 -0
  86. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/graphql/__init__.py +0 -0
  87. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/graphql/fragments.py +0 -0
  88. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/graphql/mutations.py +0 -0
  89. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/projects/graphql/queries.py +0 -0
  90. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/provisioning/__init__.py +0 -0
  91. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/provisioning/actions.py +0 -0
  92. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/provisioning/graphql/__init__.py +0 -0
  93. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/provisioning/graphql/queries.py +0 -0
  94. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/__init__.py +0 -0
  95. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/actions.py +0 -0
  96. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/commands.py +0 -0
  97. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/graphql/__init__.py +0 -0
  98. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/graphql/fragments.py +0 -0
  99. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/graphql/mutations.py +0 -0
  100. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/reservations/graphql/queries.py +0 -0
  101. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/__init__.py +0 -0
  102. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/actions.py +0 -0
  103. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/auth.py +0 -0
  104. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/cache.py +0 -0
  105. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/chunk_size.py +0 -0
  106. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/config.py +0 -0
  107. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/daemons.py +0 -0
  108. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/exceptions.py +0 -0
  109. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/memory_size.py +0 -0
  110. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/printer.py +0 -0
  111. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/shell.py +0 -0
  112. {primitive-0.2.33 → primitive-0.2.35}/src/primitive/utils/text.py +0 -0
  113. {primitive-0.2.33 → primitive-0.2.35}/tests/__init__.py +0 -0
  114. {primitive-0.2.33 → primitive-0.2.35}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: primitive
3
- Version: 0.2.33
3
+ Version: 0.2.35
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: 2024-present Dylan Stein <dylan@primitive.tech>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.2.33"
4
+ __version__ = "0.2.35"
@@ -102,4 +102,4 @@ class Agent(BaseAction):
102
102
 
103
103
  sleep(5)
104
104
  except KeyboardInterrupt:
105
- logger.info("[agent] Stopping primitive agent...")
105
+ logger.info("Stopping primitive agent...")
@@ -119,20 +119,27 @@ class Runner:
119
119
  self.job_settings["rootDirectory"]
120
120
  )
121
121
 
122
- # Attempt to parse the job yaml file
123
- job_filename = self.job_settings["repositoryFilename"]
124
- logger.info(f"Scanning directory for job file {job_filename}")
122
+ db_config = self.job_settings.get("config", None)
123
+ if db_config:
124
+ logger.info(f"Using job config from database for {self.job['slug']}")
125
+ self.config = db_config
126
+ else:
127
+ # Attempt to parse the job yaml file
128
+ job_filename = self.job_settings["repositoryFilename"]
129
+ logger.info(f"Scanning directory for job file {job_filename}")
125
130
 
126
- job_config_file = Path(self.source_dir / ".primitive" / job_filename)
131
+ job_config_file = Path(self.source_dir / ".primitive" / job_filename)
127
132
 
128
- if job_config_file.exists():
129
- logger.info(f"Found job description for {self.job['slug']}")
130
- self.config = yaml.load(open(job_config_file, "r"), Loader=Loader)
131
- else:
132
- logger.error(
133
- f"No job description with matching filename '{job_filename}' found"
134
- )
135
- raise FileNotFoundError
133
+ if job_config_file.exists():
134
+ logger.info(
135
+ f"Found job description for {self.job['slug']} at {job_config_file}"
136
+ )
137
+ self.config = yaml.load(open(job_config_file, "r"), Loader=Loader)
138
+ else:
139
+ logger.error(
140
+ f"No job description with matching filename '{job_filename}' found"
141
+ )
142
+ raise FileNotFoundError
136
143
 
137
144
  # Setup initial process environment
138
145
  self.initial_env = os.environ
@@ -254,7 +261,9 @@ class Runner:
254
261
  return number_of_files_produced
255
262
 
256
263
  async def run_task(self, task: Task) -> bool:
257
- for cmd in task["cmd"].strip().split("\n"):
264
+ logger.info(f"Running step '{task['label']}'")
265
+ commands = task["cmd"].strip().split("\n")
266
+ for i, cmd in enumerate(commands):
258
267
  # Adding an additional echo and utilizing stdbuf to force line buffering
259
268
  # This ensures that the environment variables and starting delimiter are
260
269
  # always in a new chunk, vastly simplifying our parsing logic
@@ -264,6 +273,8 @@ class Runner:
264
273
  f"{cmd} && echo -n '{ENV_VAR_LOOKUP_START}' && env && echo -n '{ENV_VAR_LOOKUP_END}'",
265
274
  ]
266
275
 
276
+ logger.info(f"Executing command {i + 1}/{len(commands)}: {cmd}")
277
+
267
278
  process = await asyncio.create_subprocess_exec(
268
279
  *args,
269
280
  env=self.modified_env,
@@ -287,6 +298,10 @@ class Runner:
287
298
 
288
299
  returncode = await process.wait()
289
300
 
301
+ logger.info(
302
+ f"Finished executing command {i + 1}/{len(commands)}: {cmd} with return code {returncode}"
303
+ )
304
+
290
305
  JobRun.objects.filter_by(job_run_id=self.job_run["id"]).update(
291
306
  {"pid": None}
292
307
  )
@@ -35,6 +35,7 @@ fragment JobRunFragment on JobRun {
35
35
  parseStderr
36
36
  failureLevel
37
37
  repositoryFilename
38
+ config
38
39
  }
39
40
  gitCommit {
40
41
  sha
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