package githubactions #Action: { @jsonschema(schema="http://json-schema.org/draft-07/schema#") @jsonschema(id="https://json.schemastore.org/github-action.json") matchIf({ "runs"?: null | bool | number | string | [...] | { "using"?: "composite" ... } ... }, { "outputs"?: #."outputs-composite" ... }, { "outputs"?: #outputs ... }) & close({ // The name of your action. GitHub displays the `name` in the // Actions tab to help visually identify actions in each job. "name"!: string // The name of the action's author. "author"?: string // A short description of the action. "description"!: string // Input parameters allow you to specify data that the action // expects to use during runtime. GitHub stores input parameters // as environment variables. Input ids with uppercase letters are // converted to lowercase during runtime. We recommended using // lowercase input ids. "inputs"?: close({ {[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: close({ // A string description of the input parameter. "description"!: string // A string shown to users using the deprecated input. "deprecationMessage"?: string // A boolean to indicate whether the action requires the input // parameter. Set to `true` when the parameter is required. "required"?: bool // A string representing the default value. The default value is // used when an input parameter isn't specified in a workflow // file. "default"?: string }) } }) "outputs"?: _ "runs"!: matchN(1, [#."runs-javascript", #."runs-composite", #."runs-docker"]) // You can use a color and Feather icon to create a badge to // personalize and distinguish your action. Badges are shown next // to your action name in GitHub Marketplace. "branding"?: close({ // The background color of the badge. "color"?: "white" | "black" | "yellow" | "blue" | "green" | "orange" | "red" | "purple" | "gray-dark" // The name of the Feather icon to use. "icon"?: "activity" | "airplay" | "alert-circle" | "alert-octagon" | "alert-triangle" | "align-center" | "align-justify" | "align-left" | "align-right" | "anchor" | "aperture" | "archive" | "arrow-down-circle" | "arrow-down-left" | "arrow-down-right" | "arrow-down" | "arrow-left-circle" | "arrow-left" | "arrow-right-circle" | "arrow-right" | "arrow-up-circle" | "arrow-up-left" | "arrow-up-right" | "arrow-up" | "at-sign" | "award" | "bar-chart-2" | "bar-chart" | "battery-charging" | "battery" | "bell-off" | "bell" | "bluetooth" | "bold" | "book-open" | "book" | "bookmark" | "box" | "briefcase" | "calendar" | "camera-off" | "camera" | "cast" | "check-circle" | "check-square" | "check" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-left" | "chevrons-right" | "chevrons-up" | "circle" | "clipboard" | "clock" | "cloud-drizzle" | "cloud-lightning" | "cloud-off" | "cloud-rain" | "cloud-snow" | "cloud" | "code" | "command" | "compass" | "copy" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "cpu" | "credit-card" | "crop" | "crosshair" | "database" | "delete" | "disc" | "dollar-sign" | "download-cloud" | "download" | "droplet" | "edit-2" | "edit-3" | "edit" | "external-link" | "eye-off" | "eye" | "fast-forward" | "feather" | "file-minus" | "file-plus" | "file-text" | "file" | "film" | "filter" | "flag" | "folder-minus" | "folder-plus" | "folder" | "gift" | "git-branch" | "git-commit" | "git-merge" | "git-pull-request" | "globe" | "grid" | "hard-drive" | "hash" | "headphones" | "heart" | "help-circle" | "home" | "image" | "inbox" | "info" | "italic" | "layers" | "layout" | "life-buoy" | "link-2" | "link" | "list" | "loader" | "lock" | "log-in" | "log-out" | "mail" | "map-pin" | "map" | "maximize-2" | "maximize" | "menu" | "message-circle" | "message-square" | "mic-off" | "mic" | "minimize-2" | "minimize" | "minus-circle" | "minus-square" | "minus" | "monitor" | "moon" | "more-horizontal" | "more-vertical" | "move" | "music" | "navigation-2" | "navigation" | "octagon" | "package" | "paperclip" | "pause-circle" | "pause" | "percent" | "phone-call" | "phone-forwarded" | "phone-incoming" | "phone-missed" | "phone-off" | "phone-outgoing" | "phone" | "pie-chart" | "play-circle" | "play" | "plus-circle" | "plus-square" | "plus" | "pocket" | "power" | "printer" | "radio" | "refresh-ccw" | "refresh-cw" | "repeat" | "rewind" | "rotate-ccw" | "rotate-cw" | "rss" | "save" | "scissors" | "search" | "send" | "server" | "settings" | "share-2" | "share" | "shield-off" | "shield" | "shopping-bag" | "shopping-cart" | "shuffle" | "sidebar" | "skip-back" | "skip-forward" | "slash" | "sliders" | "smartphone" | "speaker" | "square" | "star" | "stop-circle" | "sun" | "sunrise" | "sunset" | "table" | "tablet" | "tag" | "target" | "terminal" | "thermometer" | "thumbs-down" | "thumbs-up" | "toggle-left" | "toggle-right" | "trash-2" | "trash" | "trending-down" | "trending-up" | "triangle" | "truck" | "tv" | "type" | "umbrella" | "underline" | "unlock" | "upload-cloud" | "upload" | "user-check" | "user-minus" | "user-plus" | "user-x" | "user" | "users" | "video-off" | "video" | "voicemail" | "volume-1" | "volume-2" | "volume-x" | "volume" | "watch" | "wifi-off" | "wifi" | "wind" | "x-circle" | "x-square" | "x" | "zap-off" | "zap" | "zoom-in" | "zoom-out" }) }) // Output parameters allow you to declare data that an action // sets. Actions that run later in a workflow can use the output // data set in previously run actions. For example, if you had an // action that performed the addition of two inputs (x + y = z), // the action could output the sum (z) for other actions to use // as an input. // If you don't declare an output in your action metadata file, // you can still set outputs and use them in a workflow. #: "outputs-composite": close({ {[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: close({ // A string description of the output parameter. "description"!: string // The value that the output parameter will be mapped to. You can // set this to a string or an expression with context. For // example, you can use the steps context to set the value of an // output to the output value of a step. "value"!: string }) } }) // Allows you to define conditions for the `post:` action // execution. The `post:` action will only run if the conditions // in `post-if` are met. If not set, then `post-if` defaults to // `always()`. #: "post-if": string // Allows you to define conditions for the `pre:` action // execution. The `pre:` action will only run if the conditions // in `pre-if` are met. If not set, then `pre-if` defaults to // `always()`. Note that the `step` context is unavailable, as no // steps have run yet. #: "pre-if": string // Configures the path to the composite action, and the // application used to execute the code. #: "runs-composite": close({ // To use a composite run steps action, set this to 'composite'. "using"!: "composite" // The run steps that you plan to run in this action. "steps"!: [...matchN(1, [{ "run"!: _ "shell"!: _ ... }, { "uses"!: _ ... }]) & close({ // The command you want to run. This can be inline or a script in // your action repository. "run"?: string // The shell where you want to run the command. "shell"?: matchN(>=1, [string, "bash" | "pwsh" | "python" | "sh" | "cmd" | "powershell"]) // Selects an action to run as part of a step in your job. "uses"?: string // A map of the input parameters defined by the action. Each input // parameter is a key/value pair. Input parameters are set as // environment variables. The variable is prefixed with INPUT_ // and converted to upper case. "with"?: { ... } // The name of the composite run step. "name"?: string // A unique identifier for the step. You can use the `id` to // reference the step in contexts. "id"?: string // You can use the if conditional to prevent a step from running // unless a condition is met. You can use any supported context // and expression to create a conditional. // Expressions in an if conditional do not require the ${{ }} // syntax. For more information, see // https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions. "if"?: string // Sets a map of environment variables for only that step. "env"?: matchN(1, [{ [string]: bool | number | string }, #stringContainingExpressionSyntax]) // Prevents a job from failing when a step fails. Set to true to // allow a job to pass when this step fails. "continue-on-error"?: matchN(1, [bool, #expressionSyntax]) // Specifies the working directory where the command is run. "working-directory"?: string })] }) // Configures the image used for the Docker action. #: "runs-docker": close({ // You must set this value to 'docker'. "using"!: "docker" // The Docker image to use as the container to run the action. The // value can be the Docker base image name, a local `Dockerfile` // in your repository, or a public image in Docker Hub or another // registry. To reference a `Dockerfile` local to your // repository, use a path relative to your action metadata file. // The `docker` application will execute this file. "image"!: string // Specifies a key/value map of environment variables to set in // the container environment. "env"?: matchN(1, [{ [string]: bool | number | string }, #stringContainingExpressionSyntax]) // Overrides the Docker `ENTRYPOINT` in the `Dockerfile`, or sets // it if one wasn't already specified. Use `entrypoint` when the // `Dockerfile` does not specify an `ENTRYPOINT` or you want to // override the `ENTRYPOINT` instruction. If you omit // `entrypoint`, the commands you specify in the Docker // `ENTRYPOINT` instruction will execute. The Docker `ENTRYPOINT // instruction has a *shell* form and *exec* form. The Docker // `ENTRYPOINT` documentation recommends using the *exec* form of // the `ENTRYPOINT` instruction. "entrypoint"?: string // Allows you to run a script before the `entrypoint` action // begins. For example, you can use `pre-entrypoint:` to run a // prerequisite setup script. GitHub Actions uses `docker run` to // launch this action, and runs the script inside a new container // that uses the same base image. This means that the runtime // state is different from the main `entrypoint` container, and // any states you require must be accessed in either the // workspace, `HOME`, or as a `STATE_` variable. The // `pre-entrypoint:` action always runs by default but you can // override this using `pre-if`. "pre-entrypoint"?: string "pre-if"?: #."pre-if" // Allows you to run a cleanup script once the `runs.entrypoint` // action has completed. GitHub Actions uses `docker run` to // launch this action. Because GitHub Actions runs the script // inside a new container using the same base image, the runtime // state is different from the main `entrypoint` container. You // can access any state you need in either the workspace, `HOME`, // or as a `STATE_` variable. The `post-entrypoint:` action // always runs by default but you can override this using // `post-if`. "post-entrypoint"?: string "post-if"?: #."post-if" // An array of strings that define the inputs for a Docker // container. Inputs can include hardcoded strings. GitHub passes // the `args` to the container's `ENTRYPOINT` when the container // starts up. // The `args` are used in place of the `CMD` instruction in a // `Dockerfile`. If you use `CMD` in your `Dockerfile`, use the // guidelines ordered by preference: // - Document required arguments in the action's README and omit // them from the `CMD` instruction. // - Use defaults that allow using the action without specifying // any `args`. // - If the action exposes a `--help` flag, or something similar, // use that to make your action self-documenting. "args"?: [...string] }) // Configures the path to the action's code and the application // used to execute the code. #: "runs-javascript": close({ // The application used to execute the code specified in `main`. "using"!: "node12" | "node16" | "node20" | "node24" // The file that contains your action code. The application // specified in `using` executes this file. "main"!: string // Allows you to run a script at the start of a job, before the // `main:` action begins. For example, you can use `pre:` to run // a prerequisite setup script. The application specified with // the `using` syntax will execute this file. The `pre:` action // always runs by default but you can override this using // `pre-if`. "pre"?: string "pre-if"?: #."pre-if" // Allows you to run a script at the end of a job, once the // `main:` action has completed. For example, you can use `post:` // to terminate certain processes or remove unneeded files. The // application specified with the `using` syntax will execute // this file. The `post:` action always runs by default but you // can override this using `post-if`. "post"?: string "post-if"?: #."post-if" }) #expressionSyntax: =~""" ^\\$\\{\\{(.|[\r ])*\\}\\}$ """ // Output parameters allow you to declare data that an action // sets. Actions that run later in a workflow can use the output // data set in previously run actions. For example, if you had an // action that performed the addition of two inputs (x + y = z), // the action could output the sum (z) for other actions to use // as an input. // If you don't declare an output in your action metadata file, // you can still set outputs and use them in a workflow. #outputs: close({ {[=~"^[_a-zA-Z][a-zA-Z0-9_-]*$"]: close({ // A string description of the output parameter. "description"!: string }) } }) #stringContainingExpressionSyntax: =~""" ^.*\\$\\{\\{(.|[\r ])*\\}\\}.*$ """ }