cdk-github-microvm-runners 0.1.7__tar.gz → 0.1.8__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 (18) hide show
  1. {cdk_github_microvm_runners-0.1.7/src/cdk_github_microvm_runners.egg-info → cdk_github_microvm_runners-0.1.8}/PKG-INFO +1 -1
  2. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/setup.py +2 -2
  3. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners/__init__.py +278 -7
  4. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners/_jsii/__init__.py +2 -2
  5. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners/_jsii/bin/cdk-github-microvm-runners +2 -2
  6. cdk_github_microvm_runners-0.1.8/src/cdk_github_microvm_runners/_jsii/cdk-github-microvm-runners@0.1.8.jsii.tgz +0 -0
  7. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8/src/cdk_github_microvm_runners.egg-info}/PKG-INFO +1 -1
  8. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners.egg-info/SOURCES.txt +1 -1
  9. cdk_github_microvm_runners-0.1.7/src/cdk_github_microvm_runners/_jsii/cdk-github-microvm-runners@0.1.7.jsii.tgz +0 -0
  10. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/LICENSE +0 -0
  11. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/MANIFEST.in +0 -0
  12. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/README.md +0 -0
  13. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/pyproject.toml +0 -0
  14. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/setup.cfg +0 -0
  15. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners/py.typed +0 -0
  16. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners.egg-info/dependency_links.txt +0 -0
  17. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners.egg-info/requires.txt +0 -0
  18. {cdk_github_microvm_runners-0.1.7 → cdk_github_microvm_runners-0.1.8}/src/cdk_github_microvm_runners.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cdk-github-microvm-runners
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: CDK construct for running GitHub Actions jobs on AWS Lambda MicroVMs, with one ephemeral runner per job.
5
5
  Home-page: https://runnerset.dev
6
6
  Author: Court Schuett
