yamloom 0.1.0__cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl

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.
yamloom/__init__.py ADDED
@@ -0,0 +1,4 @@
1
+ from . import _yamloom
2
+ from ._yamloom import * # noqa: F403
3
+
4
+ __all__ = _yamloom.__all__
yamloom/__init__.pyi ADDED
@@ -0,0 +1,4 @@
1
+ from . import _yamloom
2
+ from ._yamloom import * # noqa: F403
3
+
4
+ __all__ = _yamloom.__all__
yamloom/__main__.py ADDED
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import os
5
+ import subprocess
6
+ import sys
7
+ from pathlib import Path
8
+
9
+
10
+ DEFAULT_CANDIDATES = ('.yamloom.py', 'yamloom.py')
11
+ ENV_VAR = 'YAMLOOM_FILE'
12
+
13
+
14
+ def resolve_target(explicit: str | None) -> Path:
15
+ if explicit:
16
+ return Path(explicit)
17
+
18
+ env_value = os.getenv(ENV_VAR)
19
+ if env_value:
20
+ return Path(env_value)
21
+
22
+ for candidate in DEFAULT_CANDIDATES:
23
+ path = Path(candidate)
24
+ if path.exists():
25
+ return path
26
+
27
+ candidates = ', '.join(DEFAULT_CANDIDATES)
28
+ raise FileNotFoundError(
29
+ f'Could not find workflow generator. Tried: {candidates}. '
30
+ f'Set --file or {ENV_VAR} to override.'
31
+ )
32
+
33
+
34
+ def main() -> int:
35
+ parser = argparse.ArgumentParser(description='Run yamloom workflow generator.')
36
+ parser.add_argument(
37
+ '--file',
38
+ dest='file',
39
+ help='Path to workflow generator script (overrides defaults).',
40
+ )
41
+ args = parser.parse_args()
42
+
43
+ try:
44
+ target = resolve_target(args.file)
45
+ except FileNotFoundError as exc:
46
+ print(str(exc), file=sys.stderr)
47
+ return 2
48
+
49
+ if not target.exists():
50
+ print(f'Workflow generator not found: {target}', file=sys.stderr)
51
+ return 2
52
+
53
+ result = subprocess.run([sys.executable, str(target)])
54
+ return result.returncode
55
+
56
+
57
+ if __name__ == '__main__':
58
+ raise SystemExit(main())
yamloom/_yamloom.pyi ADDED
@@ -0,0 +1,584 @@
1
+ from pathlib import Path
2
+ from collections.abc import Mapping, Sequence
3
+ from types import ModuleType
4
+ from typing import Any, Literal
5
+
6
+ from typing_extensions import TypeAlias
7
+
8
+ from .expressions import (
9
+ BooleanExpression,
10
+ NumberExpression,
11
+ StringExpression,
12
+ )
13
+
14
+ Ostr: TypeAlias = str | None
15
+ Obool: TypeAlias = bool | None
16
+ Oint: TypeAlias = int | None
17
+ StringLike: TypeAlias = str | StringExpression
18
+ BoolLike: TypeAlias = bool | BooleanExpression
19
+ IntLike: TypeAlias = int | NumberExpression
20
+ Ostrlike: TypeAlias = StringLike | None
21
+ Oboolstr: TypeAlias = BooleanExpression | str | None
22
+ Oboollike: TypeAlias = BoolLike | None
23
+ Ointlike: TypeAlias = IntLike | None
24
+ StringOrBoolLike: TypeAlias = StringLike | BoolLike
25
+
26
+ expressions: ModuleType
27
+
28
+ class Step: ...
29
+
30
+ def script(
31
+ name: StringLike,
32
+ *script: StringLike,
33
+ condition: Oboolstr = None,
34
+ working_directory: Ostrlike = None,
35
+ shell: Ostr = None,
36
+ id: Ostr = None, # noqa: A002
37
+ env: Mapping[str, StringLike] | None = None,
38
+ continue_on_error: Oboollike = None,
39
+ timeout_minutes: Ointlike = None,
40
+ ) -> Step: ...
41
+ def action(
42
+ name: StringLike,
43
+ action: str,
44
+ *,
45
+ ref: Ostr = None,
46
+ with_opts: Mapping | None = None,
47
+ args: Ostrlike = None,
48
+ entrypoint: Ostrlike = None,
49
+ condition: Oboolstr = None,
50
+ working_directory: Ostrlike = None,
51
+ shell: Ostr = None,
52
+ id: Ostr = None, # noqa: A002
53
+ env: Mapping[str, StringLike] | None = None,
54
+ continue_on_error: Oboollike = None,
55
+ timeout_minutes: Ointlike = None,
56
+ ) -> Step: ...
57
+
58
+ RW: TypeAlias = Literal['read', 'write', 'none'] | None
59
+ RO: TypeAlias = Literal['read', 'none'] | None
60
+ WO: TypeAlias = Literal['write', 'none'] | None
61
+
62
+ class Permissions:
63
+ def __init__(
64
+ self,
65
+ *,
66
+ actions: RW = None,
67
+ artifact_metadata: RW = None,
68
+ attestations: RW = None,
69
+ checks: RW = None,
70
+ contents: RW = None,
71
+ deployments: RW = None,
72
+ id_token: WO = None,
73
+ issues: RW = None,
74
+ models: RO = None,
75
+ discussions: RW = None,
76
+ packages: RW = None,
77
+ pages: RW = None,
78
+ pull_requests: RW = None,
79
+ security_events: RW = None,
80
+ statuses: RW = None,
81
+ ) -> None: ...
82
+ @staticmethod
83
+ def none() -> Permissions: ...
84
+ @staticmethod
85
+ def read_all() -> Permissions: ...
86
+ @staticmethod
87
+ def write_all() -> Permissions: ...
88
+
89
+ class RunsOnSpec:
90
+ def __init__(self, group: StringLike, labels: StringLike) -> None: ...
91
+ @staticmethod
92
+ def group(group: StringLike) -> RunsOnSpec: ...
93
+ @staticmethod
94
+ def labels(labels: StringLike) -> RunsOnSpec: ...
95
+
96
+ class RunsOn:
97
+ def __init__(self, *args: StringLike) -> None: ...
98
+ @staticmethod
99
+ def spec(spec: RunsOnSpec) -> RunsOn: ...
100
+
101
+ class Environment:
102
+ def __init__(self, name: StringLike, url: Ostrlike = None) -> None: ...
103
+
104
+ class Concurrency:
105
+ def __init__(
106
+ self, group: StringLike, *, cancel_in_progress: Oboollike = None
107
+ ) -> None: ...
108
+
109
+ class RunDefaults:
110
+ def __init__(
111
+ self, *, shell: Ostrlike = None, working_directory: Ostrlike = None
112
+ ) -> None: ...
113
+
114
+ class Defaults:
115
+ def __init__(
116
+ self,
117
+ *,
118
+ defaults: Mapping[str, str] | None = None,
119
+ run_defaults: RunDefaults | None = None,
120
+ ) -> None: ...
121
+
122
+ class Matrix:
123
+ def __init__(
124
+ self,
125
+ *,
126
+ include: Sequence | None = None,
127
+ exclude: Sequence | None = None,
128
+ **matrix: Any,
129
+ ) -> None: ...
130
+
131
+ class Strategy:
132
+ def __init__(
133
+ self,
134
+ *,
135
+ matrix: Matrix | None = None,
136
+ fast_fail: Oboollike = None,
137
+ max_parallel: Ointlike = None,
138
+ ) -> None: ...
139
+
140
+ class Credentials:
141
+ def __init__(self, username: StringLike, password: StringLike) -> None: ...
142
+
143
+ class Container:
144
+ def __init__(
145
+ self,
146
+ image: StringLike,
147
+ *,
148
+ credentials: Credentials | None = None,
149
+ env: Mapping[str, StringLike] | None = None,
150
+ ports: Sequence[IntLike] | None = None,
151
+ volumes: Sequence[StringLike] | None = None,
152
+ options: Ostrlike = None,
153
+ ) -> None: ...
154
+
155
+ class JobSecrets:
156
+ def __init__(self, secrets: Mapping[str, StringLike]) -> None: ...
157
+ @staticmethod
158
+ def inherit() -> JobSecrets: ...
159
+
160
+ class Job:
161
+ def __init__(
162
+ self,
163
+ steps: Sequence[Step],
164
+ *,
165
+ name: Ostrlike = None,
166
+ permissions: Permissions | None = None,
167
+ needs: Sequence[str] | None = None,
168
+ condition: Oboolstr = None,
169
+ runs_on: RunsOnSpec | Sequence[StringLike] | StringLike | None = None,
170
+ snapshot: Ostr = None,
171
+ environment: Environment | None = None,
172
+ concurrency: Concurrency | None = None,
173
+ outputs: Mapping[str, StringLike] | None = None,
174
+ env: Mapping[str, StringLike] | None = None,
175
+ defaults: Defaults | None = None,
176
+ timeout_minutes: Oint = None,
177
+ strategy: Strategy | None = None,
178
+ continue_on_error: StringOrBoolLike | None = None,
179
+ container: Container | None = None,
180
+ services: Mapping[str, Container] | None = None,
181
+ uses: Ostr = None,
182
+ with_opts: Mapping | None = None,
183
+ secrets: JobSecrets | None = None,
184
+ ) -> None: ...
185
+
186
+ class BranchProtectionRuleEvent:
187
+ def __init__(
188
+ self, *, created: bool = False, edited: bool = False, deleted: bool = False
189
+ ) -> None: ...
190
+
191
+ class CheckRunEvent:
192
+ def __init__(
193
+ self,
194
+ *,
195
+ created: bool = False,
196
+ rerequested: bool = False,
197
+ completed: bool = False,
198
+ requested_action: bool = False,
199
+ ) -> None: ...
200
+
201
+ class CheckSuiteEvent:
202
+ def __init__(self, *, created: bool = False) -> None: ...
203
+
204
+ class DiscussionEvent:
205
+ def __init__(
206
+ self,
207
+ *,
208
+ created: bool = False,
209
+ edited: bool = False,
210
+ deleted: bool = False,
211
+ transferred: bool = False,
212
+ pinned: bool = False,
213
+ unpinned: bool = False,
214
+ labeled: bool = False,
215
+ unlabeled: bool = False,
216
+ locked: bool = False,
217
+ unlocked: bool = False,
218
+ category_changed: bool = False,
219
+ answered: bool = False,
220
+ unanswered: bool = False,
221
+ ) -> None: ...
222
+
223
+ class DiscussionCommentEvent:
224
+ def __init__(
225
+ self, *, created: bool = False, edited: bool = False, deleted: bool = False
226
+ ) -> None: ...
227
+
228
+ class ImageVersionEvent:
229
+ def __init__(
230
+ self,
231
+ *,
232
+ names: Sequence[str] | None = None,
233
+ versions: Sequence[str] | None = None,
234
+ ) -> None: ...
235
+
236
+ class IssueCommentEvent:
237
+ def __init__(
238
+ self, *, created: bool = False, edited: bool = False, deleted: bool = False
239
+ ) -> None: ...
240
+
241
+ class IssuesEvent:
242
+ def __init__(
243
+ self,
244
+ *,
245
+ created: bool = False,
246
+ edited: bool = False,
247
+ deleted: bool = False,
248
+ transferred: bool = False,
249
+ pinned: bool = False,
250
+ unpinned: bool = False,
251
+ closed: bool = False,
252
+ reopened: bool = False,
253
+ assigned: bool = False,
254
+ unassigned: bool = False,
255
+ labeled: bool = False,
256
+ unlabeled: bool = False,
257
+ locked: bool = False,
258
+ unlocked: bool = False,
259
+ milestoned: bool = False,
260
+ demilestoned: bool = False,
261
+ typed: bool = False,
262
+ untyped: bool = False,
263
+ ) -> None: ...
264
+
265
+ class LabelEvent:
266
+ def __init__(
267
+ self, *, created: bool = False, edited: bool = False, deleted: bool = False
268
+ ) -> None: ...
269
+
270
+ class MergeGroupEvent:
271
+ def __init__(self, *, checks_requested: bool = False) -> None: ...
272
+
273
+ class MilestoneEvent:
274
+ def __init__(
275
+ self,
276
+ *,
277
+ created: bool = False,
278
+ closed: bool = False,
279
+ opened: bool = False,
280
+ edited: bool = False,
281
+ deleted: bool = False,
282
+ ) -> None: ...
283
+
284
+ class PullRequestEvent:
285
+ def __init__(
286
+ self,
287
+ *,
288
+ branches: Sequence[str] | None = None,
289
+ branches_ignore: Sequence[str] | None = None,
290
+ paths: Sequence[str] | None = None,
291
+ paths_ignore: Sequence[str] | None = None,
292
+ assigned: bool = False,
293
+ unassigned: bool = False,
294
+ labeled: bool = False,
295
+ unlabeled: bool = False,
296
+ opened: bool = False,
297
+ edited: bool = False,
298
+ closed: bool = False,
299
+ reopened: bool = False,
300
+ synchronize: bool = False,
301
+ converted_to_draft: bool = False,
302
+ locked: bool = False,
303
+ unlocked: bool = False,
304
+ enqueued: bool = False,
305
+ dequeued: bool = False,
306
+ milestoned: bool = False,
307
+ demilestoned: bool = False,
308
+ ready_for_review: bool = False,
309
+ review_requested: bool = False,
310
+ review_request_removed: bool = False,
311
+ auto_merge_enabled: bool = False,
312
+ auto_merge_disabled: bool = False,
313
+ ) -> None: ...
314
+
315
+ class PullRequestReviewEvent:
316
+ def __init__(
317
+ self, *, submitted: bool = False, edited: bool = False, dismissed: bool = False
318
+ ) -> None: ...
319
+
320
+ class PullRequestReviewCommentEvent:
321
+ def __init__(
322
+ self, *, created: bool = False, edited: bool = False, deleted: bool = False
323
+ ) -> None: ...
324
+
325
+ class PushEvent:
326
+ def __init__(
327
+ self,
328
+ *,
329
+ branches: Sequence[str] | None = None,
330
+ branches_ignore: Sequence[str] | None = None,
331
+ tags: Sequence[str] | None = None,
332
+ tags_ignore: Sequence[str] | None = None,
333
+ paths: Sequence[str] | None = None,
334
+ paths_ignore: Sequence[str] | None = None,
335
+ ) -> None: ...
336
+
337
+ class RegistryPackageEvent:
338
+ def __init__(self, *, published: bool = False, updated: bool = False) -> None: ...
339
+
340
+ class ReleaseEvent:
341
+ def __init__(
342
+ self,
343
+ *,
344
+ published: bool = False,
345
+ unpublished: bool = False,
346
+ created: bool = False,
347
+ edited: bool = False,
348
+ deleted: bool = False,
349
+ prereleased: bool = False,
350
+ released: bool = False,
351
+ ) -> None: ...
352
+
353
+ class RepositoryDispatchEvent:
354
+ def __init__(self, *, types: Sequence[str] | None = None) -> None: ...
355
+
356
+ class Minute:
357
+ def __init__(self, minute: int | Sequence[int]) -> None: ...
358
+ @staticmethod
359
+ def between(start: int, end: int) -> Minute: ...
360
+ @staticmethod
361
+ def every(interval: int, *, start: Oint = None) -> Minute: ...
362
+
363
+ class Hour:
364
+ def __init__(self, minute: int | Sequence[int]) -> None: ...
365
+ @staticmethod
366
+ def between(start: int, end: int) -> Hour: ...
367
+ @staticmethod
368
+ def every(interval: int, *, start: Oint = None) -> Hour: ...
369
+
370
+ class Day:
371
+ def __init__(self, minute: int | Sequence[int]) -> None: ...
372
+ @staticmethod
373
+ def between(start: int, end: int) -> Day: ...
374
+ @staticmethod
375
+ def every(interval: int, *, start: Oint = None) -> Day: ...
376
+
377
+ class Month:
378
+ def __init__(self, minute: int | Sequence[int]) -> None: ...
379
+ @staticmethod
380
+ def between(start: int, end: int) -> Month: ...
381
+ @staticmethod
382
+ def every(interval: int, *, start: Oint = None) -> Month: ...
383
+
384
+ class DayOfWeek:
385
+ def __init__(self, minute: int | Sequence[int]) -> None: ...
386
+ @staticmethod
387
+ def between(start: int, end: int) -> DayOfWeek: ...
388
+ @staticmethod
389
+ def every(interval: int, *, start: Oint = None) -> DayOfWeek: ...
390
+
391
+ class Cron:
392
+ def __init__(
393
+ self,
394
+ *,
395
+ minute: Minute | None = None,
396
+ hour: Hour | None = None,
397
+ day: Day | None = None,
398
+ month: Month | None = None,
399
+ day_of_week: DayOfWeek | None = None,
400
+ ) -> None: ...
401
+
402
+ class ScheduleEvent:
403
+ def __init__(self, *, crons: Sequence[Cron] | None = None) -> None: ...
404
+
405
+ class WatchEvent:
406
+ def __init__(self, *, started: bool = False) -> None: ...
407
+
408
+ class WorkflowInput:
409
+ @staticmethod
410
+ def boolean(
411
+ *, description: Ostr = None, default: Oboollike = None, required: Obool = None
412
+ ) -> WorkflowInput: ...
413
+ @staticmethod
414
+ def number(
415
+ *, description: Ostr = None, default: Ointlike = None, required: Obool = None
416
+ ) -> WorkflowInput: ...
417
+ @staticmethod
418
+ def string(
419
+ *, description: Ostr = None, default: Ostrlike = None, required: Obool = None
420
+ ) -> WorkflowInput: ...
421
+
422
+ class WorkflowOutput:
423
+ def __init__(self, value: StringLike, *, description: Ostr = None) -> None: ...
424
+
425
+ class WorkflowSecret:
426
+ def __init__(self, *, description: Ostr = None, required: Obool = None) -> None: ...
427
+
428
+ class WorkflowCallEvent:
429
+ def __init__(
430
+ self,
431
+ *,
432
+ inputs: Mapping[str, WorkflowInput] | None = None,
433
+ outputs: Mapping[str, WorkflowOutput] | None = None,
434
+ secrets: Mapping[str, WorkflowSecret] | None = None,
435
+ ) -> None: ...
436
+
437
+ class WorkflowDispatchInput:
438
+ @staticmethod
439
+ def boolean(
440
+ *, description: Ostr = None, default: Obool = None, required: Obool = None
441
+ ) -> WorkflowDispatchInput: ...
442
+ @staticmethod
443
+ def choice(
444
+ options: Sequence[str],
445
+ *,
446
+ description: Ostr = None,
447
+ default: Ostr = None,
448
+ required: Obool = None,
449
+ ) -> WorkflowDispatchInput: ...
450
+ @staticmethod
451
+ def number(
452
+ *, description: Ostr = None, default: Oint = None, required: Obool = None
453
+ ) -> WorkflowDispatchInput: ...
454
+ @staticmethod
455
+ def environment(
456
+ *, description: Ostr = None, required: Obool = None
457
+ ) -> WorkflowDispatchInput: ...
458
+ @staticmethod
459
+ def string(
460
+ *, description: Ostr = None, default: Ostr = None, required: Obool = None
461
+ ) -> WorkflowDispatchInput: ...
462
+
463
+ class WorkflowDispatchEvent:
464
+ def __init__(
465
+ self, *, inputs: Mapping[str, WorkflowDispatchInput] | None = None
466
+ ) -> None: ...
467
+
468
+ class WorkflowRunEvent:
469
+ def __init__(
470
+ self,
471
+ *,
472
+ workflows: Sequence[str] | None = None,
473
+ completed: bool = False,
474
+ requested: bool = False,
475
+ in_progress: bool = False,
476
+ branches: Sequence[str] | None = None,
477
+ branches_ignore: Sequence[str] | None = None,
478
+ ) -> None: ...
479
+
480
+ class Events:
481
+ def __init__(
482
+ self,
483
+ branch_protection_rule: BranchProtectionRuleEvent | None = None,
484
+ check_run: CheckRunEvent | None = None,
485
+ check_suite: CheckSuiteEvent | None = None,
486
+ create: bool = False,
487
+ delete: bool = False,
488
+ deployment: bool = False,
489
+ deployment_status: bool = False,
490
+ discussion: DiscussionEvent | None = None,
491
+ discussion_comment: DiscussionCommentEvent | None = None,
492
+ fork: bool = False,
493
+ gollum: bool = False,
494
+ image_version: ImageVersionEvent | None = None,
495
+ issue_comment: IssueCommentEvent | None = None,
496
+ issues: IssuesEvent | None = None,
497
+ label: LabelEvent | None = None,
498
+ merge_group: MergeGroupEvent | None = None,
499
+ milestone: MilestoneEvent | None = None,
500
+ page_build: bool = False,
501
+ public: bool = False,
502
+ pull_request: PullRequestEvent | None = None,
503
+ pull_request_review: PullRequestReviewEvent | None = None,
504
+ pull_request_review_comment: PullRequestReviewCommentEvent | None = None,
505
+ pull_request_target: PullRequestEvent | None = None,
506
+ push: PushEvent | None = None,
507
+ registry_package: RegistryPackageEvent | None = None,
508
+ release: ReleaseEvent | None = None,
509
+ schedule: ScheduleEvent | None = None,
510
+ status: bool = False,
511
+ watch: WatchEvent | None = None,
512
+ workflow_call: WorkflowCallEvent | None = None,
513
+ workflow_dispatch: WorkflowDispatchEvent | None = None,
514
+ workflow_run: WorkflowRunEvent | None = None,
515
+ ) -> None: ...
516
+
517
+ class Workflow:
518
+ def __init__(
519
+ self,
520
+ *,
521
+ jobs: Mapping[str, Job],
522
+ on: Events,
523
+ name: Ostr = None,
524
+ run_name: Ostrlike = None,
525
+ permissions: Permissions | None = None,
526
+ env: Mapping[str, StringLike] | None = None,
527
+ defaults: Defaults | None = None,
528
+ concurrency: Concurrency | None = None,
529
+ ) -> None: ...
530
+ def dump(self, path: Path | str, *, overwrite: bool = True) -> None: ...
531
+
532
+ __all__ = [
533
+ 'BranchProtectionRuleEvent',
534
+ 'CheckRunEvent',
535
+ 'CheckSuiteEvent',
536
+ 'Concurrency',
537
+ 'Container',
538
+ 'Credentials',
539
+ 'Cron',
540
+ 'Day',
541
+ 'DayOfWeek',
542
+ 'Defaults',
543
+ 'DiscussionCommentEvent',
544
+ 'DiscussionEvent',
545
+ 'Environment',
546
+ 'Events',
547
+ 'Hour',
548
+ 'ImageVersionEvent',
549
+ 'IssueCommentEvent',
550
+ 'IssuesEvent',
551
+ 'Job',
552
+ 'JobSecrets',
553
+ 'LabelEvent',
554
+ 'Matrix',
555
+ 'MergeGroupEvent',
556
+ 'MilestoneEvent',
557
+ 'Minute',
558
+ 'Month',
559
+ 'Permissions',
560
+ 'PullRequestEvent',
561
+ 'PullRequestReviewCommentEvent',
562
+ 'PullRequestReviewEvent',
563
+ 'PushEvent',
564
+ 'RegistryPackageEvent',
565
+ 'ReleaseEvent',
566
+ 'RepositoryDispatchEvent',
567
+ 'RunDefaults',
568
+ 'RunsOn',
569
+ 'RunsOnSpec',
570
+ 'ScheduleEvent',
571
+ 'Step',
572
+ 'Strategy',
573
+ 'WatchEvent',
574
+ 'Workflow',
575
+ 'WorkflowCallEvent',
576
+ 'WorkflowDispatchEvent',
577
+ 'WorkflowDispatchInput',
578
+ 'WorkflowInput',
579
+ 'WorkflowOutput',
580
+ 'WorkflowRunEvent',
581
+ 'WorkflowSecret',
582
+ 'action',
583
+ 'script',
584
+ ]
File without changes
File without changes