cue.dev/x/githubactions@v0.12.0

Workflow.cue raw

   1package githubactions
   2
   3import (
   4	"list"
   5	"struct"
   6	"strings"
   7)
   8
   9#Workflow: {
  10	@jsonschema(schema="http://json-schema.org/draft-07/schema#")
  11	@jsonschema(id="https://json.schemastore.org/github-workflow.json")
  12	close({
  13		// The name of your workflow. GitHub displays the names of your workflows on
  14		// your repository's actions page. If you omit this field, GitHub sets the name
  15		// to the workflow's filename.
  16		name?: string
  17
  18		// The name of the GitHub event that triggers the workflow. You can provide a
  19		// single event string, array of events, array of event types, or an event
  20		// configuration map that schedules a workflow or restricts the execution of a
  21		// workflow to specific files, tags, or branch changes. For a list of available
  22		// events, see
  23		// https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows.
  24		on!: matchN(1, [
  25			#event,
  26			list.MinItems(1) & [...#event],
  27			close({
  28				// Runs your workflow anytime the branch_protection_rule event occurs. More than
  29				// one activity type triggers this event.
  30				branch_protection_rule?: #eventObject &
  31				(null | bool | number | string | [...] | {
  32					types?: #types & (null | bool | number | string | [..."created" | "edited" | "deleted"] | {...})
  33					...
  34				})
  35
  36				// Runs your workflow anytime the check_run event occurs. More than one activity
  37				// type triggers this event. For information about the REST API, see
  38				// https://developer.github.com/v3/checks/runs.
  39				check_run?: #eventObject &
  40				(null | bool | number | string | [...] | {
  41					types?: #types &
  42					(null |
  43					bool |
  44					number |
  45					string |
  46					[..."created" | "rerequested" | "completed" | "requested_action"] |
  47					{...})
  48					...
  49				})
  50
  51				// Runs your workflow anytime the check_suite event occurs. More than one
  52				// activity type triggers this event. For information about the REST API, see
  53				// https://developer.github.com/v3/checks/suites/.
  54				check_suite?: #eventObject &
  55				(null | bool | number | string | [...] | {
  56					types?: #types &
  57					(null | bool | number | string | [..."completed" | "requested" | "rerequested"] | {...})
  58					...
  59				})
  60
  61				// Runs your workflow anytime someone creates a branch or tag, which triggers
  62				// the create event. For information about the REST API, see
  63				// https://developer.github.com/v3/git/refs/#create-a-reference.
  64				create?: #eventObject
  65
  66				// Runs your workflow anytime someone deletes a branch or tag, which triggers
  67				// the delete event. For information about the REST API, see
  68				// https://developer.github.com/v3/git/refs/#delete-a-reference.
  69				delete?: #eventObject
  70
  71				// Runs your workflow anytime someone creates a deployment, which triggers the
  72				// deployment event. Deployments created with a commit SHA may not have a Git
  73				// ref. For information about the REST API, see
  74				// https://developer.github.com/v3/repos/deployments/.
  75				deployment?: #eventObject
  76
  77				// Runs your workflow anytime a third party provides a deployment status, which
  78				// triggers the deployment_status event. Deployments created with a commit SHA
  79				// may not have a Git ref. For information about the REST API, see
  80				// https://developer.github.com/v3/repos/deployments/#create-a-deployment-status.
  81				deployment_status?: #eventObject
  82
  83				// Runs your workflow anytime the discussion event occurs. More than one
  84				// activity type triggers this event. For information about the GraphQL API,
  85				// see
  86				// https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions
  87				discussion?: #eventObject &
  88				(null | bool | number | string | [...] | {
  89					types?: #types &
  90					(null |
  91					bool |
  92					number |
  93					string |
  94					[
  95						..."created" |
  96							"edited" |
  97							"deleted" |
  98							"transferred" |
  99							"pinned" |
 100							"unpinned" |
 101							"labeled" |
 102							"unlabeled" |
 103							"locked" |
 104							"unlocked" |
 105							"category_changed" |
 106							"answered" |
 107							"unanswered"
 108					] |
 109					{...})
 110					...
 111				})
 112
 113				// Runs your workflow anytime the discussion_comment event occurs. More than one
 114				// activity type triggers this event. For information about the GraphQL API,
 115				// see
 116				// https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions
 117				discussion_comment?: #eventObject &
 118				(null | bool | number | string | [...] | {
 119					types?: #types & (null | bool | number | string | [..."created" | "edited" | "deleted"] | {...})
 120					...
 121				})
 122
 123				// Runs your workflow anytime when someone forks a repository, which triggers
 124				// the fork event. For information about the REST API, see
 125				// https://developer.github.com/v3/repos/forks/#create-a-fork.
 126				fork?: #eventObject
 127
 128				// Runs your workflow when someone creates or updates a Wiki page, which triggers the gollum event.
 129				gollum?: #eventObject
 130
 131				// Runs your workflow anytime the issue_comment event occurs. More than one
 132				// activity type triggers this event. For information about the REST API, see
 133				// https://developer.github.com/v3/issues/comments/.
 134				issue_comment?: #eventObject &
 135				(null | bool | number | string | [...] | {
 136					types?: #types & (null | bool | number | string | [..."created" | "edited" | "deleted"] | {...})
 137					...
 138				})
 139
 140				// Runs your workflow anytime the issues event occurs. More than one activity
 141				// type triggers this event. For information about the REST API, see
 142				// https://developer.github.com/v3/issues.
 143				issues?: #eventObject &
 144				(null | bool | number | string | [...] | {
 145					types?: #types &
 146					(null |
 147					bool |
 148					number |
 149					string |
 150					[
 151						..."opened" |
 152							"edited" |
 153							"deleted" |
 154							"transferred" |
 155							"pinned" |
 156							"unpinned" |
 157							"closed" |
 158							"reopened" |
 159							"assigned" |
 160							"unassigned" |
 161							"labeled" |
 162							"unlabeled" |
 163							"locked" |
 164							"unlocked" |
 165							"milestoned" |
 166							"demilestoned"
 167					] |
 168					{...})
 169					...
 170				})
 171
 172				// Runs your workflow anytime the label event occurs. More than one activity
 173				// type triggers this event. For information about the REST API, see
 174				// https://developer.github.com/v3/issues/labels/.
 175				label?: #eventObject &
 176				(null | bool | number | string | [...] | {
 177					types?: #types & (null | bool | number | string | [..."created" | "edited" | "deleted"] | {...})
 178					...
 179				})
 180
 181				// Runs your workflow when a pull request is added to a merge queue, which adds
 182				// the pull request to a merge group. For information about the merge queue,
 183				// see
 184				// https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request-with-a-merge-queue
 185				// .
 186				merge_group?: #eventObject &
 187				(null | bool | number | string | [...] | {
 188					types?: #types & (null | bool | number | string | [..."checks_requested"] | {...})
 189					...
 190				})
 191
 192				// Runs your workflow anytime the milestone event occurs. More than one activity
 193				// type triggers this event. For information about the REST API, see
 194				// https://developer.github.com/v3/issues/milestones/.
 195				milestone?: #eventObject &
 196				(null | bool | number | string | [...] | {
 197					types?: #types &
 198					(null | bool | number | string | [..."created" | "closed" | "opened" | "edited" | "deleted"] | {...})
 199					...
 200				})
 201
 202				// Runs your workflow anytime someone pushes to a GitHub Pages-enabled branch,
 203				// which triggers the page_build event. For information about the REST API, see
 204				// https://developer.github.com/v3/repos/pages/.
 205				page_build?: #eventObject
 206
 207				// Runs your workflow anytime the project event occurs. More than one activity
 208				// type triggers this event. For information about the REST API, see
 209				// https://developer.github.com/v3/projects/.
 210				project?: #eventObject &
 211				(null | bool | number | string | [...] | {
 212					types?: #types &
 213					(null |
 214					bool |
 215					number |
 216					string |
 217					[..."created" | "updated" | "closed" | "reopened" | "edited" | "deleted"] |
 218					{...})
 219					...
 220				})
 221
 222				// Runs your workflow anytime the project_card event occurs. More than one
 223				// activity type triggers this event. For information about the REST API, see
 224				// https://developer.github.com/v3/projects/cards.
 225				project_card?: #eventObject &
 226				(null | bool | number | string | [...] | {
 227					types?: #types &
 228					(null |
 229					bool |
 230					number |
 231					string |
 232					[..."created" | "moved" | "converted" | "edited" | "deleted"] |
 233					{...})
 234					...
 235				})
 236
 237				// Runs your workflow anytime the project_column event occurs. More than one
 238				// activity type triggers this event. For information about the REST API, see
 239				// https://developer.github.com/v3/projects/columns.
 240				project_column?: #eventObject &
 241				(null | bool | number | string | [...] | {
 242					types?: #types &
 243					(null | bool | number | string | [..."created" | "updated" | "moved" | "deleted"] | {...})
 244					...
 245				})
 246
 247				// Runs your workflow anytime someone makes a private repository public, which
 248				// triggers the public event. For information about the REST API, see
 249				// https://developer.github.com/v3/repos/#edit.
 250				public?: #eventObject
 251
 252				// Runs your workflow anytime the pull_request event occurs. More than one
 253				// activity type triggers this event. For information about the REST API, see
 254				// https://developer.github.com/v3/pulls.
 255				// Note: Workflows do not run on private base repositories when you open a pull
 256				// request from a forked repository.
 257				// When you create a pull request from a forked repository to the base
 258				// repository, GitHub sends the pull_request event to the base repository and
 259				// no pull request events occur on the forked repository.
 260				// Workflows don't run on forked repositories by default. You must enable GitHub
 261				// Actions in the Actions tab of the forked repository.
 262				// The permissions for the GITHUB_TOKEN in forked repositories is read-only. For
 263				// more information about the GITHUB_TOKEN, see
 264				// https://help.github.com/en/articles/virtual-environments-for-github-actions.
 265				pull_request?: matchN(1, [
 266					null,
 267					matchN(4, [
 268						close({
 269							types?: #types &
 270							(null |
 271							bool |
 272							number |
 273							string |
 274							[
 275								..."assigned" |
 276									"unassigned" |
 277									"labeled" |
 278									"unlabeled" |
 279									"opened" |
 280									"edited" |
 281									"closed" |
 282									"reopened" |
 283									"synchronize" |
 284									"converted_to_draft" |
 285									"ready_for_review" |
 286									"locked" |
 287									"unlocked" |
 288									"milestoned" |
 289									"demilestoned" |
 290									"review_requested" |
 291									"review_request_removed" |
 292									"auto_merge_enabled" |
 293									"auto_merge_disabled" |
 294									"enqueued" |
 295									"dequeued"
 296							] |
 297							{...})
 298							branches?:          #branch
 299							"branches-ignore"?: #branch
 300							tags?:              #branch
 301							"tags-ignore"?:     #branch
 302							paths?:             #path
 303							"paths-ignore"?:    #path
 304						}),
 305						matchN(0, [null | bool | number | string | [...] | {
 306							branches!:          _
 307							"branches-ignore"!: _
 308							...
 309						}]) & {...},
 310						matchN(0, [null | bool | number | string | [...] | {
 311							tags!:          _
 312							"tags-ignore"!: _
 313							...
 314						}]) & {...},
 315						matchN(0, [null | bool | number | string | [...] | {
 316							paths!:          _
 317							"paths-ignore"!: _
 318							...
 319						}]) & {...}
 320					])
 321				])
 322
 323				// Runs your workflow anytime the pull_request_review event occurs. More than
 324				// one activity type triggers this event. For information about the REST API,
 325				// see https://developer.github.com/v3/pulls/reviews.
 326				// Note: Workflows do not run on private base repositories when you open a pull
 327				// request from a forked repository.
 328				// When you create a pull request from a forked repository to the base
 329				// repository, GitHub sends the pull_request event to the base repository and
 330				// no pull request events occur on the forked repository.
 331				// Workflows don't run on forked repositories by default. You must enable GitHub
 332				// Actions in the Actions tab of the forked repository.
 333				// The permissions for the GITHUB_TOKEN in forked repositories is read-only. For
 334				// more information about the GITHUB_TOKEN, see
 335				// https://help.github.com/en/articles/virtual-environments-for-github-actions.
 336				pull_request_review?: #eventObject &
 337				(null | bool | number | string | [...] | {
 338					types?: #types & (null | bool | number | string | [..."submitted" | "edited" | "dismissed"] | {...})
 339					...
 340				})
 341
 342				// Runs your workflow anytime a comment on a pull request's unified diff is
 343				// modified, which triggers the pull_request_review_comment event. More than
 344				// one activity type triggers this event. For information about the REST API,
 345				// see https://developer.github.com/v3/pulls/comments.
 346				// Note: Workflows do not run on private base repositories when you open a pull
 347				// request from a forked repository.
 348				// When you create a pull request from a forked repository to the base
 349				// repository, GitHub sends the pull_request event to the base repository and
 350				// no pull request events occur on the forked repository.
 351				// Workflows don't run on forked repositories by default. You must enable GitHub
 352				// Actions in the Actions tab of the forked repository.
 353				// The permissions for the GITHUB_TOKEN in forked repositories is read-only. For
 354				// more information about the GITHUB_TOKEN, see
 355				// https://help.github.com/en/articles/virtual-environments-for-github-actions.
 356				pull_request_review_comment?: #eventObject &
 357				(null | bool | number | string | [...] | {
 358					types?: #types & (null | bool | number | string | [..."created" | "edited" | "deleted"] | {...})
 359					...
 360				})
 361
 362				// This event is similar to pull_request, except that it runs in the context of
 363				// the base repository of the pull request, rather than in the merge commit.
 364				// This means that you can more safely make your secrets available to the
 365				// workflows triggered by the pull request, because only workflows defined in
 366				// the commit on the base repository are run. For example, this event allows
 367				// you to create workflows that label and comment on pull requests, based on
 368				// the contents of the event payload.
 369				pull_request_target?: matchN(1, [
 370					null,
 371					matchN(4, [
 372						close({
 373							types?: #types &
 374							(null |
 375							bool |
 376							number |
 377							string |
 378							[
 379								..."assigned" |
 380									"unassigned" |
 381									"labeled" |
 382									"unlabeled" |
 383									"opened" |
 384									"edited" |
 385									"closed" |
 386									"reopened" |
 387									"synchronize" |
 388									"converted_to_draft" |
 389									"ready_for_review" |
 390									"locked" |
 391									"unlocked" |
 392									"review_requested" |
 393									"review_request_removed" |
 394									"auto_merge_enabled" |
 395									"auto_merge_disabled"
 396							] |
 397							{...})
 398							branches?:          #branch
 399							"branches-ignore"?: #branch
 400							tags?:              #branch
 401							"tags-ignore"?:     #branch
 402							paths?:             #path
 403							"paths-ignore"?:    #path
 404						}),
 405						matchN(0, [null | bool | number | string | [...] | {
 406							branches!:          _
 407							"branches-ignore"!: _
 408							...
 409						}]) & {...},
 410						matchN(0, [null | bool | number | string | [...] | {
 411							tags!:          _
 412							"tags-ignore"!: _
 413							...
 414						}]) & {...},
 415						matchN(0, [null | bool | number | string | [...] | {
 416							paths!:          _
 417							"paths-ignore"!: _
 418							...
 419						}]) & {...}
 420					])
 421				])
 422
 423				// Runs your workflow when someone pushes to a repository branch, which triggers the push event.
 424				// Note: The webhook payload available to GitHub Actions does not include the
 425				// added, removed, and modified attributes in the commit object. You can
 426				// retrieve the full commit object using the REST API. For more information,
 427				// see https://developer.github.com/v3/repos/commits/#get-a-single-commit.
 428				push?: matchN(1, [
 429					null,
 430					matchN(4, [
 431						close({
 432							branches?:          #branch
 433							"branches-ignore"?: #branch
 434							tags?:              #branch
 435							"tags-ignore"?:     #branch
 436							paths?:             #path
 437							"paths-ignore"?:    #path
 438						}),
 439						matchN(0, [null | bool | number | string | [...] | {
 440							branches!:          _
 441							"branches-ignore"!: _
 442							...
 443						}]) & {...},
 444						matchN(0, [null | bool | number | string | [...] | {
 445							tags!:          _
 446							"tags-ignore"!: _
 447							...
 448						}]) & {...},
 449						matchN(0, [null | bool | number | string | [...] | {
 450							paths!:          _
 451							"paths-ignore"!: _
 452							...
 453						}]) & {...}
 454					])
 455				])
 456
 457				// Runs your workflow anytime a package is published or updated. For more
 458				// information, see
 459				// https://help.github.com/en/github/managing-packages-with-github-packages.
 460				registry_package?: #eventObject &
 461				(null | bool | number | string | [...] | {
 462					types?: #types & (null | bool | number | string | [..."published" | "updated"] | {...})
 463					...
 464				})
 465
 466				// Runs your workflow anytime the release event occurs. More than one activity
 467				// type triggers this event. For information about the REST API, see
 468				// https://developer.github.com/v3/repos/releases/ in the GitHub Developer
 469				// documentation.
 470				release?: #eventObject &
 471				(null | bool | number | string | [...] | {
 472					types?: #types &
 473					(null |
 474					bool |
 475					number |
 476					string |
 477					[..."published" | "unpublished" | "created" | "edited" | "deleted" | "prereleased" | "released"] |
 478					{...})
 479					...
 480				})
 481
 482				// Runs your workflow anytime the status of a Git commit changes, which triggers
 483				// the status event. For information about the REST API, see
 484				// https://developer.github.com/v3/repos/statuses/.
 485				status?: #eventObject
 486
 487				// Runs your workflow anytime the watch event occurs. More than one activity
 488				// type triggers this event. For information about the REST API, see
 489				// https://developer.github.com/v3/activity/starring/.
 490				watch?: #eventObject
 491
 492				// Allows workflows to be reused by other workflows.
 493				workflow_call?: null | bool | number | string | [...] | {
 494					// When using the workflow_call keyword, you can optionally specify inputs that
 495					// are passed to the called workflow from the caller workflow.
 496					inputs?: close({
 497
 498						{
 499							[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: close({
 500								// A string description of the input parameter.
 501								description?: string
 502
 503								// A boolean to indicate whether the action requires the input parameter. Set to
 504								// true when the parameter is required.
 505								required?: bool
 506
 507								// Required if input is defined for the on.workflow_call keyword. The value of
 508								// this parameter is a string specifying the data type of the input. This must
 509								// be one of: boolean, number, or string.
 510								type!: "boolean" | "number" | "string"
 511
 512								// The default value is used when an input parameter isn't specified in a workflow file.
 513								default?: bool | number | string
 514							})
 515						}})
 516
 517					// When using the workflow_call keyword, you can optionally specify inputs that
 518					// are passed to the called workflow from the caller workflow.
 519					outputs?: close({
 520
 521						{
 522							[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: close({
 523								// A string description of the output parameter.
 524								description?: string
 525
 526								// The value that the output parameter will be mapped to. You can set this to a
 527								// string or an expression with context. For example, you can use the steps
 528								// context to set the value of an output to the output value of a step.
 529								value!: string
 530							})
 531						}})
 532
 533					// A map of the secrets that can be used in the called workflow. Within the
 534					// called workflow, you can use the secrets context to refer to a secret.
 535					secrets?: null |
 536					bool |
 537					number |
 538					string |
 539					[...] |
 540					close({
 541
 542						{
 543							[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: null |
 544							bool |
 545							number |
 546							string |
 547							[...] |
 548							close({
 549								// A string description of the secret parameter.
 550								description?: string
 551
 552								// A boolean specifying whether the secret must be supplied.
 553								required?: bool
 554							})
 555						}})
 556					...
 557				}
 558
 559				// You can now create workflows that are manually triggered with the new
 560				// workflow_dispatch event. You will then see a 'Run workflow' button on the
 561				// Actions tab, enabling you to easily trigger a run.
 562				workflow_dispatch?: null |
 563				bool |
 564				number |
 565				string |
 566				[...] |
 567				close({
 568					// Input parameters allow you to specify data that the action expects to use
 569					// during runtime. GitHub stores input parameters as environment variables.
 570					// Input ids with uppercase letters are converted to lowercase during runtime.
 571					// We recommended using lowercase input ids.
 572					inputs?: close({
 573
 574						{[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: #workflowDispatchInput}})
 575				})
 576
 577				// This event occurs when a workflow run is requested or completed, and allows
 578				// you to execute a workflow based on the finished result of another workflow.
 579				// For example, if your pull_request workflow generates build artifacts, you
 580				// can create a new workflow that uses workflow_run to analyze the results and
 581				// add a comment to the original pull request.
 582				workflow_run?: #eventObject &
 583				(null | bool | number | string | [...] | {
 584					types?: #types &
 585					(null | bool | number | string | [..."requested" | "completed" | "in_progress"] | {...})
 586					workflows?: list.MinItems(1) & [...string]
 587
 588					{[=~"^branches(-ignore)?$"]: _}
 589					...
 590				})
 591
 592				// You can use the GitHub API to trigger a webhook event called
 593				// repository_dispatch when you want to trigger a workflow for activity that
 594				// happens outside of GitHub. For more information, see
 595				// https://developer.github.com/v3/repos/#create-a-repository-dispatch-event.
 596				// To trigger the custom repository_dispatch webhook event, you must send a POST
 597				// request to a GitHub API endpoint and provide an event_type name to describe
 598				// the activity type. To trigger a workflow run, you must also configure your
 599				// workflow to use the repository_dispatch event.
 600				repository_dispatch?: #eventObject
 601
 602				// You can schedule a workflow to run at specific UTC times using POSIX cron
 603				// syntax
 604				// (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html#tag_20_25_07).
 605				// You can optionally specify a timezone using an IANA timezone string
 606				// (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for
 607				// timezone-aware scheduling. Scheduled workflows run on the latest commit on
 608				// the default or base branch. The shortest interval you can run scheduled
 609				// workflows is once every 5 minutes.
 610				// Note: GitHub Actions does not support the non-standard syntax @yearly,
 611				// @monthly, @weekly, @daily, @hourly, and @reboot.
 612				// You can use crontab guru (https://crontab.guru/) to help generate your cron
 613				// syntax and confirm what time it will run. To help you get started, there is
 614				// also a list of crontab guru examples (https://crontab.guru/examples.html).
 615				schedule?: list.MinItems(1) & [...close({
 616					// A cron expression that represents a schedule. A scheduled workflow will run
 617					// at most once every 5 minutes.
 618					cron!: string
 619
 620					// A string that represents the time zone a scheduled workflow will run relative
 621					// to in IANA format (e.g. 'America/New_York' or 'Europe/London'). If omitted,
 622					// the workflow will run relative to midnight UTC.
 623					timezone?: string
 624				})]
 625			})
 626		])
 627		env?:      #env
 628		defaults?: #defaults
 629
 630		// Concurrency ensures that only a single job or workflow using the same
 631		// concurrency group will run at a time. A concurrency group can be any string
 632		// or expression. The expression can use any context except for the secrets
 633		// context.
 634		// You can also specify concurrency at the workflow level.
 635		// When a concurrent job or workflow is queued, if another job or workflow using
 636		// the same concurrency group in the repository is in progress, the queued job
 637		// or workflow will be pending. By default any previously pending job or
 638		// workflow in the concurrency group will be canceled; this behavior can be
 639		// changed with `queue`. To also cancel any currently running job or workflow
 640		// in the same concurrency group, specify cancel-in-progress: true.
 641		concurrency?: matchN(1, [string, #concurrency])
 642
 643		// A workflow run is made up of one or more jobs. Jobs run in parallel by
 644		// default. To run jobs sequentially, you can define dependencies on other jobs
 645		// using the jobs.<job_id>.needs keyword.
 646		// Each job runs in a fresh instance of the virtual environment specified by runs-on.
 647		// You can run an unlimited number of jobs as long as you are within the
 648		// workflow usage limits. For more information, see
 649		// https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits.
 650		jobs!: struct.MinFields(1) & close({
 651
 652			{[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: matchN(1, [#normalJob, #reusableWorkflowCallJob])}})
 653
 654		// The name for workflow runs generated from the workflow. GitHub displays the
 655		// workflow run name in the list of workflow runs on your repository's
 656		// 'Actions' tab.
 657		"run-name"?:  string
 658		permissions?: #permissions
 659	})
 660
 661	#: "permissions-event": close({
 662		actions?:               #."permissions-level"
 663		"artifact-metadata"?:   #."permissions-level"
 664		attestations?:          #."permissions-level"
 665		checks?:                #."permissions-level"
 666		"code-quality"?:        #."permissions-level"
 667		contents?:              #."permissions-level"
 668		deployments?:           #."permissions-level"
 669		discussions?:           #."permissions-level"
 670		"id-token"?:            #."permissions-level"
 671		issues?:                #."permissions-level"
 672		models?:                "read" | "none"
 673		packages?:              #."permissions-level"
 674		pages?:                 #."permissions-level"
 675		"pull-requests"?:       #."permissions-level"
 676		"repository-projects"?: #."permissions-level"
 677		"security-events"?:     #."permissions-level"
 678		statuses?:              #."permissions-level"
 679	})
 680
 681	#: "permissions-level": "read" | "write" | "none"
 682
 683	// Using the working-directory keyword, you can specify the working directory of
 684	// where to run the command.
 685	#: "working-directory": string
 686
 687	#architecture: "ARM32" | "x64" | "x86"
 688
 689	#branch: #globs
 690
 691	#concurrency: close({
 692		// When a concurrent job or workflow is queued, if another job or workflow using
 693		// the same concurrency group in the repository is in progress, the queued job
 694		// or workflow will be pending. By default any previously pending job or
 695		// workflow in the concurrency group will be canceled; this behavior can be
 696		// changed with `queue`.
 697		group!: string
 698
 699		// To cancel any currently running job or workflow in the same concurrency
 700		// group, specify cancel-in-progress: true.
 701		"cancel-in-progress"?: matchN(1, [bool, #expressionSyntax])
 702
 703		// Controls how pending jobs or workflow runs are queued within a concurrency
 704		// group. With the default `single`, at most one run can be pending —
 705		// additional pending runs cancel the previous one. With `max`, up to 100 runs
 706		// can be pending and are processed in FIFO order. The combination of `queue:
 707		// max` and `cancel-in-progress: true` is not allowed.
 708		queue?: "single" | "max"
 709	})
 710
 711	#configuration: matchN(1, [string, number, bool, {[string]: #configuration}, [...#configuration]])
 712
 713	#defaults: struct.MinFields(1) & close({
 714		run?: struct.MinFields(1) & close({
 715			shell?:               #shell
 716			"working-directory"?: #."working-directory"
 717		})
 718	})
 719
 720	// To set custom environment variables, you need to specify the variables in the
 721	// workflow file. You can define environment variables for a step, job, or
 722	// entire workflow using the jobs.<job_id>.steps[*].env, jobs.<job_id>.env, and
 723	// env keywords. For more information, see
 724	// https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsenv
 725	#env: matchN(1, [{[string]: bool | number | string}, #stringContainingExpressionSyntax])
 726
 727	// The environment that the job references
 728	#environment: close({
 729		// The name of the environment configured in the repo.
 730		name!: string
 731
 732		// A deployment URL
 733		url?: string
 734
 735		// Whether to create a deployment for this job. Setting to false lets the job
 736		// use environment secrets and variables without creating a deployment record.
 737		// Wait timers and required reviewers still apply.
 738		deployment?: matchN(1, [bool, #expressionSyntax])
 739	})
 740
 741	#event: "branch_protection_rule" |
 742		"check_run" |
 743		"check_suite" |
 744		"create" |
 745		"delete" |
 746		"deployment" |
 747		"deployment_status" |
 748		"discussion" |
 749		"discussion_comment" |
 750		"fork" |
 751		"gollum" |
 752		"issue_comment" |
 753		"issues" |
 754		"label" |
 755		"merge_group" |
 756		"milestone" |
 757		"page_build" |
 758		"project" |
 759		"project_card" |
 760		"project_column" |
 761		"public" |
 762		"pull_request" |
 763		"pull_request_review" |
 764		"pull_request_review_comment" |
 765		"pull_request_target" |
 766		"push" |
 767		"registry_package" |
 768		"release" |
 769		"status" |
 770		"watch" |
 771		"workflow_call" |
 772		"workflow_dispatch" |
 773		"workflow_run" |
 774		"repository_dispatch"
 775
 776	#eventObject: null | {...}
 777
 778	#expressionSyntax: =~"""
 779		^\\$\\{\\{(.|[\r
 780		])*\\}\\}$
 781		"""
 782
 783	#globs: list.MinItems(1) & [...strings.MinRunes(1)]
 784
 785	#jobContainer: close({
 786		// The Docker image to use as the container to run the action. The value can be
 787		// the Docker Hub image name or a registry name.
 788		image!: string
 789
 790		// If the image's container registry requires authentication to pull the image,
 791		// you can use credentials to set a map of the username and password. The
 792		// credentials are the same values that you would provide to the `docker login`
 793		// command.
 794		credentials?: {
 795			username?: string
 796			password?: string
 797			...
 798		}
 799		env?: #env
 800
 801		// Sets an array of ports to expose on the container.
 802		ports?: list.MinItems(1) & [...number | string]
 803
 804		// Sets an array of volumes for the container to use. You can use volumes to
 805		// share data between services or other steps in a job. You can specify named
 806		// Docker volumes, anonymous Docker volumes, or bind mounts on the host.
 807		// To specify a volume, you specify the source and destination path: <source>:<destinationPath>
 808		// The <source> is a volume name or an absolute path on the host machine, and
 809		// <destinationPath> is an absolute path in the container.
 810		volumes?: list.MinItems(1) & [...string]
 811
 812		// Additional Docker container resource options. For a list of options, see
 813		// https://docs.docker.com/engine/reference/commandline/create/#options.
 814		options?: string
 815	})
 816
 817	// Identifies any jobs that must complete successfully before this job will run.
 818	// It can be a string or array of strings. If a job fails, all jobs that need
 819	// it are skipped unless the jobs use a conditional statement that causes the
 820	// job to continue.
 821	#jobNeeds: matchN(1, [list.MinItems(1) & [...#name], #name])
 822
 823	#machine: "linux" | "macos" | "windows"
 824
 825	// A build matrix is a set of different configurations of the virtual
 826	// environment. For example you might run a job against more than one supported
 827	// version of a language, operating system, or tool. Each configuration is a
 828	// copy of the job that runs and reports a status.
 829	// You can specify a matrix by supplying an array for the configuration options.
 830	// For example, if the GitHub virtual environment supports Node.js versions 6,
 831	// 8, and 10 you could specify an array of those versions in the matrix.
 832	// When you define a matrix of operating systems, you must set the required
 833	// runs-on keyword to the operating system of the current job, rather than
 834	// hard-coding the operating system name. To access the operating system name,
 835	// you can use the matrix.os context parameter to set runs-on. For more
 836	// information, see
 837	// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
 838	#matrix: matchN(1, [
 839		struct.MinFields(1) & {
 840			{[=~"^(in|ex)clude$"]: matchN(1, [#expressionSyntax, list.MinItems(1) & [...{[string]: #configuration}]])}
 841			{[!~"^(in|ex)clude$"]: matchN(1, [list.MinItems(1) & [...#configuration], #expressionSyntax])}
 842		},
 843		#expressionSyntax
 844	])
 845
 846	#name: =~"^[_a-zA-Z][a-zA-Z0-9_-]*$"
 847
 848	// Each job must have an id to associate with the job. The key job_id is a
 849	// string and its value is a map of the job's configuration data. You must
 850	// replace <job_id> with a string that is unique to the jobs object. The
 851	// <job_id> must start with a letter or _ and contain only alphanumeric
 852	// characters, -, or _.
 853	#normalJob: close({
 854		// The name of the job displayed on GitHub.
 855		name?:        string
 856		needs?:       #jobNeeds
 857		snapshot?:    #snapshot
 858		permissions?: #permissions
 859
 860		// The type of machine to run the job on. The machine can be either a
 861		// GitHub-hosted runner, or a self-hosted runner.
 862		"runs-on"!: matchN(>=1, [
 863			string,
 864			[string, ...string] & [...],
 865			{
 866				group?:  string
 867				labels?: matchN(1, [string, [...string]])
 868				...
 869			},
 870			#stringContainingExpressionSyntax,
 871			#expressionSyntax
 872		])
 873
 874		// The environment that the job references.
 875		environment?: matchN(1, [string, #environment])
 876
 877		// A map of outputs for a job. Job outputs are available to all downstream jobs
 878		// that depend on this job.
 879		outputs?:  struct.MinFields(1) & {[string]: string}
 880		env?:      #env
 881		defaults?: #defaults
 882
 883		// You can use the if conditional to prevent a job from running unless a
 884		// condition is met. You can use any supported context and expression to create
 885		// a conditional.
 886		// Expressions in an if conditional do not require the ${{ }} syntax. For more
 887		// information, see
 888		// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
 889		if?: bool | number | string
 890
 891		// A job contains a sequence of tasks called steps. Steps can run commands, run
 892		// setup tasks, or run an action in your repository, a public repository, or an
 893		// action published in a Docker registry. Not all steps run actions, but all
 894		// actions run as a step. Each step runs in its own process in the virtual
 895		// environment and has access to the workspace and filesystem. Because steps
 896		// run in their own process, changes to environment variables are not preserved
 897		// between steps. GitHub provides built-in steps to set up and complete a job.
 898		// Must contain either `uses` or `run`
 899		steps?: list.MinItems(1) & [...#step]
 900
 901		// The maximum number of minutes to let a workflow run before GitHub
 902		// automatically cancels it. Default: 360
 903		"timeout-minutes"?: matchN(1, [number, #expressionSyntax])
 904
 905		// A strategy creates a build matrix for your jobs. You can define different
 906		// variations of an environment to run each job in.
 907		strategy?: close({
 908			matrix!: #matrix
 909
 910			// When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true
 911			"fail-fast"?: bool | string
 912
 913			// The maximum number of jobs that can run simultaneously when using a matrix
 914			// job strategy. By default, GitHub will maximize the number of jobs run in
 915			// parallel depending on the available runners on GitHub-hosted virtual
 916			// machines.
 917			"max-parallel"?: number | string
 918		})
 919
 920		// Prevents a workflow run from failing when a job fails. Set to true to allow a
 921		// workflow run to pass when this job fails.
 922		"continue-on-error"?: matchN(1, [bool, #expressionSyntax])
 923
 924		// A container to run any steps in a job that don't already specify a container.
 925		// If you have steps that use both script and container actions, the container
 926		// actions will run as sibling containers on the same network with the same
 927		// volume mounts.
 928		// If you do not set a container, all steps will run directly on the host
 929		// specified by runs-on unless a step refers to an action configured to run in
 930		// a container.
 931		container?: matchN(1, [string, #jobContainer])
 932
 933		// Additional containers to host services for a job in a workflow. These are
 934		// useful for creating databases or cache services like redis. The runner on
 935		// the virtual machine will automatically create a network and manage the life
 936		// cycle of the service containers.
 937		// When you use a service container for a job or your step uses container
 938		// actions, you don't need to set port information to access the service.
 939		// Docker automatically exposes all ports between containers on the same
 940		// network.
 941		// When both the job and the action run in a container, you can directly
 942		// reference the container by its hostname. The hostname is automatically
 943		// mapped to the service name.
 944		// When a step does not use a container action, you must access the service
 945		// using localhost and bind the ports.
 946		services?: [string]: #serviceContainer
 947
 948		// Concurrency ensures that only a single job or workflow using the same
 949		// concurrency group will run at a time. A concurrency group can be any string
 950		// or expression. The expression can use any context except for the secrets
 951		// context.
 952		// You can also specify concurrency at the workflow level.
 953		// When a concurrent job or workflow is queued, if another job or workflow using
 954		// the same concurrency group in the repository is in progress, the queued job
 955		// or workflow will be pending. By default any previously pending job or
 956		// workflow in the concurrency group will be canceled; this behavior can be
 957		// changed with `queue`. To also cancel any currently running job or workflow
 958		// in the same concurrency group, specify cancel-in-progress: true.
 959		concurrency?: matchN(1, [string, #concurrency])
 960	})
 961
 962	#path: #globs
 963
 964	// You can modify the default permissions granted to the GITHUB_TOKEN, adding or
 965	// removing access as required, so that you only allow the minimum required
 966	// access.
 967	#permissions: matchN(1, ["read-all" | "write-all", #."permissions-event"])
 968
 969	// Each job must have an id to associate with the job. The key job_id is a
 970	// string and its value is a map of the job's configuration data. You must
 971	// replace <job_id> with a string that is unique to the jobs object. The
 972	// <job_id> must start with a letter or _ and contain only alphanumeric
 973	// characters, -, or _.
 974	#reusableWorkflowCallJob: close({
 975		// The name of the job displayed on GitHub.
 976		name?:        string
 977		needs?:       #jobNeeds
 978		permissions?: #permissions
 979
 980		// You can use the if conditional to prevent a job from running unless a
 981		// condition is met. You can use any supported context and expression to create
 982		// a conditional.
 983		// Expressions in an if conditional do not require the ${{ }} syntax. For more
 984		// information, see
 985		// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
 986		if?: bool | number | string
 987
 988		// The location and version of a reusable workflow file to run as a job, of the
 989		// form './{path/to}/{localfile}.yml' or
 990		// '{owner}/{repo}/{path}/{filename}@{ref}'. {ref} can be a SHA, a release tag,
 991		// or a branch name. Using the commit SHA is the safest for stability and
 992		// security.
 993		uses!: =~"^(.+\\/)+(.+)\\.(ya?ml)(@.+)?$"
 994		with?: #env
 995
 996		// When a job is used to call a reusable workflow, you can use 'secrets' to
 997		// provide a map of secrets that are passed to the called workflow. Any secrets
 998		// that you pass must match the names defined in the called workflow.
 999		secrets?: matchN(1, [#env, "inherit"])
1000
1001		// A strategy creates a build matrix for your jobs. You can define different
1002		// variations of an environment to run each job in.
1003		strategy?: close({
1004			matrix!: #matrix
1005
1006			// When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true
1007			"fail-fast"?: bool | string
1008
1009			// The maximum number of jobs that can run simultaneously when using a matrix
1010			// job strategy. By default, GitHub will maximize the number of jobs run in
1011			// parallel depending on the available runners on GitHub-hosted virtual
1012			// machines.
1013			"max-parallel"?: number | string
1014		})
1015
1016		// Concurrency ensures that only a single job or workflow using the same
1017		// concurrency group will run at a time. A concurrency group can be any string
1018		// or expression. The expression can use any context except for the secrets
1019		// context.
1020		// You can also specify concurrency at the workflow level.
1021		// When a concurrent job or workflow is queued, if another job or workflow using
1022		// the same concurrency group in the repository is in progress, the queued job
1023		// or workflow will be pending. By default any previously pending job or
1024		// workflow in the concurrency group will be canceled; this behavior can be
1025		// changed with `queue`. To also cancel any currently running job or workflow
1026		// in the same concurrency group, specify cancel-in-progress: true.
1027		concurrency?: matchN(1, [string, #concurrency])
1028	})
1029
1030	#serviceContainer: close({
1031		// The Docker image to use as the service container to run the action. The value
1032		// can be the Docker Hub image name or a registry name.
1033		image!: string
1034
1035		// If the image's container registry requires authentication to pull the image,
1036		// you can use credentials to set a map of the username and password. The
1037		// credentials are the same values that you would provide to the `docker login`
1038		// command.
1039		credentials?: {
1040			username?: string
1041			password?: string
1042			...
1043		}
1044		env?: #env
1045
1046		// Sets an array of ports to expose on the service container.
1047		ports?: list.MinItems(1) & [...number | string]
1048
1049		// Sets an array of volumes for the service container to use. You can use
1050		// volumes to share data between services or other steps in a job. You can
1051		// specify named Docker volumes, anonymous Docker volumes, or bind mounts on
1052		// the host.
1053		// To specify a volume, you specify the source and destination path: <source>:<destinationPath>
1054		// The <source> is a volume name or an absolute path on the host machine, and
1055		// <destinationPath> is an absolute path in the container.
1056		volumes?: list.MinItems(1) & [...string]
1057
1058		// Additional Docker container resource options. For a list of options, see
1059		// https://docs.docker.com/engine/reference/commandline/create/#options.
1060		options?: string
1061
1062		// Overrides the Docker image's default command (`CMD`). The value is passed as
1063		// arguments after the image name in the `docker create` command. If you also
1064		// specify `entrypoint`, `command` provides the arguments to that entrypoint.
1065		command?: string
1066
1067		// Overrides the Docker image's default `ENTRYPOINT`. The value is a single
1068		// string defining the executable to run. Use this when you need to replace the
1069		// image's entrypoint entirely. You can combine `entrypoint` with `command` to
1070		// pass arguments to the custom entrypoint.
1071		entrypoint?: string
1072	})
1073
1074	// You can override the default shell settings in the runner's operating system
1075	// using the shell keyword. You can use built-in shell keywords, or you can
1076	// define a custom set of shell options.
1077	#shell: matchN(>=1, [string, "bash" | "pwsh" | "python" | "sh" | "cmd" | "powershell"])
1078
1079	// You can use `jobs.<job_id>.snapshot` to generate a custom image.
1080	// Add the snapshot keyword to the job, using either the string syntax or
1081	// mapping syntax as shown in
1082	// https://docs.github.com/en/actions/how-tos/manage-runners/larger-runners/use-custom-images#generating-a-custom-image.
1083	// Each job that includes the snapshot keyword creates a separate image. To
1084	// generate only one image or image version, include all workflow steps in a
1085	// single job. Each successful run of a job that includes the snapshot keyword
1086	// creates a new version of that image.
1087	// For more information, see
1088	// https://docs.github.com/en/actions/how-tos/manage-runners/larger-runners/use-custom-images.
1089	#snapshot: matchN(1, [
1090		string,
1091		close({
1092			"image-name"!: string
1093			version?:      =~"^\\d+(\\.\\d+|\\*)?$"
1094		})
1095	])
1096
1097	#step: matchN(1, [{
1098		uses!: _
1099		...
1100	}, {
1101		run!: _
1102		...
1103	}, {
1104		wait!: _
1105		...
1106	}, {
1107		"wait-all"!: _
1108		...
1109	}, {
1110		cancel!: _
1111		...
1112	}, {
1113		parallel!: _
1114		...
1115	}]) & close({
1116		_t0="working-directory"?: _
1117		if _t0 != _|_ {
1118			run!: _
1119		}
1120		shell?: _
1121		if shell != _|_ {
1122			run!: _
1123		}
1124		{}
1125
1126		// A unique identifier for the step. You can use the id to reference the step in
1127		// contexts. For more information, see
1128		// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
1129		id?: string
1130
1131		// You can use the if conditional to prevent a step from running unless a
1132		// condition is met. You can use any supported context and expression to create
1133		// a conditional.
1134		// Expressions in an if conditional do not require the ${{ }} syntax. For more
1135		// information, see
1136		// https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions.
1137		if?: bool | number | string
1138
1139		// A name for your step to display on GitHub.
1140		name?: string
1141
1142		// Selects an action to run as part of a step in your job. An action is a
1143		// reusable unit of code. You can use an action defined in the same repository
1144		// as the workflow, a public repository, or in a published Docker container
1145		// image (https://hub.docker.com/).
1146		// We strongly recommend that you include the version of the action you are
1147		// using by specifying a Git ref, SHA, or Docker tag number. If you don't
1148		// specify a version, it could break your workflows or cause unexpected
1149		// behavior when the action owner publishes an update.
1150		// - Using the commit SHA of a released action version is the safest for stability and security.
1151		// - Using the specific major action version allows you to receive critical
1152		// fixes and security patches while still maintaining compatibility. It also
1153		// assures that your workflow should still work.
1154		// - Using the master branch of an action may be convenient, but if someone
1155		// releases a new major version with a breaking change, your workflow could
1156		// break.
1157		// Some actions require inputs that you must set using the with keyword. Review
1158		// the action's README file to determine the inputs required.
1159		// Actions are either JavaScript files or Docker containers. If the action
1160		// you're using is a Docker container you must run the job in a Linux virtual
1161		// environment. For more details, see
1162		// https://help.github.com/en/articles/virtual-environments-for-github-actions.
1163		uses?: string
1164
1165		// Runs command-line programs using the operating system's shell. If you do not
1166		// provide a name, the step name will default to the text specified in the run
1167		// command.
1168		// Commands run using non-login shells by default. You can choose a different
1169		// shell and customize the shell used to run commands. For more information,
1170		// see
1171		// https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#using-a-specific-shell.
1172		// Each run keyword represents a new process and shell in the virtual
1173		// environment. When you provide multi-line commands, each line runs in the
1174		// same shell.
1175		run?:                 string
1176		"working-directory"?: #."working-directory"
1177		"shell"?:             #shell
1178		with?:                #env
1179		env?:                 #env
1180
1181		// Prevents a job from failing when a step fails. Set to true to allow a job to
1182		// pass when this step fails.
1183		"continue-on-error"?: matchN(1, [bool, #expressionSyntax])
1184
1185		// The maximum number of minutes to run the step before killing the process.
1186		"timeout-minutes"?: matchN(1, [number, #expressionSyntax])
1187
1188		// Runs a step asynchronously so the job continues to the next step without
1189		// waiting for it to finish. You can use background on steps that use run or
1190		// uses. To reference a background step from wait or cancel, give it an id. A
1191		// maximum of 10 background steps can run concurrently in a single job.
1192		background?: bool
1193
1194		// Pauses the job until one or more background steps complete. Provide a single
1195		// step id as a string, or multiple step ids as an array. After a wait step
1196		// completes, the outputs of the referenced background steps become available
1197		// to subsequent steps.
1198		wait?: matchN(1, [string, list.MinItems(1) & [...string]])
1199
1200		// Pauses the job until all active background steps complete. The wait-all
1201		// keyword takes no arguments.
1202		"wait-all"?: null | bool
1203
1204		// Gracefully terminates a running background step. The runner sends the step's
1205		// process a termination signal (SIGTERM) so it can clean up. The cancel
1206		// keyword targets a single background step by its id.
1207		cancel?: string
1208
1209		// Runs a group of steps concurrently, then waits for all of them to finish
1210		// before continuing. Every step in the group runs as a background step, with
1211		// an implicit wait at the end of the group.
1212		parallel?: list.MinItems(1) & [...#step]
1213	})
1214
1215	#stringContainingExpressionSyntax: =~"""
1216		^.*\\$\\{\\{(.|[\r
1217		])*\\}\\}.*$
1218		"""
1219
1220	// Selects the types of activity that will trigger a workflow run. Most GitHub
1221	// events are triggered by more than one type of activity. For example, the
1222	// event for the release resource is triggered when a release is published,
1223	// unpublished, created, edited, deleted, or prereleased. The types keyword
1224	// enables you to narrow down activity that causes the workflow to run. When
1225	// only one activity type triggers a webhook event, the types keyword is
1226	// unnecessary.
1227	// You can use an array of event types. For more information about each event
1228	// and their activity types, see
1229	// https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events.
1230	#types: matchN(1, [list.MinItems(1), string])
1231
1232	// A string identifier to associate with the input. The value of <input_id> is a
1233	// map of the input's metadata. The <input_id> must be a unique identifier
1234	// within the inputs object. The <input_id> must start with a letter or _ and
1235	// contain only alphanumeric characters, -, or _.
1236	#workflowDispatchInput: matchN(5, [
1237		matchIf({
1238			type!: "string"
1239			...
1240		}, {
1241			default?: string
1242			...
1243		}, _) & {...},
1244		matchIf({
1245			type!: "boolean"
1246			...
1247		}, {
1248			default?: bool
1249			...
1250		}, _) & {...},
1251		matchIf({
1252			type!: "number"
1253			...
1254		}, {
1255			default?: number
1256			...
1257		}, _) & {...},
1258		matchIf({
1259			type!: "environment"
1260			...
1261		}, {
1262			default?: string
1263			...
1264		}, _) & {...},
1265		matchIf({
1266			type!: "choice"
1267			...
1268		}, {
1269			options!: _
1270			...
1271		}, _) & {...}
1272	]) & close({
1273		// A string description of the input parameter.
1274		description?: string
1275
1276		// A string shown to users using the deprecated input.
1277		deprecationMessage?: string
1278
1279		// A boolean to indicate whether the action requires the input parameter. Set to
1280		// true when the parameter is required.
1281		required?: bool
1282
1283		// A string representing the default value. The default value is used when an
1284		// input parameter isn't specified in a workflow file.
1285		default?: _
1286
1287		// A string representing the type of the input.
1288		type?: "string" | "choice" | "boolean" | "number" | "environment"
1289
1290		// The options of the dropdown list, if the type is a choice.
1291		options?: list.MinItems(1) & [...string]
1292	})
1293}