@@ -5,7 +5,7 @@ kwargs = json.loads(
5
5
  """
6
6
  {
7
7
  "name": "cdk-github-microvm-runners",
8
- "version": "0.1.7",
8
+ "version": "0.1.8",
9
9
  "description": "CDK construct for running GitHub Actions jobs on AWS Lambda MicroVMs, with one ephemeral runner per job.",
10
10
  "license": "Apache-2.0",
11
11
  "url": "https://runnerset.dev",
@@ -26,7 +26,7 @@ kwargs = json.loads(
26
26
  ],
27
27
  "package_data": {
28
28
  "cdk_github_microvm_runners._jsii": [
29
- "cdk-github-microvm-runners@0.1.7.jsii.tgz"
29
+ "cdk-github-microvm-runners@0.1.8.jsii.tgz"
30
30
  ],
31
31
  "cdk_github_microvm_runners": [
32
32
  "py.typed"
@@ -1112,18 +1112,24 @@ class GithubMicrovmRunnersMetrics(
1112
1112
  runner_set_id: builtins.str,
1113
1113
  dead_letter_queue: "_aws_cdk_aws_sqs_ceddda9d.IQueue",
1114
1114
  emit_metrics: typing.Optional[builtins.bool] = None,
1115
+ janitor_interval: typing.Optional["_aws_cdk_ceddda9d.Duration"] = None,
1116
+ queued_job_scan_unavailable: typing.Optional[builtins.bool] = None,
1115
1117
  ) -> None:
1116
1118
  '''
1117
1119
  :param runner_set_id: -
1118
1120
  :param dead_letter_queue: -
1119
1121
  :param emit_metrics: Whether the runner set reports the metrics this class names, which is ``GithubMicrovmRunnersProps.emitMetrics``. Every accessor except ``deadLetterQueueDepth`` depends on it, though they all return a ``Metric`` either way; only the two alarms over those metrics refuse to synthesize.
1122
+ :param janitor_interval: The runner set's ``GithubMicrovmRunnersProps.janitorInterval``, which sets how often the queued-job-age metric is emitted. {@link queuedJobAgeAlarm} derives its aggregation period from this so the alarm never evaluates a period the janitor could not have written a datapoint into (which would make missing-data-breaching page permanently). Optional and trailing to keep this constructor backward compatible and jsii-clean.
1123
+ :param queued_job_scan_unavailable: Whether the queued-job scan is unavailable for this runner set's auth + scope combination \\u2014 true only under PAT auth with org scope, where ``listInstallationRepos`` cannot enumerate the org's repos (GitHub 403s a PAT there). The janitor skips the scan in that configuration, so ``oldestQueuedJobSeconds``/``queuedJobs`` never report and {@link queuedJobAgeAlarm} throws at synth rather than synthesizing an alarm that could only ever page on missing data.
1120
1124
  '''
1121
1125
  if __debug__:
1122
1126
  type_hints = cached_type_hints(_typecheckingstub__8c3f47f3bf65ddc91d8c105e318179909d2860c56e34cc7b699066e3f7952170)
1123
1127
  check_type(argname="argument runner_set_id", value=runner_set_id, expected_type=type_hints["runner_set_id"])
1124
1128
  check_type(argname="argument dead_letter_queue", value=dead_letter_queue, expected_type=type_hints["dead_letter_queue"])
1125
1129
  check_type(argname="argument emit_metrics", value=emit_metrics, expected_type=type_hints["emit_metrics"])
1126
- jsii.create(self.__class__, self, [runner_set_id, dead_letter_queue, emit_metrics])
1130
+ check_type(argname="argument janitor_interval", value=janitor_interval, expected_type=type_hints["janitor_interval"])
1131
+ check_type(argname="argument queued_job_scan_unavailable", value=queued_job_scan_unavailable, expected_type=type_hints["queued_job_scan_unavailable"])
1132
+ jsii.create(self.__class__, self, [runner_set_id, dead_letter_queue, emit_metrics, janitor_interval, queued_job_scan_unavailable])
1127
1133
 
1128
1134
  @jsii.member(jsii_name="cancelledBeforeLaunch")
1129
1135
  def cancelled_before_launch(
@@ -1175,6 +1181,51 @@ class GithubMicrovmRunnersMetrics(
1175
1181
  check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1176
1182
  return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "capacityRejected", [runner_class_label]))
1177
1183
 
1184
+ @jsii.member(jsii_name="capacityRejectedAlarm")
1185
+ def capacity_rejected_alarm(
1186
+ self,
1187
+ scope: "_constructs_77d1e7e8.Construct",
1188
+ runner_class_label: builtins.str,
1189
+ *,
1190
+ evaluation_periods: typing.Optional[jsii.Number] = None,
1191
+ period: typing.Optional["_aws_cdk_ceddda9d.Duration"] = None,
1192
+ threshold: typing.Optional[jsii.Number] = None,
1193
+ ) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Alarm":
1194
+ '''Alarm when the MicroVM service is rejecting a runner class's launches for capacity — the class's quota signal.
1195
+
1196
+ Each rejection is a job queueing
1197
+ behind the account's MicroVM memory quota or the set's ``maxConcurrentVms``
1198
+ rather than running, and spends one of its ``maxReceiveCount`` redrives on
1199
+ the way to the dead-letter queue. It fires on one rejection in each of
1200
+ three consecutive 5-minute periods, so a lone burst that the next launch
1201
+ clears does not page; pass ``RunnerAlarmOptions`` to change that. See
1202
+ docs/service-quotas.md for raising the ceiling.
1203
+
1204
+ ``capacityRejected`` is dimensioned per runner class, so this builds one
1205
+ alarm per ``runnerClassLabel`` under an id unique to that label — call it
1206
+ once per class you want watched, in the same scope, without collision.
1207
+
1208
+ Requires ``GithubMicrovmRunnersProps.emitMetrics``, and throws at synth
1209
+ without it.
1210
+
1211
+ :param scope: -
1212
+ :param runner_class_label: -
1213
+ :param evaluation_periods: Consecutive breaching periods before the alarm fires. Default: 1 (3 for the stuck-launch alarm)
1214
+ :param period: Aggregation period for the metric. Default: Duration.minutes(5)
1215
+ :param threshold: Value at or above which the alarm fires. Default: 1
1216
+
1217
+ :default: threshold 1, 3 evaluation periods, 5-minute period
1218
+ '''
1219
+ if __debug__:
1220
+ type_hints = cached_type_hints(_typecheckingstub__766ef83db1daeed0e3e21d670b01373e3a0da9c3eb9f7dc571c6f37a32dd05a6)
1221
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1222
+ check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1223
+ options = RunnerAlarmOptions(
1224
+ evaluation_periods=evaluation_periods, period=period, threshold=threshold
1225
+ )
1226
+
1227
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Alarm", jsii.invoke(self, "capacityRejectedAlarm", [scope, runner_class_label, options]))
1228
+
1178
1229
  @jsii.member(jsii_name="coldBoot")
1179
1230
  def cold_boot(
1180
1231
  self,
@@ -1265,6 +1316,28 @@ class GithubMicrovmRunnersMetrics(
1265
1316
  '''Janitor sweep count: VMs terminated for having run longer than ``maxJobDuration`` plus the platform's own grace.'''
1266
1317
  return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "lifetimeKills", []))
1267
1318
 
1319
+ @jsii.member(jsii_name="oldestQueuedJobSeconds")
1320
+ def oldest_queued_job_seconds(
1321
+ self,
1322
+ runner_class_label: builtins.str,
1323
+ ) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1324
+ '''Janitor per-class gauge (seconds): how long the oldest queued job this class owns has waited, measured read-only each sweep, or 0 when the class has nothing queued.
1325
+
1326
+ A job is owned by a class when every runner label it
1327
+ requests beyond ``self-hosted`` is that class's label — GitHub's own
1328
+ matching — so another runner set's jobs are excluded. Emitted every sweep
1329
+ for every class, which is what lets {@link queuedJobAgeAlarm} treat missing
1330
+ data as breaching.
1331
+
1332
+ Reported as an average across a period; the alarm reads it as a maximum.
1333
+
1334
+ :param runner_class_label: -
1335
+ '''
1336
+ if __debug__:
1337
+ type_hints = cached_type_hints(_typecheckingstub__3707b7071d9a073a162ee86679ac2882d7fddadbd420da462daf135a440aea31)
1338
+ check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1339
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "oldestQueuedJobSeconds", [runner_class_label]))
1340
+
1268
1341
  @jsii.member(jsii_name="orphansReaped")
1269
1342
  def orphans_reaped(self) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1270
1343
  '''Janitor sweep count: running VMs that belong to this runner set but have no row in the runner table, reaped once a second sweep has seen the same VM unaccounted for.'''
@@ -1328,6 +1401,90 @@ class GithubMicrovmRunnersMetrics(
1328
1401
  check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1329
1402
  return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "poolTarget", [runner_class_label]))
1330
1403
 
1404
+ @jsii.member(jsii_name="queuedJobAgeAlarm")
1405
+ def queued_job_age_alarm(
1406
+ self,
1407
+ scope: "_constructs_77d1e7e8.Construct",
1408
+ runner_class_label: builtins.str,
1409
+ *,
1410
+ evaluation_periods: typing.Optional[jsii.Number] = None,
1411
+ period: typing.Optional["_aws_cdk_ceddda9d.Duration"] = None,
1412
+ threshold: typing.Optional[jsii.Number] = None,
1413
+ ) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Alarm":
1414
+ '''Alarm when a runner class has a job that has waited queued far longer than a runner should take to appear — the signal that NO launch happened at all, which the reap-based alarms structurally cannot catch.
1415
+
1416
+ A misrouted or
1417
+ dropped webhook, a GitHub App failure, a launch bug, or a MicroVM quota
1418
+ wall all leave the same fingerprint: a job sits ``queued`` and no VM is ever
1419
+ created for it, so there is no stuck runner to reap and no error to count.
1420
+
1421
+ The janitor measures the oldest queued job per class every sweep, so this
1422
+ fires when a class's oldest queued job crosses the threshold (20 minutes
1423
+ by default) over its aggregation period, read as a maximum. It also
1424
+ **treats missing data as breaching**: the metric is emitted every sweep,
1425
+ so its absence means the janitor itself has gone silent — itself a failure
1426
+ worth paging on — rather than "nothing queued". A sweep that overruns its
1427
+ Lambda timeout emits no datapoint for that period, so a persistently slow
1428
+ or crashing janitor reads exactly like a silent one and pages: that is the
1429
+ intended "janitor went silent" signal, not a false alarm.
1430
+
1431
+ Because absence pages, the aggregation period must be long enough that the
1432
+ janitor writes at least one datapoint into every period it evaluates. A
1433
+ 5-minute period against a 10-minute ``janitorInterval`` would leave every
1434
+ other period empty and page forever. So the default period is
1435
+ ``max(5 min, 2 × janitorInterval)`` rounded up to a CloudWatch-valid whole
1436
+ minute (two sweeps per period, so a single missed sweep does not trip it):
1437
+ 10 minutes at the default 5-minute interval, 20 minutes at a 10-minute
1438
+ interval. A caller-supplied ``period`` shorter than ``janitorInterval`` is
1439
+ rejected at synth — it would guarantee empty periods and permanent false
1440
+ pages.
1441
+
1442
+ ``oldestQueuedJobSeconds`` is dimensioned per runner class, so this builds
1443
+ one alarm per ``runnerClassLabel`` under an id unique to that label — call it
1444
+ once per class you want watched, in the same scope, without collision.
1445
+
1446
+ Requires ``GithubMicrovmRunnersProps.emitMetrics``, and throws at synth
1447
+ without it. Also throws at synth under PAT auth with org scope, where the
1448
+ queued-job scan cannot enumerate the org's repos and never emits the
1449
+ metric this alarm watches.
1450
+
1451
+ :param scope: -
1452
+ :param runner_class_label: -
1453
+ :param evaluation_periods: Consecutive breaching periods before the alarm fires. Default: 1 (3 for the stuck-launch alarm)
1454
+ :param period: Aggregation period for the metric. Default: Duration.minutes(5)
1455
+ :param threshold: Value at or above which the alarm fires. Default: 1
1456
+
1457
+ :default: threshold 1200 (seconds), 1 evaluation period, period max(5 min, 2× janitorInterval), missing data breaching
1458
+ '''
1459
+ if __debug__:
1460
+ type_hints = cached_type_hints(_typecheckingstub__1979d102d04c227dd18909704493a6adef7296680ab6041ecd483a5a18a5d3b0)
1461
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1462
+ check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1463
+ options = RunnerAlarmOptions(
1464
+ evaluation_periods=evaluation_periods, period=period, threshold=threshold
1465
+ )
1466
+
1467
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Alarm", jsii.invoke(self, "queuedJobAgeAlarm", [scope, runner_class_label, options]))
1468
+
1469
+ @jsii.member(jsii_name="queuedJobs")
1470
+ def queued_jobs(
1471
+ self,
1472
+ runner_class_label: builtins.str,
1473
+ ) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1474
+ '''Janitor per-class gauge: queued jobs this class owned as of the last sweep (see {@link oldestQueuedJobSeconds} for ownership).
1475
+
1476
+ :param runner_class_label: -
1477
+ '''
1478
+ if __debug__:
1479
+ type_hints = cached_type_hints(_typecheckingstub__d38f8ba33b74dc11c22a9ed4e77ba6e24efa39e18f1755889ccf6ebfca51ba3e)
1480
+ check_type(argname="argument runner_class_label", value=runner_class_label, expected_type=type_hints["runner_class_label"])
1481
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "queuedJobs", [runner_class_label]))
1482
+
1483
+ @jsii.member(jsii_name="queuedJobScanTruncated")
1484
+ def queued_job_scan_truncated(self) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1485
+ '''Janitor per-sweep flag: 1 when a sweep hit its GitHub-listing cap and did not scan every queued job, so ``oldestQueuedJobSeconds``/``queuedJobs`` may under-report that sweep.'''
1486
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "queuedJobScanTruncated", []))
1487
+
1331
1488
  @jsii.member(jsii_name="stuckClaimsRelaunched")
1332
1489
  def stuck_claims_relaunched(self) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1333
1490
  '''Janitor sweep count: launches that were claimed but never served, re-launched from the orphaned claim.
@@ -1385,6 +1542,51 @@ class GithubMicrovmRunnersMetrics(
1385
1542
  '''Janitor sweep count: runners that registered with GitHub and then sat idle past ``idleRunnerGraceSeconds``, reaped once a second sweep has seen them the same way.'''
1386
1543
  return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Metric", jsii.invoke(self, "stuckRunnersReaped", []))
1387
1544
 
1545
+ @jsii.member(jsii_name="stuckRunnersReapedAlarm")
1546
+ def stuck_runners_reaped_alarm(
1547
+ self,
1548
+ scope: "_constructs_77d1e7e8.Construct",
1549
+ *,
1550
+ evaluation_periods: typing.Optional[jsii.Number] = None,
1551
+ period: typing.Optional["_aws_cdk_ceddda9d.Duration"] = None,
1552
+ threshold: typing.Optional[jsii.Number] = None,
1553
+ ) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Alarm":
1554
+ '''Alarm when the janitor is reaping stuck runners in volume, the signal a refused runner version leaves.
1555
+
1556
+ A stuck runner is one that registered with
1557
+ GitHub and then sat idle past ``idleRunnerGraceSeconds``, reaped once a
1558
+ second sweep saw it the same way; a healthy runner set reaps the odd one.
1559
+
1560
+ The threshold comes from an incident. On 2026-09-24 GitHub refused a stale
1561
+ runner version, so every launched runner registered and then went nowhere;
1562
+ ``stuckRunnersReaped`` ran 14–28 an hour for about six hours, peaking at
1563
+ 8–10 in a single five-minute sweep, against a month-long baseline that
1564
+ never exceeded 3 in any hour. The three ready-made alarms already on this
1565
+ class stayed OK throughout — nothing else caught it. A sum of 6 or more
1566
+ over one fifteen-minute period sits well above that baseline (≤0.75 per
1567
+ quarter-hour) and well below the incident's rate, so it fires about
1568
+ fifteen minutes into a refusal and stays quiet otherwise; pass
1569
+ ``RunnerAlarmOptions`` to change the threshold, window, or count.
1570
+
1571
+ Requires ``GithubMicrovmRunnersProps.emitMetrics``, and throws at synth
1572
+ without it.
1573
+
1574
+ :param scope: -
1575
+ :param evaluation_periods: Consecutive breaching periods before the alarm fires. Default: 1 (3 for the stuck-launch alarm)
1576
+ :param period: Aggregation period for the metric. Default: Duration.minutes(5)
1577
+ :param threshold: Value at or above which the alarm fires. Default: 1
1578
+
1579
+ :default: threshold 6, 1 evaluation period, 15-minute period
1580
+ '''
1581
+ if __debug__:
1582
+ type_hints = cached_type_hints(_typecheckingstub__6f5c8012e4b0017c22f5d816719e3ba7caf72731c8c17dc898930d5e088e3a0a)
1583
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1584
+ options = RunnerAlarmOptions(
1585
+ evaluation_periods=evaluation_periods, period=period, threshold=threshold
1586
+ )
1587
+
1588
+ return typing.cast("_aws_cdk_aws_cloudwatch_ceddda9d.Alarm", jsii.invoke(self, "stuckRunnersReapedAlarm", [scope, options]))
1589
+
1388
1590
  @jsii.member(jsii_name="suspectsCleared")
1389
1591
  def suspects_cleared(self) -> "_aws_cdk_aws_cloudwatch_ceddda9d.Metric":
1390
1592
  '''Janitor sweep count: VMs an earlier sweep had marked as suspect, cleared because this sweep found them accounted for or working again.'''
@@ -2918,7 +3120,7 @@ class RunnerImage(
2918
3120
  :param additional_os_capabilities: Extra Linux capabilities granted to the MicroVM's operating system. Default: ['ALL']
2919
3121
  :param assets: Extra files and directories to copy into the image.
2920
3122
  :param environment: Extra environment variables baked into the image.
2921
- :param runner_version: ``actions/runner`` release to install. Default: RunnerVersion.latest()
3123
+ :param runner_version: ``actions/runner`` release to install. Default: RunnerVersion.libraryDefault()
2922
3124
  :param setup_commands: Extra ``RUN`` commands, executed in order after packages, assets, and environment variables are laid down.
2923
3125
  :param system_packages: Extra ``dnf`` packages to install alongside the fixed base set.
2924
3126
  :param toolchains: Language runtimes to bake into the hosted tool cache, so ``actions/setup-*`` finds them without downloading anything. An image with none of these is smaller; one toolchain entry is needed per version your workflows ask for. Default: []
@@ -3024,7 +3226,7 @@ class RunnerImageOptions:
3024
3226
  :param additional_os_capabilities: Extra Linux capabilities granted to the MicroVM's operating system. Default: ['ALL']
3025
3227
  :param assets: Extra files and directories to copy into the image.
3026
3228
  :param environment: Extra environment variables baked into the image.
3027
- :param runner_version: ``actions/runner`` release to install. Default: RunnerVersion.latest()
3229
+ :param runner_version: ``actions/runner`` release to install. Default: RunnerVersion.libraryDefault()
3028
3230
  :param setup_commands: Extra ``RUN`` commands, executed in order after packages, assets, and environment variables are laid down.
3029
3231
  :param system_packages: Extra ``dnf`` packages to install alongside the fixed base set.
3030
3232
  :param toolchains: Language runtimes to bake into the hosted tool cache, so ``actions/setup-*`` finds them without downloading anything. An image with none of these is smaller; one toolchain entry is needed per version your workflows ask for. Default: []
@@ -3081,7 +3283,7 @@ class RunnerImageOptions:
3081
3283
  def runner_version(self) -> typing.Optional["RunnerVersion"]:
3082
3284
  '''``actions/runner`` release to install.
3083
3285
 
3084
- :default: RunnerVersion.latest()
3286
+ :default: RunnerVersion.libraryDefault()
3085
3287
  '''
3086
3288
  result = self._values.get("runner_version")
3087
3289
  return typing.cast(typing.Optional["RunnerVersion"], result)
@@ -3487,16 +3689,39 @@ class RunnerVersion(
3487
3689
  @jsii.member(jsii_name="latest")
3488
3690
  @builtins.classmethod
3489
3691
  def latest(cls) -> "RunnerVersion":
3692
+ '''(deprecated) Use the ``actions/runner`` release this library currently pins (``DEFAULT_RUNNER_VERSION``).
3693
+
3694
+ :deprecated:
3695
+
3696
+ returns the library's pinned default, not GitHub's latest
3697
+ release; use ``libraryDefault()`` or ``of()``.
3698
+
3699
+ :stability: deprecated
3700
+
3701
+ Example::
3702
+
3703
+ runner_version = RunnerVersion.latest()
3704
+ '''
3705
+ return typing.cast("RunnerVersion", jsii.sinvoke(cls, "latest", []))
3706
+
3707
+ @jsii.member(jsii_name="libraryDefault")
3708
+ @builtins.classmethod
3709
+ def library_default(cls) -> "RunnerVersion":
3490
3710
  '''Use the ``actions/runner`` release this library currently pins (``DEFAULT_RUNNER_VERSION``).
3491
3711
 
3492
3712
  No version is carried on the instance; the
3493
3713
  image build fills the pinned value in at synth.
3494
3714
 
3715
+ This is the library's pinned default, not GitHub's latest release. The
3716
+ library bumps the pin as releases ship, because GitHub stops queuing jobs
3717
+ to a runner more than 30 days behind the newest release; see "Keeping the
3718
+ runner current" in ``docs/images.md``.
3719
+
3495
3720
  Example::
3496
3721
 
3497
- runner_version = RunnerVersion.latest()
3722
+ runner_version = RunnerVersion.library_default()
3498
3723
  '''
3499
- return typing.cast("RunnerVersion", jsii.sinvoke(cls, "latest", []))
3724
+ return typing.cast("RunnerVersion", jsii.sinvoke(cls, "libraryDefault", []))
3500
3725
 
3501
3726
  @jsii.member(jsii_name="of")
3502
3727
  @builtins.classmethod
@@ -3517,7 +3742,7 @@ class RunnerVersion(
3517
3742
  @builtins.property
3518
3743
  @jsii.member(jsii_name="version")
3519
3744
  def version(self) -> typing.Optional[builtins.str]:
3520
- '''The pinned release, for a version built with ``RunnerVersion.of()``. ``undefined`` for ``RunnerVersion.latest()``.'''
3745
+ '''The pinned release, for a version built with ``RunnerVersion.of()``. ``undefined`` for ``RunnerVersion.libraryDefault()``.'''
3521
3746
  return typing.cast(typing.Optional[builtins.str], jsii.get(self, "version"))
3522
3747
 
3523
3748
 
@@ -3718,6 +3943,8 @@ def _typecheckingstub__8c3f47f3bf65ddc91d8c105e318179909d2860c56e34cc7b699066e3f
3718
3943
  runner_set_id: builtins.str,
3719
3944
  dead_letter_queue: _aws_cdk_aws_sqs_ceddda9d.IQueue,
3720
3945
  emit_metrics: typing.Optional[builtins.bool] = None,
3946
+ janitor_interval: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
3947
+ queued_job_scan_unavailable: typing.Optional[builtins.bool] = None,
3721
3948
  ) -> None:
3722
3949
  """Type checking stubs"""
3723
3950
  pass
@@ -3734,6 +3961,17 @@ def _typecheckingstub__36d476c29eaf47f8fca7a5205fb5caa5a9749233fb462a093763a6a32
3734
3961
  """Type checking stubs"""
3735
3962
  pass
3736
3963
 
3964
+ def _typecheckingstub__766ef83db1daeed0e3e21d670b01373e3a0da9c3eb9f7dc571c6f37a32dd05a6(
3965
+ scope: _constructs_77d1e7e8.Construct,
3966
+ runner_class_label: builtins.str,
3967
+ *,
3968
+ evaluation_periods: typing.Optional[jsii.Number] = None,
3969
+ period: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
3970
+ threshold: typing.Optional[jsii.Number] = None,
3971
+ ) -> None:
3972
+ """Type checking stubs"""
3973
+ pass
3974
+
3737
3975
  def _typecheckingstub__baf385f806ff6b0b2ae70b9d811654097d3297503bd8bdbafe09f5d9ed879629(
3738
3976
  runner_class_label: builtins.str,
3739
3977
  ) -> None:
@@ -3756,6 +3994,12 @@ def _typecheckingstub__aca740a7276ae0a556b6b45300b0252ac7d8074b4dd0ab26c6b38fba7
3756
3994
  """Type checking stubs"""
3757
3995
  pass
3758
3996
 
3997
+ def _typecheckingstub__3707b7071d9a073a162ee86679ac2882d7fddadbd420da462daf135a440aea31(
3998
+ runner_class_label: builtins.str,
3999
+ ) -> None:
4000
+ """Type checking stubs"""
4001
+ pass
4002
+
3759
4003
  def _typecheckingstub__6153c9a068c30f370bb352b26cc502516866238676a7d8139fc2dd0736dff46a(
3760
4004
  runner_class_label: builtins.str,
3761
4005
  ) -> None:
@@ -3780,6 +4024,23 @@ def _typecheckingstub__1ba8a40c62efe6c3a58896ea614244a8e6823dd3c7db51567ffbadd71
3780
4024
  """Type checking stubs"""
3781
4025
  pass
3782
4026
 
4027
+ def _typecheckingstub__1979d102d04c227dd18909704493a6adef7296680ab6041ecd483a5a18a5d3b0(
4028
+ scope: _constructs_77d1e7e8.Construct,
4029
+ runner_class_label: builtins.str,
4030
+ *,
4031
+ evaluation_periods: typing.Optional[jsii.Number] = None,
4032
+ period: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
4033
+ threshold: typing.Optional[jsii.Number] = None,
4034
+ ) -> None:
4035
+ """Type checking stubs"""
4036
+ pass
4037
+
4038
+ def _typecheckingstub__d38f8ba33b74dc11c22a9ed4e77ba6e24efa39e18f1755889ccf6ebfca51ba3e(
4039
+ runner_class_label: builtins.str,
4040
+ ) -> None:
4041
+ """Type checking stubs"""
4042
+ pass
4043
+
3783
4044
  def _typecheckingstub__e1b4b6b8be54f5289f47b9d302cea17d405e67837d60873b6a6536a2a23457e9(
3784
4045
  scope: _constructs_77d1e7e8.Construct,
3785
4046
  *,
@@ -3790,6 +4051,16 @@ def _typecheckingstub__e1b4b6b8be54f5289f47b9d302cea17d405e67837d60873b6a6536a2a
3790
4051
  """Type checking stubs"""
3791
4052
  pass
3792
4053
 
4054
+ def _typecheckingstub__6f5c8012e4b0017c22f5d816719e3ba7caf72731c8c17dc898930d5e088e3a0a(
4055
+ scope: _constructs_77d1e7e8.Construct,
4056
+ *,
4057
+ evaluation_periods: typing.Optional[jsii.Number] = None,
4058
+ period: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
4059
+ threshold: typing.Optional[jsii.Number] = None,
4060
+ ) -> None:
4061
+ """Type checking stubs"""
4062
+ pass
4063
+
3793
4064
  def _typecheckingstub__971f59e7dc4d5b4245765d41b7dcc4075c4dd91870a15df6b9f345ee393cdc61(
3794
4065
  scope: _constructs_77d1e7e8.Construct,
3795
4066
  *,
@@ -19,9 +19,9 @@ import constructs._jsii
19
19
 
20
20
  __jsii_assembly__ = jsii.JSIIAssembly.load(
21
21
  "cdk-github-microvm-runners",
22
- "0.1.7",
22
+ "0.1.8",
23
23
  __name__[0:-6],
24
- "cdk-github-microvm-runners@0.1.7.jsii.tgz",
24
+ "cdk-github-microvm-runners@0.1.8.jsii.tgz",
25
25
  )
26
26
 
27
27
  __all__ = [
@@ -9,9 +9,9 @@ if "JSII_RUNTIME_PACKAGE_CACHE" not in os.environ:
9
9
 
10
10
  __jsii_assembly__ = jsii.JSIIAssembly.load(
11
11
  "cdk-github-microvm-runners",
12
- "0.1.7",
12
+ "0.1.8",
13
13
  "cdk_github_microvm_runners",
14
- "cdk-github-microvm-runners@0.1.7.jsii.tgz",
14
+ "cdk-github-microvm-runners@0.1.8.jsii.tgz",
15
15
  )
16
16
 
17
17
  exit_code = __jsii_assembly__.invokeBinScript(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cdk-github-microvm-runners
3
- Version: 0.1.7
3
+ Version: 0.1.8
4
4
  Summary: CDK construct for running GitHub Actions jobs on AWS Lambda MicroVMs, with one ephemeral runner per job.
5
5
  Home-page: https://runnerset.dev
6
6
  Author: Court Schuett
@@ -11,5 +11,5 @@ src/cdk_github_microvm_runners.egg-info/dependency_links.txt
11
11
  src/cdk_github_microvm_runners.egg-info/requires.txt
12
12
  src/cdk_github_microvm_runners.egg-info/top_level.txt
13
13
  src/cdk_github_microvm_runners/_jsii/__init__.py
14
- src/cdk_github_microvm_runners/_jsii/cdk-github-microvm-runners@0.1.7.jsii.tgz
14
+ src/cdk_github_microvm_runners/_jsii/cdk-github-microvm-runners@0.1.8.jsii.tgz
15
15
  src/cdk_github_microvm_runners/_jsii/bin/cdk-github-microvm-runners