{"owner":"actions","repo":"toolkit","hasSkills":true,"totalSkillsCount":30,"totalTokensCount":21936,"categories":["plugin-manifest","anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["packages/artifact/README.md","packages/artifact/docs/faq.md","packages/artifact/docs/generated/README.md","packages/artifact/docs/generated/classes/ArtifactNotFoundError.md","packages/artifact/docs/generated/classes/DefaultArtifactClient.md","packages/artifact/docs/generated/classes/FilesNotFoundError.md","packages/artifact/docs/generated/classes/GHESNotSupportedError.md","packages/artifact/docs/generated/classes/InvalidResponseError.md","packages/artifact/docs/generated/classes/NetworkError.md","packages/artifact/docs/generated/classes/UsageError.md","packages/artifact/docs/generated/interfaces/Artifact.md","packages/artifact/docs/generated/interfaces/ArtifactClient.md","packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md","packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md","packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md","packages/artifact/docs/generated/interfaces/FindOptions.md","packages/artifact/docs/generated/interfaces/GetArtifactResponse.md","packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md","packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md","packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md","packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md","packages/attest/README.md","packages/cache/README.md","packages/core/README.md","packages/exec/README.md","packages/github/README.md","packages/glob/README.md","packages/http-client/README.md","packages/io/README.md","packages/tool-cache/README.md"],"skills":{"packages/artifact/README.md":"# `@actions/artifact`\n\nInteract programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).\n\nThis is the core library that powers the [`@actions/upload-artifact`](https://github.com/actions/upload-artifact) and [`@actions/download-artifact`](https://github.com/actions/download-artifact) actions.\n\n- [`@actions/artifact`](#actionsartifact)\n  - [v2 - What's New](#v2---whats-new)\n    - [Improvements](#improvements)\n    - [Breaking changes](#breaking-changes)\n  - [Quick Start](#quick-start)\n  - [Examples](#examples)\n    - [Upload and Download](#upload-and-download)\n    - [Delete an Artifact](#delete-an-artifact)\n    - [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)\n    - [Speeding up large uploads](#speeding-up-large-uploads)\n  - [Additional Resources](#additional-resources)\n\n## v2 - What's New\n\n> [!IMPORTANT]\n> @actions/artifact v2+, upload-artifact@v4+, and download-artifact@v4+ are not currently supported on GHES yet. The previous version of this package can be found at [this tag](https://github.com/actions/toolkit/tree/@actions/artifact@1.1.2/packages/artifact) and [on npm](https://www.npmjs.com/package/@actions/artifact/v/1.1.2).\n\nThe release of `@actions/artifact@v2` (including `upload-artifact@v4` and `download-artifact@v4`) are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.\n\n### Improvements\n\n1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.\n2. Once uploaded, an Artifact ID is returned and Artifacts are immediately available in the UI and [REST API](https://docs.github.com/en/rest/actions/artifacts). Previously, you would have to wait for the run to be completed before an ID was available or any APIs could be utilized.\n3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.\n4. The contents of an Artifact are uploaded together into an _immutable_ archive. They cannot be altered by subsequent jobs. Both of these factors help reduce the possibility of accidentally corrupting Artifact files. (Digest/integrity hash coming soon in the API!)\n5. This library (and `actions/download-artifact`) now support downloading Artifacts from _other_ repositories and runs if a `GITHUB_TOKEN` with sufficient `actions:read` permissions are provided.\n\n### Breaking changes\n\n1. Firewall rules required for self-hosted runners.\n\n    If you are using self-hosted runners behind a firewall, you must have flows open to [Actions endpoints](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github). If you cannot use wildcard rules for your firewall, see the GitHub [meta endpoint](https://api.github.com/meta) for specific endpoints.\n\n    e.g.\n\n    ```bash\n    curl https://api.github.com/meta | jq .domains.actions\n    ```\n\n2. Uploading to the same named Artifact multiple times.\n\n    Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once.\n\n3. Limit of Artifacts for an individual job.\n\n    Each job in a workflow run now has a limit of 10 artifacts.\n\n## Quick Start\n\nInstall the package:\n\n```bash\nnpm i @actions/artifact\n```\n\nImport the module:\n\n```js\n// ES6 module\nimport {DefaultArtifactClient} from '@actions/artifact'\n\n// CommonJS\nconst {DefaultArtifactClient} = require('@actions/artifact')\n```\n\nThen instantiate:\n\n```js\nconst artifact = new DefaultArtifactClient()\n```\n\nℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).\n\n## Examples\n\n### Upload and Download\n\nThe most basic scenario is uploading one or more files to an Artifact, then downloading that Artifact. Downloads are based on the Artifact ID, which can be obtained in the response of `uploadArtifact`, `getArtifact`, `listArtifacts` or via the [REST API](https://docs.github.com/en/rest/actions/artifacts).\n\n```js\nconst {id, size} = await artifact.uploadArtifact(\n  // name of the artifact\n  'my-artifact',\n  // files to include (supports absolute and relative paths)\n  ['/absolute/path/file1.txt', './relative/file2.txt'],\n  {\n    // optional: how long to retain the artifact\n    // if unspecified, defaults to repository/org retention settings (the limit of this value)\n    retentionDays: 10\n  }\n)\n\nconsole.log(`Created artifact with id: ${id} (bytes: ${size}`)\n\nconst {downloadPath} = await artifact.downloadArtifact(id, {\n  // optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE\n  path: '/tmp/dst/path',\n})\n\nconsole.log(`Downloaded artifact ${id} to: ${downloadPath}`)\n```\n\n### Delete an Artifact\n\nTo delete an artifact, all you need is the name.\n\n```js\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact'\n)\n\nconsole.log(`Deleted Artifact ID '${id}'`)\n```\n\nIt also supports options to delete from other repos/runs given a github token with `actions:write` permissions on the target repository is supplied.\n\n```js\nconst findBy = {\n  // must have actions:write permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\n\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact',\n  // options to find by other repo/owner\n  { findBy }\n)\n\nconsole.log(`Deleted Artifact ID '${id}' from ${findBy.repositoryOwner}/ ${findBy.repositoryName}`)\n```\n\n### Downloading from other workflow runs or repos\n\nIt may be useful to download Artifacts from other workflow runs, or even other repositories. By default, the permissions are scoped so they can only download Artifacts within the current workflow run. To elevate permissions for this scenario, you must specify `options.findBy` to `downloadArtifact`.\n\n```ts\nconst findBy = {\n  // must have actions:read permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\nawait artifact.downloadArtifact(1337, {\n  findBy\n})\n\n// can also be used in other methods\n\nawait artifact.getArtifact('my-artifact', {\n  findBy\n})\n\nawait artifact.listArtifacts({\n  findBy\n})\n```\n\n### Speeding up large uploads\n\nIf you have large files that need to be uploaded (or file types that don't compress well), you may benefit from changing the compression level of the Artifact archive. NOTE: This is a tradeoff between artifact upload time and stored data size.\n\n```ts\nawait artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {\n  // The level of compression for Zlib to be applied to the artifact archive.\n  // - 0: No compression\n  // - 1: Best speed\n  // - 6: Default compression (same as GNU Gzip)\n  // - 9: Best compression\n  compressionLevel: 0\n})\n```\n\n## Additional Resources\n\n- [Releases](./RELEASES.md)\n- [Contribution Guide](./CONTRIBUTIONS.md)\n- [Frequently Asked Questions](./docs/faq.md)\n","packages/artifact/docs/faq.md":"# Frequently Asked Questions\n\n- [Frequently Asked Questions](#frequently-asked-questions)\n  - [Supported Characters](#supported-characters)\n  - [Compression? ZIP? How is my artifact stored?](#compression-zip-how-is-my-artifact-stored)\n  - [Which versions of the artifacts packages are compatible?](#which-versions-of-the-artifacts-packages-are-compatible)\n  - [How long will my artifact be available?](#how-long-will-my-artifact-be-available)\n\n## Supported Characters\n\nWhen uploading an artifact, the inputted `name` parameter along with the files specified in `files` cannot contain any of the following characters. If they are present in `name` or `files`,  the Artifact will be rejected by the server and the upload will fail. These characters are not allowed due to limitations and restrictions with certain file systems such as NTFS. To maintain platform-agnostic behavior, characters that are not supported by an individual filesystem/platform will not be supported on all filesystems/platforms.\n\n- \"\n- :\n- <\n- \\>\n- |\n- \\*\n- ?\n\nIn addition to the aforementioned characters, the inputted `name` also cannot include the following\n- \\\n- /\n\n## Compression? ZIP? How is my artifact stored?\n\nWhen creating an Artifact, the files are dynamically compressed and streamed into a ZIP archive. Since they are stored in a ZIP, they can be compressed by Zlib in varying levels.\n\nThe value can range from 0 to 9:\n\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\n\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n## Which versions of the artifacts packages are compatible?\n[actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact), leverage [GitHub Actions toolkit](https://github.com/actions/toolkit) and are typically used together to upload and download artifacts in your workflows.\n\n| upload-artifact | download-artifact | toolkit |\n|---|---|---|\n| v4 | v4 | v2 |\n| < v3 | < v3 | < v1 |\n\nUse matching versions of `actions/upload-artifact` and `actions/download-artifact` to ensure compatibility.\n\nIn your GitHub Actions workflow YAML file, you specify the version of the actions you want to use. For example:\n\n```yaml\n  uses: actions/upload-artifact@v4\n  # ...\n  uses: actions/download-artifact@v4\n  # ...\n```\n\n**Release Notes:**\nCheck the release notes for each repository to see if there are any specific notes about compatibility or changes in behavior.\n\n## How long will my artifact be available?\nThe default retention period is **90 days**. For more information, visit: https://github.com/actions/upload-artifact?tab=readme-ov-file#retention-period \n","packages/artifact/docs/generated/README.md":"@actions/artifact\n\n# @actions/artifact\n\n## Table of contents\n\n### Classes\n\n- [ArtifactNotFoundError](classes/ArtifactNotFoundError.md)\n- [DefaultArtifactClient](classes/DefaultArtifactClient.md)\n- [FilesNotFoundError](classes/FilesNotFoundError.md)\n- [GHESNotSupportedError](classes/GHESNotSupportedError.md)\n- [InvalidResponseError](classes/InvalidResponseError.md)\n- [NetworkError](classes/NetworkError.md)\n- [UsageError](classes/UsageError.md)\n\n### Interfaces\n\n- [Artifact](interfaces/Artifact.md)\n- [ArtifactClient](interfaces/ArtifactClient.md)\n- [DeleteArtifactResponse](interfaces/DeleteArtifactResponse.md)\n- [DownloadArtifactOptions](interfaces/DownloadArtifactOptions.md)\n- [DownloadArtifactResponse](interfaces/DownloadArtifactResponse.md)\n- [FindOptions](interfaces/FindOptions.md)\n- [GetArtifactResponse](interfaces/GetArtifactResponse.md)\n- [ListArtifactsOptions](interfaces/ListArtifactsOptions.md)\n- [ListArtifactsResponse](interfaces/ListArtifactsResponse.md)\n- [UploadArtifactOptions](interfaces/UploadArtifactOptions.md)\n- [UploadArtifactResponse](interfaces/UploadArtifactResponse.md)\n\n### Variables\n\n- [default](README.md#default)\n\n## Variables\n\n### default\n\n• `Const` **default**: [`ArtifactClient`](interfaces/ArtifactClient.md)\n\n#### Defined in\n\n[src/artifact.ts:7](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/artifact.ts#L7)\n","packages/artifact/docs/generated/classes/ArtifactNotFoundError.md":"[@actions/artifact](../README.md) / ArtifactNotFoundError\n\n# Class: ArtifactNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`ArtifactNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](ArtifactNotFoundError.md#constructor)\n\n### Properties\n\n- [message](ArtifactNotFoundError.md#message)\n- [name](ArtifactNotFoundError.md#name)\n- [stack](ArtifactNotFoundError.md#stack)\n- [prepareStackTrace](ArtifactNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](ArtifactNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](ArtifactNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new ArtifactNotFoundError**(`message?`): [`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'Artifact not found'` |\n\n#### Returns\n\n[`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:24](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L24)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/DefaultArtifactClient.md":"[@actions/artifact](../README.md) / DefaultArtifactClient\n\n# Class: DefaultArtifactClient\n\nThe default artifact client that is used by the artifact action(s).\n\n## Implements\n\n- [`ArtifactClient`](../interfaces/ArtifactClient.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](DefaultArtifactClient.md#constructor)\n\n### Methods\n\n- [deleteArtifact](DefaultArtifactClient.md#deleteartifact)\n- [downloadArtifact](DefaultArtifactClient.md#downloadartifact)\n- [getArtifact](DefaultArtifactClient.md#getartifact)\n- [listArtifacts](DefaultArtifactClient.md#listartifacts)\n- [uploadArtifact](DefaultArtifactClient.md#uploadartifact)\n\n## Constructors\n\n### constructor\n\n• **new DefaultArtifactClient**(): [`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n#### Returns\n\n[`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[deleteArtifact](../interfaces/ArtifactClient.md#deleteartifact)\n\n#### Defined in\n\n[src/internal/client.ts:248](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L248)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](../interfaces/DownloadArtifactOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[downloadArtifact](../interfaces/ArtifactClient.md#downloadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:138](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L138)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[getArtifact](../interfaces/ArtifactClient.md#getartifact)\n\n#### Defined in\n\n[src/internal/client.ts:212](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L212)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](../interfaces/ListArtifactsOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[listArtifacts](../interfaces/ArtifactClient.md#listartifacts)\n\n#### Defined in\n\n[src/internal/client.ts:176](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L176)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](../interfaces/UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[uploadArtifact](../interfaces/ArtifactClient.md#uploadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L113)\n","packages/artifact/docs/generated/classes/FilesNotFoundError.md":"[@actions/artifact](../README.md) / FilesNotFoundError\n\n# Class: FilesNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`FilesNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](FilesNotFoundError.md#constructor)\n\n### Properties\n\n- [files](FilesNotFoundError.md#files)\n- [message](FilesNotFoundError.md#message)\n- [name](FilesNotFoundError.md#name)\n- [stack](FilesNotFoundError.md#stack)\n- [prepareStackTrace](FilesNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](FilesNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](FilesNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new FilesNotFoundError**(`files?`): [`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `files` | `string`[] | `[]` |\n\n#### Returns\n\n[`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:4](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L4)\n\n## Properties\n\n### files\n\n• **files**: `string`[]\n\n#### Defined in\n\n[src/internal/shared/errors.ts:2](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L2)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/GHESNotSupportedError.md":"[@actions/artifact](../README.md) / GHESNotSupportedError\n\n# Class: GHESNotSupportedError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`GHESNotSupportedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GHESNotSupportedError.md#constructor)\n\n### Properties\n\n- [message](GHESNotSupportedError.md#message)\n- [name](GHESNotSupportedError.md#name)\n- [stack](GHESNotSupportedError.md#stack)\n- [prepareStackTrace](GHESNotSupportedError.md#preparestacktrace)\n- [stackTraceLimit](GHESNotSupportedError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](GHESNotSupportedError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new GHESNotSupportedError**(`message?`): [`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'@actions/artifact v2.0.0+, upload-artifact@v4+ and download-artifact@v4+ are not currently supported on GHES.'` |\n\n#### Returns\n\n[`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:31](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L31)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/InvalidResponseError.md":"[@actions/artifact](../README.md) / InvalidResponseError\n\n# Class: InvalidResponseError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`InvalidResponseError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](InvalidResponseError.md#constructor)\n\n### Properties\n\n- [message](InvalidResponseError.md#message)\n- [name](InvalidResponseError.md#name)\n- [stack](InvalidResponseError.md#stack)\n- [prepareStackTrace](InvalidResponseError.md#preparestacktrace)\n- [stackTraceLimit](InvalidResponseError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](InvalidResponseError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new InvalidResponseError**(`message`): [`InvalidResponseError`](InvalidResponseError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message` | `string` |\n\n#### Returns\n\n[`InvalidResponseError`](InvalidResponseError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:17](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L17)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/NetworkError.md":"[@actions/artifact](../README.md) / NetworkError\n\n# Class: NetworkError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`NetworkError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](NetworkError.md#constructor)\n\n### Properties\n\n- [code](NetworkError.md#code)\n- [message](NetworkError.md#message)\n- [name](NetworkError.md#name)\n- [stack](NetworkError.md#stack)\n- [prepareStackTrace](NetworkError.md#preparestacktrace)\n- [stackTraceLimit](NetworkError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](NetworkError.md#capturestacktrace)\n- [isNetworkErrorCode](NetworkError.md#isnetworkerrorcode)\n\n## Constructors\n\n### constructor\n\n• **new NetworkError**(`code`): [`NetworkError`](NetworkError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code` | `string` |\n\n#### Returns\n\n[`NetworkError`](NetworkError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:42](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L42)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L40)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isNetworkErrorCode\n\n▸ **isNetworkErrorCode**(`code?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:49](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L49)\n","packages/artifact/docs/generated/classes/UsageError.md":"[@actions/artifact](../README.md) / UsageError\n\n# Class: UsageError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`UsageError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](UsageError.md#constructor)\n\n### Properties\n\n- [message](UsageError.md#message)\n- [name](UsageError.md#name)\n- [stack](UsageError.md#stack)\n- [prepareStackTrace](UsageError.md#preparestacktrace)\n- [stackTraceLimit](UsageError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](UsageError.md#capturestacktrace)\n- [isUsageErrorMessage](UsageError.md#isusageerrormessage)\n\n## Constructors\n\n### constructor\n\n• **new UsageError**(): [`UsageError`](UsageError.md)\n\n#### Returns\n\n[`UsageError`](UsageError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L62)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isUsageErrorMessage\n\n▸ **isUsageErrorMessage**(`msg?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `msg?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:68](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L68)\n","packages/artifact/docs/generated/interfaces/Artifact.md":"[@actions/artifact](../README.md) / Artifact\n\n# Interface: Artifact\n\nAn Actions Artifact\n\n## Table of contents\n\n### Properties\n\n- [createdAt](Artifact.md#createdat)\n- [id](Artifact.md#id)\n- [name](Artifact.md#name)\n- [size](Artifact.md#size)\n\n## Properties\n\n### createdAt\n\n• `Optional` **createdAt**: `Date`\n\nThe time when the artifact was created\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:128](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L128)\n\n___\n\n### id\n\n• **id**: `number`\n\nThe ID of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:118](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L118)\n\n___\n\n### name\n\n• **name**: `string`\n\nThe name of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L113)\n\n___\n\n### size\n\n• **size**: `number`\n\nThe size of the artifact in bytes\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:123](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L123)\n","packages/artifact/docs/generated/interfaces/ArtifactClient.md":"[@actions/artifact](../README.md) / ArtifactClient\n\n# Interface: ArtifactClient\n\nGeneric interface for the artifact client.\n\n## Implemented by\n\n- [`DefaultArtifactClient`](../classes/DefaultArtifactClient.md)\n\n## Table of contents\n\n### Methods\n\n- [deleteArtifact](ArtifactClient.md#deleteartifact)\n- [downloadArtifact](ArtifactClient.md#downloadartifact)\n- [getArtifact](ArtifactClient.md#getartifact)\n- [listArtifacts](ArtifactClient.md#listartifacts)\n- [uploadArtifact](ArtifactClient.md#uploadartifact)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L103)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](DownloadArtifactOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:89](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L89)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\n#### Defined in\n\n[src/internal/client.ts:75](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L75)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](ListArtifactsOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:57](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L57)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L40)\n","packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md":"[@actions/artifact](../README.md) / DeleteArtifactResponse\n\n# Interface: DeleteArtifactResponse\n\nResponse from the server when deleting an artifact\n\n## Table of contents\n\n### Properties\n\n- [id](DeleteArtifactResponse.md#id)\n\n## Properties\n\n### id\n\n• **id**: `number`\n\nThe id of the artifact that was deleted\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:163](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L163)\n","packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md":"[@actions/artifact](../README.md) / DownloadArtifactOptions\n\n# Interface: DownloadArtifactOptions\n\nOptions for downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [path](DownloadArtifactOptions.md#path)\n\n## Properties\n\n### path\n\n• `Optional` **path**: `string`\n\nDenotes where the artifact will be downloaded to. If not specified then the artifact is download to GITHUB_WORKSPACE\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L103)\n","packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md":"[@actions/artifact](../README.md) / DownloadArtifactResponse\n\n# Interface: DownloadArtifactResponse\n\nResponse from the server when downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [downloadPath](DownloadArtifactResponse.md#downloadpath)\n\n## Properties\n\n### downloadPath\n\n• `Optional` **downloadPath**: `string`\n\nThe path where the artifact was downloaded to\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:93](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L93)\n","packages/artifact/docs/generated/interfaces/FindOptions.md":"[@actions/artifact](../README.md) / FindOptions\n\n# Interface: FindOptions\n\n## Table of contents\n\n### Properties\n\n- [findBy](FindOptions.md#findby)\n\n## Properties\n\n### findBy\n\n• `Optional` **findBy**: `Object`\n\nThe criteria for finding Artifact(s) out of the scope of the current run.\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `repositoryName` | `string` | Repository owner (eg. 'toolkit') |\n| `repositoryOwner` | `string` | Repository owner (eg. 'actions') |\n| `token` | `string` | Token with actions:read permissions |\n| `workflowRunId` | `number` | WorkflowRun of the artifact(s) to lookup |\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:136](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L136)\n","packages/artifact/docs/generated/interfaces/GetArtifactResponse.md":"[@actions/artifact](../README.md) / GetArtifactResponse\n\n# Interface: GetArtifactResponse\n\nResponse from the server when getting an artifact\n\n## Table of contents\n\n### Properties\n\n- [artifact](GetArtifactResponse.md#artifact)\n\n## Properties\n\n### artifact\n\n• **artifact**: [`Artifact`](Artifact.md)\n\nMetadata about the artifact that was found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L62)\n","packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md":"[@actions/artifact](../README.md) / ListArtifactsOptions\n\n# Interface: ListArtifactsOptions\n\nOptions for listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [latest](ListArtifactsOptions.md#latest)\n\n## Properties\n\n### latest\n\n• `Optional` **latest**: `boolean`\n\nFilter the workflow run's artifacts to the latest by name\nIn the case of reruns, this can be useful to avoid duplicates\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:73](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L73)\n","packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md":"[@actions/artifact](../README.md) / ListArtifactsResponse\n\n# Interface: ListArtifactsResponse\n\nResponse from the server when listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [artifacts](ListArtifactsResponse.md#artifacts)\n\n## Properties\n\n### artifacts\n\n• **artifacts**: [`Artifact`](Artifact.md)[]\n\nA list of artifacts that were found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:83](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L83)\n","packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md":"[@actions/artifact](../README.md) / UploadArtifactOptions\n\n# Interface: UploadArtifactOptions\n\nOptions for uploading an artifact\n\n## Table of contents\n\n### Properties\n\n- [compressionLevel](UploadArtifactOptions.md#compressionlevel)\n- [retentionDays](UploadArtifactOptions.md#retentiondays)\n\n## Properties\n\n### compressionLevel\n\n• `Optional` **compressionLevel**: `number`\n\nThe level of compression for Zlib to be applied to the artifact archive.\nThe value can range from 0 to 9:\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:52](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L52)\n\n___\n\n### retentionDays\n\n• `Optional` **retentionDays**: `number`\n\nDuration after which artifact will expire in days.\n\nBy default artifact expires after 90 days:\nhttps://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#downloading-and-deleting-artifacts-after-a-workflow-run-is-complete\n\nUse this option to override the default expiry.\n\nMin value: 1\nMax value: 90 unless changed by repository setting\n\nIf this is set to a greater value than the retention settings allowed, the retention on artifacts\nwill be reduced to match the max value allowed on server, and the upload process will continue. An\ninput of 0 assumes default retention setting.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:41](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L41)\n","packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md":"[@actions/artifact](../README.md) / UploadArtifactResponse\n\n# Interface: UploadArtifactResponse\n\nResponse from the server when an artifact is uploaded\n\n## Table of contents\n\n### Properties\n\n- [digest](UploadArtifactResponse.md#digest)\n- [id](UploadArtifactResponse.md#id)\n- [size](UploadArtifactResponse.md#size)\n\n## Properties\n\n### digest\n\n• `Optional` **digest**: `string`\n\nThe SHA256 digest of the artifact that was created. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:19](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L19)\n\n___\n\n### id\n\n• `Optional` **id**: `number`\n\nThe id of the artifact that was created. Not provided if no artifact was uploaded\nThis ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:14](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L14)\n\n___\n\n### size\n\n• `Optional` **size**: `number`\n\nTotal size of the artifact in bytes. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:8](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L8)\n","packages/attest/README.md":"# `@actions/attest`\n\nFunctions for generating signed attestations for workflow artifacts.\n\nAttestations bind some subject (a named artifact along with its digest) to a\npredicate (some assertion about that subject) using the [in-toto\nstatement](https://github.com/in-toto/attestation/tree/main/spec/v1) format. A\nsignature is generated for the attestation using a\n[Sigstore](https://www.sigstore.dev/)-issued signing certificate.\n\nOnce the attestation has been created and signed, it will be uploaded to the GH\nattestations API and associated with the repository from which the workflow was\ninitiated.\n\nSee [Using artifact attestations to establish provenance for builds](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)\nfor more information on artifact attestations.\n\n## Table of Contents\n- [Usage](#usage)\n  - [attest](#attest)\n  - [attestProvenance](#attestprovenance)\n  - [Attestation](#attestation)\n- [Sigstore Instance](#sigstore-instance)\n- [Storage](#storage)\n\n## Usage\n\n### `attest`\n\nThe `attest` function takes the supplied subject/predicate pair and generates a\nsigned attestation.\n\n```js\nconst { attest } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attest({\n        subjects: [{name: 'my-artifact-name', digest: { 'sha256': '36ab4667...'}}],\n        predicateType: 'https://in-toto.io/attestation/release',\n        predicate: { . . . },\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attest` function supports the following options:\n\n```typescript\nexport type AttestOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  predicateType: string\n  // Predicate to be attested.\n  predicate: object\n  // GitHub token for writing attestations.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n}\n\nexport type Subject = {\n   // Name of the subject.\n  name: string\n   // Digests of the subject. Should be a map of digest algorithms to their hex-encoded values.\n  digest: Record<string, string>\n}\n```\n\n### `attestProvenance`\n\nThe `attestProvenance` function accepts the name and digest of some artifact and\ngenerates a build provenance attestation over those values.\n\nThe attestation is formed by first generating a [SLSA provenance\npredicate](https://slsa.dev/spec/v1.0/provenance) populated with\n[metadata](https://github.com/slsa-framework/github-actions-buildtypes/tree/main/workflow/v1)\npulled from the GitHub Actions run.\n\n```js\nconst { attestProvenance } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attestProvenance({\n        subjectName: 'my-artifact-name',\n        subjectDigest: { 'sha256': '36ab4667...'},\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attestProvenance` function supports the following options:\n\n```typescript\nexport type AttestProvenanceOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n  // Issuer URL responsible for minting the OIDC token from which the\n  // provenance data is read. Defaults to\n  // 'https://token.actions.githubusercontent.com\".\n  issuer?: string\n}\n```\n\n### `Attestation`\n\nThe `Attestation` returned by `attest`/`attestProvenance` has the following\nfields:\n\n```typescript\nexport type Attestation = {\n  /*\n   * JSON-serialized Sigstore bundle containing the provenance attestation,\n   * signature, signing certificate and witnessed timestamp.\n   */\n  bundle: SerializedBundle\n  /*\n   * PEM-encoded signing certificate used to sign the attestation.\n   */\n  certificate: string\n  /*\n   * ID of Rekor transparency log entry created for the attestation (if\n   * applicable).\n   */\n  tlogID?: string\n  /*\n   * ID of the persisted attestation (accessible via the GH API).\n   */\n  attestationID?: string\n}\n```\n\nFor details about the Sigstore bundle format, see the [Bundle protobuf\nspecification](https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto).\n\n### createStorageRecord\n\nThe `createStorageRecord` function creates an\n[artifact metadata storage record](https://docs.github.com/en/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record)\non behalf of an attested artifact. It accepts parameters defining artifact\nand package registry details. The storage record contains metadata about where the artifact is stored on a given package registry.\n\n```js\nconst { createStorageRecord } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const record = await createStorageRecord(\n        artifactOptions: {\n            name: 'my-artifact-name',\n            digest: { 'sha256': '36ab4667...'},\n            version: \"v1.0.0\"\n        },\n        packageRegistryOptions: {\n            registryUrl: \"https://my-fave-pkg-registry.com\"\n        },\n        token: ghToken\n    );\n\n    console.log(record);\n}\n\nrun();\n```\n\nThe `createStorageRecord` function supports the following options:\n\n```typescript\n// Artifact details to associate the record with\nexport type ArtifactOptions = {\n  // The name of the artifact\n  name: string\n  // The digest of the artifact\n  digest: string\n  // The version of the artifact\n  version?: string\n  // The status of the artifact\n  status?: string\n}\n// Includes details about the package registry the artifact was published to\nexport type PackageRegistryOptions = {\n  // The URL of the package registry\n  registryUrl: string\n  // The URL of the artifact in the package registry\n  artifactUrl?: string\n  // The package registry repository the artifact was published to.\n  repo?: string\n  // The path of the artifact in the package registry repository.\n  path?: string\n}\n// GitHub token for writing attestations.\ntoken: string\n// Optional parameters for the write operation.\n// The number of times to retry the request.\nretryAttempts?: number\n// HTTP headers to include in request to Artifact Metadata API.\nheaders?: RequestHeaders\n```\n\n## Sigstore Instance\n\nWhen generating the signed attestation there are two different Sigstore\ninstances which can be used to issue the signing certificate. By default,\nworkflows initiated from public repositories will use the Sigstore public-good\ninstance and persist the attestation signature to the public [Rekor transparency\nlog](https://docs.sigstore.dev/logging/overview/). Workflows initiated from\nprivate/internal repositories will use the GitHub-internal Sigstore instance\nwhich uses a signed timestamp issued by GitHub's timestamp authority in place of\nthe public transparency log.\n\nThe default Sigstore instance selection can be overridden by passing an explicit\nvalue of either \"public-good\" or \"github\" for the `sigstore` option when calling\neither `attest` or `attestProvenance`.\n\n## Storage\n\nAttestations created by `attest`/`attestProvenance` will be uploaded to the GH\nattestations API and associated with the appropriate repository. Attestation\nstorage is only supported for public repositories or repositories which belong\nto a GitHub Enterprise Cloud account.\n\nIn order to generate attestations for private, non-Enterprise repositories, the\n`skipWrite` option should be set to `true`.\n","packages/cache/README.md":"# `@actions/cache`\n\n> Functions necessary for caching dependencies and build outputs to improve workflow execution time.\n\nSee [\"Caching dependencies to speed up workflows\"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) for how caching works.\n\nNote that GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. If you exceed this limit, GitHub will save your cache but will begin evicting caches until the total size is less than 10 GB.\n\n## ⚠️ Important changes\n\nThe cache backend service has been rewritten from the ground up for improved performance and reliability. The [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) package now integrates with the new cache service (v2) APIs.\n\nThe new service will gradually roll out as of **February 1st, 2025**. The legacy service will also be sunset on the same date. Changes in this release are **fully backward compatible**.\n\n**All previous versions of this package will be deprecated**. We recommend upgrading to version `4.0.0` as soon as possible before **February 1st, 2025.**\n\nIf you do not upgrade, all workflow runs using any of the deprecated [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) packages will fail.\n\nUpgrading to the recommended version should not break or require any changes to your workflows beyond updating your `package.json` to version `4.0.0`.\n\nRead more about the change & access the migration guide: [reference to the announcement](https://github.com/actions/toolkit/discussions/1890).\n\n## Usage\n\nThis package is used by the v2+ versions of our first party cache action. You can find an example implementation in the cache repo [here](https://github.com/actions/cache).\n\n#### Save Cache\n\nSaves a cache containing the files in `paths` using the `key` provided. The files would be compressed using zstandard compression algorithm if zstd is installed, otherwise gzip is used. Function returns the cache id if the cache was saved succesfully and throws an error if cache upload fails.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst cacheId = await cache.saveCache(paths, key)\n```\n\n#### Restore Cache\n\nRestores a cache based on `key` and `restoreKeys` to the `paths` provided. Function returns the cache key for cache hit and returns undefined if cache not found.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst restoreKeys = [\n    'npm-foobar-',\n    'npm-'\n]\nconst cacheKey = await cache.restoreCache(paths, key, restoreKeys)\n```\n\n##### Cache segment restore timeout\n\nA cache gets downloaded in multiple segments of fixed sizes (now `128MB` to fail-fast, previously `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner were used). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.4` of cache package introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.\n\nDefault value of this timeout is 10 minutes (starting `v3.2.1` and higher, previously 60 minutes in versions between `v.3.0.4` and `v3.2.0`, both included) and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.\n","packages/core/README.md":"# `@actions/core`\n\n> Core functions for setting results, logging, registering secrets and exporting variables across actions\n\n## Usage\n\n### Import the package\n\n```js\n// javascript\nconst core = require('@actions/core');\n\n// typescript\nimport * as core from '@actions/core';\n```\n\n#### Inputs/Outputs\n\nAction inputs can be read with `getInput` which returns a `string` or `getBooleanInput` which parses a boolean based on the [yaml 1.2 specification](https://yaml.org/spec/1.2/spec.html#id2804923). If `required` is set to be false, the input should have a default value in `action.yml`.\n\nOutputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.\n\n```js\nconst myInput = core.getInput('inputName', { required: true });\nconst myBooleanInput = core.getBooleanInput('booleanInputName', { required: true });\nconst myMultilineInput = core.getMultilineInput('multilineInputName', { required: true });\ncore.setOutput('outputKey', 'outputVal');\n```\n\n#### Exporting variables\n\nSince each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.\n\n```js\ncore.exportVariable('envVar', 'Val');\n```\n\n#### Setting a secret\n\nSetting a secret registers the secret with the runner to ensure it is masked in logs.\n\n```js\ncore.setSecret('myPassword');\n```\n\n#### PATH Manipulation\n\nTo make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`.  The runner will prepend the path given to the jobs PATH.\n\n```js\ncore.addPath('/path/to/mytool');\n```\n\n#### Declaring artifacts\n\nTo declare an artifact that your action produced, use `declareArtifact`. Each call declares one artifact, which is either a path to a local file or an OCI subject reference that includes a digest. The runner validates each declaration after the step completes and fails the step if a declaration is invalid, for example, if the file doesn't exist.\n\n```js\n// A local file. The runner resolves relative paths against GITHUB_WORKSPACE.\ncore.declareArtifact('dist/app.tar.gz');\n\n// An OCI subject. The digest, such as sha256:<hex>, is required.\ncore.declareArtifact(`ghcr.io/octocat/app:1.0.0@${digest}`);\n```\n\nTo force how the runner interprets a value, prefix it with `file://` or `oci://`.\n\nArtifact declarations require runner version 2.336.0 or later and take effect only where they're enabled. On older runners, `GITHUB_ARTIFACTS` isn't set, so `declareArtifact` logs a debug message and skips the declaration. Where artifact declarations aren't enabled, `GITHUB_ARTIFACTS` is set, but the runner ignores it — the declaration has no effect and doesn't fail the step. For how the runner names artifacts and the limits it enforces, see [Declare an artifact](../../docs/commands.md#declare-an-artifact).\n\n#### Exit codes\n\nYou should use this library to set the failing exit code for your action.  If status is not set and the script runs to completion, that will lead to a success.\n\n```js\nconst core = require('@actions/core');\n\ntry {\n  // Do stuff\n}\ncatch (err) {\n  // setFailed logs the message and sets a failing exit code\n  core.setFailed(`Action failed with error ${err}`);\n}\n```\n\nNote that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.\n\n#### Logging\n\nFinally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).\n\n```js\nconst core = require('@actions/core');\n\nconst myInput = core.getInput('input');\ntry {\n  core.debug('Inside try block');\n  \n  if (!myInput) {\n    core.warning('myInput was not set');\n  }\n  \n  if (core.isDebug()) {\n    // curl -v https://github.com\n  } else {\n    // curl https://github.com\n  }\n\n  // Do stuff\n  core.info('Output to the actions build log')\n\n  core.notice('This is a message that will also emit an annotation')\n}\ncatch (err) {\n  core.error(`Error ${err}, action may still succeed though`);\n}\n```\n\nThis library can also wrap chunks of output in foldable groups.\n\n```js\nconst core = require('@actions/core')\n\n// Manually wrap output\ncore.startGroup('Do some function')\ndoSomeFunction()\ncore.endGroup()\n\n// Wrap an asynchronous function call\nconst result = await core.group('Do something async', async () => {\n  const response = await doSomeHTTPRequest()\n  return response\n})\n```\n\n#### Annotations\n\nThis library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). \n```js\ncore.error('This is a bad error, action may still succeed though.')\n\ncore.warning('Something went wrong, but it\\'s not bad enough to fail the build.')\n\ncore.notice('Something happened that you might want to know about.')\n```\n\nThese will surface to the UI in the Actions page and on Pull Requests. They look something like this:\n\n![Annotations Image](../../docs/assets/annotations.png)\n\nThese annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. \n\nThese options are: \n```typescript\nexport interface AnnotationProperties {\n  /**\n   * A title for the annotation.\n   */\n  title?: string\n\n  /**\n   * The name of the file for which the annotation should be created.\n   */\n  file?: string\n\n  /**\n   * The start line for the annotation.\n   */\n  startLine?: number\n\n  /**\n   * The end line for the annotation. Defaults to `startLine` when `startLine` is provided.\n   */\n  endLine?: number\n\n  /**\n   * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   */\n  startColumn?: number\n\n  /**\n   * The end column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   * Defaults to `startColumn` when `startColumn` is provided.\n   */\n  endColumn?: number\n}\n```\n\n#### Styling output\n\nColored output is supported in the Action logs via standard [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). 3/4 bit, 8 bit and 24 bit colors are all supported.\n\nForeground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[35mThis foreground will be magenta')\n\n// 8 bit\ncore.info('\\u001b[38;5;6mThis foreground will be cyan')\n\n// 24 bit\ncore.info('\\u001b[38;2;255;0;0mThis foreground will be bright red')\n```\n\nBackground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[43mThis background will be yellow');\n\n// 8 bit\ncore.info('\\u001b[48;5;6mThis background will be cyan')\n\n// 24 bit\ncore.info('\\u001b[48;2;255;0;0mThis background will be bright red')\n```\n\nSpecial styles:\n\n```js\ncore.info('\\u001b[1mBold text')\ncore.info('\\u001b[3mItalic text')\ncore.info('\\u001b[4mUnderlined text')\n```\n\nANSI escape codes can be combined with one another:\n\n```js\ncore.info('\\u001b[31;46mRed foreground with a cyan background and \\u001b[1mbold text at the end');\n```\n\n> Note: Escape codes reset at the start of each line\n\n```js\ncore.info('\\u001b[35mThis foreground will be magenta')\ncore.info('This foreground will reset to the default')\n```\n\nManually typing escape codes can be a little difficult, but you can use third party modules such as [ansi-styles](https://github.com/chalk/ansi-styles).\n\n```js\nconst style = require('ansi-styles');\ncore.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!')\n```\n\n#### Action state\n\nYou can use this library to save state and get state for sharing information between a given wrapper action:\n\n**action.yml**:\n\n```yaml\nname: 'Wrapper action sample'\ninputs:\n  name:\n    default: 'GitHub'\nruns:\n  using: 'node12'\n  main: 'main.js'\n  post: 'cleanup.js'\n```\n\nIn action's `main.js`:\n\n```js\nconst core = require('@actions/core');\n\ncore.saveState(\"pidToKill\", 12345);\n```\n\nIn action's `cleanup.js`:\n\n```js\nconst core = require('@actions/core');\n\nvar pid = core.getState(\"pidToKill\");\n\nprocess.kill(pid);\n```\n\n#### OIDC Token\n\nYou can use these methods to interact with the GitHub OIDC provider and get a JWT ID token which would help to get access token from third party cloud providers.\n\n**Method Name**: getIDToken()\n\n**Inputs**\n\naudience : optional\n\n**Outputs**\n\nA [JWT](https://jwt.io/) ID Token\n\nIn action's `main.ts`:\n```js\nconst core = require('@actions/core');\nasync function getIDTokenAction(): Promise<void> {\n  \n   const audience = core.getInput('audience', {required: false})\n   \n   const id_token1 = await core.getIDToken()            // ID Token with default audience\n   const id_token2 = await core.getIDToken(audience)    // ID token with custom audience\n   \n   // this id_token can be used to get access token from third party cloud providers\n}\ngetIDTokenAction()\n```\n\nIn action's `actions.yml`:\n\n```yaml\nname: 'GetIDToken'\ndescription: 'Get ID token from Github OIDC provider'\ninputs:\n  audience:  \n    description: 'Audience for which the ID token is intended for'\n    required: false\noutputs:\n  id_token1: \n    description: 'ID token obtained from OIDC provider'\n  id_token2: \n    description: 'ID token obtained from OIDC provider'\nruns:\n  using: 'node12'\n  main: 'dist/index.js'\n```\n\n#### Filesystem path helpers\n\nYou can use these methods to manipulate file paths across operating systems.\n\nThe `toPosixPath` function converts input paths to Posix-style (Linux) paths.\nThe `toWin32Path` function converts input paths to Windows-style paths. These\nfunctions work independently of the underlying runner operating system.\n\n```js\ntoPosixPath('\\\\foo\\\\bar') // => /foo/bar\ntoWin32Path('/foo/bar') // => \\foo\\bar\n```\n\nThe `toPlatformPath` function converts input paths to the expected value on the runner's operating system.\n\n```js\n// On a Windows runner.\ntoPlatformPath('/foo/bar') // => \\foo\\bar\n\n// On a Linux runner.\ntoPlatformPath('\\\\foo\\\\bar') // => /foo/bar\n```\n\n#### Platform helper\n\nProvides shorthands for getting information about platform action is running on.\n\n```js\nimport { platform } from '@actions/core'\n\n/* equals to a call of os.platform() */\nplatform.platform // 'win32' | 'darwin' | 'linux' | 'freebsd' | 'openbsd' | 'android' | 'cygwin' | 'sunos'\n\n/* equals to a call of os.arch() */\nplatform.arch // 'x64' | 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x'\n\n/* common shorthands for platform-specific logic */\nplatform.isWindows // true\nplatform.isMacOS // false\nplatform.isLinux // false\n\n/* run platform-specific script to get more details about the exact platform, works on Windows, MacOS and Linux */\nconst {\n  name, // Microsoft Windows 11 Enterprise\n  version, // 10.0.22621\n} = await platform.getDetails()\n```\n\n#### Populating job summary\n\nThese methods can be used to populate a [job summary](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary). A job summary is a buffer that can be added to throughout your job via `core.summary` methods.\n\nJob summaries when complete must be written to the summary buffer file via the `core.summary.write()` method.\n\nAll methods except `addRaw()` utilize the `addRaw()` method to append to the buffer, followed by an EOL using the `addEOL()` method.\n\n```typescript\n\n// Write raw text, optionally add an EOL after the content, defaults to false\ncore.summary.addRaw('Some content here :speech_balloon:', true)\n// Output: Some content here :speech_balloon:\\n\n\n// Add an operating system-specific end-of-line marker\ncore.summary.addEOL()\n// Output (POSIX): \\n\n// Output (Windows): \\r\\n\n\n// Add a codeblock with an optional language for syntax highlighting\ncore.summary.addCodeBlock('console.log(\\'hello world\\')', 'javascript')\n// Output: <pre lang=\"javascript\"><code>console.log('hello world')</code></pre>\n\n// Add a list, second parameter indicates if list is ordered, defaults to false\ncore.summary.addList(['item1','item2','item3'], true)\n// Output: <ol><li>item1</li><li>item2</li><li>item3</li></ol>\n\n// Add a collapsible HTML details element\ncore.summary.addDetails('Label', 'Some detail that will be collapsed')\n// Output: <details><summary>Label</summary>Some detail that will be collapsed</details>\n\n// Add an image, image options parameter is optional, you can supply one of or both width and height in pixels\ncore.summary.addImage('example.png', 'alt description of img', {width: '100', height: '100'})\n// Output: <img src=\"example.png\" alt=\"alt description of img\" width=\"100\" height=\"100\">\n\n// Add an HTML section heading element, optionally pass a level that translates to 'hX' ie. h2. Defaults to h1\ncore.summary.addHeading('My Heading', '2')\n// Output: <h2>My Heading</h2>\n\n// Add an HTML thematic break <hr>\ncore.summary.addSeparator()\n// Output: <hr>\n\n// Add an HTML line break <br>\ncore.summary.addBreak()\n// Output: <br>\n\n// Add an HTML blockquote with an optional citation\ncore.summary.addQuote('To be or not to be', 'Shakespeare')\n// Output: <blockquote cite=\"Shakespeare\">To be or not to be</blockquote>\n\n// Add an HTML anchor tag\ncore.summary.addLink('click here', 'https://github.com')\n// Output: <a href=\"https://github.com\">click here</a>\n\n```\n\nTables are added using the `addTable()` method, and an array of `SummaryTableRow`.\n\n```typescript\n\nexport type SummaryTableRow = (SummaryTableCell | string)[]\n\nexport interface SummaryTableCell {\n  /**\n   * Cell content\n   */\n  data: string\n  /**\n   * Render cell as header\n   * (optional) default: false\n   */\n  header?: boolean\n  /**\n   * Number of columns the cell extends\n   * (optional) default: '1'\n   */\n  colspan?: string\n  /**\n   * Number of rows the cell extends\n   * (optional) default: '1'\n   */\n  rowspan?: string\n}\n\n```\n\nFor example\n\n```typescript\n\nconst tableData = [\n  {data: 'Header1', header: true},\n  {data: 'Header2', header: true},\n  {data: 'Header3', header: true},\n  {data: 'MyData1'},\n  {data: 'MyData2'},\n  {data: 'MyData3'}\n]\n\n// Add an HTML table\ncore.summary.addTable([tableData])\n// Output: <table><tr><th>Header1</th><th>Header2</th><th>Header3</th></tr><tr></tr><td>MyData1</td><td>MyData2</td><td>MyData3</td></tr></table>\n\n```\n\nIn addition to job summary content, there are utility functions for interfacing with the buffer.\n\n```typescript\n\n// Empties the summary buffer AND wipes the summary file on disk\ncore.summary.clear()\n\n// Returns the current summary buffer as a string\ncore.summary.stringify()\n\n// If the summary buffer is empty\ncore.summary.isEmptyBuffer()\n\n// Resets the summary buffer without writing to the summary file on disk\ncore.summary.emptyBuffer()\n\n// Writes text in the buffer to the summary buffer file and empties the buffer, optionally overwriting all existing content in the summary file with buffer contents. Defaults to false.\ncore.summary.write({overwrite: true})\n```","packages/exec/README.md":"# `@actions/exec`\n\n## Usage\n\n#### Basic\n\nYou can use this package to execute tools in a cross platform way:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node index.js');\n```\n\n#### Args\n\nYou can also pass in arg arrays:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node', ['index.js', 'foo=bar']);\n```\n\n#### Output/options\n\nCapture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):\n\n```js\nconst exec = require('@actions/exec');\n\nlet myOutput = '';\nlet myError = '';\n\nconst options = {};\noptions.listeners = {\n  stdout: (data: Buffer) => {\n    myOutput += data.toString();\n  },\n  stderr: (data: Buffer) => {\n    myError += data.toString();\n  }\n};\noptions.cwd = './lib';\n\nawait exec.exec('node', ['index.js', 'foo=bar'], options);\n```\n\n#### Exec tools not in the PATH\n\nYou can specify the full path for tools not in the PATH:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('\"/path/to/my-tool\"', ['arg1']);\n```\n","packages/github/README.md":"# `@actions/github`\n\n> A hydrated Octokit client.\n\n## Usage\n\nReturns an authenticated Octokit client that follows the machine [proxy settings](https://help.github.com/en/actions/hosting-your-own-runners/using-a-proxy-server-with-self-hosted-runners) and correctly sets GHES base urls. See https://octokit.github.io/rest.js for the API.\n\n**Note:** This package is ESM-only starting from v9.0.0. For CommonJS projects, use dynamic import:\n```js\nasync function main() {\n    const { getOctokit, context } = await import('@actions/github');\n    // ... your code here\n}\nmain();\n```\n\nFor bundled actions (recommended), most bundlers like esbuild, webpack, and rollup handle ESM imports automatically.\n\n```js\nimport * as github from '@actions/github';\nimport * as core from '@actions/core';\n\nasync function run() {\n    // This should be a token with access to your repository scoped in as a secret.\n    // The YML workflow will need to set myToken with the GitHub Secret Token\n    // myToken: ${{ secrets.GITHUB_TOKEN }}\n    // https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token#about-the-github_token-secret\n    const myToken = core.getInput('myToken');\n\n    const octokit = github.getOctokit(myToken)\n\n    // You can also pass in additional options as a second parameter to getOctokit\n    // const octokit = github.getOctokit(myToken, {userAgent: \"MyActionVersion1\"});\n\n    const { data: pullRequest } = await octokit.rest.pulls.get({\n        owner: 'octokit',\n        repo: 'rest.js',\n        pull_number: 123,\n        mediaType: {\n          format: 'diff'\n        }\n    });\n\n    console.log(pullRequest);\n}\n\nrun();\n```\n\nYou can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.\n\n```js\nconst result = await octokit.graphql(query, variables);\n```\n\nFinally, you can get the context of the current action:\n\n```js\nimport * as github from '@actions/github';\n\nconst context = github.context;\n\nconst newIssue = await octokit.rest.issues.create({\n  ...context.repo,\n  title: 'New issue!',\n  body: 'Hello Universe!'\n});\n```\n\n## Webhook payload typescript definitions\n\nThe npm module `@octokit/webhooks-definitions` provides type definitions for the response payloads. You can cast the payload to these types for better type information.\n\nFirst, install the npm module `npm install @octokit/webhooks-definitions`\n\nThen, assert the type based on the eventName\n```ts\nimport * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport {PushEvent} from '@octokit/webhooks-definitions/schema'\n\nif (github.context.eventName === 'push') {\n  const pushPayload = github.context.payload as PushEvent\n  core.info(`The head commit is: ${pushPayload.head_commit}`)\n}\n```\n\n## Extending the Octokit instance\n`@octokit/core` now supports the [plugin architecture](https://github.com/octokit/core.js#plugins). You can extend the GitHub instance using plugins. \n\nFor example, using the `@octokit/plugin-enterprise-server` you can now access enterprise admin apis on GHES instances.\n\n```ts\nimport { GitHub, getOctokitOptions } from '@actions/github/lib/utils'\nimport { enterpriseServer220Admin } from '@octokit/plugin-enterprise-server'\n\nconst octokit = GitHub.plugin(enterpriseServer220Admin)\n// or override some of the default values as well \n// const octokit = GitHub.plugin(enterpriseServer220Admin).defaults({userAgent: \"MyNewUserAgent\"})\n\nconst myToken = core.getInput('myToken');\nconst myOctokit = new octokit(getOctokitOptions(token))\n// Create a new user\nmyOctokit.rest.enterpriseAdmin.createUser({\n  login: \"testuser\",\n  email: \"testuser@test.com\",\n});\n```\n","packages/glob/README.md":"# `@actions/glob`\n\n## Usage\n\n### Basic\n\nYou can use this package to search for files matching glob patterns.\n\nRelative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.\n\n```js\nconst glob = require('@actions/glob');\n\nconst patterns = ['**/tar.gz', '**/tar.bz']\nconst globber = await glob.create(patterns.join('\\n'))\nconst files = await globber.glob()\n```\n\n### Opt out of following symbolic links\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**', {followSymbolicLinks: false})\nconst files = await globber.glob()\n```\n\n### Iterator\n\nWhen dealing with a large amount of results, consider iterating the results as they are returned:\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**')\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Recommended action inputs\n\nGlob follows symbolic links by default. Following is often appropriate unless deleting files.\n\nUsers may want to opt-out from following symbolic links for other reasons. For example,\nexcessive amounts of symbolic links can create the appearance of very, very many files\nand slow the search.\n\nWhen an action allows a user to specify input patterns, it is generally recommended to\nallow users to opt-out from following symbolic links.\n\nSnippet from `action.yml`:\n\n```yaml\ninputs:\n  files:\n    description: 'Files to print'\n    required: true\n  follow-symbolic-links:\n    description: 'Indicates whether to follow symbolic links'\n    default: true\n```\n\nAnd corresponding toolkit consumption:\n\n```js\nconst core = require('@actions/core')\nconst glob = require('@actions/glob')\n\nconst globOptions = {\n  followSymbolicLinks: core.getInput('follow-symbolic-links').toUpper() !== 'FALSE'\n}\nconst globber = glob.create(core.getInput('files'), globOptions)\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Hashing files (`hashFiles`)\n\n`hashFiles` computes a hash of files matched by glob patterns.\n\nBy default, only files under the workspace (`GITHUB_WORKSPACE`) are eligible to be hashed.\n\nTo improve security, file eligibility is evaluated using each file's resolved (real) path to prevent symbolic link traversal outside the allowed root path(s).\n\n### Options\n\n- `roots?: string[]` — Allowlist of root paths. Only files that resolve under (or equal) one of these roots are hashed. Defaults to `[GITHUB_WORKSPACE]` (or `currentWorkspace` if provided).\n- `allowFilesOutsideWorkspace?: boolean` — Explicit opt-in to include files outside the specified root path(s). Defaults to `false`.\n- `exclude?: string[]` — Glob patterns to exclude from hashing. Defaults to `[]`.\n\nIf files match your patterns but are outside the allowed roots and `allowFilesOutsideWorkspace` is not enabled, those files are skipped and a warning is emitted. If no eligible files remain after filtering, `hashFiles` returns an empty string (`''`).\n\n### Example\n\n```js\nconst glob = require('@actions/glob')\n\nconst hash = await glob.hashFiles('**/*.json', process.env.GITHUB_WORKSPACE || '', {\n  roots: [process.env.GITHUB_WORKSPACE, process.env.GITHUB_ACTION_PATH].filter(Boolean),\n  allowFilesOutsideWorkspace: true,\n  exclude: ['**/node_modules/**']\n})\n\nconsole.log(hash)\n```\n\n## Patterns\n\n### Glob behavior\n\nPatterns `*`, `?`, `[...]`, `**` (globstar) are supported.\n\nWith the following behaviors:\n- File names that begin with `.` may be included in the results\n- Case insensitive on Windows\n- Directory separator `/` and `\\` both supported on Windows\n\n### Tilde expansion\n\nSupports basic tilde expansion, for current user HOME replacement only.\n\nExample:\n- `~` may expand to /Users/johndoe\n- `~/foo` may expand to /Users/johndoe/foo\n\n### Comments\n\nPatterns that begin with `#` are treated as comments.\n\n### Exclude patterns\n\nLeading `!` changes the meaning of an include pattern to exclude.\n\nMultiple leading `!` flips the meaning.\n\n### Escaping\n\nWrapping special characters in `[]` can be used to escape literal glob characters\nin a file name. For example the literal file name `hello[a-z]` can be escaped as `hello[[]a-z]`.\n\nOn Linux/macOS `\\` is also treated as an escape character.\n","packages/http-client/README.md":"# `@actions/http-client`\n\nA lightweight HTTP client optimized for building actions.\n\n## Features\n\n  - HTTP client with TypeScript generics and async/await/Promises\n  - Typings included!\n  - [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner\n  - Targets ES2019 (runner runs actions with node 24+).  Only supported on node 20+.\n  - Basic, Bearer and PAT Support out of the box.  Extensible handlers for others.\n  - Redirects supported\n\nFeatures and releases [here](./RELEASES.md)\n\n## Install\n\n```\nnpm install @actions/http-client --save\n```\n\n## Samples\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Errors\n\n### HTTP\n\nThe HTTP client does not throw unless truly exceptional.\n\n* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.\n* Redirects (3xx) will be followed by default.\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Debugging\n\nTo enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:\n\n```shell\nexport NODE_DEBUG=http\n```\n\n## Node support\n\nThe http-client is built using Node 24. It may work on previous node LTS versions but it's tested and officially supported on Node 20+.\n\n## Support and Versioning\n\nWe follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).\n\n## Contributing\n\nWe welcome PRs.  Please create an issue and if applicable, a design before proceeding with code.\n\nonce:\n\n```\nnpm install\n```\n\nTo build:\n\n```\nnpm run build\n```\n\nTo run all tests:\n\n```\nnpm test\n```\n","packages/io/README.md":"# `@actions/io`\n\n> Core functions for cli filesystem scenarios\n\n## Usage\n\n#### mkdir -p\n\nRecursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:\n\n```js\nconst io = require('@actions/io');\n\nawait io.mkdirP('path/to/make');\n```\n\n#### cp/mv\n\nCopy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):\n\n```js\nconst io = require('@actions/io');\n\n// Recursive must be true for directories\nconst options = { recursive: true, force: false }\n\nawait io.cp('path/to/directory', 'path/to/dest', options);\nawait io.mv('path/to/file', 'path/to/dest');\n```\n\n#### rm -rf\n\nRemove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.\n\n```js\nconst io = require('@actions/io');\n\nawait io.rmRF('path/to/directory');\nawait io.rmRF('path/to/file');\n```\n\n#### which\n\nGet the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).\n\n```js\nconst exec = require('@actions/exec');\nconst io = require('@actions/io');\n\nconst pythonPath: string = await io.which('python', true)\n\nawait exec.exec(`\"${pythonPath}\"`, ['main.py']);\n```\n","packages/tool-cache/README.md":"# `@actions/tool-cache`\n\n> Functions necessary for downloading and caching tools.\n\n## Usage\n\n#### Download\n\nYou can use this to download tools (or other files) from a download URL:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n```\n\n#### Extract\n\nThese can then be extracted in platform specific ways:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nif (process.platform === 'win32') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');\n  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');\n\n  // Or alternately\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');\n  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');\n}\nelse if (process.platform === 'darwin') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg');\n  const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to');\n}\nelse {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n}\n```\n\n#### Cache\n\nFinally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners.\n\nYou'll often want to add it to the path as part of this step:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\nconst node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n\nconst cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');\ncore.addPath(cachedPath);\n```\n\nYou can also cache files for reuse.\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');\n```\n\n#### Find\n\nFinally, you can find directories and files you've previously cached:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst nodeDirectory = tc.find('node', '12.x', 'x64');\ncore.addPath(nodeDirectory);\n```\n\nYou can even find all cached versions of a tool:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst allNodeVersions = tc.findAllVersions('node');\nconsole.log(`Versions of node available: ${allNodeVersions}`);\n```\n"},"files":{"packages/artifact/README.md":"# `@actions/artifact`\n\nInteract programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).\n\nThis is the core library that powers the [`@actions/upload-artifact`](https://github.com/actions/upload-artifact) and [`@actions/download-artifact`](https://github.com/actions/download-artifact) actions.\n\n- [`@actions/artifact`](#actionsartifact)\n  - [v2 - What's New](#v2---whats-new)\n    - [Improvements](#improvements)\n    - [Breaking changes](#breaking-changes)\n  - [Quick Start](#quick-start)\n  - [Examples](#examples)\n    - [Upload and Download](#upload-and-download)\n    - [Delete an Artifact](#delete-an-artifact)\n    - [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)\n    - [Speeding up large uploads](#speeding-up-large-uploads)\n  - [Additional Resources](#additional-resources)\n\n## v2 - What's New\n\n> [!IMPORTANT]\n> @actions/artifact v2+, upload-artifact@v4+, and download-artifact@v4+ are not currently supported on GHES yet. The previous version of this package can be found at [this tag](https://github.com/actions/toolkit/tree/@actions/artifact@1.1.2/packages/artifact) and [on npm](https://www.npmjs.com/package/@actions/artifact/v/1.1.2).\n\nThe release of `@actions/artifact@v2` (including `upload-artifact@v4` and `download-artifact@v4`) are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.\n\n### Improvements\n\n1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.\n2. Once uploaded, an Artifact ID is returned and Artifacts are immediately available in the UI and [REST API](https://docs.github.com/en/rest/actions/artifacts). Previously, you would have to wait for the run to be completed before an ID was available or any APIs could be utilized.\n3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.\n4. The contents of an Artifact are uploaded together into an _immutable_ archive. They cannot be altered by subsequent jobs. Both of these factors help reduce the possibility of accidentally corrupting Artifact files. (Digest/integrity hash coming soon in the API!)\n5. This library (and `actions/download-artifact`) now support downloading Artifacts from _other_ repositories and runs if a `GITHUB_TOKEN` with sufficient `actions:read` permissions are provided.\n\n### Breaking changes\n\n1. Firewall rules required for self-hosted runners.\n\n    If you are using self-hosted runners behind a firewall, you must have flows open to [Actions endpoints](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github). If you cannot use wildcard rules for your firewall, see the GitHub [meta endpoint](https://api.github.com/meta) for specific endpoints.\n\n    e.g.\n\n    ```bash\n    curl https://api.github.com/meta | jq .domains.actions\n    ```\n\n2. Uploading to the same named Artifact multiple times.\n\n    Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once.\n\n3. Limit of Artifacts for an individual job.\n\n    Each job in a workflow run now has a limit of 10 artifacts.\n\n## Quick Start\n\nInstall the package:\n\n```bash\nnpm i @actions/artifact\n```\n\nImport the module:\n\n```js\n// ES6 module\nimport {DefaultArtifactClient} from '@actions/artifact'\n\n// CommonJS\nconst {DefaultArtifactClient} = require('@actions/artifact')\n```\n\nThen instantiate:\n\n```js\nconst artifact = new DefaultArtifactClient()\n```\n\nℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).\n\n## Examples\n\n### Upload and Download\n\nThe most basic scenario is uploading one or more files to an Artifact, then downloading that Artifact. Downloads are based on the Artifact ID, which can be obtained in the response of `uploadArtifact`, `getArtifact`, `listArtifacts` or via the [REST API](https://docs.github.com/en/rest/actions/artifacts).\n\n```js\nconst {id, size} = await artifact.uploadArtifact(\n  // name of the artifact\n  'my-artifact',\n  // files to include (supports absolute and relative paths)\n  ['/absolute/path/file1.txt', './relative/file2.txt'],\n  {\n    // optional: how long to retain the artifact\n    // if unspecified, defaults to repository/org retention settings (the limit of this value)\n    retentionDays: 10\n  }\n)\n\nconsole.log(`Created artifact with id: ${id} (bytes: ${size}`)\n\nconst {downloadPath} = await artifact.downloadArtifact(id, {\n  // optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE\n  path: '/tmp/dst/path',\n})\n\nconsole.log(`Downloaded artifact ${id} to: ${downloadPath}`)\n```\n\n### Delete an Artifact\n\nTo delete an artifact, all you need is the name.\n\n```js\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact'\n)\n\nconsole.log(`Deleted Artifact ID '${id}'`)\n```\n\nIt also supports options to delete from other repos/runs given a github token with `actions:write` permissions on the target repository is supplied.\n\n```js\nconst findBy = {\n  // must have actions:write permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\n\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact',\n  // options to find by other repo/owner\n  { findBy }\n)\n\nconsole.log(`Deleted Artifact ID '${id}' from ${findBy.repositoryOwner}/ ${findBy.repositoryName}`)\n```\n\n### Downloading from other workflow runs or repos\n\nIt may be useful to download Artifacts from other workflow runs, or even other repositories. By default, the permissions are scoped so they can only download Artifacts within the current workflow run. To elevate permissions for this scenario, you must specify `options.findBy` to `downloadArtifact`.\n\n```ts\nconst findBy = {\n  // must have actions:read permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\nawait artifact.downloadArtifact(1337, {\n  findBy\n})\n\n// can also be used in other methods\n\nawait artifact.getArtifact('my-artifact', {\n  findBy\n})\n\nawait artifact.listArtifacts({\n  findBy\n})\n```\n\n### Speeding up large uploads\n\nIf you have large files that need to be uploaded (or file types that don't compress well), you may benefit from changing the compression level of the Artifact archive. NOTE: This is a tradeoff between artifact upload time and stored data size.\n\n```ts\nawait artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {\n  // The level of compression for Zlib to be applied to the artifact archive.\n  // - 0: No compression\n  // - 1: Best speed\n  // - 6: Default compression (same as GNU Gzip)\n  // - 9: Best compression\n  compressionLevel: 0\n})\n```\n\n## Additional Resources\n\n- [Releases](./RELEASES.md)\n- [Contribution Guide](./CONTRIBUTIONS.md)\n- [Frequently Asked Questions](./docs/faq.md)\n","packages/artifact/docs/faq.md":"# Frequently Asked Questions\n\n- [Frequently Asked Questions](#frequently-asked-questions)\n  - [Supported Characters](#supported-characters)\n  - [Compression? ZIP? How is my artifact stored?](#compression-zip-how-is-my-artifact-stored)\n  - [Which versions of the artifacts packages are compatible?](#which-versions-of-the-artifacts-packages-are-compatible)\n  - [How long will my artifact be available?](#how-long-will-my-artifact-be-available)\n\n## Supported Characters\n\nWhen uploading an artifact, the inputted `name` parameter along with the files specified in `files` cannot contain any of the following characters. If they are present in `name` or `files`,  the Artifact will be rejected by the server and the upload will fail. These characters are not allowed due to limitations and restrictions with certain file systems such as NTFS. To maintain platform-agnostic behavior, characters that are not supported by an individual filesystem/platform will not be supported on all filesystems/platforms.\n\n- \"\n- :\n- <\n- \\>\n- |\n- \\*\n- ?\n\nIn addition to the aforementioned characters, the inputted `name` also cannot include the following\n- \\\n- /\n\n## Compression? ZIP? How is my artifact stored?\n\nWhen creating an Artifact, the files are dynamically compressed and streamed into a ZIP archive. Since they are stored in a ZIP, they can be compressed by Zlib in varying levels.\n\nThe value can range from 0 to 9:\n\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\n\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n## Which versions of the artifacts packages are compatible?\n[actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact), leverage [GitHub Actions toolkit](https://github.com/actions/toolkit) and are typically used together to upload and download artifacts in your workflows.\n\n| upload-artifact | download-artifact | toolkit |\n|---|---|---|\n| v4 | v4 | v2 |\n| < v3 | < v3 | < v1 |\n\nUse matching versions of `actions/upload-artifact` and `actions/download-artifact` to ensure compatibility.\n\nIn your GitHub Actions workflow YAML file, you specify the version of the actions you want to use. For example:\n\n```yaml\n  uses: actions/upload-artifact@v4\n  # ...\n  uses: actions/download-artifact@v4\n  # ...\n```\n\n**Release Notes:**\nCheck the release notes for each repository to see if there are any specific notes about compatibility or changes in behavior.\n\n## How long will my artifact be available?\nThe default retention period is **90 days**. For more information, visit: https://github.com/actions/upload-artifact?tab=readme-ov-file#retention-period \n","packages/artifact/docs/generated/README.md":"@actions/artifact\n\n# @actions/artifact\n\n## Table of contents\n\n### Classes\n\n- [ArtifactNotFoundError](classes/ArtifactNotFoundError.md)\n- [DefaultArtifactClient](classes/DefaultArtifactClient.md)\n- [FilesNotFoundError](classes/FilesNotFoundError.md)\n- [GHESNotSupportedError](classes/GHESNotSupportedError.md)\n- [InvalidResponseError](classes/InvalidResponseError.md)\n- [NetworkError](classes/NetworkError.md)\n- [UsageError](classes/UsageError.md)\n\n### Interfaces\n\n- [Artifact](interfaces/Artifact.md)\n- [ArtifactClient](interfaces/ArtifactClient.md)\n- [DeleteArtifactResponse](interfaces/DeleteArtifactResponse.md)\n- [DownloadArtifactOptions](interfaces/DownloadArtifactOptions.md)\n- [DownloadArtifactResponse](interfaces/DownloadArtifactResponse.md)\n- [FindOptions](interfaces/FindOptions.md)\n- [GetArtifactResponse](interfaces/GetArtifactResponse.md)\n- [ListArtifactsOptions](interfaces/ListArtifactsOptions.md)\n- [ListArtifactsResponse](interfaces/ListArtifactsResponse.md)\n- [UploadArtifactOptions](interfaces/UploadArtifactOptions.md)\n- [UploadArtifactResponse](interfaces/UploadArtifactResponse.md)\n\n### Variables\n\n- [default](README.md#default)\n\n## Variables\n\n### default\n\n• `Const` **default**: [`ArtifactClient`](interfaces/ArtifactClient.md)\n\n#### Defined in\n\n[src/artifact.ts:7](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/artifact.ts#L7)\n","packages/artifact/docs/generated/classes/ArtifactNotFoundError.md":"[@actions/artifact](../README.md) / ArtifactNotFoundError\n\n# Class: ArtifactNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`ArtifactNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](ArtifactNotFoundError.md#constructor)\n\n### Properties\n\n- [message](ArtifactNotFoundError.md#message)\n- [name](ArtifactNotFoundError.md#name)\n- [stack](ArtifactNotFoundError.md#stack)\n- [prepareStackTrace](ArtifactNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](ArtifactNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](ArtifactNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new ArtifactNotFoundError**(`message?`): [`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'Artifact not found'` |\n\n#### Returns\n\n[`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:24](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L24)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/DefaultArtifactClient.md":"[@actions/artifact](../README.md) / DefaultArtifactClient\n\n# Class: DefaultArtifactClient\n\nThe default artifact client that is used by the artifact action(s).\n\n## Implements\n\n- [`ArtifactClient`](../interfaces/ArtifactClient.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](DefaultArtifactClient.md#constructor)\n\n### Methods\n\n- [deleteArtifact](DefaultArtifactClient.md#deleteartifact)\n- [downloadArtifact](DefaultArtifactClient.md#downloadartifact)\n- [getArtifact](DefaultArtifactClient.md#getartifact)\n- [listArtifacts](DefaultArtifactClient.md#listartifacts)\n- [uploadArtifact](DefaultArtifactClient.md#uploadartifact)\n\n## Constructors\n\n### constructor\n\n• **new DefaultArtifactClient**(): [`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n#### Returns\n\n[`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[deleteArtifact](../interfaces/ArtifactClient.md#deleteartifact)\n\n#### Defined in\n\n[src/internal/client.ts:248](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L248)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](../interfaces/DownloadArtifactOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[downloadArtifact](../interfaces/ArtifactClient.md#downloadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:138](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L138)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[getArtifact](../interfaces/ArtifactClient.md#getartifact)\n\n#### Defined in\n\n[src/internal/client.ts:212](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L212)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](../interfaces/ListArtifactsOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[listArtifacts](../interfaces/ArtifactClient.md#listartifacts)\n\n#### Defined in\n\n[src/internal/client.ts:176](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L176)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](../interfaces/UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[uploadArtifact](../interfaces/ArtifactClient.md#uploadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L113)\n","packages/artifact/docs/generated/classes/FilesNotFoundError.md":"[@actions/artifact](../README.md) / FilesNotFoundError\n\n# Class: FilesNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`FilesNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](FilesNotFoundError.md#constructor)\n\n### Properties\n\n- [files](FilesNotFoundError.md#files)\n- [message](FilesNotFoundError.md#message)\n- [name](FilesNotFoundError.md#name)\n- [stack](FilesNotFoundError.md#stack)\n- [prepareStackTrace](FilesNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](FilesNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](FilesNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new FilesNotFoundError**(`files?`): [`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `files` | `string`[] | `[]` |\n\n#### Returns\n\n[`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:4](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L4)\n\n## Properties\n\n### files\n\n• **files**: `string`[]\n\n#### Defined in\n\n[src/internal/shared/errors.ts:2](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L2)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/GHESNotSupportedError.md":"[@actions/artifact](../README.md) / GHESNotSupportedError\n\n# Class: GHESNotSupportedError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`GHESNotSupportedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GHESNotSupportedError.md#constructor)\n\n### Properties\n\n- [message](GHESNotSupportedError.md#message)\n- [name](GHESNotSupportedError.md#name)\n- [stack](GHESNotSupportedError.md#stack)\n- [prepareStackTrace](GHESNotSupportedError.md#preparestacktrace)\n- [stackTraceLimit](GHESNotSupportedError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](GHESNotSupportedError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new GHESNotSupportedError**(`message?`): [`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'@actions/artifact v2.0.0+, upload-artifact@v4+ and download-artifact@v4+ are not currently supported on GHES.'` |\n\n#### Returns\n\n[`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:31](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L31)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/InvalidResponseError.md":"[@actions/artifact](../README.md) / InvalidResponseError\n\n# Class: InvalidResponseError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`InvalidResponseError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](InvalidResponseError.md#constructor)\n\n### Properties\n\n- [message](InvalidResponseError.md#message)\n- [name](InvalidResponseError.md#name)\n- [stack](InvalidResponseError.md#stack)\n- [prepareStackTrace](InvalidResponseError.md#preparestacktrace)\n- [stackTraceLimit](InvalidResponseError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](InvalidResponseError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new InvalidResponseError**(`message`): [`InvalidResponseError`](InvalidResponseError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message` | `string` |\n\n#### Returns\n\n[`InvalidResponseError`](InvalidResponseError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:17](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L17)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","packages/artifact/docs/generated/classes/NetworkError.md":"[@actions/artifact](../README.md) / NetworkError\n\n# Class: NetworkError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`NetworkError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](NetworkError.md#constructor)\n\n### Properties\n\n- [code](NetworkError.md#code)\n- [message](NetworkError.md#message)\n- [name](NetworkError.md#name)\n- [stack](NetworkError.md#stack)\n- [prepareStackTrace](NetworkError.md#preparestacktrace)\n- [stackTraceLimit](NetworkError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](NetworkError.md#capturestacktrace)\n- [isNetworkErrorCode](NetworkError.md#isnetworkerrorcode)\n\n## Constructors\n\n### constructor\n\n• **new NetworkError**(`code`): [`NetworkError`](NetworkError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code` | `string` |\n\n#### Returns\n\n[`NetworkError`](NetworkError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:42](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L42)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L40)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isNetworkErrorCode\n\n▸ **isNetworkErrorCode**(`code?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:49](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L49)\n","packages/artifact/docs/generated/classes/UsageError.md":"[@actions/artifact](../README.md) / UsageError\n\n# Class: UsageError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`UsageError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](UsageError.md#constructor)\n\n### Properties\n\n- [message](UsageError.md#message)\n- [name](UsageError.md#name)\n- [stack](UsageError.md#stack)\n- [prepareStackTrace](UsageError.md#preparestacktrace)\n- [stackTraceLimit](UsageError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](UsageError.md#capturestacktrace)\n- [isUsageErrorMessage](UsageError.md#isusageerrormessage)\n\n## Constructors\n\n### constructor\n\n• **new UsageError**(): [`UsageError`](UsageError.md)\n\n#### Returns\n\n[`UsageError`](UsageError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L62)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isUsageErrorMessage\n\n▸ **isUsageErrorMessage**(`msg?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `msg?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:68](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L68)\n","packages/artifact/docs/generated/interfaces/Artifact.md":"[@actions/artifact](../README.md) / Artifact\n\n# Interface: Artifact\n\nAn Actions Artifact\n\n## Table of contents\n\n### Properties\n\n- [createdAt](Artifact.md#createdat)\n- [id](Artifact.md#id)\n- [name](Artifact.md#name)\n- [size](Artifact.md#size)\n\n## Properties\n\n### createdAt\n\n• `Optional` **createdAt**: `Date`\n\nThe time when the artifact was created\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:128](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L128)\n\n___\n\n### id\n\n• **id**: `number`\n\nThe ID of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:118](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L118)\n\n___\n\n### name\n\n• **name**: `string`\n\nThe name of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L113)\n\n___\n\n### size\n\n• **size**: `number`\n\nThe size of the artifact in bytes\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:123](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L123)\n","packages/artifact/docs/generated/interfaces/ArtifactClient.md":"[@actions/artifact](../README.md) / ArtifactClient\n\n# Interface: ArtifactClient\n\nGeneric interface for the artifact client.\n\n## Implemented by\n\n- [`DefaultArtifactClient`](../classes/DefaultArtifactClient.md)\n\n## Table of contents\n\n### Methods\n\n- [deleteArtifact](ArtifactClient.md#deleteartifact)\n- [downloadArtifact](ArtifactClient.md#downloadartifact)\n- [getArtifact](ArtifactClient.md#getartifact)\n- [listArtifacts](ArtifactClient.md#listartifacts)\n- [uploadArtifact](ArtifactClient.md#uploadartifact)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L103)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](DownloadArtifactOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:89](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L89)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\n#### Defined in\n\n[src/internal/client.ts:75](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L75)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](ListArtifactsOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:57](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L57)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L40)\n","packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md":"[@actions/artifact](../README.md) / DeleteArtifactResponse\n\n# Interface: DeleteArtifactResponse\n\nResponse from the server when deleting an artifact\n\n## Table of contents\n\n### Properties\n\n- [id](DeleteArtifactResponse.md#id)\n\n## Properties\n\n### id\n\n• **id**: `number`\n\nThe id of the artifact that was deleted\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:163](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L163)\n","packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md":"[@actions/artifact](../README.md) / DownloadArtifactOptions\n\n# Interface: DownloadArtifactOptions\n\nOptions for downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [path](DownloadArtifactOptions.md#path)\n\n## Properties\n\n### path\n\n• `Optional` **path**: `string`\n\nDenotes where the artifact will be downloaded to. If not specified then the artifact is download to GITHUB_WORKSPACE\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L103)\n","packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md":"[@actions/artifact](../README.md) / DownloadArtifactResponse\n\n# Interface: DownloadArtifactResponse\n\nResponse from the server when downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [downloadPath](DownloadArtifactResponse.md#downloadpath)\n\n## Properties\n\n### downloadPath\n\n• `Optional` **downloadPath**: `string`\n\nThe path where the artifact was downloaded to\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:93](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L93)\n","packages/artifact/docs/generated/interfaces/FindOptions.md":"[@actions/artifact](../README.md) / FindOptions\n\n# Interface: FindOptions\n\n## Table of contents\n\n### Properties\n\n- [findBy](FindOptions.md#findby)\n\n## Properties\n\n### findBy\n\n• `Optional` **findBy**: `Object`\n\nThe criteria for finding Artifact(s) out of the scope of the current run.\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `repositoryName` | `string` | Repository owner (eg. 'toolkit') |\n| `repositoryOwner` | `string` | Repository owner (eg. 'actions') |\n| `token` | `string` | Token with actions:read permissions |\n| `workflowRunId` | `number` | WorkflowRun of the artifact(s) to lookup |\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:136](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L136)\n","packages/artifact/docs/generated/interfaces/GetArtifactResponse.md":"[@actions/artifact](../README.md) / GetArtifactResponse\n\n# Interface: GetArtifactResponse\n\nResponse from the server when getting an artifact\n\n## Table of contents\n\n### Properties\n\n- [artifact](GetArtifactResponse.md#artifact)\n\n## Properties\n\n### artifact\n\n• **artifact**: [`Artifact`](Artifact.md)\n\nMetadata about the artifact that was found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L62)\n","packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md":"[@actions/artifact](../README.md) / ListArtifactsOptions\n\n# Interface: ListArtifactsOptions\n\nOptions for listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [latest](ListArtifactsOptions.md#latest)\n\n## Properties\n\n### latest\n\n• `Optional` **latest**: `boolean`\n\nFilter the workflow run's artifacts to the latest by name\nIn the case of reruns, this can be useful to avoid duplicates\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:73](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L73)\n","packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md":"[@actions/artifact](../README.md) / ListArtifactsResponse\n\n# Interface: ListArtifactsResponse\n\nResponse from the server when listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [artifacts](ListArtifactsResponse.md#artifacts)\n\n## Properties\n\n### artifacts\n\n• **artifacts**: [`Artifact`](Artifact.md)[]\n\nA list of artifacts that were found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:83](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L83)\n","packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md":"[@actions/artifact](../README.md) / UploadArtifactOptions\n\n# Interface: UploadArtifactOptions\n\nOptions for uploading an artifact\n\n## Table of contents\n\n### Properties\n\n- [compressionLevel](UploadArtifactOptions.md#compressionlevel)\n- [retentionDays](UploadArtifactOptions.md#retentiondays)\n\n## Properties\n\n### compressionLevel\n\n• `Optional` **compressionLevel**: `number`\n\nThe level of compression for Zlib to be applied to the artifact archive.\nThe value can range from 0 to 9:\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:52](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L52)\n\n___\n\n### retentionDays\n\n• `Optional` **retentionDays**: `number`\n\nDuration after which artifact will expire in days.\n\nBy default artifact expires after 90 days:\nhttps://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#downloading-and-deleting-artifacts-after-a-workflow-run-is-complete\n\nUse this option to override the default expiry.\n\nMin value: 1\nMax value: 90 unless changed by repository setting\n\nIf this is set to a greater value than the retention settings allowed, the retention on artifacts\nwill be reduced to match the max value allowed on server, and the upload process will continue. An\ninput of 0 assumes default retention setting.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:41](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L41)\n","packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md":"[@actions/artifact](../README.md) / UploadArtifactResponse\n\n# Interface: UploadArtifactResponse\n\nResponse from the server when an artifact is uploaded\n\n## Table of contents\n\n### Properties\n\n- [digest](UploadArtifactResponse.md#digest)\n- [id](UploadArtifactResponse.md#id)\n- [size](UploadArtifactResponse.md#size)\n\n## Properties\n\n### digest\n\n• `Optional` **digest**: `string`\n\nThe SHA256 digest of the artifact that was created. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:19](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L19)\n\n___\n\n### id\n\n• `Optional` **id**: `number`\n\nThe id of the artifact that was created. Not provided if no artifact was uploaded\nThis ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:14](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L14)\n\n___\n\n### size\n\n• `Optional` **size**: `number`\n\nTotal size of the artifact in bytes. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:8](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L8)\n","packages/attest/README.md":"# `@actions/attest`\n\nFunctions for generating signed attestations for workflow artifacts.\n\nAttestations bind some subject (a named artifact along with its digest) to a\npredicate (some assertion about that subject) using the [in-toto\nstatement](https://github.com/in-toto/attestation/tree/main/spec/v1) format. A\nsignature is generated for the attestation using a\n[Sigstore](https://www.sigstore.dev/)-issued signing certificate.\n\nOnce the attestation has been created and signed, it will be uploaded to the GH\nattestations API and associated with the repository from which the workflow was\ninitiated.\n\nSee [Using artifact attestations to establish provenance for builds](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)\nfor more information on artifact attestations.\n\n## Table of Contents\n- [Usage](#usage)\n  - [attest](#attest)\n  - [attestProvenance](#attestprovenance)\n  - [Attestation](#attestation)\n- [Sigstore Instance](#sigstore-instance)\n- [Storage](#storage)\n\n## Usage\n\n### `attest`\n\nThe `attest` function takes the supplied subject/predicate pair and generates a\nsigned attestation.\n\n```js\nconst { attest } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attest({\n        subjects: [{name: 'my-artifact-name', digest: { 'sha256': '36ab4667...'}}],\n        predicateType: 'https://in-toto.io/attestation/release',\n        predicate: { . . . },\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attest` function supports the following options:\n\n```typescript\nexport type AttestOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  predicateType: string\n  // Predicate to be attested.\n  predicate: object\n  // GitHub token for writing attestations.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n}\n\nexport type Subject = {\n   // Name of the subject.\n  name: string\n   // Digests of the subject. Should be a map of digest algorithms to their hex-encoded values.\n  digest: Record<string, string>\n}\n```\n\n### `attestProvenance`\n\nThe `attestProvenance` function accepts the name and digest of some artifact and\ngenerates a build provenance attestation over those values.\n\nThe attestation is formed by first generating a [SLSA provenance\npredicate](https://slsa.dev/spec/v1.0/provenance) populated with\n[metadata](https://github.com/slsa-framework/github-actions-buildtypes/tree/main/workflow/v1)\npulled from the GitHub Actions run.\n\n```js\nconst { attestProvenance } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attestProvenance({\n        subjectName: 'my-artifact-name',\n        subjectDigest: { 'sha256': '36ab4667...'},\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attestProvenance` function supports the following options:\n\n```typescript\nexport type AttestProvenanceOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n  // Issuer URL responsible for minting the OIDC token from which the\n  // provenance data is read. Defaults to\n  // 'https://token.actions.githubusercontent.com\".\n  issuer?: string\n}\n```\n\n### `Attestation`\n\nThe `Attestation` returned by `attest`/`attestProvenance` has the following\nfields:\n\n```typescript\nexport type Attestation = {\n  /*\n   * JSON-serialized Sigstore bundle containing the provenance attestation,\n   * signature, signing certificate and witnessed timestamp.\n   */\n  bundle: SerializedBundle\n  /*\n   * PEM-encoded signing certificate used to sign the attestation.\n   */\n  certificate: string\n  /*\n   * ID of Rekor transparency log entry created for the attestation (if\n   * applicable).\n   */\n  tlogID?: string\n  /*\n   * ID of the persisted attestation (accessible via the GH API).\n   */\n  attestationID?: string\n}\n```\n\nFor details about the Sigstore bundle format, see the [Bundle protobuf\nspecification](https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto).\n\n### createStorageRecord\n\nThe `createStorageRecord` function creates an\n[artifact metadata storage record](https://docs.github.com/en/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record)\non behalf of an attested artifact. It accepts parameters defining artifact\nand package registry details. The storage record contains metadata about where the artifact is stored on a given package registry.\n\n```js\nconst { createStorageRecord } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const record = await createStorageRecord(\n        artifactOptions: {\n            name: 'my-artifact-name',\n            digest: { 'sha256': '36ab4667...'},\n            version: \"v1.0.0\"\n        },\n        packageRegistryOptions: {\n            registryUrl: \"https://my-fave-pkg-registry.com\"\n        },\n        token: ghToken\n    );\n\n    console.log(record);\n}\n\nrun();\n```\n\nThe `createStorageRecord` function supports the following options:\n\n```typescript\n// Artifact details to associate the record with\nexport type ArtifactOptions = {\n  // The name of the artifact\n  name: string\n  // The digest of the artifact\n  digest: string\n  // The version of the artifact\n  version?: string\n  // The status of the artifact\n  status?: string\n}\n// Includes details about the package registry the artifact was published to\nexport type PackageRegistryOptions = {\n  // The URL of the package registry\n  registryUrl: string\n  // The URL of the artifact in the package registry\n  artifactUrl?: string\n  // The package registry repository the artifact was published to.\n  repo?: string\n  // The path of the artifact in the package registry repository.\n  path?: string\n}\n// GitHub token for writing attestations.\ntoken: string\n// Optional parameters for the write operation.\n// The number of times to retry the request.\nretryAttempts?: number\n// HTTP headers to include in request to Artifact Metadata API.\nheaders?: RequestHeaders\n```\n\n## Sigstore Instance\n\nWhen generating the signed attestation there are two different Sigstore\ninstances which can be used to issue the signing certificate. By default,\nworkflows initiated from public repositories will use the Sigstore public-good\ninstance and persist the attestation signature to the public [Rekor transparency\nlog](https://docs.sigstore.dev/logging/overview/). Workflows initiated from\nprivate/internal repositories will use the GitHub-internal Sigstore instance\nwhich uses a signed timestamp issued by GitHub's timestamp authority in place of\nthe public transparency log.\n\nThe default Sigstore instance selection can be overridden by passing an explicit\nvalue of either \"public-good\" or \"github\" for the `sigstore` option when calling\neither `attest` or `attestProvenance`.\n\n## Storage\n\nAttestations created by `attest`/`attestProvenance` will be uploaded to the GH\nattestations API and associated with the appropriate repository. Attestation\nstorage is only supported for public repositories or repositories which belong\nto a GitHub Enterprise Cloud account.\n\nIn order to generate attestations for private, non-Enterprise repositories, the\n`skipWrite` option should be set to `true`.\n","packages/cache/README.md":"# `@actions/cache`\n\n> Functions necessary for caching dependencies and build outputs to improve workflow execution time.\n\nSee [\"Caching dependencies to speed up workflows\"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) for how caching works.\n\nNote that GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. If you exceed this limit, GitHub will save your cache but will begin evicting caches until the total size is less than 10 GB.\n\n## ⚠️ Important changes\n\nThe cache backend service has been rewritten from the ground up for improved performance and reliability. The [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) package now integrates with the new cache service (v2) APIs.\n\nThe new service will gradually roll out as of **February 1st, 2025**. The legacy service will also be sunset on the same date. Changes in this release are **fully backward compatible**.\n\n**All previous versions of this package will be deprecated**. We recommend upgrading to version `4.0.0` as soon as possible before **February 1st, 2025.**\n\nIf you do not upgrade, all workflow runs using any of the deprecated [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) packages will fail.\n\nUpgrading to the recommended version should not break or require any changes to your workflows beyond updating your `package.json` to version `4.0.0`.\n\nRead more about the change & access the migration guide: [reference to the announcement](https://github.com/actions/toolkit/discussions/1890).\n\n## Usage\n\nThis package is used by the v2+ versions of our first party cache action. You can find an example implementation in the cache repo [here](https://github.com/actions/cache).\n\n#### Save Cache\n\nSaves a cache containing the files in `paths` using the `key` provided. The files would be compressed using zstandard compression algorithm if zstd is installed, otherwise gzip is used. Function returns the cache id if the cache was saved succesfully and throws an error if cache upload fails.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst cacheId = await cache.saveCache(paths, key)\n```\n\n#### Restore Cache\n\nRestores a cache based on `key` and `restoreKeys` to the `paths` provided. Function returns the cache key for cache hit and returns undefined if cache not found.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst restoreKeys = [\n    'npm-foobar-',\n    'npm-'\n]\nconst cacheKey = await cache.restoreCache(paths, key, restoreKeys)\n```\n\n##### Cache segment restore timeout\n\nA cache gets downloaded in multiple segments of fixed sizes (now `128MB` to fail-fast, previously `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner were used). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.4` of cache package introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.\n\nDefault value of this timeout is 10 minutes (starting `v3.2.1` and higher, previously 60 minutes in versions between `v.3.0.4` and `v3.2.0`, both included) and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.\n","packages/core/README.md":"# `@actions/core`\n\n> Core functions for setting results, logging, registering secrets and exporting variables across actions\n\n## Usage\n\n### Import the package\n\n```js\n// javascript\nconst core = require('@actions/core');\n\n// typescript\nimport * as core from '@actions/core';\n```\n\n#### Inputs/Outputs\n\nAction inputs can be read with `getInput` which returns a `string` or `getBooleanInput` which parses a boolean based on the [yaml 1.2 specification](https://yaml.org/spec/1.2/spec.html#id2804923). If `required` is set to be false, the input should have a default value in `action.yml`.\n\nOutputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.\n\n```js\nconst myInput = core.getInput('inputName', { required: true });\nconst myBooleanInput = core.getBooleanInput('booleanInputName', { required: true });\nconst myMultilineInput = core.getMultilineInput('multilineInputName', { required: true });\ncore.setOutput('outputKey', 'outputVal');\n```\n\n#### Exporting variables\n\nSince each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.\n\n```js\ncore.exportVariable('envVar', 'Val');\n```\n\n#### Setting a secret\n\nSetting a secret registers the secret with the runner to ensure it is masked in logs.\n\n```js\ncore.setSecret('myPassword');\n```\n\n#### PATH Manipulation\n\nTo make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`.  The runner will prepend the path given to the jobs PATH.\n\n```js\ncore.addPath('/path/to/mytool');\n```\n\n#### Declaring artifacts\n\nTo declare an artifact that your action produced, use `declareArtifact`. Each call declares one artifact, which is either a path to a local file or an OCI subject reference that includes a digest. The runner validates each declaration after the step completes and fails the step if a declaration is invalid, for example, if the file doesn't exist.\n\n```js\n// A local file. The runner resolves relative paths against GITHUB_WORKSPACE.\ncore.declareArtifact('dist/app.tar.gz');\n\n// An OCI subject. The digest, such as sha256:<hex>, is required.\ncore.declareArtifact(`ghcr.io/octocat/app:1.0.0@${digest}`);\n```\n\nTo force how the runner interprets a value, prefix it with `file://` or `oci://`.\n\nArtifact declarations require runner version 2.336.0 or later and take effect only where they're enabled. On older runners, `GITHUB_ARTIFACTS` isn't set, so `declareArtifact` logs a debug message and skips the declaration. Where artifact declarations aren't enabled, `GITHUB_ARTIFACTS` is set, but the runner ignores it — the declaration has no effect and doesn't fail the step. For how the runner names artifacts and the limits it enforces, see [Declare an artifact](../../docs/commands.md#declare-an-artifact).\n\n#### Exit codes\n\nYou should use this library to set the failing exit code for your action.  If status is not set and the script runs to completion, that will lead to a success.\n\n```js\nconst core = require('@actions/core');\n\ntry {\n  // Do stuff\n}\ncatch (err) {\n  // setFailed logs the message and sets a failing exit code\n  core.setFailed(`Action failed with error ${err}`);\n}\n```\n\nNote that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.\n\n#### Logging\n\nFinally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).\n\n```js\nconst core = require('@actions/core');\n\nconst myInput = core.getInput('input');\ntry {\n  core.debug('Inside try block');\n  \n  if (!myInput) {\n    core.warning('myInput was not set');\n  }\n  \n  if (core.isDebug()) {\n    // curl -v https://github.com\n  } else {\n    // curl https://github.com\n  }\n\n  // Do stuff\n  core.info('Output to the actions build log')\n\n  core.notice('This is a message that will also emit an annotation')\n}\ncatch (err) {\n  core.error(`Error ${err}, action may still succeed though`);\n}\n```\n\nThis library can also wrap chunks of output in foldable groups.\n\n```js\nconst core = require('@actions/core')\n\n// Manually wrap output\ncore.startGroup('Do some function')\ndoSomeFunction()\ncore.endGroup()\n\n// Wrap an asynchronous function call\nconst result = await core.group('Do something async', async () => {\n  const response = await doSomeHTTPRequest()\n  return response\n})\n```\n\n#### Annotations\n\nThis library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). \n```js\ncore.error('This is a bad error, action may still succeed though.')\n\ncore.warning('Something went wrong, but it\\'s not bad enough to fail the build.')\n\ncore.notice('Something happened that you might want to know about.')\n```\n\nThese will surface to the UI in the Actions page and on Pull Requests. They look something like this:\n\n![Annotations Image](../../docs/assets/annotations.png)\n\nThese annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. \n\nThese options are: \n```typescript\nexport interface AnnotationProperties {\n  /**\n   * A title for the annotation.\n   */\n  title?: string\n\n  /**\n   * The name of the file for which the annotation should be created.\n   */\n  file?: string\n\n  /**\n   * The start line for the annotation.\n   */\n  startLine?: number\n\n  /**\n   * The end line for the annotation. Defaults to `startLine` when `startLine` is provided.\n   */\n  endLine?: number\n\n  /**\n   * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   */\n  startColumn?: number\n\n  /**\n   * The end column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   * Defaults to `startColumn` when `startColumn` is provided.\n   */\n  endColumn?: number\n}\n```\n\n#### Styling output\n\nColored output is supported in the Action logs via standard [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). 3/4 bit, 8 bit and 24 bit colors are all supported.\n\nForeground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[35mThis foreground will be magenta')\n\n// 8 bit\ncore.info('\\u001b[38;5;6mThis foreground will be cyan')\n\n// 24 bit\ncore.info('\\u001b[38;2;255;0;0mThis foreground will be bright red')\n```\n\nBackground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[43mThis background will be yellow');\n\n// 8 bit\ncore.info('\\u001b[48;5;6mThis background will be cyan')\n\n// 24 bit\ncore.info('\\u001b[48;2;255;0;0mThis background will be bright red')\n```\n\nSpecial styles:\n\n```js\ncore.info('\\u001b[1mBold text')\ncore.info('\\u001b[3mItalic text')\ncore.info('\\u001b[4mUnderlined text')\n```\n\nANSI escape codes can be combined with one another:\n\n```js\ncore.info('\\u001b[31;46mRed foreground with a cyan background and \\u001b[1mbold text at the end');\n```\n\n> Note: Escape codes reset at the start of each line\n\n```js\ncore.info('\\u001b[35mThis foreground will be magenta')\ncore.info('This foreground will reset to the default')\n```\n\nManually typing escape codes can be a little difficult, but you can use third party modules such as [ansi-styles](https://github.com/chalk/ansi-styles).\n\n```js\nconst style = require('ansi-styles');\ncore.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!')\n```\n\n#### Action state\n\nYou can use this library to save state and get state for sharing information between a given wrapper action:\n\n**action.yml**:\n\n```yaml\nname: 'Wrapper action sample'\ninputs:\n  name:\n    default: 'GitHub'\nruns:\n  using: 'node12'\n  main: 'main.js'\n  post: 'cleanup.js'\n```\n\nIn action's `main.js`:\n\n```js\nconst core = require('@actions/core');\n\ncore.saveState(\"pidToKill\", 12345);\n```\n\nIn action's `cleanup.js`:\n\n```js\nconst core = require('@actions/core');\n\nvar pid = core.getState(\"pidToKill\");\n\nprocess.kill(pid);\n```\n\n#### OIDC Token\n\nYou can use these methods to interact with the GitHub OIDC provider and get a JWT ID token which would help to get access token from third party cloud providers.\n\n**Method Name**: getIDToken()\n\n**Inputs**\n\naudience : optional\n\n**Outputs**\n\nA [JWT](https://jwt.io/) ID Token\n\nIn action's `main.ts`:\n```js\nconst core = require('@actions/core');\nasync function getIDTokenAction(): Promise<void> {\n  \n   const audience = core.getInput('audience', {required: false})\n   \n   const id_token1 = await core.getIDToken()            // ID Token with default audience\n   const id_token2 = await core.getIDToken(audience)    // ID token with custom audience\n   \n   // this id_token can be used to get access token from third party cloud providers\n}\ngetIDTokenAction()\n```\n\nIn action's `actions.yml`:\n\n```yaml\nname: 'GetIDToken'\ndescription: 'Get ID token from Github OIDC provider'\ninputs:\n  audience:  \n    description: 'Audience for which the ID token is intended for'\n    required: false\noutputs:\n  id_token1: \n    description: 'ID token obtained from OIDC provider'\n  id_token2: \n    description: 'ID token obtained from OIDC provider'\nruns:\n  using: 'node12'\n  main: 'dist/index.js'\n```\n\n#### Filesystem path helpers\n\nYou can use these methods to manipulate file paths across operating systems.\n\nThe `toPosixPath` function converts input paths to Posix-style (Linux) paths.\nThe `toWin32Path` function converts input paths to Windows-style paths. These\nfunctions work independently of the underlying runner operating system.\n\n```js\ntoPosixPath('\\\\foo\\\\bar') // => /foo/bar\ntoWin32Path('/foo/bar') // => \\foo\\bar\n```\n\nThe `toPlatformPath` function converts input paths to the expected value on the runner's operating system.\n\n```js\n// On a Windows runner.\ntoPlatformPath('/foo/bar') // => \\foo\\bar\n\n// On a Linux runner.\ntoPlatformPath('\\\\foo\\\\bar') // => /foo/bar\n```\n\n#### Platform helper\n\nProvides shorthands for getting information about platform action is running on.\n\n```js\nimport { platform } from '@actions/core'\n\n/* equals to a call of os.platform() */\nplatform.platform // 'win32' | 'darwin' | 'linux' | 'freebsd' | 'openbsd' | 'android' | 'cygwin' | 'sunos'\n\n/* equals to a call of os.arch() */\nplatform.arch // 'x64' | 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x'\n\n/* common shorthands for platform-specific logic */\nplatform.isWindows // true\nplatform.isMacOS // false\nplatform.isLinux // false\n\n/* run platform-specific script to get more details about the exact platform, works on Windows, MacOS and Linux */\nconst {\n  name, // Microsoft Windows 11 Enterprise\n  version, // 10.0.22621\n} = await platform.getDetails()\n```\n\n#### Populating job summary\n\nThese methods can be used to populate a [job summary](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary). A job summary is a buffer that can be added to throughout your job via `core.summary` methods.\n\nJob summaries when complete must be written to the summary buffer file via the `core.summary.write()` method.\n\nAll methods except `addRaw()` utilize the `addRaw()` method to append to the buffer, followed by an EOL using the `addEOL()` method.\n\n```typescript\n\n// Write raw text, optionally add an EOL after the content, defaults to false\ncore.summary.addRaw('Some content here :speech_balloon:', true)\n// Output: Some content here :speech_balloon:\\n\n\n// Add an operating system-specific end-of-line marker\ncore.summary.addEOL()\n// Output (POSIX): \\n\n// Output (Windows): \\r\\n\n\n// Add a codeblock with an optional language for syntax highlighting\ncore.summary.addCodeBlock('console.log(\\'hello world\\')', 'javascript')\n// Output: <pre lang=\"javascript\"><code>console.log('hello world')</code></pre>\n\n// Add a list, second parameter indicates if list is ordered, defaults to false\ncore.summary.addList(['item1','item2','item3'], true)\n// Output: <ol><li>item1</li><li>item2</li><li>item3</li></ol>\n\n// Add a collapsible HTML details element\ncore.summary.addDetails('Label', 'Some detail that will be collapsed')\n// Output: <details><summary>Label</summary>Some detail that will be collapsed</details>\n\n// Add an image, image options parameter is optional, you can supply one of or both width and height in pixels\ncore.summary.addImage('example.png', 'alt description of img', {width: '100', height: '100'})\n// Output: <img src=\"example.png\" alt=\"alt description of img\" width=\"100\" height=\"100\">\n\n// Add an HTML section heading element, optionally pass a level that translates to 'hX' ie. h2. Defaults to h1\ncore.summary.addHeading('My Heading', '2')\n// Output: <h2>My Heading</h2>\n\n// Add an HTML thematic break <hr>\ncore.summary.addSeparator()\n// Output: <hr>\n\n// Add an HTML line break <br>\ncore.summary.addBreak()\n// Output: <br>\n\n// Add an HTML blockquote with an optional citation\ncore.summary.addQuote('To be or not to be', 'Shakespeare')\n// Output: <blockquote cite=\"Shakespeare\">To be or not to be</blockquote>\n\n// Add an HTML anchor tag\ncore.summary.addLink('click here', 'https://github.com')\n// Output: <a href=\"https://github.com\">click here</a>\n\n```\n\nTables are added using the `addTable()` method, and an array of `SummaryTableRow`.\n\n```typescript\n\nexport type SummaryTableRow = (SummaryTableCell | string)[]\n\nexport interface SummaryTableCell {\n  /**\n   * Cell content\n   */\n  data: string\n  /**\n   * Render cell as header\n   * (optional) default: false\n   */\n  header?: boolean\n  /**\n   * Number of columns the cell extends\n   * (optional) default: '1'\n   */\n  colspan?: string\n  /**\n   * Number of rows the cell extends\n   * (optional) default: '1'\n   */\n  rowspan?: string\n}\n\n```\n\nFor example\n\n```typescript\n\nconst tableData = [\n  {data: 'Header1', header: true},\n  {data: 'Header2', header: true},\n  {data: 'Header3', header: true},\n  {data: 'MyData1'},\n  {data: 'MyData2'},\n  {data: 'MyData3'}\n]\n\n// Add an HTML table\ncore.summary.addTable([tableData])\n// Output: <table><tr><th>Header1</th><th>Header2</th><th>Header3</th></tr><tr></tr><td>MyData1</td><td>MyData2</td><td>MyData3</td></tr></table>\n\n```\n\nIn addition to job summary content, there are utility functions for interfacing with the buffer.\n\n```typescript\n\n// Empties the summary buffer AND wipes the summary file on disk\ncore.summary.clear()\n\n// Returns the current summary buffer as a string\ncore.summary.stringify()\n\n// If the summary buffer is empty\ncore.summary.isEmptyBuffer()\n\n// Resets the summary buffer without writing to the summary file on disk\ncore.summary.emptyBuffer()\n\n// Writes text in the buffer to the summary buffer file and empties the buffer, optionally overwriting all existing content in the summary file with buffer contents. Defaults to false.\ncore.summary.write({overwrite: true})\n```","packages/exec/README.md":"# `@actions/exec`\n\n## Usage\n\n#### Basic\n\nYou can use this package to execute tools in a cross platform way:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node index.js');\n```\n\n#### Args\n\nYou can also pass in arg arrays:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node', ['index.js', 'foo=bar']);\n```\n\n#### Output/options\n\nCapture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):\n\n```js\nconst exec = require('@actions/exec');\n\nlet myOutput = '';\nlet myError = '';\n\nconst options = {};\noptions.listeners = {\n  stdout: (data: Buffer) => {\n    myOutput += data.toString();\n  },\n  stderr: (data: Buffer) => {\n    myError += data.toString();\n  }\n};\noptions.cwd = './lib';\n\nawait exec.exec('node', ['index.js', 'foo=bar'], options);\n```\n\n#### Exec tools not in the PATH\n\nYou can specify the full path for tools not in the PATH:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('\"/path/to/my-tool\"', ['arg1']);\n```\n","packages/github/README.md":"# `@actions/github`\n\n> A hydrated Octokit client.\n\n## Usage\n\nReturns an authenticated Octokit client that follows the machine [proxy settings](https://help.github.com/en/actions/hosting-your-own-runners/using-a-proxy-server-with-self-hosted-runners) and correctly sets GHES base urls. See https://octokit.github.io/rest.js for the API.\n\n**Note:** This package is ESM-only starting from v9.0.0. For CommonJS projects, use dynamic import:\n```js\nasync function main() {\n    const { getOctokit, context } = await import('@actions/github');\n    // ... your code here\n}\nmain();\n```\n\nFor bundled actions (recommended), most bundlers like esbuild, webpack, and rollup handle ESM imports automatically.\n\n```js\nimport * as github from '@actions/github';\nimport * as core from '@actions/core';\n\nasync function run() {\n    // This should be a token with access to your repository scoped in as a secret.\n    // The YML workflow will need to set myToken with the GitHub Secret Token\n    // myToken: ${{ secrets.GITHUB_TOKEN }}\n    // https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token#about-the-github_token-secret\n    const myToken = core.getInput('myToken');\n\n    const octokit = github.getOctokit(myToken)\n\n    // You can also pass in additional options as a second parameter to getOctokit\n    // const octokit = github.getOctokit(myToken, {userAgent: \"MyActionVersion1\"});\n\n    const { data: pullRequest } = await octokit.rest.pulls.get({\n        owner: 'octokit',\n        repo: 'rest.js',\n        pull_number: 123,\n        mediaType: {\n          format: 'diff'\n        }\n    });\n\n    console.log(pullRequest);\n}\n\nrun();\n```\n\nYou can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.\n\n```js\nconst result = await octokit.graphql(query, variables);\n```\n\nFinally, you can get the context of the current action:\n\n```js\nimport * as github from '@actions/github';\n\nconst context = github.context;\n\nconst newIssue = await octokit.rest.issues.create({\n  ...context.repo,\n  title: 'New issue!',\n  body: 'Hello Universe!'\n});\n```\n\n## Webhook payload typescript definitions\n\nThe npm module `@octokit/webhooks-definitions` provides type definitions for the response payloads. You can cast the payload to these types for better type information.\n\nFirst, install the npm module `npm install @octokit/webhooks-definitions`\n\nThen, assert the type based on the eventName\n```ts\nimport * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport {PushEvent} from '@octokit/webhooks-definitions/schema'\n\nif (github.context.eventName === 'push') {\n  const pushPayload = github.context.payload as PushEvent\n  core.info(`The head commit is: ${pushPayload.head_commit}`)\n}\n```\n\n## Extending the Octokit instance\n`@octokit/core` now supports the [plugin architecture](https://github.com/octokit/core.js#plugins). You can extend the GitHub instance using plugins. \n\nFor example, using the `@octokit/plugin-enterprise-server` you can now access enterprise admin apis on GHES instances.\n\n```ts\nimport { GitHub, getOctokitOptions } from '@actions/github/lib/utils'\nimport { enterpriseServer220Admin } from '@octokit/plugin-enterprise-server'\n\nconst octokit = GitHub.plugin(enterpriseServer220Admin)\n// or override some of the default values as well \n// const octokit = GitHub.plugin(enterpriseServer220Admin).defaults({userAgent: \"MyNewUserAgent\"})\n\nconst myToken = core.getInput('myToken');\nconst myOctokit = new octokit(getOctokitOptions(token))\n// Create a new user\nmyOctokit.rest.enterpriseAdmin.createUser({\n  login: \"testuser\",\n  email: \"testuser@test.com\",\n});\n```\n","packages/glob/README.md":"# `@actions/glob`\n\n## Usage\n\n### Basic\n\nYou can use this package to search for files matching glob patterns.\n\nRelative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.\n\n```js\nconst glob = require('@actions/glob');\n\nconst patterns = ['**/tar.gz', '**/tar.bz']\nconst globber = await glob.create(patterns.join('\\n'))\nconst files = await globber.glob()\n```\n\n### Opt out of following symbolic links\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**', {followSymbolicLinks: false})\nconst files = await globber.glob()\n```\n\n### Iterator\n\nWhen dealing with a large amount of results, consider iterating the results as they are returned:\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**')\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Recommended action inputs\n\nGlob follows symbolic links by default. Following is often appropriate unless deleting files.\n\nUsers may want to opt-out from following symbolic links for other reasons. For example,\nexcessive amounts of symbolic links can create the appearance of very, very many files\nand slow the search.\n\nWhen an action allows a user to specify input patterns, it is generally recommended to\nallow users to opt-out from following symbolic links.\n\nSnippet from `action.yml`:\n\n```yaml\ninputs:\n  files:\n    description: 'Files to print'\n    required: true\n  follow-symbolic-links:\n    description: 'Indicates whether to follow symbolic links'\n    default: true\n```\n\nAnd corresponding toolkit consumption:\n\n```js\nconst core = require('@actions/core')\nconst glob = require('@actions/glob')\n\nconst globOptions = {\n  followSymbolicLinks: core.getInput('follow-symbolic-links').toUpper() !== 'FALSE'\n}\nconst globber = glob.create(core.getInput('files'), globOptions)\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Hashing files (`hashFiles`)\n\n`hashFiles` computes a hash of files matched by glob patterns.\n\nBy default, only files under the workspace (`GITHUB_WORKSPACE`) are eligible to be hashed.\n\nTo improve security, file eligibility is evaluated using each file's resolved (real) path to prevent symbolic link traversal outside the allowed root path(s).\n\n### Options\n\n- `roots?: string[]` — Allowlist of root paths. Only files that resolve under (or equal) one of these roots are hashed. Defaults to `[GITHUB_WORKSPACE]` (or `currentWorkspace` if provided).\n- `allowFilesOutsideWorkspace?: boolean` — Explicit opt-in to include files outside the specified root path(s). Defaults to `false`.\n- `exclude?: string[]` — Glob patterns to exclude from hashing. Defaults to `[]`.\n\nIf files match your patterns but are outside the allowed roots and `allowFilesOutsideWorkspace` is not enabled, those files are skipped and a warning is emitted. If no eligible files remain after filtering, `hashFiles` returns an empty string (`''`).\n\n### Example\n\n```js\nconst glob = require('@actions/glob')\n\nconst hash = await glob.hashFiles('**/*.json', process.env.GITHUB_WORKSPACE || '', {\n  roots: [process.env.GITHUB_WORKSPACE, process.env.GITHUB_ACTION_PATH].filter(Boolean),\n  allowFilesOutsideWorkspace: true,\n  exclude: ['**/node_modules/**']\n})\n\nconsole.log(hash)\n```\n\n## Patterns\n\n### Glob behavior\n\nPatterns `*`, `?`, `[...]`, `**` (globstar) are supported.\n\nWith the following behaviors:\n- File names that begin with `.` may be included in the results\n- Case insensitive on Windows\n- Directory separator `/` and `\\` both supported on Windows\n\n### Tilde expansion\n\nSupports basic tilde expansion, for current user HOME replacement only.\n\nExample:\n- `~` may expand to /Users/johndoe\n- `~/foo` may expand to /Users/johndoe/foo\n\n### Comments\n\nPatterns that begin with `#` are treated as comments.\n\n### Exclude patterns\n\nLeading `!` changes the meaning of an include pattern to exclude.\n\nMultiple leading `!` flips the meaning.\n\n### Escaping\n\nWrapping special characters in `[]` can be used to escape literal glob characters\nin a file name. For example the literal file name `hello[a-z]` can be escaped as `hello[[]a-z]`.\n\nOn Linux/macOS `\\` is also treated as an escape character.\n","packages/http-client/README.md":"# `@actions/http-client`\n\nA lightweight HTTP client optimized for building actions.\n\n## Features\n\n  - HTTP client with TypeScript generics and async/await/Promises\n  - Typings included!\n  - [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner\n  - Targets ES2019 (runner runs actions with node 24+).  Only supported on node 20+.\n  - Basic, Bearer and PAT Support out of the box.  Extensible handlers for others.\n  - Redirects supported\n\nFeatures and releases [here](./RELEASES.md)\n\n## Install\n\n```\nnpm install @actions/http-client --save\n```\n\n## Samples\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Errors\n\n### HTTP\n\nThe HTTP client does not throw unless truly exceptional.\n\n* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.\n* Redirects (3xx) will be followed by default.\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Debugging\n\nTo enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:\n\n```shell\nexport NODE_DEBUG=http\n```\n\n## Node support\n\nThe http-client is built using Node 24. It may work on previous node LTS versions but it's tested and officially supported on Node 20+.\n\n## Support and Versioning\n\nWe follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).\n\n## Contributing\n\nWe welcome PRs.  Please create an issue and if applicable, a design before proceeding with code.\n\nonce:\n\n```\nnpm install\n```\n\nTo build:\n\n```\nnpm run build\n```\n\nTo run all tests:\n\n```\nnpm test\n```\n","packages/io/README.md":"# `@actions/io`\n\n> Core functions for cli filesystem scenarios\n\n## Usage\n\n#### mkdir -p\n\nRecursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:\n\n```js\nconst io = require('@actions/io');\n\nawait io.mkdirP('path/to/make');\n```\n\n#### cp/mv\n\nCopy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):\n\n```js\nconst io = require('@actions/io');\n\n// Recursive must be true for directories\nconst options = { recursive: true, force: false }\n\nawait io.cp('path/to/directory', 'path/to/dest', options);\nawait io.mv('path/to/file', 'path/to/dest');\n```\n\n#### rm -rf\n\nRemove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.\n\n```js\nconst io = require('@actions/io');\n\nawait io.rmRF('path/to/directory');\nawait io.rmRF('path/to/file');\n```\n\n#### which\n\nGet the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).\n\n```js\nconst exec = require('@actions/exec');\nconst io = require('@actions/io');\n\nconst pythonPath: string = await io.which('python', true)\n\nawait exec.exec(`\"${pythonPath}\"`, ['main.py']);\n```\n","packages/tool-cache/README.md":"# `@actions/tool-cache`\n\n> Functions necessary for downloading and caching tools.\n\n## Usage\n\n#### Download\n\nYou can use this to download tools (or other files) from a download URL:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n```\n\n#### Extract\n\nThese can then be extracted in platform specific ways:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nif (process.platform === 'win32') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');\n  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');\n\n  // Or alternately\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');\n  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');\n}\nelse if (process.platform === 'darwin') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg');\n  const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to');\n}\nelse {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n}\n```\n\n#### Cache\n\nFinally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners.\n\nYou'll often want to add it to the path as part of this step:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\nconst node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n\nconst cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');\ncore.addPath(cachedPath);\n```\n\nYou can also cache files for reuse.\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');\n```\n\n#### Find\n\nFinally, you can find directories and files you've previously cached:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst nodeDirectory = tc.find('node', '12.x', 'x64');\ncore.addPath(nodeDirectory);\n```\n\nYou can even find all cached versions of a tool:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst allNodeVersions = tc.findAllVersions('node');\nconsole.log(`Versions of node available: ${allNodeVersions}`);\n```\n"},"items":[{"name":"faq.md","path":"packages/artifact/docs/faq.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/faq.md","title":"Docs Skill","category":"anthropic-skill","format":"markdown","content":"# Frequently Asked Questions\n\n- [Frequently Asked Questions](#frequently-asked-questions)\n  - [Supported Characters](#supported-characters)\n  - [Compression? ZIP? How is my artifact stored?](#compression-zip-how-is-my-artifact-stored)\n  - [Which versions of the artifacts packages are compatible?](#which-versions-of-the-artifacts-packages-are-compatible)\n  - [How long will my artifact be available?](#how-long-will-my-artifact-be-available)\n\n## Supported Characters\n\nWhen uploading an artifact, the inputted `name` parameter along with the files specified in `files` cannot contain any of the following characters. If they are present in `name` or `files`,  the Artifact will be rejected by the server and the upload will fail. These characters are not allowed due to limitations and restrictions with certain file systems such as NTFS. To maintain platform-agnostic behavior, characters that are not supported by an individual filesystem/platform will not be supported on all filesystems/platforms.\n\n- \"\n- :\n- <\n- \\>\n- |\n- \\*\n- ?\n\nIn addition to the aforementioned characters, the inputted `name` also cannot include the following\n- \\\n- /\n\n## Compression? ZIP? How is my artifact stored?\n\nWhen creating an Artifact, the files are dynamically compressed and streamed into a ZIP archive. Since they are stored in a ZIP, they can be compressed by Zlib in varying levels.\n\nThe value can range from 0 to 9:\n\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\n\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n## Which versions of the artifacts packages are compatible?\n[actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact), leverage [GitHub Actions toolkit](https://github.com/actions/toolkit) and are typically used together to upload and download artifacts in your workflows.\n\n| upload-artifact | download-artifact | toolkit |\n|---|---|---|\n| v4 | v4 | v2 |\n| < v3 | < v3 | < v1 |\n\nUse matching versions of `actions/upload-artifact` and `actions/download-artifact` to ensure compatibility.\n\nIn your GitHub Actions workflow YAML file, you specify the version of the actions you want to use. For example:\n\n```yaml\n  uses: actions/upload-artifact@v4\n  # ...\n  uses: actions/download-artifact@v4\n  # ...\n```\n\n**Release Notes:**\nCheck the release notes for each repository to see if there are any specific notes about compatibility or changes in behavior.\n\n## How long will my artifact be available?\nThe default retention period is **90 days**. For more information, visit: https://github.com/actions/upload-artifact?tab=readme-ov-file#retention-period \n","isInternal":false,"tokens":640,"sizeBytes":2839},{"name":"ArtifactNotFoundError.md","path":"packages/artifact/docs/generated/classes/ArtifactNotFoundError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/ArtifactNotFoundError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / ArtifactNotFoundError\n\n# Class: ArtifactNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`ArtifactNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](ArtifactNotFoundError.md#constructor)\n\n### Properties\n\n- [message](ArtifactNotFoundError.md#message)\n- [name](ArtifactNotFoundError.md#name)\n- [stack](ArtifactNotFoundError.md#stack)\n- [prepareStackTrace](ArtifactNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](ArtifactNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](ArtifactNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new ArtifactNotFoundError**(`message?`): [`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'Artifact not found'` |\n\n#### Returns\n\n[`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:24](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L24)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","isInternal":false,"tokens":662,"sizeBytes":2675},{"name":"DefaultArtifactClient.md","path":"packages/artifact/docs/generated/classes/DefaultArtifactClient.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/DefaultArtifactClient.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / DefaultArtifactClient\n\n# Class: DefaultArtifactClient\n\nThe default artifact client that is used by the artifact action(s).\n\n## Implements\n\n- [`ArtifactClient`](../interfaces/ArtifactClient.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](DefaultArtifactClient.md#constructor)\n\n### Methods\n\n- [deleteArtifact](DefaultArtifactClient.md#deleteartifact)\n- [downloadArtifact](DefaultArtifactClient.md#downloadartifact)\n- [getArtifact](DefaultArtifactClient.md#getartifact)\n- [listArtifacts](DefaultArtifactClient.md#listartifacts)\n- [uploadArtifact](DefaultArtifactClient.md#uploadartifact)\n\n## Constructors\n\n### constructor\n\n• **new DefaultArtifactClient**(): [`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n#### Returns\n\n[`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[deleteArtifact](../interfaces/ArtifactClient.md#deleteartifact)\n\n#### Defined in\n\n[src/internal/client.ts:248](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L248)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](../interfaces/DownloadArtifactOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[downloadArtifact](../interfaces/ArtifactClient.md#downloadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:138](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L138)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[getArtifact](../interfaces/ArtifactClient.md#getartifact)\n\n#### Defined in\n\n[src/internal/client.ts:212](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L212)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](../interfaces/ListArtifactsOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[listArtifacts](../interfaces/ArtifactClient.md#listartifacts)\n\n#### Defined in\n\n[src/internal/client.ts:176](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L176)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](../interfaces/UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[uploadArtifact](../interfaces/ArtifactClient.md#uploadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L113)\n","isInternal":false,"tokens":1583,"sizeBytes":6992},{"name":"FilesNotFoundError.md","path":"packages/artifact/docs/generated/classes/FilesNotFoundError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/FilesNotFoundError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / FilesNotFoundError\n\n# Class: FilesNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`FilesNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](FilesNotFoundError.md#constructor)\n\n### Properties\n\n- [files](FilesNotFoundError.md#files)\n- [message](FilesNotFoundError.md#message)\n- [name](FilesNotFoundError.md#name)\n- [stack](FilesNotFoundError.md#stack)\n- [prepareStackTrace](FilesNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](FilesNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](FilesNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new FilesNotFoundError**(`files?`): [`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `files` | `string`[] | `[]` |\n\n#### Returns\n\n[`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:4](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L4)\n\n## Properties\n\n### files\n\n• **files**: `string`[]\n\n#### Defined in\n\n[src/internal/shared/errors.ts:2](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L2)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","isInternal":false,"tokens":718,"sizeBytes":2842},{"name":"GHESNotSupportedError.md","path":"packages/artifact/docs/generated/classes/GHESNotSupportedError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/GHESNotSupportedError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / GHESNotSupportedError\n\n# Class: GHESNotSupportedError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`GHESNotSupportedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GHESNotSupportedError.md#constructor)\n\n### Properties\n\n- [message](GHESNotSupportedError.md#message)\n- [name](GHESNotSupportedError.md#name)\n- [stack](GHESNotSupportedError.md#stack)\n- [prepareStackTrace](GHESNotSupportedError.md#preparestacktrace)\n- [stackTraceLimit](GHESNotSupportedError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](GHESNotSupportedError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new GHESNotSupportedError**(`message?`): [`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'@actions/artifact v2.0.0+, upload-artifact@v4+ and download-artifact@v4+ are not currently supported on GHES.'` |\n\n#### Returns\n\n[`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:31](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L31)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","isInternal":false,"tokens":737,"sizeBytes":2766},{"name":"InvalidResponseError.md","path":"packages/artifact/docs/generated/classes/InvalidResponseError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/InvalidResponseError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / InvalidResponseError\n\n# Class: InvalidResponseError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`InvalidResponseError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](InvalidResponseError.md#constructor)\n\n### Properties\n\n- [message](InvalidResponseError.md#message)\n- [name](InvalidResponseError.md#name)\n- [stack](InvalidResponseError.md#stack)\n- [prepareStackTrace](InvalidResponseError.md#preparestacktrace)\n- [stackTraceLimit](InvalidResponseError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](InvalidResponseError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new InvalidResponseError**(`message`): [`InvalidResponseError`](InvalidResponseError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message` | `string` |\n\n#### Returns\n\n[`InvalidResponseError`](InvalidResponseError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:17](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L17)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n","isInternal":false,"tokens":663,"sizeBytes":2608},{"name":"NetworkError.md","path":"packages/artifact/docs/generated/classes/NetworkError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/NetworkError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / NetworkError\n\n# Class: NetworkError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`NetworkError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](NetworkError.md#constructor)\n\n### Properties\n\n- [code](NetworkError.md#code)\n- [message](NetworkError.md#message)\n- [name](NetworkError.md#name)\n- [stack](NetworkError.md#stack)\n- [prepareStackTrace](NetworkError.md#preparestacktrace)\n- [stackTraceLimit](NetworkError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](NetworkError.md#capturestacktrace)\n- [isNetworkErrorCode](NetworkError.md#isnetworkerrorcode)\n\n## Constructors\n\n### constructor\n\n• **new NetworkError**(`code`): [`NetworkError`](NetworkError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code` | `string` |\n\n#### Returns\n\n[`NetworkError`](NetworkError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:42](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L42)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L40)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isNetworkErrorCode\n\n▸ **isNetworkErrorCode**(`code?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:49](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L49)\n","isInternal":false,"tokens":806,"sizeBytes":3100},{"name":"UsageError.md","path":"packages/artifact/docs/generated/classes/UsageError.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/classes/UsageError.md","title":"Classes Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / UsageError\n\n# Class: UsageError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`UsageError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](UsageError.md#constructor)\n\n### Properties\n\n- [message](UsageError.md#message)\n- [name](UsageError.md#name)\n- [stack](UsageError.md#stack)\n- [prepareStackTrace](UsageError.md#preparestacktrace)\n- [stackTraceLimit](UsageError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](UsageError.md#capturestacktrace)\n- [isUsageErrorMessage](UsageError.md#isusageerrormessage)\n\n## Constructors\n\n### constructor\n\n• **new UsageError**(): [`UsageError`](UsageError.md)\n\n#### Returns\n\n[`UsageError`](UsageError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L62)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isUsageErrorMessage\n\n▸ **isUsageErrorMessage**(`msg?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `msg?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:68](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L68)\n","isInternal":false,"tokens":724,"sizeBytes":2762},{"name":"Artifact.md","path":"packages/artifact/docs/generated/interfaces/Artifact.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/Artifact.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / Artifact\n\n# Interface: Artifact\n\nAn Actions Artifact\n\n## Table of contents\n\n### Properties\n\n- [createdAt](Artifact.md#createdat)\n- [id](Artifact.md#id)\n- [name](Artifact.md#name)\n- [size](Artifact.md#size)\n\n## Properties\n\n### createdAt\n\n• `Optional` **createdAt**: `Date`\n\nThe time when the artifact was created\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:128](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L128)\n\n___\n\n### id\n\n• **id**: `number`\n\nThe ID of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:118](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L118)\n\n___\n\n### name\n\n• **name**: `string`\n\nThe name of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L113)\n\n___\n\n### size\n\n• **size**: `number`\n\nThe size of the artifact in bytes\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:123](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L123)\n","isInternal":false,"tokens":283,"sizeBytes":1204},{"name":"ArtifactClient.md","path":"packages/artifact/docs/generated/interfaces/ArtifactClient.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/ArtifactClient.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / ArtifactClient\n\n# Interface: ArtifactClient\n\nGeneric interface for the artifact client.\n\n## Implemented by\n\n- [`DefaultArtifactClient`](../classes/DefaultArtifactClient.md)\n\n## Table of contents\n\n### Methods\n\n- [deleteArtifact](ArtifactClient.md#deleteartifact)\n- [downloadArtifact](ArtifactClient.md#downloadartifact)\n- [getArtifact](ArtifactClient.md#getartifact)\n- [listArtifacts](ArtifactClient.md#listartifacts)\n- [uploadArtifact](ArtifactClient.md#uploadartifact)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L103)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](DownloadArtifactOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:89](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L89)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\n#### Defined in\n\n[src/internal/client.ts:75](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L75)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](ListArtifactsOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:57](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L57)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L40)\n","isInternal":false,"tokens":1335,"sizeBytes":5731},{"name":"DeleteArtifactResponse.md","path":"packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / DeleteArtifactResponse\n\n# Interface: DeleteArtifactResponse\n\nResponse from the server when deleting an artifact\n\n## Table of contents\n\n### Properties\n\n- [id](DeleteArtifactResponse.md#id)\n\n## Properties\n\n### id\n\n• **id**: `number`\n\nThe id of the artifact that was deleted\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:163](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L163)\n","isInternal":false,"tokens":106,"sizeBytes":474},{"name":"DownloadArtifactOptions.md","path":"packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / DownloadArtifactOptions\n\n# Interface: DownloadArtifactOptions\n\nOptions for downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [path](DownloadArtifactOptions.md#path)\n\n## Properties\n\n### path\n\n• `Optional` **path**: `string`\n\nDenotes where the artifact will be downloaded to. If not specified then the artifact is download to GITHUB_WORKSPACE\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L103)\n","isInternal":false,"tokens":121,"sizeBytes":558},{"name":"DownloadArtifactResponse.md","path":"packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / DownloadArtifactResponse\n\n# Interface: DownloadArtifactResponse\n\nResponse from the server when downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [downloadPath](DownloadArtifactResponse.md#downloadpath)\n\n## Properties\n\n### downloadPath\n\n• `Optional` **downloadPath**: `string`\n\nThe path where the artifact was downloaded to\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:93](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L93)\n","isInternal":false,"tokens":113,"sizeBytes":538},{"name":"FindOptions.md","path":"packages/artifact/docs/generated/interfaces/FindOptions.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/FindOptions.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / FindOptions\n\n# Interface: FindOptions\n\n## Table of contents\n\n### Properties\n\n- [findBy](FindOptions.md#findby)\n\n## Properties\n\n### findBy\n\n• `Optional` **findBy**: `Object`\n\nThe criteria for finding Artifact(s) out of the scope of the current run.\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `repositoryName` | `string` | Repository owner (eg. 'toolkit') |\n| `repositoryOwner` | `string` | Repository owner (eg. 'actions') |\n| `token` | `string` | Token with actions:read permissions |\n| `workflowRunId` | `number` | WorkflowRun of the artifact(s) to lookup |\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:136](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L136)\n","isInternal":false,"tokens":202,"sizeBytes":806},{"name":"GetArtifactResponse.md","path":"packages/artifact/docs/generated/interfaces/GetArtifactResponse.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/GetArtifactResponse.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / GetArtifactResponse\n\n# Interface: GetArtifactResponse\n\nResponse from the server when getting an artifact\n\n## Table of contents\n\n### Properties\n\n- [artifact](GetArtifactResponse.md#artifact)\n\n## Properties\n\n### artifact\n\n• **artifact**: [`Artifact`](Artifact.md)\n\nMetadata about the artifact that was found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L62)\n","isInternal":false,"tokens":108,"sizeBytes":506},{"name":"ListArtifactsOptions.md","path":"packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / ListArtifactsOptions\n\n# Interface: ListArtifactsOptions\n\nOptions for listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [latest](ListArtifactsOptions.md#latest)\n\n## Properties\n\n### latest\n\n• `Optional` **latest**: `boolean`\n\nFilter the workflow run's artifacts to the latest by name\nIn the case of reruns, this can be useful to avoid duplicates\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:73](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L73)\n","isInternal":false,"tokens":126,"sizeBytes":553},{"name":"ListArtifactsResponse.md","path":"packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / ListArtifactsResponse\n\n# Interface: ListArtifactsResponse\n\nResponse from the server when listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [artifacts](ListArtifactsResponse.md#artifacts)\n\n## Properties\n\n### artifacts\n\n• **artifacts**: [`Artifact`](Artifact.md)[]\n\nA list of artifacts that were found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:83](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L83)\n","isInternal":false,"tokens":115,"sizeBytes":509},{"name":"UploadArtifactOptions.md","path":"packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / UploadArtifactOptions\n\n# Interface: UploadArtifactOptions\n\nOptions for uploading an artifact\n\n## Table of contents\n\n### Properties\n\n- [compressionLevel](UploadArtifactOptions.md#compressionlevel)\n- [retentionDays](UploadArtifactOptions.md#retentiondays)\n\n## Properties\n\n### compressionLevel\n\n• `Optional` **compressionLevel**: `number`\n\nThe level of compression for Zlib to be applied to the artifact archive.\nThe value can range from 0 to 9:\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:52](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L52)\n\n___\n\n### retentionDays\n\n• `Optional` **retentionDays**: `number`\n\nDuration after which artifact will expire in days.\n\nBy default artifact expires after 90 days:\nhttps://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#downloading-and-deleting-artifacts-after-a-workflow-run-is-complete\n\nUse this option to override the default expiry.\n\nMin value: 1\nMax value: 90 unless changed by repository setting\n\nIf this is set to a greater value than the retention settings allowed, the retention on artifacts\nwill be reduced to match the max value allowed on server, and the upload process will continue. An\ninput of 0 assumes default retention setting.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:41](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L41)\n","isInternal":false,"tokens":396,"sizeBytes":1801},{"name":"UploadArtifactResponse.md","path":"packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md","title":"Interfaces Skill","category":"anthropic-skill","format":"markdown","content":"[@actions/artifact](../README.md) / UploadArtifactResponse\n\n# Interface: UploadArtifactResponse\n\nResponse from the server when an artifact is uploaded\n\n## Table of contents\n\n### Properties\n\n- [digest](UploadArtifactResponse.md#digest)\n- [id](UploadArtifactResponse.md#id)\n- [size](UploadArtifactResponse.md#size)\n\n## Properties\n\n### digest\n\n• `Optional` **digest**: `string`\n\nThe SHA256 digest of the artifact that was created. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:19](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L19)\n\n___\n\n### id\n\n• `Optional` **id**: `number`\n\nThe id of the artifact that was created. Not provided if no artifact was uploaded\nThis ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:14](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L14)\n\n___\n\n### size\n\n• `Optional` **size**: `number`\n\nTotal size of the artifact in bytes. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:8](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L8)\n","isInternal":false,"tokens":306,"sizeBytes":1369},{"name":"README.md","path":"packages/artifact/docs/generated/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/docs/generated/README.md","title":"generated Documentation","category":"plugin-manifest","format":"markdown","content":"@actions/artifact\n\n# @actions/artifact\n\n## Table of contents\n\n### Classes\n\n- [ArtifactNotFoundError](classes/ArtifactNotFoundError.md)\n- [DefaultArtifactClient](classes/DefaultArtifactClient.md)\n- [FilesNotFoundError](classes/FilesNotFoundError.md)\n- [GHESNotSupportedError](classes/GHESNotSupportedError.md)\n- [InvalidResponseError](classes/InvalidResponseError.md)\n- [NetworkError](classes/NetworkError.md)\n- [UsageError](classes/UsageError.md)\n\n### Interfaces\n\n- [Artifact](interfaces/Artifact.md)\n- [ArtifactClient](interfaces/ArtifactClient.md)\n- [DeleteArtifactResponse](interfaces/DeleteArtifactResponse.md)\n- [DownloadArtifactOptions](interfaces/DownloadArtifactOptions.md)\n- [DownloadArtifactResponse](interfaces/DownloadArtifactResponse.md)\n- [FindOptions](interfaces/FindOptions.md)\n- [GetArtifactResponse](interfaces/GetArtifactResponse.md)\n- [ListArtifactsOptions](interfaces/ListArtifactsOptions.md)\n- [ListArtifactsResponse](interfaces/ListArtifactsResponse.md)\n- [UploadArtifactOptions](interfaces/UploadArtifactOptions.md)\n- [UploadArtifactResponse](interfaces/UploadArtifactResponse.md)\n\n### Variables\n\n- [default](README.md#default)\n\n## Variables\n\n### default\n\n• `Const` **default**: [`ArtifactClient`](interfaces/ArtifactClient.md)\n\n#### Defined in\n\n[src/artifact.ts:7](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/artifact.ts#L7)\n","isInternal":false,"tokens":313,"sizeBytes":1378},{"name":"README.md","path":"packages/artifact/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/artifact/README.md","title":"artifact Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/artifact`\n\nInteract programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).\n\nThis is the core library that powers the [`@actions/upload-artifact`](https://github.com/actions/upload-artifact) and [`@actions/download-artifact`](https://github.com/actions/download-artifact) actions.\n\n- [`@actions/artifact`](#actionsartifact)\n  - [v2 - What's New](#v2---whats-new)\n    - [Improvements](#improvements)\n    - [Breaking changes](#breaking-changes)\n  - [Quick Start](#quick-start)\n  - [Examples](#examples)\n    - [Upload and Download](#upload-and-download)\n    - [Delete an Artifact](#delete-an-artifact)\n    - [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)\n    - [Speeding up large uploads](#speeding-up-large-uploads)\n  - [Additional Resources](#additional-resources)\n\n## v2 - What's New\n\n> [!IMPORTANT]\n> @actions/artifact v2+, upload-artifact@v4+, and download-artifact@v4+ are not currently supported on GHES yet. The previous version of this package can be found at [this tag](https://github.com/actions/toolkit/tree/@actions/artifact@1.1.2/packages/artifact) and [on npm](https://www.npmjs.com/package/@actions/artifact/v/1.1.2).\n\nThe release of `@actions/artifact@v2` (including `upload-artifact@v4` and `download-artifact@v4`) are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.\n\n### Improvements\n\n1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.\n2. Once uploaded, an Artifact ID is returned and Artifacts are immediately available in the UI and [REST API](https://docs.github.com/en/rest/actions/artifacts). Previously, you would have to wait for the run to be completed before an ID was available or any APIs could be utilized.\n3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.\n4. The contents of an Artifact are uploaded together into an _immutable_ archive. They cannot be altered by subsequent jobs. Both of these factors help reduce the possibility of accidentally corrupting Artifact files. (Digest/integrity hash coming soon in the API!)\n5. This library (and `actions/download-artifact`) now support downloading Artifacts from _other_ repositories and runs if a `GITHUB_TOKEN` with sufficient `actions:read` permissions are provided.\n\n### Breaking changes\n\n1. Firewall rules required for self-hosted runners.\n\n    If you are using self-hosted runners behind a firewall, you must have flows open to [Actions endpoints](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github). If you cannot use wildcard rules for your firewall, see the GitHub [meta endpoint](https://api.github.com/meta) for specific endpoints.\n\n    e.g.\n\n    ```bash\n    curl https://api.github.com/meta | jq .domains.actions\n    ```\n\n2. Uploading to the same named Artifact multiple times.\n\n    Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once.\n\n3. Limit of Artifacts for an individual job.\n\n    Each job in a workflow run now has a limit of 10 artifacts.\n\n## Quick Start\n\nInstall the package:\n\n```bash\nnpm i @actions/artifact\n```\n\nImport the module:\n\n```js\n// ES6 module\nimport {DefaultArtifactClient} from '@actions/artifact'\n\n// CommonJS\nconst {DefaultArtifactClient} = require('@actions/artifact')\n```\n\nThen instantiate:\n\n```js\nconst artifact = new DefaultArtifactClient()\n```\n\nℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).\n\n## Examples\n\n### Upload and Download\n\nThe most basic scenario is uploading one or more files to an Artifact, then downloading that Artifact. Downloads are based on the Artifact ID, which can be obtained in the response of `uploadArtifact`, `getArtifact`, `listArtifacts` or via the [REST API](https://docs.github.com/en/rest/actions/artifacts).\n\n```js\nconst {id, size} = await artifact.uploadArtifact(\n  // name of the artifact\n  'my-artifact',\n  // files to include (supports absolute and relative paths)\n  ['/absolute/path/file1.txt', './relative/file2.txt'],\n  {\n    // optional: how long to retain the artifact\n    // if unspecified, defaults to repository/org retention settings (the limit of this value)\n    retentionDays: 10\n  }\n)\n\nconsole.log(`Created artifact with id: ${id} (bytes: ${size}`)\n\nconst {downloadPath} = await artifact.downloadArtifact(id, {\n  // optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE\n  path: '/tmp/dst/path',\n})\n\nconsole.log(`Downloaded artifact ${id} to: ${downloadPath}`)\n```\n\n### Delete an Artifact\n\nTo delete an artifact, all you need is the name.\n\n```js\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact'\n)\n\nconsole.log(`Deleted Artifact ID '${id}'`)\n```\n\nIt also supports options to delete from other repos/runs given a github token with `actions:write` permissions on the target repository is supplied.\n\n```js\nconst findBy = {\n  // must have actions:write permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\n\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact',\n  // options to find by other repo/owner\n  { findBy }\n)\n\nconsole.log(`Deleted Artifact ID '${id}' from ${findBy.repositoryOwner}/ ${findBy.repositoryName}`)\n```\n\n### Downloading from other workflow runs or repos\n\nIt may be useful to download Artifacts from other workflow runs, or even other repositories. By default, the permissions are scoped so they can only download Artifacts within the current workflow run. To elevate permissions for this scenario, you must specify `options.findBy` to `downloadArtifact`.\n\n```ts\nconst findBy = {\n  // must have actions:read permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\nawait artifact.downloadArtifact(1337, {\n  findBy\n})\n\n// can also be used in other methods\n\nawait artifact.getArtifact('my-artifact', {\n  findBy\n})\n\nawait artifact.listArtifacts({\n  findBy\n})\n```\n\n### Speeding up large uploads\n\nIf you have large files that need to be uploaded (or file types that don't compress well), you may benefit from changing the compression level of the Artifact archive. NOTE: This is a tradeoff between artifact upload time and stored data size.\n\n```ts\nawait artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {\n  // The level of compression for Zlib to be applied to the artifact archive.\n  // - 0: No compression\n  // - 1: Best speed\n  // - 6: Default compression (same as GNU Gzip)\n  // - 9: Best compression\n  compressionLevel: 0\n})\n```\n\n## Additional Resources\n\n- [Releases](./RELEASES.md)\n- [Contribution Guide](./CONTRIBUTIONS.md)\n- [Frequently Asked Questions](./docs/faq.md)\n","isInternal":false,"tokens":1712,"sizeBytes":7286},{"name":"README.md","path":"packages/attest/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/attest/README.md","title":"attest Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/attest`\n\nFunctions for generating signed attestations for workflow artifacts.\n\nAttestations bind some subject (a named artifact along with its digest) to a\npredicate (some assertion about that subject) using the [in-toto\nstatement](https://github.com/in-toto/attestation/tree/main/spec/v1) format. A\nsignature is generated for the attestation using a\n[Sigstore](https://www.sigstore.dev/)-issued signing certificate.\n\nOnce the attestation has been created and signed, it will be uploaded to the GH\nattestations API and associated with the repository from which the workflow was\ninitiated.\n\nSee [Using artifact attestations to establish provenance for builds](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)\nfor more information on artifact attestations.\n\n## Table of Contents\n- [Usage](#usage)\n  - [attest](#attest)\n  - [attestProvenance](#attestprovenance)\n  - [Attestation](#attestation)\n- [Sigstore Instance](#sigstore-instance)\n- [Storage](#storage)\n\n## Usage\n\n### `attest`\n\nThe `attest` function takes the supplied subject/predicate pair and generates a\nsigned attestation.\n\n```js\nconst { attest } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attest({\n        subjects: [{name: 'my-artifact-name', digest: { 'sha256': '36ab4667...'}}],\n        predicateType: 'https://in-toto.io/attestation/release',\n        predicate: { . . . },\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attest` function supports the following options:\n\n```typescript\nexport type AttestOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  predicateType: string\n  // Predicate to be attested.\n  predicate: object\n  // GitHub token for writing attestations.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n}\n\nexport type Subject = {\n   // Name of the subject.\n  name: string\n   // Digests of the subject. Should be a map of digest algorithms to their hex-encoded values.\n  digest: Record<string, string>\n}\n```\n\n### `attestProvenance`\n\nThe `attestProvenance` function accepts the name and digest of some artifact and\ngenerates a build provenance attestation over those values.\n\nThe attestation is formed by first generating a [SLSA provenance\npredicate](https://slsa.dev/spec/v1.0/provenance) populated with\n[metadata](https://github.com/slsa-framework/github-actions-buildtypes/tree/main/workflow/v1)\npulled from the GitHub Actions run.\n\n```js\nconst { attestProvenance } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attestProvenance({\n        subjectName: 'my-artifact-name',\n        subjectDigest: { 'sha256': '36ab4667...'},\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attestProvenance` function supports the following options:\n\n```typescript\nexport type AttestProvenanceOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n  // Issuer URL responsible for minting the OIDC token from which the\n  // provenance data is read. Defaults to\n  // 'https://token.actions.githubusercontent.com\".\n  issuer?: string\n}\n```\n\n### `Attestation`\n\nThe `Attestation` returned by `attest`/`attestProvenance` has the following\nfields:\n\n```typescript\nexport type Attestation = {\n  /*\n   * JSON-serialized Sigstore bundle containing the provenance attestation,\n   * signature, signing certificate and witnessed timestamp.\n   */\n  bundle: SerializedBundle\n  /*\n   * PEM-encoded signing certificate used to sign the attestation.\n   */\n  certificate: string\n  /*\n   * ID of Rekor transparency log entry created for the attestation (if\n   * applicable).\n   */\n  tlogID?: string\n  /*\n   * ID of the persisted attestation (accessible via the GH API).\n   */\n  attestationID?: string\n}\n```\n\nFor details about the Sigstore bundle format, see the [Bundle protobuf\nspecification](https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto).\n\n### createStorageRecord\n\nThe `createStorageRecord` function creates an\n[artifact metadata storage record](https://docs.github.com/en/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record)\non behalf of an attested artifact. It accepts parameters defining artifact\nand package registry details. The storage record contains metadata about where the artifact is stored on a given package registry.\n\n```js\nconst { createStorageRecord } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const record = await createStorageRecord(\n        artifactOptions: {\n            name: 'my-artifact-name',\n            digest: { 'sha256': '36ab4667...'},\n            version: \"v1.0.0\"\n        },\n        packageRegistryOptions: {\n            registryUrl: \"https://my-fave-pkg-registry.com\"\n        },\n        token: ghToken\n    );\n\n    console.log(record);\n}\n\nrun();\n```\n\nThe `createStorageRecord` function supports the following options:\n\n```typescript\n// Artifact details to associate the record with\nexport type ArtifactOptions = {\n  // The name of the artifact\n  name: string\n  // The digest of the artifact\n  digest: string\n  // The version of the artifact\n  version?: string\n  // The status of the artifact\n  status?: string\n}\n// Includes details about the package registry the artifact was published to\nexport type PackageRegistryOptions = {\n  // The URL of the package registry\n  registryUrl: string\n  // The URL of the artifact in the package registry\n  artifactUrl?: string\n  // The package registry repository the artifact was published to.\n  repo?: string\n  // The path of the artifact in the package registry repository.\n  path?: string\n}\n// GitHub token for writing attestations.\ntoken: string\n// Optional parameters for the write operation.\n// The number of times to retry the request.\nretryAttempts?: number\n// HTTP headers to include in request to Artifact Metadata API.\nheaders?: RequestHeaders\n```\n\n## Sigstore Instance\n\nWhen generating the signed attestation there are two different Sigstore\ninstances which can be used to issue the signing certificate. By default,\nworkflows initiated from public repositories will use the Sigstore public-good\ninstance and persist the attestation signature to the public [Rekor transparency\nlog](https://docs.sigstore.dev/logging/overview/). Workflows initiated from\nprivate/internal repositories will use the GitHub-internal Sigstore instance\nwhich uses a signed timestamp issued by GitHub's timestamp authority in place of\nthe public transparency log.\n\nThe default Sigstore instance selection can be overridden by passing an explicit\nvalue of either \"public-good\" or \"github\" for the `sigstore` option when calling\neither `attest` or `attestProvenance`.\n\n## Storage\n\nAttestations created by `attest`/`attestProvenance` will be uploaded to the GH\nattestations API and associated with the appropriate repository. Attestation\nstorage is only supported for public repositories or repositories which belong\nto a GitHub Enterprise Cloud account.\n\nIn order to generate attestations for private, non-Enterprise repositories, the\n`skipWrite` option should be set to `true`.\n","isInternal":false,"tokens":2049,"sizeBytes":8862},{"name":"README.md","path":"packages/cache/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/cache/README.md","title":"cache Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/cache`\n\n> Functions necessary for caching dependencies and build outputs to improve workflow execution time.\n\nSee [\"Caching dependencies to speed up workflows\"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) for how caching works.\n\nNote that GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. If you exceed this limit, GitHub will save your cache but will begin evicting caches until the total size is less than 10 GB.\n\n## ⚠️ Important changes\n\nThe cache backend service has been rewritten from the ground up for improved performance and reliability. The [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) package now integrates with the new cache service (v2) APIs.\n\nThe new service will gradually roll out as of **February 1st, 2025**. The legacy service will also be sunset on the same date. Changes in this release are **fully backward compatible**.\n\n**All previous versions of this package will be deprecated**. We recommend upgrading to version `4.0.0` as soon as possible before **February 1st, 2025.**\n\nIf you do not upgrade, all workflow runs using any of the deprecated [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) packages will fail.\n\nUpgrading to the recommended version should not break or require any changes to your workflows beyond updating your `package.json` to version `4.0.0`.\n\nRead more about the change & access the migration guide: [reference to the announcement](https://github.com/actions/toolkit/discussions/1890).\n\n## Usage\n\nThis package is used by the v2+ versions of our first party cache action. You can find an example implementation in the cache repo [here](https://github.com/actions/cache).\n\n#### Save Cache\n\nSaves a cache containing the files in `paths` using the `key` provided. The files would be compressed using zstandard compression algorithm if zstd is installed, otherwise gzip is used. Function returns the cache id if the cache was saved succesfully and throws an error if cache upload fails.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst cacheId = await cache.saveCache(paths, key)\n```\n\n#### Restore Cache\n\nRestores a cache based on `key` and `restoreKeys` to the `paths` provided. Function returns the cache key for cache hit and returns undefined if cache not found.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst restoreKeys = [\n    'npm-foobar-',\n    'npm-'\n]\nconst cacheKey = await cache.restoreCache(paths, key, restoreKeys)\n```\n\n##### Cache segment restore timeout\n\nA cache gets downloaded in multiple segments of fixed sizes (now `128MB` to fail-fast, previously `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner were used). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.4` of cache package introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.\n\nDefault value of this timeout is 10 minutes (starting `v3.2.1` and higher, previously 60 minutes in versions between `v.3.0.4` and `v3.2.0`, both included) and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.\n","isInternal":false,"tokens":851,"sizeBytes":3761},{"name":"README.md","path":"packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/core`\n\n> Core functions for setting results, logging, registering secrets and exporting variables across actions\n\n## Usage\n\n### Import the package\n\n```js\n// javascript\nconst core = require('@actions/core');\n\n// typescript\nimport * as core from '@actions/core';\n```\n\n#### Inputs/Outputs\n\nAction inputs can be read with `getInput` which returns a `string` or `getBooleanInput` which parses a boolean based on the [yaml 1.2 specification](https://yaml.org/spec/1.2/spec.html#id2804923). If `required` is set to be false, the input should have a default value in `action.yml`.\n\nOutputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.\n\n```js\nconst myInput = core.getInput('inputName', { required: true });\nconst myBooleanInput = core.getBooleanInput('booleanInputName', { required: true });\nconst myMultilineInput = core.getMultilineInput('multilineInputName', { required: true });\ncore.setOutput('outputKey', 'outputVal');\n```\n\n#### Exporting variables\n\nSince each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.\n\n```js\ncore.exportVariable('envVar', 'Val');\n```\n\n#### Setting a secret\n\nSetting a secret registers the secret with the runner to ensure it is masked in logs.\n\n```js\ncore.setSecret('myPassword');\n```\n\n#### PATH Manipulation\n\nTo make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`.  The runner will prepend the path given to the jobs PATH.\n\n```js\ncore.addPath('/path/to/mytool');\n```\n\n#### Declaring artifacts\n\nTo declare an artifact that your action produced, use `declareArtifact`. Each call declares one artifact, which is either a path to a local file or an OCI subject reference that includes a digest. The runner validates each declaration after the step completes and fails the step if a declaration is invalid, for example, if the file doesn't exist.\n\n```js\n// A local file. The runner resolves relative paths against GITHUB_WORKSPACE.\ncore.declareArtifact('dist/app.tar.gz');\n\n// An OCI subject. The digest, such as sha256:<hex>, is required.\ncore.declareArtifact(`ghcr.io/octocat/app:1.0.0@${digest}`);\n```\n\nTo force how the runner interprets a value, prefix it with `file://` or `oci://`.\n\nArtifact declarations require runner version 2.336.0 or later and take effect only where they're enabled. On older runners, `GITHUB_ARTIFACTS` isn't set, so `declareArtifact` logs a debug message and skips the declaration. Where artifact declarations aren't enabled, `GITHUB_ARTIFACTS` is set, but the runner ignores it — the declaration has no effect and doesn't fail the step. For how the runner names artifacts and the limits it enforces, see [Declare an artifact](../../docs/commands.md#declare-an-artifact).\n\n#### Exit codes\n\nYou should use this library to set the failing exit code for your action.  If status is not set and the script runs to completion, that will lead to a success.\n\n```js\nconst core = require('@actions/core');\n\ntry {\n  // Do stuff\n}\ncatch (err) {\n  // setFailed logs the message and sets a failing exit code\n  core.setFailed(`Action failed with error ${err}`);\n}\n```\n\nNote that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.\n\n#### Logging\n\nFinally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).\n\n```js\nconst core = require('@actions/core');\n\nconst myInput = core.getInput('input');\ntry {\n  core.debug('Inside try block');\n  \n  if (!myInput) {\n    core.warning('myInput was not set');\n  }\n  \n  if (core.isDebug()) {\n    // curl -v https://github.com\n  } else {\n    // curl https://github.com\n  }\n\n  // Do stuff\n  core.info('Output to the actions build log')\n\n  core.notice('This is a message that will also emit an annotation')\n}\ncatch (err) {\n  core.error(`Error ${err}, action may still succeed though`);\n}\n```\n\nThis library can also wrap chunks of output in foldable groups.\n\n```js\nconst core = require('@actions/core')\n\n// Manually wrap output\ncore.startGroup('Do some function')\ndoSomeFunction()\ncore.endGroup()\n\n// Wrap an asynchronous function call\nconst result = await core.group('Do something async', async () => {\n  const response = await doSomeHTTPRequest()\n  return response\n})\n```\n\n#### Annotations\n\nThis library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). \n```js\ncore.error('This is a bad error, action may still succeed though.')\n\ncore.warning('Something went wrong, but it\\'s not bad enough to fail the build.')\n\ncore.notice('Something happened that you might want to know about.')\n```\n\nThese will surface to the UI in the Actions page and on Pull Requests. They look something like this:\n\n![Annotations Image](../../docs/assets/annotations.png)\n\nThese annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. \n\nThese options are: \n```typescript\nexport interface AnnotationProperties {\n  /**\n   * A title for the annotation.\n   */\n  title?: string\n\n  /**\n   * The name of the file for which the annotation should be created.\n   */\n  file?: string\n\n  /**\n   * The start line for the annotation.\n   */\n  startLine?: number\n\n  /**\n   * The end line for the annotation. Defaults to `startLine` when `startLine` is provided.\n   */\n  endLine?: number\n\n  /**\n   * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   */\n  startColumn?: number\n\n  /**\n   * The end column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   * Defaults to `startColumn` when `startColumn` is provided.\n   */\n  endColumn?: number\n}\n```\n\n#### Styling output\n\nColored output is supported in the Action logs via standard [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). 3/4 bit, 8 bit and 24 bit colors are all supported.\n\nForeground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[35mThis foreground will be magenta')\n\n// 8 bit\ncore.info('\\u001b[38;5;6mThis foreground will be cyan')\n\n// 24 bit\ncore.info('\\u001b[38;2;255;0;0mThis foreground will be bright red')\n```\n\nBackground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[43mThis background will be yellow');\n\n// 8 bit\ncore.info('\\u001b[48;5;6mThis background will be cyan')\n\n// 24 bit\ncore.info('\\u001b[48;2;255;0;0mThis background will be bright red')\n```\n\nSpecial styles:\n\n```js\ncore.info('\\u001b[1mBold text')\ncore.info('\\u001b[3mItalic text')\ncore.info('\\u001b[4mUnderlined text')\n```\n\nANSI escape codes can be combined with one another:\n\n```js\ncore.info('\\u001b[31;46mRed foreground with a cyan background and \\u001b[1mbold text at the end');\n```\n\n> Note: Escape codes reset at the start of each line\n\n```js\ncore.info('\\u001b[35mThis foreground will be magenta')\ncore.info('This foreground will reset to the default')\n```\n\nManually typing escape codes can be a little difficult, but you can use third party modules such as [ansi-styles](https://github.com/chalk/ansi-styles).\n\n```js\nconst style = require('ansi-styles');\ncore.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!')\n```\n\n#### Action state\n\nYou can use this library to save state and get state for sharing information between a given wrapper action:\n\n**action.yml**:\n\n```yaml\nname: 'Wrapper action sample'\ninputs:\n  name:\n    default: 'GitHub'\nruns:\n  using: 'node12'\n  main: 'main.js'\n  post: 'cleanup.js'\n```\n\nIn action's `main.js`:\n\n```js\nconst core = require('@actions/core');\n\ncore.saveState(\"pidToKill\", 12345);\n```\n\nIn action's `cleanup.js`:\n\n```js\nconst core = require('@actions/core');\n\nvar pid = core.getState(\"pidToKill\");\n\nprocess.kill(pid);\n```\n\n#### OIDC Token\n\nYou can use these methods to interact with the GitHub OIDC provider and get a JWT ID token which would help to get access token from third party cloud providers.\n\n**Method Name**: getIDToken()\n\n**Inputs**\n\naudience : optional\n\n**Outputs**\n\nA [JWT](https://jwt.io/) ID Token\n\nIn action's `main.ts`:\n```js\nconst core = require('@actions/core');\nasync function getIDTokenAction(): Promise<void> {\n  \n   const audience = core.getInput('audience', {required: false})\n   \n   const id_token1 = await core.getIDToken()            // ID Token with default audience\n   const id_token2 = await core.getIDToken(audience)    // ID token with custom audience\n   \n   // this id_token can be used to get access token from third party cloud providers\n}\ngetIDTokenAction()\n```\n\nIn action's `actions.yml`:\n\n```yaml\nname: 'GetIDToken'\ndescription: 'Get ID token from Github OIDC provider'\ninputs:\n  audience:  \n    description: 'Audience for which the ID token is intended for'\n    required: false\noutputs:\n  id_token1: \n    description: 'ID token obtained from OIDC provider'\n  id_token2: \n    description: 'ID token obtained from OIDC provider'\nruns:\n  using: 'node12'\n  main: 'dist/index.js'\n```\n\n#### Filesystem path helpers\n\nYou can use these methods to manipulate file paths across operating systems.\n\nThe `toPosixPath` function converts input paths to Posix-style (Linux) paths.\nThe `toWin32Path` function converts input paths to Windows-style paths. These\nfunctions work independently of the underlying runner operating system.\n\n```js\ntoPosixPath('\\\\foo\\\\bar') // => /foo/bar\ntoWin32Path('/foo/bar') // => \\foo\\bar\n```\n\nThe `toPlatformPath` function converts input paths to the expected value on the runner's operating system.\n\n```js\n// On a Windows runner.\ntoPlatformPath('/foo/bar') // => \\foo\\bar\n\n// On a Linux runner.\ntoPlatformPath('\\\\foo\\\\bar') // => /foo/bar\n```\n\n#### Platform helper\n\nProvides shorthands for getting information about platform action is running on.\n\n```js\nimport { platform } from '@actions/core'\n\n/* equals to a call of os.platform() */\nplatform.platform // 'win32' | 'darwin' | 'linux' | 'freebsd' | 'openbsd' | 'android' | 'cygwin' | 'sunos'\n\n/* equals to a call of os.arch() */\nplatform.arch // 'x64' | 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x'\n\n/* common shorthands for platform-specific logic */\nplatform.isWindows // true\nplatform.isMacOS // false\nplatform.isLinux // false\n\n/* run platform-specific script to get more details about the exact platform, works on Windows, MacOS and Linux */\nconst {\n  name, // Microsoft Windows 11 Enterprise\n  version, // 10.0.22621\n} = await platform.getDetails()\n```\n\n#### Populating job summary\n\nThese methods can be used to populate a [job summary](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary). A job summary is a buffer that can be added to throughout your job via `core.summary` methods.\n\nJob summaries when complete must be written to the summary buffer file via the `core.summary.write()` method.\n\nAll methods except `addRaw()` utilize the `addRaw()` method to append to the buffer, followed by an EOL using the `addEOL()` method.\n\n```typescript\n\n// Write raw text, optionally add an EOL after the content, defaults to false\ncore.summary.addRaw('Some content here :speech_balloon:', true)\n// Output: Some content here :speech_balloon:\\n\n\n// Add an operating system-specific end-of-line marker\ncore.summary.addEOL()\n// Output (POSIX): \\n\n// Output (Windows): \\r\\n\n\n// Add a codeblock with an optional language for syntax highlighting\ncore.summary.addCodeBlock('console.log(\\'hello world\\')', 'javascript')\n// Output: <pre lang=\"javascript\"><code>console.log('hello world')</code></pre>\n\n// Add a list, second parameter indicates if list is ordered, defaults to false\ncore.summary.addList(['item1','item2','item3'], true)\n// Output: <ol><li>item1</li><li>item2</li><li>item3</li></ol>\n\n// Add a collapsible HTML details element\ncore.summary.addDetails('Label', 'Some detail that will be collapsed')\n// Output: <details><summary>Label</summary>Some detail that will be collapsed</details>\n\n// Add an image, image options parameter is optional, you can supply one of or both width and height in pixels\ncore.summary.addImage('example.png', 'alt description of img', {width: '100', height: '100'})\n// Output: <img src=\"example.png\" alt=\"alt description of img\" width=\"100\" height=\"100\">\n\n// Add an HTML section heading element, optionally pass a level that translates to 'hX' ie. h2. Defaults to h1\ncore.summary.addHeading('My Heading', '2')\n// Output: <h2>My Heading</h2>\n\n// Add an HTML thematic break <hr>\ncore.summary.addSeparator()\n// Output: <hr>\n\n// Add an HTML line break <br>\ncore.summary.addBreak()\n// Output: <br>\n\n// Add an HTML blockquote with an optional citation\ncore.summary.addQuote('To be or not to be', 'Shakespeare')\n// Output: <blockquote cite=\"Shakespeare\">To be or not to be</blockquote>\n\n// Add an HTML anchor tag\ncore.summary.addLink('click here', 'https://github.com')\n// Output: <a href=\"https://github.com\">click here</a>\n\n```\n\nTables are added using the `addTable()` method, and an array of `SummaryTableRow`.\n\n```typescript\n\nexport type SummaryTableRow = (SummaryTableCell | string)[]\n\nexport interface SummaryTableCell {\n  /**\n   * Cell content\n   */\n  data: string\n  /**\n   * Render cell as header\n   * (optional) default: false\n   */\n  header?: boolean\n  /**\n   * Number of columns the cell extends\n   * (optional) default: '1'\n   */\n  colspan?: string\n  /**\n   * Number of rows the cell extends\n   * (optional) default: '1'\n   */\n  rowspan?: string\n}\n\n```\n\nFor example\n\n```typescript\n\nconst tableData = [\n  {data: 'Header1', header: true},\n  {data: 'Header2', header: true},\n  {data: 'Header3', header: true},\n  {data: 'MyData1'},\n  {data: 'MyData2'},\n  {data: 'MyData3'}\n]\n\n// Add an HTML table\ncore.summary.addTable([tableData])\n// Output: <table><tr><th>Header1</th><th>Header2</th><th>Header3</th></tr><tr></tr><td>MyData1</td><td>MyData2</td><td>MyData3</td></tr></table>\n\n```\n\nIn addition to job summary content, there are utility functions for interfacing with the buffer.\n\n```typescript\n\n// Empties the summary buffer AND wipes the summary file on disk\ncore.summary.clear()\n\n// Returns the current summary buffer as a string\ncore.summary.stringify()\n\n// If the summary buffer is empty\ncore.summary.isEmptyBuffer()\n\n// Resets the summary buffer without writing to the summary file on disk\ncore.summary.emptyBuffer()\n\n// Writes text in the buffer to the summary buffer file and empties the buffer, optionally overwriting all existing content in the summary file with buffer contents. Defaults to false.\ncore.summary.write({overwrite: true})\n```","isInternal":false,"tokens":3689,"sizeBytes":14711},{"name":"README.md","path":"packages/exec/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/exec/README.md","title":"exec Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/exec`\n\n## Usage\n\n#### Basic\n\nYou can use this package to execute tools in a cross platform way:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node index.js');\n```\n\n#### Args\n\nYou can also pass in arg arrays:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node', ['index.js', 'foo=bar']);\n```\n\n#### Output/options\n\nCapture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):\n\n```js\nconst exec = require('@actions/exec');\n\nlet myOutput = '';\nlet myError = '';\n\nconst options = {};\noptions.listeners = {\n  stdout: (data: Buffer) => {\n    myOutput += data.toString();\n  },\n  stderr: (data: Buffer) => {\n    myError += data.toString();\n  }\n};\noptions.cwd = './lib';\n\nawait exec.exec('node', ['index.js', 'foo=bar'], options);\n```\n\n#### Exec tools not in the PATH\n\nYou can specify the full path for tools not in the PATH:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('\"/path/to/my-tool\"', ['arg1']);\n```\n","isInternal":false,"tokens":279,"sizeBytes":1063},{"name":"README.md","path":"packages/github/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/github/README.md","title":"github Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/github`\n\n> A hydrated Octokit client.\n\n## Usage\n\nReturns an authenticated Octokit client that follows the machine [proxy settings](https://help.github.com/en/actions/hosting-your-own-runners/using-a-proxy-server-with-self-hosted-runners) and correctly sets GHES base urls. See https://octokit.github.io/rest.js for the API.\n\n**Note:** This package is ESM-only starting from v9.0.0. For CommonJS projects, use dynamic import:\n```js\nasync function main() {\n    const { getOctokit, context } = await import('@actions/github');\n    // ... your code here\n}\nmain();\n```\n\nFor bundled actions (recommended), most bundlers like esbuild, webpack, and rollup handle ESM imports automatically.\n\n```js\nimport * as github from '@actions/github';\nimport * as core from '@actions/core';\n\nasync function run() {\n    // This should be a token with access to your repository scoped in as a secret.\n    // The YML workflow will need to set myToken with the GitHub Secret Token\n    // myToken: ${{ secrets.GITHUB_TOKEN }}\n    // https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token#about-the-github_token-secret\n    const myToken = core.getInput('myToken');\n\n    const octokit = github.getOctokit(myToken)\n\n    // You can also pass in additional options as a second parameter to getOctokit\n    // const octokit = github.getOctokit(myToken, {userAgent: \"MyActionVersion1\"});\n\n    const { data: pullRequest } = await octokit.rest.pulls.get({\n        owner: 'octokit',\n        repo: 'rest.js',\n        pull_number: 123,\n        mediaType: {\n          format: 'diff'\n        }\n    });\n\n    console.log(pullRequest);\n}\n\nrun();\n```\n\nYou can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.\n\n```js\nconst result = await octokit.graphql(query, variables);\n```\n\nFinally, you can get the context of the current action:\n\n```js\nimport * as github from '@actions/github';\n\nconst context = github.context;\n\nconst newIssue = await octokit.rest.issues.create({\n  ...context.repo,\n  title: 'New issue!',\n  body: 'Hello Universe!'\n});\n```\n\n## Webhook payload typescript definitions\n\nThe npm module `@octokit/webhooks-definitions` provides type definitions for the response payloads. You can cast the payload to these types for better type information.\n\nFirst, install the npm module `npm install @octokit/webhooks-definitions`\n\nThen, assert the type based on the eventName\n```ts\nimport * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport {PushEvent} from '@octokit/webhooks-definitions/schema'\n\nif (github.context.eventName === 'push') {\n  const pushPayload = github.context.payload as PushEvent\n  core.info(`The head commit is: ${pushPayload.head_commit}`)\n}\n```\n\n## Extending the Octokit instance\n`@octokit/core` now supports the [plugin architecture](https://github.com/octokit/core.js#plugins). You can extend the GitHub instance using plugins. \n\nFor example, using the `@octokit/plugin-enterprise-server` you can now access enterprise admin apis on GHES instances.\n\n```ts\nimport { GitHub, getOctokitOptions } from '@actions/github/lib/utils'\nimport { enterpriseServer220Admin } from '@octokit/plugin-enterprise-server'\n\nconst octokit = GitHub.plugin(enterpriseServer220Admin)\n// or override some of the default values as well \n// const octokit = GitHub.plugin(enterpriseServer220Admin).defaults({userAgent: \"MyNewUserAgent\"})\n\nconst myToken = core.getInput('myToken');\nconst myOctokit = new octokit(getOctokitOptions(token))\n// Create a new user\nmyOctokit.rest.enterpriseAdmin.createUser({\n  login: \"testuser\",\n  email: \"testuser@test.com\",\n});\n```\n","isInternal":false,"tokens":857,"sizeBytes":3652},{"name":"README.md","path":"packages/glob/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/glob/README.md","title":"glob Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/glob`\n\n## Usage\n\n### Basic\n\nYou can use this package to search for files matching glob patterns.\n\nRelative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.\n\n```js\nconst glob = require('@actions/glob');\n\nconst patterns = ['**/tar.gz', '**/tar.bz']\nconst globber = await glob.create(patterns.join('\\n'))\nconst files = await globber.glob()\n```\n\n### Opt out of following symbolic links\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**', {followSymbolicLinks: false})\nconst files = await globber.glob()\n```\n\n### Iterator\n\nWhen dealing with a large amount of results, consider iterating the results as they are returned:\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**')\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Recommended action inputs\n\nGlob follows symbolic links by default. Following is often appropriate unless deleting files.\n\nUsers may want to opt-out from following symbolic links for other reasons. For example,\nexcessive amounts of symbolic links can create the appearance of very, very many files\nand slow the search.\n\nWhen an action allows a user to specify input patterns, it is generally recommended to\nallow users to opt-out from following symbolic links.\n\nSnippet from `action.yml`:\n\n```yaml\ninputs:\n  files:\n    description: 'Files to print'\n    required: true\n  follow-symbolic-links:\n    description: 'Indicates whether to follow symbolic links'\n    default: true\n```\n\nAnd corresponding toolkit consumption:\n\n```js\nconst core = require('@actions/core')\nconst glob = require('@actions/glob')\n\nconst globOptions = {\n  followSymbolicLinks: core.getInput('follow-symbolic-links').toUpper() !== 'FALSE'\n}\nconst globber = glob.create(core.getInput('files'), globOptions)\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Hashing files (`hashFiles`)\n\n`hashFiles` computes a hash of files matched by glob patterns.\n\nBy default, only files under the workspace (`GITHUB_WORKSPACE`) are eligible to be hashed.\n\nTo improve security, file eligibility is evaluated using each file's resolved (real) path to prevent symbolic link traversal outside the allowed root path(s).\n\n### Options\n\n- `roots?: string[]` — Allowlist of root paths. Only files that resolve under (or equal) one of these roots are hashed. Defaults to `[GITHUB_WORKSPACE]` (or `currentWorkspace` if provided).\n- `allowFilesOutsideWorkspace?: boolean` — Explicit opt-in to include files outside the specified root path(s). Defaults to `false`.\n- `exclude?: string[]` — Glob patterns to exclude from hashing. Defaults to `[]`.\n\nIf files match your patterns but are outside the allowed roots and `allowFilesOutsideWorkspace` is not enabled, those files are skipped and a warning is emitted. If no eligible files remain after filtering, `hashFiles` returns an empty string (`''`).\n\n### Example\n\n```js\nconst glob = require('@actions/glob')\n\nconst hash = await glob.hashFiles('**/*.json', process.env.GITHUB_WORKSPACE || '', {\n  roots: [process.env.GITHUB_WORKSPACE, process.env.GITHUB_ACTION_PATH].filter(Boolean),\n  allowFilesOutsideWorkspace: true,\n  exclude: ['**/node_modules/**']\n})\n\nconsole.log(hash)\n```\n\n## Patterns\n\n### Glob behavior\n\nPatterns `*`, `?`, `[...]`, `**` (globstar) are supported.\n\nWith the following behaviors:\n- File names that begin with `.` may be included in the results\n- Case insensitive on Windows\n- Directory separator `/` and `\\` both supported on Windows\n\n### Tilde expansion\n\nSupports basic tilde expansion, for current user HOME replacement only.\n\nExample:\n- `~` may expand to /Users/johndoe\n- `~/foo` may expand to /Users/johndoe/foo\n\n### Comments\n\nPatterns that begin with `#` are treated as comments.\n\n### Exclude patterns\n\nLeading `!` changes the meaning of an include pattern to exclude.\n\nMultiple leading `!` flips the meaning.\n\n### Escaping\n\nWrapping special characters in `[]` can be used to escape literal glob characters\nin a file name. For example the literal file name `hello[a-z]` can be escaped as `hello[[]a-z]`.\n\nOn Linux/macOS `\\` is also treated as an escape character.\n","isInternal":false,"tokens":959,"sizeBytes":4208},{"name":"README.md","path":"packages/http-client/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/http-client/README.md","title":"http-client Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/http-client`\n\nA lightweight HTTP client optimized for building actions.\n\n## Features\n\n  - HTTP client with TypeScript generics and async/await/Promises\n  - Typings included!\n  - [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner\n  - Targets ES2019 (runner runs actions with node 24+).  Only supported on node 20+.\n  - Basic, Bearer and PAT Support out of the box.  Extensible handlers for others.\n  - Redirects supported\n\nFeatures and releases [here](./RELEASES.md)\n\n## Install\n\n```\nnpm install @actions/http-client --save\n```\n\n## Samples\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Errors\n\n### HTTP\n\nThe HTTP client does not throw unless truly exceptional.\n\n* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.\n* Redirects (3xx) will be followed by default.\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Debugging\n\nTo enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:\n\n```shell\nexport NODE_DEBUG=http\n```\n\n## Node support\n\nThe http-client is built using Node 24. It may work on previous node LTS versions but it's tested and officially supported on Node 20+.\n\n## Support and Versioning\n\nWe follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).\n\n## Contributing\n\nWe welcome PRs.  Please create an issue and if applicable, a design before proceeding with code.\n\nonce:\n\n```\nnpm install\n```\n\nTo build:\n\n```\nnpm run build\n```\n\nTo run all tests:\n\n```\nnpm test\n```\n","isInternal":false,"tokens":413,"sizeBytes":1790},{"name":"README.md","path":"packages/io/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/io/README.md","title":"io Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/io`\n\n> Core functions for cli filesystem scenarios\n\n## Usage\n\n#### mkdir -p\n\nRecursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:\n\n```js\nconst io = require('@actions/io');\n\nawait io.mkdirP('path/to/make');\n```\n\n#### cp/mv\n\nCopy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):\n\n```js\nconst io = require('@actions/io');\n\n// Recursive must be true for directories\nconst options = { recursive: true, force: false }\n\nawait io.cp('path/to/directory', 'path/to/dest', options);\nawait io.mv('path/to/file', 'path/to/dest');\n```\n\n#### rm -rf\n\nRemove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.\n\n```js\nconst io = require('@actions/io');\n\nawait io.rmRF('path/to/directory');\nawait io.rmRF('path/to/file');\n```\n\n#### which\n\nGet the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).\n\n```js\nconst exec = require('@actions/exec');\nconst io = require('@actions/io');\n\nconst pythonPath: string = await io.which('python', true)\n\nawait exec.exec(`\"${pythonPath}\"`, ['main.py']);\n```\n","isInternal":false,"tokens":356,"sizeBytes":1313},{"name":"README.md","path":"packages/tool-cache/README.md","rawUrl":"https://raw.githubusercontent.com/actions/toolkit/HEAD/packages/tool-cache/README.md","title":"tool-cache Documentation","category":"plugin-manifest","format":"markdown","content":"# `@actions/tool-cache`\n\n> Functions necessary for downloading and caching tools.\n\n## Usage\n\n#### Download\n\nYou can use this to download tools (or other files) from a download URL:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n```\n\n#### Extract\n\nThese can then be extracted in platform specific ways:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nif (process.platform === 'win32') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');\n  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');\n\n  // Or alternately\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');\n  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');\n}\nelse if (process.platform === 'darwin') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg');\n  const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to');\n}\nelse {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n}\n```\n\n#### Cache\n\nFinally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners.\n\nYou'll often want to add it to the path as part of this step:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\nconst node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n\nconst cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');\ncore.addPath(cachedPath);\n```\n\nYou can also cache files for reuse.\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');\n```\n\n#### Find\n\nFinally, you can find directories and files you've previously cached:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst nodeDirectory = tc.find('node', '12.x', 'x64');\ncore.addPath(nodeDirectory);\n```\n\nYou can even find all cached versions of a tool:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst allNodeVersions = tc.findAllVersions('node');\nconsole.log(`Versions of node available: ${allNodeVersions}`);\n```\n","isInternal":false,"tokens":714,"sizeBytes":2667}],"systemPromptSnippet":"<yakaai_skills repo=\"actions/toolkit\">\n<!-- File: packages/artifact/docs/faq.md (Tokens: ~640 | Category: anthropic-skill) -->\n# Frequently Asked Questions\n\n- [Frequently Asked Questions](#frequently-asked-questions)\n  - [Supported Characters](#supported-characters)\n  - [Compression? ZIP? How is my artifact stored?](#compression-zip-how-is-my-artifact-stored)\n  - [Which versions of the artifacts packages are compatible?](#which-versions-of-the-artifacts-packages-are-compatible)\n  - [How long will my artifact be available?](#how-long-will-my-artifact-be-available)\n\n## Supported Characters\n\nWhen uploading an artifact, the inputted `name` parameter along with the files specified in `files` cannot contain any of the following characters. If they are present in `name` or `files`,  the Artifact will be rejected by the server and the upload will fail. These characters are not allowed due to limitations and restrictions with certain file systems such as NTFS. To maintain platform-agnostic behavior, characters that are not supported by an individual filesystem/platform will not be supported on all filesystems/platforms.\n\n- \"\n- :\n- <\n- \\>\n- |\n- \\*\n- ?\n\nIn addition to the aforementioned characters, the inputted `name` also cannot include the following\n- \\\n- /\n\n## Compression? ZIP? How is my artifact stored?\n\nWhen creating an Artifact, the files are dynamically compressed and streamed into a ZIP archive. Since they are stored in a ZIP, they can be compressed by Zlib in varying levels.\n\nThe value can range from 0 to 9:\n\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\n\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n## Which versions of the artifacts packages are compatible?\n[actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact), leverage [GitHub Actions toolkit](https://github.com/actions/toolkit) and are typically used together to upload and download artifacts in your workflows.\n\n| upload-artifact | download-artifact | toolkit |\n|---|---|---|\n| v4 | v4 | v2 |\n| < v3 | < v3 | < v1 |\n\nUse matching versions of `actions/upload-artifact` and `actions/download-artifact` to ensure compatibility.\n\nIn your GitHub Actions workflow YAML file, you specify the version of the actions you want to use. For example:\n\n```yaml\n  uses: actions/upload-artifact@v4\n  # ...\n  uses: actions/download-artifact@v4\n  # ...\n```\n\n**Release Notes:**\nCheck the release notes for each repository to see if there are any specific notes about compatibility or changes in behavior.\n\n## How long will my artifact be available?\nThe default retention period is **90 days**. For more information, visit: https://github.com/actions/upload-artifact?tab=readme-ov-file#retention-period\n\n<!-- File: packages/artifact/docs/generated/classes/ArtifactNotFoundError.md (Tokens: ~662 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / ArtifactNotFoundError\n\n# Class: ArtifactNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`ArtifactNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](ArtifactNotFoundError.md#constructor)\n\n### Properties\n\n- [message](ArtifactNotFoundError.md#message)\n- [name](ArtifactNotFoundError.md#name)\n- [stack](ArtifactNotFoundError.md#stack)\n- [prepareStackTrace](ArtifactNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](ArtifactNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](ArtifactNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new ArtifactNotFoundError**(`message?`): [`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'Artifact not found'` |\n\n#### Returns\n\n[`ArtifactNotFoundError`](ArtifactNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:24](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L24)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n<!-- File: packages/artifact/docs/generated/classes/DefaultArtifactClient.md (Tokens: ~1583 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / DefaultArtifactClient\n\n# Class: DefaultArtifactClient\n\nThe default artifact client that is used by the artifact action(s).\n\n## Implements\n\n- [`ArtifactClient`](../interfaces/ArtifactClient.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](DefaultArtifactClient.md#constructor)\n\n### Methods\n\n- [deleteArtifact](DefaultArtifactClient.md#deleteartifact)\n- [downloadArtifact](DefaultArtifactClient.md#downloadartifact)\n- [getArtifact](DefaultArtifactClient.md#getartifact)\n- [listArtifacts](DefaultArtifactClient.md#listartifacts)\n- [uploadArtifact](DefaultArtifactClient.md#uploadartifact)\n\n## Constructors\n\n### constructor\n\n• **new DefaultArtifactClient**(): [`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n#### Returns\n\n[`DefaultArtifactClient`](DefaultArtifactClient.md)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](../interfaces/DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[deleteArtifact](../interfaces/ArtifactClient.md#deleteartifact)\n\n#### Defined in\n\n[src/internal/client.ts:248](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L248)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](../interfaces/DownloadArtifactOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](../interfaces/DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[downloadArtifact](../interfaces/ArtifactClient.md#downloadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:138](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L138)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](../interfaces/GetArtifactResponse.md)\\>\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[getArtifact](../interfaces/ArtifactClient.md#getartifact)\n\n#### Defined in\n\n[src/internal/client.ts:212](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L212)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](../interfaces/ListArtifactsOptions.md) & [`FindOptions`](../interfaces/FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](../interfaces/ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[listArtifacts](../interfaces/ArtifactClient.md#listartifacts)\n\n#### Defined in\n\n[src/internal/client.ts:176](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L176)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](../interfaces/UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](../interfaces/UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Implementation of\n\n[ArtifactClient](../interfaces/ArtifactClient.md).[uploadArtifact](../interfaces/ArtifactClient.md#uploadartifact)\n\n#### Defined in\n\n[src/internal/client.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L113)\n\n<!-- File: packages/artifact/docs/generated/classes/FilesNotFoundError.md (Tokens: ~718 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / FilesNotFoundError\n\n# Class: FilesNotFoundError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`FilesNotFoundError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](FilesNotFoundError.md#constructor)\n\n### Properties\n\n- [files](FilesNotFoundError.md#files)\n- [message](FilesNotFoundError.md#message)\n- [name](FilesNotFoundError.md#name)\n- [stack](FilesNotFoundError.md#stack)\n- [prepareStackTrace](FilesNotFoundError.md#preparestacktrace)\n- [stackTraceLimit](FilesNotFoundError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](FilesNotFoundError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new FilesNotFoundError**(`files?`): [`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `files` | `string`[] | `[]` |\n\n#### Returns\n\n[`FilesNotFoundError`](FilesNotFoundError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:4](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L4)\n\n## Properties\n\n### files\n\n• **files**: `string`[]\n\n#### Defined in\n\n[src/internal/shared/errors.ts:2](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L2)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n<!-- File: packages/artifact/docs/generated/classes/GHESNotSupportedError.md (Tokens: ~737 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / GHESNotSupportedError\n\n# Class: GHESNotSupportedError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`GHESNotSupportedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GHESNotSupportedError.md#constructor)\n\n### Properties\n\n- [message](GHESNotSupportedError.md#message)\n- [name](GHESNotSupportedError.md#name)\n- [stack](GHESNotSupportedError.md#stack)\n- [prepareStackTrace](GHESNotSupportedError.md#preparestacktrace)\n- [stackTraceLimit](GHESNotSupportedError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](GHESNotSupportedError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new GHESNotSupportedError**(`message?`): [`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Parameters\n\n| Name | Type | Default value |\n| :------ | :------ | :------ |\n| `message` | `string` | `'@actions/artifact v2.0.0+, upload-artifact@v4+ and download-artifact@v4+ are not currently supported on GHES.'` |\n\n#### Returns\n\n[`GHESNotSupportedError`](GHESNotSupportedError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:31](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L31)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n<!-- File: packages/artifact/docs/generated/classes/InvalidResponseError.md (Tokens: ~663 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / InvalidResponseError\n\n# Class: InvalidResponseError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`InvalidResponseError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](InvalidResponseError.md#constructor)\n\n### Properties\n\n- [message](InvalidResponseError.md#message)\n- [name](InvalidResponseError.md#name)\n- [stack](InvalidResponseError.md#stack)\n- [prepareStackTrace](InvalidResponseError.md#preparestacktrace)\n- [stackTraceLimit](InvalidResponseError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](InvalidResponseError.md#capturestacktrace)\n\n## Constructors\n\n### constructor\n\n• **new InvalidResponseError**(`message`): [`InvalidResponseError`](InvalidResponseError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message` | `string` |\n\n#### Returns\n\n[`InvalidResponseError`](InvalidResponseError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:17](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L17)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n<!-- File: packages/artifact/docs/generated/classes/NetworkError.md (Tokens: ~806 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / NetworkError\n\n# Class: NetworkError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`NetworkError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](NetworkError.md#constructor)\n\n### Properties\n\n- [code](NetworkError.md#code)\n- [message](NetworkError.md#message)\n- [name](NetworkError.md#name)\n- [stack](NetworkError.md#stack)\n- [prepareStackTrace](NetworkError.md#preparestacktrace)\n- [stackTraceLimit](NetworkError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](NetworkError.md#capturestacktrace)\n- [isNetworkErrorCode](NetworkError.md#isnetworkerrorcode)\n\n## Constructors\n\n### constructor\n\n• **new NetworkError**(`code`): [`NetworkError`](NetworkError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code` | `string` |\n\n#### Returns\n\n[`NetworkError`](NetworkError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:42](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L42)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L40)\n\n___\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isNetworkErrorCode\n\n▸ **isNetworkErrorCode**(`code?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `code?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:49](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L49)\n\n<!-- File: packages/artifact/docs/generated/classes/UsageError.md (Tokens: ~724 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / UsageError\n\n# Class: UsageError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`UsageError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](UsageError.md#constructor)\n\n### Properties\n\n- [message](UsageError.md#message)\n- [name](UsageError.md#name)\n- [stack](UsageError.md#stack)\n- [prepareStackTrace](UsageError.md#preparestacktrace)\n- [stackTraceLimit](UsageError.md#stacktracelimit)\n\n### Methods\n\n- [captureStackTrace](UsageError.md#capturestacktrace)\n- [isUsageErrorMessage](UsageError.md#isusageerrormessage)\n\n## Constructors\n\n### constructor\n\n• **new UsageError**(): [`UsageError`](UsageError.md)\n\n#### Returns\n\n[`UsageError`](UsageError.md)\n\n#### Overrides\n\nError.constructor\n\n#### Defined in\n\n[src/internal/shared/errors.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L62)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Inherited from\n\nError.message\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1068\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\nError.name\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1067\n\n___\n\n### stack\n\n• `Optional` **stack**: `string`\n\n#### Inherited from\n\nError.stack\n\n#### Defined in\n\nnode_modules/typescript/lib/lib.es5.d.ts:1069\n\n___\n\n### prepareStackTrace\n\n▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any`\n\n#### Type declaration\n\n▸ (`err`, `stackTraces`): `any`\n\nOptional override for formatting stack traces\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `err` | `Error` |\n| `stackTraces` | `CallSite`[] |\n\n##### Returns\n\n`any`\n\n**`See`**\n\nhttps://v8.dev/docs/stack-trace-api#customizing-stack-traces\n\n#### Inherited from\n\nError.prepareStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:11\n\n___\n\n### stackTraceLimit\n\n▪ `Static` **stackTraceLimit**: `number`\n\n#### Inherited from\n\nError.stackTraceLimit\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:13\n\n## Methods\n\n### captureStackTrace\n\n▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void`\n\nCreate .stack property on a target object\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetObject` | `object` |\n| `constructorOpt?` | `Function` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\nError.captureStackTrace\n\n#### Defined in\n\nnode_modules/@types/node/globals.d.ts:4\n\n___\n\n### isUsageErrorMessage\n\n▸ **isUsageErrorMessage**(`msg?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `msg?` | `string` |\n\n#### Returns\n\n`boolean`\n\n#### Defined in\n\n[src/internal/shared/errors.ts:68](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/errors.ts#L68)\n\n<!-- File: packages/artifact/docs/generated/interfaces/Artifact.md (Tokens: ~283 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / Artifact\n\n# Interface: Artifact\n\nAn Actions Artifact\n\n## Table of contents\n\n### Properties\n\n- [createdAt](Artifact.md#createdat)\n- [id](Artifact.md#id)\n- [name](Artifact.md#name)\n- [size](Artifact.md#size)\n\n## Properties\n\n### createdAt\n\n• `Optional` **createdAt**: `Date`\n\nThe time when the artifact was created\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:128](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L128)\n\n___\n\n### id\n\n• **id**: `number`\n\nThe ID of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:118](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L118)\n\n___\n\n### name\n\n• **name**: `string`\n\nThe name of the artifact\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:113](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L113)\n\n___\n\n### size\n\n• **size**: `number`\n\nThe size of the artifact in bytes\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:123](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L123)\n\n<!-- File: packages/artifact/docs/generated/interfaces/ArtifactClient.md (Tokens: ~1335 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / ArtifactClient\n\n# Interface: ArtifactClient\n\nGeneric interface for the artifact client.\n\n## Implemented by\n\n- [`DefaultArtifactClient`](../classes/DefaultArtifactClient.md)\n\n## Table of contents\n\n### Methods\n\n- [deleteArtifact](ArtifactClient.md#deleteartifact)\n- [downloadArtifact](ArtifactClient.md#downloadartifact)\n- [getArtifact](ArtifactClient.md#getartifact)\n- [listArtifacts](ArtifactClient.md#listartifacts)\n- [uploadArtifact](ArtifactClient.md#uploadartifact)\n\n## Methods\n\n### deleteArtifact\n\n▸ **deleteArtifact**(`artifactName`, `options?`): `Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nDelete an Artifact\n\nIf `options.findBy` is specified, this will use the public Delete Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to delete |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the delete behavior |\n\n#### Returns\n\n`Promise`\\<[`DeleteArtifactResponse`](DeleteArtifactResponse.md)\\>\n\nsingle DeleteArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L103)\n\n___\n\n### downloadArtifact\n\n▸ **downloadArtifact**(`artifactId`, `options?`): `Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nDownloads an artifact and unzips the content.\n\nIf `options.findBy` is specified, this will use the public Download Artifact API https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactId` | `number` | The id of the artifact to download |\n| `options?` | [`DownloadArtifactOptions`](DownloadArtifactOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the download behavior |\n\n#### Returns\n\n`Promise`\\<[`DownloadArtifactResponse`](DownloadArtifactResponse.md)\\>\n\nsingle DownloadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:89](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L89)\n\n___\n\n### getArtifact\n\n▸ **getArtifact**(`artifactName`, `options?`): `Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\nFinds an artifact by name.\nIf there are multiple artifacts with the same name in the same workflow run, this will return the latest.\nIf the artifact is not found, it will throw.\n\nIf `options.findBy` is specified, this will use the public List Artifacts API with a name filter which can get artifacts from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n`@actions/artifact` v2+ does not allow for creating multiple artifacts with the same name in the same workflow run.\nIt is possible to have multiple artifacts with the same name in the same workflow run by using old versions of upload-artifact (v1,v2 and v3), @actions/artifact < v2 or it is a rerun.\nIf there are multiple artifacts with the same name in the same workflow run this function will return the first artifact that matches the name.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `artifactName` | `string` | The name of the artifact to find |\n| `options?` | [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the get behavior |\n\n#### Returns\n\n`Promise`\\<[`GetArtifactResponse`](GetArtifactResponse.md)\\>\n\n#### Defined in\n\n[src/internal/client.ts:75](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L75)\n\n___\n\n### listArtifacts\n\n▸ **listArtifacts**(`options?`): `Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nLists all artifacts that are part of the current workflow run.\nThis function will return at most 1000 artifacts per workflow run.\n\nIf `options.findBy` is specified, this will call the public List-Artifacts API which can list from other runs.\nhttps://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#list-workflow-run-artifacts\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ListArtifactsOptions`](ListArtifactsOptions.md) & [`FindOptions`](FindOptions.md) | Extra options that allow for the customization of the list behavior |\n\n#### Returns\n\n`Promise`\\<[`ListArtifactsResponse`](ListArtifactsResponse.md)\\>\n\nListArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:57](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L57)\n\n___\n\n### uploadArtifact\n\n▸ **uploadArtifact**(`name`, `files`, `rootDirectory`, `options?`): `Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nUploads an artifact.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `name` | `string` | The name of the artifact, required |\n| `files` | `string`[] | A list of absolute or relative paths that denote what files should be uploaded |\n| `rootDirectory` | `string` | An absolute or relative file path that denotes the root parent directory of the files being uploaded |\n| `options?` | [`UploadArtifactOptions`](UploadArtifactOptions.md) | Extra options for customizing the upload behavior |\n\n#### Returns\n\n`Promise`\\<[`UploadArtifactResponse`](UploadArtifactResponse.md)\\>\n\nsingle UploadArtifactResponse object\n\n#### Defined in\n\n[src/internal/client.ts:40](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/client.ts#L40)\n\n<!-- File: packages/artifact/docs/generated/interfaces/DeleteArtifactResponse.md (Tokens: ~106 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / DeleteArtifactResponse\n\n# Interface: DeleteArtifactResponse\n\nResponse from the server when deleting an artifact\n\n## Table of contents\n\n### Properties\n\n- [id](DeleteArtifactResponse.md#id)\n\n## Properties\n\n### id\n\n• **id**: `number`\n\nThe id of the artifact that was deleted\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:163](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L163)\n\n<!-- File: packages/artifact/docs/generated/interfaces/DownloadArtifactOptions.md (Tokens: ~121 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / DownloadArtifactOptions\n\n# Interface: DownloadArtifactOptions\n\nOptions for downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [path](DownloadArtifactOptions.md#path)\n\n## Properties\n\n### path\n\n• `Optional` **path**: `string`\n\nDenotes where the artifact will be downloaded to. If not specified then the artifact is download to GITHUB_WORKSPACE\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:103](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L103)\n\n<!-- File: packages/artifact/docs/generated/interfaces/DownloadArtifactResponse.md (Tokens: ~113 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / DownloadArtifactResponse\n\n# Interface: DownloadArtifactResponse\n\nResponse from the server when downloading an artifact\n\n## Table of contents\n\n### Properties\n\n- [downloadPath](DownloadArtifactResponse.md#downloadpath)\n\n## Properties\n\n### downloadPath\n\n• `Optional` **downloadPath**: `string`\n\nThe path where the artifact was downloaded to\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:93](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L93)\n\n<!-- File: packages/artifact/docs/generated/interfaces/FindOptions.md (Tokens: ~202 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / FindOptions\n\n# Interface: FindOptions\n\n## Table of contents\n\n### Properties\n\n- [findBy](FindOptions.md#findby)\n\n## Properties\n\n### findBy\n\n• `Optional` **findBy**: `Object`\n\nThe criteria for finding Artifact(s) out of the scope of the current run.\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `repositoryName` | `string` | Repository owner (eg. 'toolkit') |\n| `repositoryOwner` | `string` | Repository owner (eg. 'actions') |\n| `token` | `string` | Token with actions:read permissions |\n| `workflowRunId` | `number` | WorkflowRun of the artifact(s) to lookup |\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:136](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L136)\n\n<!-- File: packages/artifact/docs/generated/interfaces/GetArtifactResponse.md (Tokens: ~108 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / GetArtifactResponse\n\n# Interface: GetArtifactResponse\n\nResponse from the server when getting an artifact\n\n## Table of contents\n\n### Properties\n\n- [artifact](GetArtifactResponse.md#artifact)\n\n## Properties\n\n### artifact\n\n• **artifact**: [`Artifact`](Artifact.md)\n\nMetadata about the artifact that was found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:62](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L62)\n\n<!-- File: packages/artifact/docs/generated/interfaces/ListArtifactsOptions.md (Tokens: ~126 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / ListArtifactsOptions\n\n# Interface: ListArtifactsOptions\n\nOptions for listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [latest](ListArtifactsOptions.md#latest)\n\n## Properties\n\n### latest\n\n• `Optional` **latest**: `boolean`\n\nFilter the workflow run's artifacts to the latest by name\nIn the case of reruns, this can be useful to avoid duplicates\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:73](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L73)\n\n<!-- File: packages/artifact/docs/generated/interfaces/ListArtifactsResponse.md (Tokens: ~115 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / ListArtifactsResponse\n\n# Interface: ListArtifactsResponse\n\nResponse from the server when listing artifacts\n\n## Table of contents\n\n### Properties\n\n- [artifacts](ListArtifactsResponse.md#artifacts)\n\n## Properties\n\n### artifacts\n\n• **artifacts**: [`Artifact`](Artifact.md)[]\n\nA list of artifacts that were found\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:83](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L83)\n\n<!-- File: packages/artifact/docs/generated/interfaces/UploadArtifactOptions.md (Tokens: ~396 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / UploadArtifactOptions\n\n# Interface: UploadArtifactOptions\n\nOptions for uploading an artifact\n\n## Table of contents\n\n### Properties\n\n- [compressionLevel](UploadArtifactOptions.md#compressionlevel)\n- [retentionDays](UploadArtifactOptions.md#retentiondays)\n\n## Properties\n\n### compressionLevel\n\n• `Optional` **compressionLevel**: `number`\n\nThe level of compression for Zlib to be applied to the artifact archive.\nThe value can range from 0 to 9:\n- 0: No compression\n- 1: Best speed\n- 6: Default compression (same as GNU Gzip)\n- 9: Best compression\nHigher levels will result in better compression, but will take longer to complete.\nFor large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:52](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L52)\n\n___\n\n### retentionDays\n\n• `Optional` **retentionDays**: `number`\n\nDuration after which artifact will expire in days.\n\nBy default artifact expires after 90 days:\nhttps://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#downloading-and-deleting-artifacts-after-a-workflow-run-is-complete\n\nUse this option to override the default expiry.\n\nMin value: 1\nMax value: 90 unless changed by repository setting\n\nIf this is set to a greater value than the retention settings allowed, the retention on artifacts\nwill be reduced to match the max value allowed on server, and the upload process will continue. An\ninput of 0 assumes default retention setting.\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:41](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L41)\n\n<!-- File: packages/artifact/docs/generated/interfaces/UploadArtifactResponse.md (Tokens: ~306 | Category: anthropic-skill) -->\n[@actions/artifact](../README.md) / UploadArtifactResponse\n\n# Interface: UploadArtifactResponse\n\nResponse from the server when an artifact is uploaded\n\n## Table of contents\n\n### Properties\n\n- [digest](UploadArtifactResponse.md#digest)\n- [id](UploadArtifactResponse.md#id)\n- [size](UploadArtifactResponse.md#size)\n\n## Properties\n\n### digest\n\n• `Optional` **digest**: `string`\n\nThe SHA256 digest of the artifact that was created. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:19](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L19)\n\n___\n\n### id\n\n• `Optional` **id**: `number`\n\nThe id of the artifact that was created. Not provided if no artifact was uploaded\nThis ID can be used as input to other APIs to download, delete or get more information about an artifact: https://docs.github.com/en/rest/actions/artifacts\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:14](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L14)\n\n___\n\n### size\n\n• `Optional` **size**: `number`\n\nTotal size of the artifact in bytes. Not provided if no artifact was uploaded\n\n#### Defined in\n\n[src/internal/shared/interfaces.ts:8](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/internal/shared/interfaces.ts#L8)\n\n<!-- File: packages/artifact/docs/generated/README.md (Tokens: ~313 | Category: plugin-manifest) -->\n@actions/artifact\n\n# @actions/artifact\n\n## Table of contents\n\n### Classes\n\n- [ArtifactNotFoundError](classes/ArtifactNotFoundError.md)\n- [DefaultArtifactClient](classes/DefaultArtifactClient.md)\n- [FilesNotFoundError](classes/FilesNotFoundError.md)\n- [GHESNotSupportedError](classes/GHESNotSupportedError.md)\n- [InvalidResponseError](classes/InvalidResponseError.md)\n- [NetworkError](classes/NetworkError.md)\n- [UsageError](classes/UsageError.md)\n\n### Interfaces\n\n- [Artifact](interfaces/Artifact.md)\n- [ArtifactClient](interfaces/ArtifactClient.md)\n- [DeleteArtifactResponse](interfaces/DeleteArtifactResponse.md)\n- [DownloadArtifactOptions](interfaces/DownloadArtifactOptions.md)\n- [DownloadArtifactResponse](interfaces/DownloadArtifactResponse.md)\n- [FindOptions](interfaces/FindOptions.md)\n- [GetArtifactResponse](interfaces/GetArtifactResponse.md)\n- [ListArtifactsOptions](interfaces/ListArtifactsOptions.md)\n- [ListArtifactsResponse](interfaces/ListArtifactsResponse.md)\n- [UploadArtifactOptions](interfaces/UploadArtifactOptions.md)\n- [UploadArtifactResponse](interfaces/UploadArtifactResponse.md)\n\n### Variables\n\n- [default](README.md#default)\n\n## Variables\n\n### default\n\n• `Const` **default**: [`ArtifactClient`](interfaces/ArtifactClient.md)\n\n#### Defined in\n\n[src/artifact.ts:7](https://github.com/actions/toolkit/blob/f522fdf/packages/artifact/src/artifact.ts#L7)\n\n<!-- File: packages/artifact/README.md (Tokens: ~1712 | Category: plugin-manifest) -->\n# `@actions/artifact`\n\nInteract programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).\n\nThis is the core library that powers the [`@actions/upload-artifact`](https://github.com/actions/upload-artifact) and [`@actions/download-artifact`](https://github.com/actions/download-artifact) actions.\n\n- [`@actions/artifact`](#actionsartifact)\n  - [v2 - What's New](#v2---whats-new)\n    - [Improvements](#improvements)\n    - [Breaking changes](#breaking-changes)\n  - [Quick Start](#quick-start)\n  - [Examples](#examples)\n    - [Upload and Download](#upload-and-download)\n    - [Delete an Artifact](#delete-an-artifact)\n    - [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)\n    - [Speeding up large uploads](#speeding-up-large-uploads)\n  - [Additional Resources](#additional-resources)\n\n## v2 - What's New\n\n> [!IMPORTANT]\n> @actions/artifact v2+, upload-artifact@v4+, and download-artifact@v4+ are not currently supported on GHES yet. The previous version of this package can be found at [this tag](https://github.com/actions/toolkit/tree/@actions/artifact@1.1.2/packages/artifact) and [on npm](https://www.npmjs.com/package/@actions/artifact/v/1.1.2).\n\nThe release of `@actions/artifact@v2` (including `upload-artifact@v4` and `download-artifact@v4`) are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.\n\n### Improvements\n\n1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.\n2. Once uploaded, an Artifact ID is returned and Artifacts are immediately available in the UI and [REST API](https://docs.github.com/en/rest/actions/artifacts). Previously, you would have to wait for the run to be completed before an ID was available or any APIs could be utilized.\n3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.\n4. The contents of an Artifact are uploaded together into an _immutable_ archive. They cannot be altered by subsequent jobs. Both of these factors help reduce the possibility of accidentally corrupting Artifact files. (Digest/integrity hash coming soon in the API!)\n5. This library (and `actions/download-artifact`) now support downloading Artifacts from _other_ repositories and runs if a `GITHUB_TOKEN` with sufficient `actions:read` permissions are provided.\n\n### Breaking changes\n\n1. Firewall rules required for self-hosted runners.\n\n    If you are using self-hosted runners behind a firewall, you must have flows open to [Actions endpoints](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github). If you cannot use wildcard rules for your firewall, see the GitHub [meta endpoint](https://api.github.com/meta) for specific endpoints.\n\n    e.g.\n\n    ```bash\n    curl https://api.github.com/meta | jq .domains.actions\n    ```\n\n2. Uploading to the same named Artifact multiple times.\n\n    Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once.\n\n3. Limit of Artifacts for an individual job.\n\n    Each job in a workflow run now has a limit of 10 artifacts.\n\n## Quick Start\n\nInstall the package:\n\n```bash\nnpm i @actions/artifact\n```\n\nImport the module:\n\n```js\n// ES6 module\nimport {DefaultArtifactClient} from '@actions/artifact'\n\n// CommonJS\nconst {DefaultArtifactClient} = require('@actions/artifact')\n```\n\nThen instantiate:\n\n```js\nconst artifact = new DefaultArtifactClient()\n```\n\nℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).\n\n## Examples\n\n### Upload and Download\n\nThe most basic scenario is uploading one or more files to an Artifact, then downloading that Artifact. Downloads are based on the Artifact ID, which can be obtained in the response of `uploadArtifact`, `getArtifact`, `listArtifacts` or via the [REST API](https://docs.github.com/en/rest/actions/artifacts).\n\n```js\nconst {id, size} = await artifact.uploadArtifact(\n  // name of the artifact\n  'my-artifact',\n  // files to include (supports absolute and relative paths)\n  ['/absolute/path/file1.txt', './relative/file2.txt'],\n  {\n    // optional: how long to retain the artifact\n    // if unspecified, defaults to repository/org retention settings (the limit of this value)\n    retentionDays: 10\n  }\n)\n\nconsole.log(`Created artifact with id: ${id} (bytes: ${size}`)\n\nconst {downloadPath} = await artifact.downloadArtifact(id, {\n  // optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE\n  path: '/tmp/dst/path',\n})\n\nconsole.log(`Downloaded artifact ${id} to: ${downloadPath}`)\n```\n\n### Delete an Artifact\n\nTo delete an artifact, all you need is the name.\n\n```js\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact'\n)\n\nconsole.log(`Deleted Artifact ID '${id}'`)\n```\n\nIt also supports options to delete from other repos/runs given a github token with `actions:write` permissions on the target repository is supplied.\n\n```js\nconst findBy = {\n  // must have actions:write permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\n\nconst {id} = await artifact.deleteArtifact(\n  // name of the artifact\n  'my-artifact',\n  // options to find by other repo/owner\n  { findBy }\n)\n\nconsole.log(`Deleted Artifact ID '${id}' from ${findBy.repositoryOwner}/ ${findBy.repositoryName}`)\n```\n\n### Downloading from other workflow runs or repos\n\nIt may be useful to download Artifacts from other workflow runs, or even other repositories. By default, the permissions are scoped so they can only download Artifacts within the current workflow run. To elevate permissions for this scenario, you must specify `options.findBy` to `downloadArtifact`.\n\n```ts\nconst findBy = {\n  // must have actions:read permission on target repository\n  token: process.env['GITHUB_TOKEN'],\n  workflowRunId: 123,\n  repositoryOwner: 'actions',\n  repositoryName: 'toolkit'\n}\n\nawait artifact.downloadArtifact(1337, {\n  findBy\n})\n\n// can also be used in other methods\n\nawait artifact.getArtifact('my-artifact', {\n  findBy\n})\n\nawait artifact.listArtifacts({\n  findBy\n})\n```\n\n### Speeding up large uploads\n\nIf you have large files that need to be uploaded (or file types that don't compress well), you may benefit from changing the compression level of the Artifact archive. NOTE: This is a tradeoff between artifact upload time and stored data size.\n\n```ts\nawait artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {\n  // The level of compression for Zlib to be applied to the artifact archive.\n  // - 0: No compression\n  // - 1: Best speed\n  // - 6: Default compression (same as GNU Gzip)\n  // - 9: Best compression\n  compressionLevel: 0\n})\n```\n\n## Additional Resources\n\n- [Releases](./RELEASES.md)\n- [Contribution Guide](./CONTRIBUTIONS.md)\n- [Frequently Asked Questions](./docs/faq.md)\n\n<!-- File: packages/attest/README.md (Tokens: ~2049 | Category: plugin-manifest) -->\n# `@actions/attest`\n\nFunctions for generating signed attestations for workflow artifacts.\n\nAttestations bind some subject (a named artifact along with its digest) to a\npredicate (some assertion about that subject) using the [in-toto\nstatement](https://github.com/in-toto/attestation/tree/main/spec/v1) format. A\nsignature is generated for the attestation using a\n[Sigstore](https://www.sigstore.dev/)-issued signing certificate.\n\nOnce the attestation has been created and signed, it will be uploaded to the GH\nattestations API and associated with the repository from which the workflow was\ninitiated.\n\nSee [Using artifact attestations to establish provenance for builds](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)\nfor more information on artifact attestations.\n\n## Table of Contents\n- [Usage](#usage)\n  - [attest](#attest)\n  - [attestProvenance](#attestprovenance)\n  - [Attestation](#attestation)\n- [Sigstore Instance](#sigstore-instance)\n- [Storage](#storage)\n\n## Usage\n\n### `attest`\n\nThe `attest` function takes the supplied subject/predicate pair and generates a\nsigned attestation.\n\n```js\nconst { attest } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attest({\n        subjects: [{name: 'my-artifact-name', digest: { 'sha256': '36ab4667...'}}],\n        predicateType: 'https://in-toto.io/attestation/release',\n        predicate: { . . . },\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attest` function supports the following options:\n\n```typescript\nexport type AttestOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  predicateType: string\n  // Predicate to be attested.\n  predicate: object\n  // GitHub token for writing attestations.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n}\n\nexport type Subject = {\n   // Name of the subject.\n  name: string\n   // Digests of the subject. Should be a map of digest algorithms to their hex-encoded values.\n  digest: Record<string, string>\n}\n```\n\n### `attestProvenance`\n\nThe `attestProvenance` function accepts the name and digest of some artifact and\ngenerates a build provenance attestation over those values.\n\nThe attestation is formed by first generating a [SLSA provenance\npredicate](https://slsa.dev/spec/v1.0/provenance) populated with\n[metadata](https://github.com/slsa-framework/github-actions-buildtypes/tree/main/workflow/v1)\npulled from the GitHub Actions run.\n\n```js\nconst { attestProvenance } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const attestation = await attestProvenance({\n        subjectName: 'my-artifact-name',\n        subjectDigest: { 'sha256': '36ab4667...'},\n        token: ghToken\n    });\n\n    console.log(attestation);\n}\n\nrun();\n```\n\nThe `attestProvenance` function supports the following options:\n\n```typescript\nexport type AttestProvenanceOptions = {\n  // Deprecated. Use 'subjects' instead.\n  subjectName?: string\n  // Deprecated. Use 'subjects' instead.\n  subjectDigest?: Record<string, string>\n  // Collection of subjects to be attested\n  subjects?: Subject[]\n  // URI identifying the content type of the predicate being attested.\n  token: string\n  // Sigstore instance to use for signing. Must be one of \"public-good\" or\n  // \"github\".\n  sigstore?: 'public-good' | 'github'\n  // HTTP headers to include in request to attestations API.\n  headers?: {[header: string]: string | number | undefined}\n  // Whether to skip writing the attestation to the GH attestations API.\n  skipWrite?: boolean\n  // Issuer URL responsible for minting the OIDC token from which the\n  // provenance data is read. Defaults to\n  // 'https://token.actions.githubusercontent.com\".\n  issuer?: string\n}\n```\n\n### `Attestation`\n\nThe `Attestation` returned by `attest`/`attestProvenance` has the following\nfields:\n\n```typescript\nexport type Attestation = {\n  /*\n   * JSON-serialized Sigstore bundle containing the provenance attestation,\n   * signature, signing certificate and witnessed timestamp.\n   */\n  bundle: SerializedBundle\n  /*\n   * PEM-encoded signing certificate used to sign the attestation.\n   */\n  certificate: string\n  /*\n   * ID of Rekor transparency log entry created for the attestation (if\n   * applicable).\n   */\n  tlogID?: string\n  /*\n   * ID of the persisted attestation (accessible via the GH API).\n   */\n  attestationID?: string\n}\n```\n\nFor details about the Sigstore bundle format, see the [Bundle protobuf\nspecification](https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto).\n\n### createStorageRecord\n\nThe `createStorageRecord` function creates an\n[artifact metadata storage record](https://docs.github.com/en/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record)\non behalf of an attested artifact. It accepts parameters defining artifact\nand package registry details. The storage record contains metadata about where the artifact is stored on a given package registry.\n\n```js\nconst { createStorageRecord } = require('@actions/attest');\nconst core = require('@actions/core');\n\nasync function run() {\n    // In order to persist attestations to the repo, this should be a token with\n    // repository write permissions.\n    const ghToken = core.getInput('gh-token');\n\n    const record = await createStorageRecord(\n        artifactOptions: {\n            name: 'my-artifact-name',\n            digest: { 'sha256': '36ab4667...'},\n            version: \"v1.0.0\"\n        },\n        packageRegistryOptions: {\n            registryUrl: \"https://my-fave-pkg-registry.com\"\n        },\n        token: ghToken\n    );\n\n    console.log(record);\n}\n\nrun();\n```\n\nThe `createStorageRecord` function supports the following options:\n\n```typescript\n// Artifact details to associate the record with\nexport type ArtifactOptions = {\n  // The name of the artifact\n  name: string\n  // The digest of the artifact\n  digest: string\n  // The version of the artifact\n  version?: string\n  // The status of the artifact\n  status?: string\n}\n// Includes details about the package registry the artifact was published to\nexport type PackageRegistryOptions = {\n  // The URL of the package registry\n  registryUrl: string\n  // The URL of the artifact in the package registry\n  artifactUrl?: string\n  // The package registry repository the artifact was published to.\n  repo?: string\n  // The path of the artifact in the package registry repository.\n  path?: string\n}\n// GitHub token for writing attestations.\ntoken: string\n// Optional parameters for the write operation.\n// The number of times to retry the request.\nretryAttempts?: number\n// HTTP headers to include in request to Artifact Metadata API.\nheaders?: RequestHeaders\n```\n\n## Sigstore Instance\n\nWhen generating the signed attestation there are two different Sigstore\ninstances which can be used to issue the signing certificate. By default,\nworkflows initiated from public repositories will use the Sigstore public-good\ninstance and persist the attestation signature to the public [Rekor transparency\nlog](https://docs.sigstore.dev/logging/overview/). Workflows initiated from\nprivate/internal repositories will use the GitHub-internal Sigstore instance\nwhich uses a signed timestamp issued by GitHub's timestamp authority in place of\nthe public transparency log.\n\nThe default Sigstore instance selection can be overridden by passing an explicit\nvalue of either \"public-good\" or \"github\" for the `sigstore` option when calling\neither `attest` or `attestProvenance`.\n\n## Storage\n\nAttestations created by `attest`/`attestProvenance` will be uploaded to the GH\nattestations API and associated with the appropriate repository. Attestation\nstorage is only supported for public repositories or repositories which belong\nto a GitHub Enterprise Cloud account.\n\nIn order to generate attestations for private, non-Enterprise repositories, the\n`skipWrite` option should be set to `true`.\n\n<!-- File: packages/cache/README.md (Tokens: ~851 | Category: plugin-manifest) -->\n# `@actions/cache`\n\n> Functions necessary for caching dependencies and build outputs to improve workflow execution time.\n\nSee [\"Caching dependencies to speed up workflows\"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) for how caching works.\n\nNote that GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. If you exceed this limit, GitHub will save your cache but will begin evicting caches until the total size is less than 10 GB.\n\n## ⚠️ Important changes\n\nThe cache backend service has been rewritten from the ground up for improved performance and reliability. The [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) package now integrates with the new cache service (v2) APIs.\n\nThe new service will gradually roll out as of **February 1st, 2025**. The legacy service will also be sunset on the same date. Changes in this release are **fully backward compatible**.\n\n**All previous versions of this package will be deprecated**. We recommend upgrading to version `4.0.0` as soon as possible before **February 1st, 2025.**\n\nIf you do not upgrade, all workflow runs using any of the deprecated [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache) packages will fail.\n\nUpgrading to the recommended version should not break or require any changes to your workflows beyond updating your `package.json` to version `4.0.0`.\n\nRead more about the change & access the migration guide: [reference to the announcement](https://github.com/actions/toolkit/discussions/1890).\n\n## Usage\n\nThis package is used by the v2+ versions of our first party cache action. You can find an example implementation in the cache repo [here](https://github.com/actions/cache).\n\n#### Save Cache\n\nSaves a cache containing the files in `paths` using the `key` provided. The files would be compressed using zstandard compression algorithm if zstd is installed, otherwise gzip is used. Function returns the cache id if the cache was saved succesfully and throws an error if cache upload fails.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst cacheId = await cache.saveCache(paths, key)\n```\n\n#### Restore Cache\n\nRestores a cache based on `key` and `restoreKeys` to the `paths` provided. Function returns the cache key for cache hit and returns undefined if cache not found.\n\n```js\nconst cache = require('@actions/cache');\nconst paths = [\n    'node_modules',\n    'packages/*/node_modules/'\n]\nconst key = 'npm-foobar-d5ea0750'\nconst restoreKeys = [\n    'npm-foobar-',\n    'npm-'\n]\nconst cacheKey = await cache.restoreCache(paths, key, restoreKeys)\n```\n\n##### Cache segment restore timeout\n\nA cache gets downloaded in multiple segments of fixed sizes (now `128MB` to fail-fast, previously `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner were used). Sometimes, a segment download gets stuck which causes the workflow job to be stuck forever and fail. Version `v3.0.4` of cache package introduces a segment download timeout. The segment download timeout will allow the segment download to get aborted and hence allow the job to proceed with a cache miss.\n\nDefault value of this timeout is 10 minutes (starting `v3.2.1` and higher, previously 60 minutes in versions between `v.3.0.4` and `v3.2.0`, both included) and can be customized by specifying an [environment variable](https://docs.github.com/en/actions/learn-github-actions/environment-variables) named `SEGMENT_DOWNLOAD_TIMEOUT_MINS` with timeout value in minutes.\n\n<!-- File: packages/core/README.md (Tokens: ~3689 | Category: plugin-manifest) -->\n# `@actions/core`\n\n> Core functions for setting results, logging, registering secrets and exporting variables across actions\n\n## Usage\n\n### Import the package\n\n```js\n// javascript\nconst core = require('@actions/core');\n\n// typescript\nimport * as core from '@actions/core';\n```\n\n#### Inputs/Outputs\n\nAction inputs can be read with `getInput` which returns a `string` or `getBooleanInput` which parses a boolean based on the [yaml 1.2 specification](https://yaml.org/spec/1.2/spec.html#id2804923). If `required` is set to be false, the input should have a default value in `action.yml`.\n\nOutputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.\n\n```js\nconst myInput = core.getInput('inputName', { required: true });\nconst myBooleanInput = core.getBooleanInput('booleanInputName', { required: true });\nconst myMultilineInput = core.getMultilineInput('multilineInputName', { required: true });\ncore.setOutput('outputKey', 'outputVal');\n```\n\n#### Exporting variables\n\nSince each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.\n\n```js\ncore.exportVariable('envVar', 'Val');\n```\n\n#### Setting a secret\n\nSetting a secret registers the secret with the runner to ensure it is masked in logs.\n\n```js\ncore.setSecret('myPassword');\n```\n\n#### PATH Manipulation\n\nTo make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`.  The runner will prepend the path given to the jobs PATH.\n\n```js\ncore.addPath('/path/to/mytool');\n```\n\n#### Declaring artifacts\n\nTo declare an artifact that your action produced, use `declareArtifact`. Each call declares one artifact, which is either a path to a local file or an OCI subject reference that includes a digest. The runner validates each declaration after the step completes and fails the step if a declaration is invalid, for example, if the file doesn't exist.\n\n```js\n// A local file. The runner resolves relative paths against GITHUB_WORKSPACE.\ncore.declareArtifact('dist/app.tar.gz');\n\n// An OCI subject. The digest, such as sha256:<hex>, is required.\ncore.declareArtifact(`ghcr.io/octocat/app:1.0.0@${digest}`);\n```\n\nTo force how the runner interprets a value, prefix it with `file://` or `oci://`.\n\nArtifact declarations require runner version 2.336.0 or later and take effect only where they're enabled. On older runners, `GITHUB_ARTIFACTS` isn't set, so `declareArtifact` logs a debug message and skips the declaration. Where artifact declarations aren't enabled, `GITHUB_ARTIFACTS` is set, but the runner ignores it — the declaration has no effect and doesn't fail the step. For how the runner names artifacts and the limits it enforces, see [Declare an artifact](../../docs/commands.md#declare-an-artifact).\n\n#### Exit codes\n\nYou should use this library to set the failing exit code for your action.  If status is not set and the script runs to completion, that will lead to a success.\n\n```js\nconst core = require('@actions/core');\n\ntry {\n  // Do stuff\n}\ncatch (err) {\n  // setFailed logs the message and sets a failing exit code\n  core.setFailed(`Action failed with error ${err}`);\n}\n```\n\nNote that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.\n\n#### Logging\n\nFinally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).\n\n```js\nconst core = require('@actions/core');\n\nconst myInput = core.getInput('input');\ntry {\n  core.debug('Inside try block');\n  \n  if (!myInput) {\n    core.warning('myInput was not set');\n  }\n  \n  if (core.isDebug()) {\n    // curl -v https://github.com\n  } else {\n    // curl https://github.com\n  }\n\n  // Do stuff\n  core.info('Output to the actions build log')\n\n  core.notice('This is a message that will also emit an annotation')\n}\ncatch (err) {\n  core.error(`Error ${err}, action may still succeed though`);\n}\n```\n\nThis library can also wrap chunks of output in foldable groups.\n\n```js\nconst core = require('@actions/core')\n\n// Manually wrap output\ncore.startGroup('Do some function')\ndoSomeFunction()\ncore.endGroup()\n\n// Wrap an asynchronous function call\nconst result = await core.group('Do something async', async () => {\n  const response = await doSomeHTTPRequest()\n  return response\n})\n```\n\n#### Annotations\n\nThis library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). \n```js\ncore.error('This is a bad error, action may still succeed though.')\n\ncore.warning('Something went wrong, but it\\'s not bad enough to fail the build.')\n\ncore.notice('Something happened that you might want to know about.')\n```\n\nThese will surface to the UI in the Actions page and on Pull Requests. They look something like this:\n\n![Annotations Image](../../docs/assets/annotations.png)\n\nThese annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. \n\nThese options are: \n```typescript\nexport interface AnnotationProperties {\n  /**\n   * A title for the annotation.\n   */\n  title?: string\n\n  /**\n   * The name of the file for which the annotation should be created.\n   */\n  file?: string\n\n  /**\n   * The start line for the annotation.\n   */\n  startLine?: number\n\n  /**\n   * The end line for the annotation. Defaults to `startLine` when `startLine` is provided.\n   */\n  endLine?: number\n\n  /**\n   * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   */\n  startColumn?: number\n\n  /**\n   * The end column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.\n   * Defaults to `startColumn` when `startColumn` is provided.\n   */\n  endColumn?: number\n}\n```\n\n#### Styling output\n\nColored output is supported in the Action logs via standard [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). 3/4 bit, 8 bit and 24 bit colors are all supported.\n\nForeground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[35mThis foreground will be magenta')\n\n// 8 bit\ncore.info('\\u001b[38;5;6mThis foreground will be cyan')\n\n// 24 bit\ncore.info('\\u001b[38;2;255;0;0mThis foreground will be bright red')\n```\n\nBackground colors:\n\n```js\n// 3/4 bit\ncore.info('\\u001b[43mThis background will be yellow');\n\n// 8 bit\ncore.info('\\u001b[48;5;6mThis background will be cyan')\n\n// 24 bit\ncore.info('\\u001b[48;2;255;0;0mThis background will be bright red')\n```\n\nSpecial styles:\n\n```js\ncore.info('\\u001b[1mBold text')\ncore.info('\\u001b[3mItalic text')\ncore.info('\\u001b[4mUnderlined text')\n```\n\nANSI escape codes can be combined with one another:\n\n```js\ncore.info('\\u001b[31;46mRed foreground with a cyan background and \\u001b[1mbold text at the end');\n```\n\n> Note: Escape codes reset at the start of each line\n\n```js\ncore.info('\\u001b[35mThis foreground will be magenta')\ncore.info('This foreground will reset to the default')\n```\n\nManually typing escape codes can be a little difficult, but you can use third party modules such as [ansi-styles](https://github.com/chalk/ansi-styles).\n\n```js\nconst style = require('ansi-styles');\ncore.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!')\n```\n\n#### Action state\n\nYou can use this library to save state and get state for sharing information between a given wrapper action:\n\n**action.yml**:\n\n```yaml\nname: 'Wrapper action sample'\ninputs:\n  name:\n    default: 'GitHub'\nruns:\n  using: 'node12'\n  main: 'main.js'\n  post: 'cleanup.js'\n```\n\nIn action's `main.js`:\n\n```js\nconst core = require('@actions/core');\n\ncore.saveState(\"pidToKill\", 12345);\n```\n\nIn action's `cleanup.js`:\n\n```js\nconst core = require('@actions/core');\n\nvar pid = core.getState(\"pidToKill\");\n\nprocess.kill(pid);\n```\n\n#### OIDC Token\n\nYou can use these methods to interact with the GitHub OIDC provider and get a JWT ID token which would help to get access token from third party cloud providers.\n\n**Method Name**: getIDToken()\n\n**Inputs**\n\naudience : optional\n\n**Outputs**\n\nA [JWT](https://jwt.io/) ID Token\n\nIn action's `main.ts`:\n```js\nconst core = require('@actions/core');\nasync function getIDTokenAction(): Promise<void> {\n  \n   const audience = core.getInput('audience', {required: false})\n   \n   const id_token1 = await core.getIDToken()            // ID Token with default audience\n   const id_token2 = await core.getIDToken(audience)    // ID token with custom audience\n   \n   // this id_token can be used to get access token from third party cloud providers\n}\ngetIDTokenAction()\n```\n\nIn action's `actions.yml`:\n\n```yaml\nname: 'GetIDToken'\ndescription: 'Get ID token from Github OIDC provider'\ninputs:\n  audience:  \n    description: 'Audience for which the ID token is intended for'\n    required: false\noutputs:\n  id_token1: \n    description: 'ID token obtained from OIDC provider'\n  id_token2: \n    description: 'ID token obtained from OIDC provider'\nruns:\n  using: 'node12'\n  main: 'dist/index.js'\n```\n\n#### Filesystem path helpers\n\nYou can use these methods to manipulate file paths across operating systems.\n\nThe `toPosixPath` function converts input paths to Posix-style (Linux) paths.\nThe `toWin32Path` function converts input paths to Windows-style paths. These\nfunctions work independently of the underlying runner operating system.\n\n```js\ntoPosixPath('\\\\foo\\\\bar') // => /foo/bar\ntoWin32Path('/foo/bar') // => \\foo\\bar\n```\n\nThe `toPlatformPath` function converts input paths to the expected value on the runner's operating system.\n\n```js\n// On a Windows runner.\ntoPlatformPath('/foo/bar') // => \\foo\\bar\n\n// On a Linux runner.\ntoPlatformPath('\\\\foo\\\\bar') // => /foo/bar\n```\n\n#### Platform helper\n\nProvides shorthands for getting information about platform action is running on.\n\n```js\nimport { platform } from '@actions/core'\n\n/* equals to a call of os.platform() */\nplatform.platform // 'win32' | 'darwin' | 'linux' | 'freebsd' | 'openbsd' | 'android' | 'cygwin' | 'sunos'\n\n/* equals to a call of os.arch() */\nplatform.arch // 'x64' | 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x'\n\n/* common shorthands for platform-specific logic */\nplatform.isWindows // true\nplatform.isMacOS // false\nplatform.isLinux // false\n\n/* run platform-specific script to get more details about the exact platform, works on Windows, MacOS and Linux */\nconst {\n  name, // Microsoft Windows 11 Enterprise\n  version, // 10.0.22621\n} = await platform.getDetails()\n```\n\n#### Populating job summary\n\nThese methods can be used to populate a [job summary](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary). A job summary is a buffer that can be added to throughout your job via `core.summary` methods.\n\nJob summaries when complete must be written to the summary buffer file via the `core.summary.write()` method.\n\nAll methods except `addRaw()` utilize the `addRaw()` method to append to the buffer, followed by an EOL using the `addEOL()` method.\n\n```typescript\n\n// Write raw text, optionally add an EOL after the content, defaults to false\ncore.summary.addRaw('Some content here :speech_balloon:', true)\n// Output: Some content here :speech_balloon:\\n\n\n// Add an operating system-specific end-of-line marker\ncore.summary.addEOL()\n// Output (POSIX): \\n\n// Output (Windows): \\r\\n\n\n// Add a codeblock with an optional language for syntax highlighting\ncore.summary.addCodeBlock('console.log(\\'hello world\\')', 'javascript')\n// Output: <pre lang=\"javascript\"><code>console.log('hello world')</code></pre>\n\n// Add a list, second parameter indicates if list is ordered, defaults to false\ncore.summary.addList(['item1','item2','item3'], true)\n// Output: <ol><li>item1</li><li>item2</li><li>item3</li></ol>\n\n// Add a collapsible HTML details element\ncore.summary.addDetails('Label', 'Some detail that will be collapsed')\n// Output: <details><summary>Label</summary>Some detail that will be collapsed</details>\n\n// Add an image, image options parameter is optional, you can supply one of or both width and height in pixels\ncore.summary.addImage('example.png', 'alt description of img', {width: '100', height: '100'})\n// Output: <img src=\"example.png\" alt=\"alt description of img\" width=\"100\" height=\"100\">\n\n// Add an HTML section heading element, optionally pass a level that translates to 'hX' ie. h2. Defaults to h1\ncore.summary.addHeading('My Heading', '2')\n// Output: <h2>My Heading</h2>\n\n// Add an HTML thematic break <hr>\ncore.summary.addSeparator()\n// Output: <hr>\n\n// Add an HTML line break <br>\ncore.summary.addBreak()\n// Output: <br>\n\n// Add an HTML blockquote with an optional citation\ncore.summary.addQuote('To be or not to be', 'Shakespeare')\n// Output: <blockquote cite=\"Shakespeare\">To be or not to be</blockquote>\n\n// Add an HTML anchor tag\ncore.summary.addLink('click here', 'https://github.com')\n// Output: <a href=\"https://github.com\">click here</a>\n\n```\n\nTables are added using the `addTable()` method, and an array of `SummaryTableRow`.\n\n```typescript\n\nexport type SummaryTableRow = (SummaryTableCell | string)[]\n\nexport interface SummaryTableCell {\n  /**\n   * Cell content\n   */\n  data: string\n  /**\n   * Render cell as header\n   * (optional) default: false\n   */\n  header?: boolean\n  /**\n   * Number of columns the cell extends\n   * (optional) default: '1'\n   */\n  colspan?: string\n  /**\n   * Number of rows the cell extends\n   * (optional) default: '1'\n   */\n  rowspan?: string\n}\n\n```\n\nFor example\n\n```typescript\n\nconst tableData = [\n  {data: 'Header1', header: true},\n  {data: 'Header2', header: true},\n  {data: 'Header3', header: true},\n  {data: 'MyData1'},\n  {data: 'MyData2'},\n  {data: 'MyData3'}\n]\n\n// Add an HTML table\ncore.summary.addTable([tableData])\n// Output: <table><tr><th>Header1</th><th>Header2</th><th>Header3</th></tr><tr></tr><td>MyData1</td><td>MyData2</td><td>MyData3</td></tr></table>\n\n```\n\nIn addition to job summary content, there are utility functions for interfacing with the buffer.\n\n```typescript\n\n// Empties the summary buffer AND wipes the summary file on disk\ncore.summary.clear()\n\n// Returns the current summary buffer as a string\ncore.summary.stringify()\n\n// If the summary buffer is empty\ncore.summary.isEmptyBuffer()\n\n// Resets the summary buffer without writing to the summary file on disk\ncore.summary.emptyBuffer()\n\n// Writes text in the buffer to the summary buffer file and empties the buffer, optionally overwriting all existing content in the summary file with buffer contents. Defaults to false.\ncore.summary.write({overwrite: true})\n```\n\n<!-- File: packages/exec/README.md (Tokens: ~279 | Category: plugin-manifest) -->\n# `@actions/exec`\n\n## Usage\n\n#### Basic\n\nYou can use this package to execute tools in a cross platform way:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node index.js');\n```\n\n#### Args\n\nYou can also pass in arg arrays:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('node', ['index.js', 'foo=bar']);\n```\n\n#### Output/options\n\nCapture output or specify [other options](https://github.com/actions/toolkit/blob/d9347d4ab99fd507c0b9104b2cf79fb44fcc827d/packages/exec/src/interfaces.ts#L5):\n\n```js\nconst exec = require('@actions/exec');\n\nlet myOutput = '';\nlet myError = '';\n\nconst options = {};\noptions.listeners = {\n  stdout: (data: Buffer) => {\n    myOutput += data.toString();\n  },\n  stderr: (data: Buffer) => {\n    myError += data.toString();\n  }\n};\noptions.cwd = './lib';\n\nawait exec.exec('node', ['index.js', 'foo=bar'], options);\n```\n\n#### Exec tools not in the PATH\n\nYou can specify the full path for tools not in the PATH:\n\n```js\nconst exec = require('@actions/exec');\n\nawait exec.exec('\"/path/to/my-tool\"', ['arg1']);\n```\n\n<!-- File: packages/github/README.md (Tokens: ~857 | Category: plugin-manifest) -->\n# `@actions/github`\n\n> A hydrated Octokit client.\n\n## Usage\n\nReturns an authenticated Octokit client that follows the machine [proxy settings](https://help.github.com/en/actions/hosting-your-own-runners/using-a-proxy-server-with-self-hosted-runners) and correctly sets GHES base urls. See https://octokit.github.io/rest.js for the API.\n\n**Note:** This package is ESM-only starting from v9.0.0. For CommonJS projects, use dynamic import:\n```js\nasync function main() {\n    const { getOctokit, context } = await import('@actions/github');\n    // ... your code here\n}\nmain();\n```\n\nFor bundled actions (recommended), most bundlers like esbuild, webpack, and rollup handle ESM imports automatically.\n\n```js\nimport * as github from '@actions/github';\nimport * as core from '@actions/core';\n\nasync function run() {\n    // This should be a token with access to your repository scoped in as a secret.\n    // The YML workflow will need to set myToken with the GitHub Secret Token\n    // myToken: ${{ secrets.GITHUB_TOKEN }}\n    // https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token#about-the-github_token-secret\n    const myToken = core.getInput('myToken');\n\n    const octokit = github.getOctokit(myToken)\n\n    // You can also pass in additional options as a second parameter to getOctokit\n    // const octokit = github.getOctokit(myToken, {userAgent: \"MyActionVersion1\"});\n\n    const { data: pullRequest } = await octokit.rest.pulls.get({\n        owner: 'octokit',\n        repo: 'rest.js',\n        pull_number: 123,\n        mediaType: {\n          format: 'diff'\n        }\n    });\n\n    console.log(pullRequest);\n}\n\nrun();\n```\n\nYou can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.\n\n```js\nconst result = await octokit.graphql(query, variables);\n```\n\nFinally, you can get the context of the current action:\n\n```js\nimport * as github from '@actions/github';\n\nconst context = github.context;\n\nconst newIssue = await octokit.rest.issues.create({\n  ...context.repo,\n  title: 'New issue!',\n  body: 'Hello Universe!'\n});\n```\n\n## Webhook payload typescript definitions\n\nThe npm module `@octokit/webhooks-definitions` provides type definitions for the response payloads. You can cast the payload to these types for better type information.\n\nFirst, install the npm module `npm install @octokit/webhooks-definitions`\n\nThen, assert the type based on the eventName\n```ts\nimport * as core from '@actions/core'\nimport * as github from '@actions/github'\nimport {PushEvent} from '@octokit/webhooks-definitions/schema'\n\nif (github.context.eventName === 'push') {\n  const pushPayload = github.context.payload as PushEvent\n  core.info(`The head commit is: ${pushPayload.head_commit}`)\n}\n```\n\n## Extending the Octokit instance\n`@octokit/core` now supports the [plugin architecture](https://github.com/octokit/core.js#plugins). You can extend the GitHub instance using plugins. \n\nFor example, using the `@octokit/plugin-enterprise-server` you can now access enterprise admin apis on GHES instances.\n\n```ts\nimport { GitHub, getOctokitOptions } from '@actions/github/lib/utils'\nimport { enterpriseServer220Admin } from '@octokit/plugin-enterprise-server'\n\nconst octokit = GitHub.plugin(enterpriseServer220Admin)\n// or override some of the default values as well \n// const octokit = GitHub.plugin(enterpriseServer220Admin).defaults({userAgent: \"MyNewUserAgent\"})\n\nconst myToken = core.getInput('myToken');\nconst myOctokit = new octokit(getOctokitOptions(token))\n// Create a new user\nmyOctokit.rest.enterpriseAdmin.createUser({\n  login: \"testuser\",\n  email: \"testuser@test.com\",\n});\n```\n\n<!-- File: packages/glob/README.md (Tokens: ~959 | Category: plugin-manifest) -->\n# `@actions/glob`\n\n## Usage\n\n### Basic\n\nYou can use this package to search for files matching glob patterns.\n\nRelative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.\n\n```js\nconst glob = require('@actions/glob');\n\nconst patterns = ['**/tar.gz', '**/tar.bz']\nconst globber = await glob.create(patterns.join('\\n'))\nconst files = await globber.glob()\n```\n\n### Opt out of following symbolic links\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**', {followSymbolicLinks: false})\nconst files = await globber.glob()\n```\n\n### Iterator\n\nWhen dealing with a large amount of results, consider iterating the results as they are returned:\n\n```js\nconst glob = require('@actions/glob');\n\nconst globber = await glob.create('**')\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Recommended action inputs\n\nGlob follows symbolic links by default. Following is often appropriate unless deleting files.\n\nUsers may want to opt-out from following symbolic links for other reasons. For example,\nexcessive amounts of symbolic links can create the appearance of very, very many files\nand slow the search.\n\nWhen an action allows a user to specify input patterns, it is generally recommended to\nallow users to opt-out from following symbolic links.\n\nSnippet from `action.yml`:\n\n```yaml\ninputs:\n  files:\n    description: 'Files to print'\n    required: true\n  follow-symbolic-links:\n    description: 'Indicates whether to follow symbolic links'\n    default: true\n```\n\nAnd corresponding toolkit consumption:\n\n```js\nconst core = require('@actions/core')\nconst glob = require('@actions/glob')\n\nconst globOptions = {\n  followSymbolicLinks: core.getInput('follow-symbolic-links').toUpper() !== 'FALSE'\n}\nconst globber = glob.create(core.getInput('files'), globOptions)\nfor await (const file of globber.globGenerator()) {\n  console.log(file)\n}\n```\n\n## Hashing files (`hashFiles`)\n\n`hashFiles` computes a hash of files matched by glob patterns.\n\nBy default, only files under the workspace (`GITHUB_WORKSPACE`) are eligible to be hashed.\n\nTo improve security, file eligibility is evaluated using each file's resolved (real) path to prevent symbolic link traversal outside the allowed root path(s).\n\n### Options\n\n- `roots?: string[]` — Allowlist of root paths. Only files that resolve under (or equal) one of these roots are hashed. Defaults to `[GITHUB_WORKSPACE]` (or `currentWorkspace` if provided).\n- `allowFilesOutsideWorkspace?: boolean` — Explicit opt-in to include files outside the specified root path(s). Defaults to `false`.\n- `exclude?: string[]` — Glob patterns to exclude from hashing. Defaults to `[]`.\n\nIf files match your patterns but are outside the allowed roots and `allowFilesOutsideWorkspace` is not enabled, those files are skipped and a warning is emitted. If no eligible files remain after filtering, `hashFiles` returns an empty string (`''`).\n\n### Example\n\n```js\nconst glob = require('@actions/glob')\n\nconst hash = await glob.hashFiles('**/*.json', process.env.GITHUB_WORKSPACE || '', {\n  roots: [process.env.GITHUB_WORKSPACE, process.env.GITHUB_ACTION_PATH].filter(Boolean),\n  allowFilesOutsideWorkspace: true,\n  exclude: ['**/node_modules/**']\n})\n\nconsole.log(hash)\n```\n\n## Patterns\n\n### Glob behavior\n\nPatterns `*`, `?`, `[...]`, `**` (globstar) are supported.\n\nWith the following behaviors:\n- File names that begin with `.` may be included in the results\n- Case insensitive on Windows\n- Directory separator `/` and `\\` both supported on Windows\n\n### Tilde expansion\n\nSupports basic tilde expansion, for current user HOME replacement only.\n\nExample:\n- `~` may expand to /Users/johndoe\n- `~/foo` may expand to /Users/johndoe/foo\n\n### Comments\n\nPatterns that begin with `#` are treated as comments.\n\n### Exclude patterns\n\nLeading `!` changes the meaning of an include pattern to exclude.\n\nMultiple leading `!` flips the meaning.\n\n### Escaping\n\nWrapping special characters in `[]` can be used to escape literal glob characters\nin a file name. For example the literal file name `hello[a-z]` can be escaped as `hello[[]a-z]`.\n\nOn Linux/macOS `\\` is also treated as an escape character.\n\n<!-- File: packages/http-client/README.md (Tokens: ~413 | Category: plugin-manifest) -->\n# `@actions/http-client`\n\nA lightweight HTTP client optimized for building actions.\n\n## Features\n\n  - HTTP client with TypeScript generics and async/await/Promises\n  - Typings included!\n  - [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner\n  - Targets ES2019 (runner runs actions with node 24+).  Only supported on node 20+.\n  - Basic, Bearer and PAT Support out of the box.  Extensible handlers for others.\n  - Redirects supported\n\nFeatures and releases [here](./RELEASES.md)\n\n## Install\n\n```\nnpm install @actions/http-client --save\n```\n\n## Samples\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Errors\n\n### HTTP\n\nThe HTTP client does not throw unless truly exceptional.\n\n* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.\n* Redirects (3xx) will be followed by default.\n\nSee the [tests](./__tests__) for detailed examples.\n\n## Debugging\n\nTo enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:\n\n```shell\nexport NODE_DEBUG=http\n```\n\n## Node support\n\nThe http-client is built using Node 24. It may work on previous node LTS versions but it's tested and officially supported on Node 20+.\n\n## Support and Versioning\n\nWe follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).\n\n## Contributing\n\nWe welcome PRs.  Please create an issue and if applicable, a design before proceeding with code.\n\nonce:\n\n```\nnpm install\n```\n\nTo build:\n\n```\nnpm run build\n```\n\nTo run all tests:\n\n```\nnpm test\n```\n\n<!-- File: packages/io/README.md (Tokens: ~356 | Category: plugin-manifest) -->\n# `@actions/io`\n\n> Core functions for cli filesystem scenarios\n\n## Usage\n\n#### mkdir -p\n\nRecursively make a directory. Follows rules specified in [man mkdir](https://linux.die.net/man/1/mkdir) with the `-p` option specified:\n\n```js\nconst io = require('@actions/io');\n\nawait io.mkdirP('path/to/make');\n```\n\n#### cp/mv\n\nCopy or move files or folders. Follows rules specified in [man cp](https://linux.die.net/man/1/cp) and [man mv](https://linux.die.net/man/1/mv):\n\n```js\nconst io = require('@actions/io');\n\n// Recursive must be true for directories\nconst options = { recursive: true, force: false }\n\nawait io.cp('path/to/directory', 'path/to/dest', options);\nawait io.mv('path/to/file', 'path/to/dest');\n```\n\n#### rm -rf\n\nRemove a file or folder recursively. Follows rules specified in [man rm](https://linux.die.net/man/1/rm) with the `-r` and `-f` rules specified.\n\n```js\nconst io = require('@actions/io');\n\nawait io.rmRF('path/to/directory');\nawait io.rmRF('path/to/file');\n```\n\n#### which\n\nGet the path to a tool and resolves via paths. Follows the rules specified in [man which](https://linux.die.net/man/1/which).\n\n```js\nconst exec = require('@actions/exec');\nconst io = require('@actions/io');\n\nconst pythonPath: string = await io.which('python', true)\n\nawait exec.exec(`\"${pythonPath}\"`, ['main.py']);\n```\n\n<!-- File: packages/tool-cache/README.md (Tokens: ~714 | Category: plugin-manifest) -->\n# `@actions/tool-cache`\n\n> Functions necessary for downloading and caching tools.\n\n## Usage\n\n#### Download\n\nYou can use this to download tools (or other files) from a download URL:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n```\n\n#### Extract\n\nThese can then be extracted in platform specific ways:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nif (process.platform === 'win32') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');\n  const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');\n\n  // Or alternately\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');\n  const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');\n}\nelse if (process.platform === 'darwin') {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0.pkg');\n  const node12ExtractedFolder = await tc.extractXar(node12Path, 'path/to/extract/to');\n}\nelse {\n  const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\n  const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n}\n```\n\n#### Cache\n\nFinally, you can cache these directories in our tool-cache. This is useful if you want to switch back and forth between versions of a tool, or save a tool between runs for self-hosted runners.\n\nYou'll often want to add it to the path as part of this step:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');\nconst node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');\n\nconst cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');\ncore.addPath(cachedPath);\n```\n\nYou can also cache files for reuse.\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst cachedPath = await tc.cacheFile('path/to/exe', 'destFileName.exe', 'myExeName', '1.1.0');\n```\n\n#### Find\n\nFinally, you can find directories and files you've previously cached:\n\n```js\nconst tc = require('@actions/tool-cache');\nconst core = require('@actions/core');\n\nconst nodeDirectory = tc.find('node', '12.x', 'x64');\ncore.addPath(nodeDirectory);\n```\n\nYou can even find all cached versions of a tool:\n\n```js\nconst tc = require('@actions/tool-cache');\n\nconst allNodeVersions = tc.findAllVersions('node');\nconsole.log(`Versions of node available: ${allNodeVersions}`);\n```\n</yakaai_skills>"}