@actions/artifact 1.1.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -173
- package/lib/artifact.d.ts +6 -0
- package/lib/artifact.js +23 -0
- package/lib/artifact.js.map +1 -0
- package/lib/generated/google/protobuf/timestamp.d.ts +145 -0
- package/lib/generated/google/protobuf/timestamp.js +136 -0
- package/lib/generated/google/protobuf/timestamp.js.map +1 -0
- package/lib/generated/google/protobuf/wrappers.d.ts +307 -0
- package/lib/generated/google/protobuf/wrappers.js +609 -0
- package/lib/generated/google/protobuf/wrappers.js.map +1 -0
- package/lib/generated/index.d.ts +4 -0
- package/lib/generated/index.js +21 -0
- package/lib/generated/index.js.map +1 -0
- package/lib/generated/results/api/v1/artifact.d.ts +286 -0
- package/lib/generated/results/api/v1/artifact.js +588 -0
- package/lib/generated/results/api/v1/artifact.js.map +1 -0
- package/lib/generated/results/api/v1/artifact.twirp.d.ts +43 -0
- package/lib/generated/results/api/v1/artifact.twirp.js +416 -0
- package/lib/generated/results/api/v1/artifact.twirp.js.map +1 -0
- package/lib/internal/client.d.ts +61 -0
- package/lib/internal/client.js +121 -0
- package/lib/internal/client.js.map +1 -0
- package/lib/internal/download/download-artifact.d.ts +4 -0
- package/lib/internal/download/download-artifact.js +205 -0
- package/lib/internal/download/download-artifact.js.map +1 -0
- package/lib/internal/find/get-artifact.d.ts +3 -0
- package/lib/internal/find/get-artifact.js +118 -0
- package/lib/internal/find/get-artifact.js.map +1 -0
- package/lib/internal/find/list-artifacts.d.ts +3 -0
- package/lib/internal/find/list-artifacts.js +139 -0
- package/lib/internal/find/list-artifacts.js.map +1 -0
- package/lib/internal/find/retry-options.d.ts +7 -0
- package/lib/internal/find/retry-options.js +50 -0
- package/lib/internal/find/retry-options.js.map +1 -0
- package/lib/internal/shared/artifact-twirp-client.d.ts +6 -0
- package/lib/internal/shared/artifact-twirp-client.js +153 -0
- package/lib/internal/shared/artifact-twirp-client.js.map +1 -0
- package/lib/internal/shared/config.d.ts +6 -0
- package/lib/internal/shared/config.js +55 -0
- package/lib/internal/shared/config.js.map +1 -0
- package/lib/internal/shared/errors.d.ts +22 -0
- package/lib/internal/shared/errors.js +70 -0
- package/lib/internal/shared/errors.js.map +1 -0
- package/lib/internal/shared/interfaces.d.ts +136 -0
- package/lib/internal/{contracts.js → shared/interfaces.js} +1 -1
- package/lib/internal/shared/interfaces.js.map +1 -0
- package/lib/internal/shared/user-agent.d.ts +4 -0
- package/lib/internal/shared/user-agent.js +13 -0
- package/lib/internal/shared/user-agent.js.map +1 -0
- package/lib/internal/shared/util.d.ts +5 -0
- package/lib/internal/shared/util.js +81 -0
- package/lib/internal/shared/util.js.map +1 -0
- package/lib/internal/upload/blob-upload.d.ts +12 -0
- package/lib/internal/upload/blob-upload.js +87 -0
- package/lib/internal/upload/blob-upload.js.map +1 -0
- package/lib/internal/upload/path-and-artifact-name-validation.d.ts +8 -0
- package/lib/internal/{path-and-artifact-name-validation.js → upload/path-and-artifact-name-validation.js} +11 -11
- package/lib/internal/upload/path-and-artifact-name-validation.js.map +1 -0
- package/lib/internal/upload/retention.d.ts +2 -0
- package/lib/internal/upload/retention.js +54 -0
- package/lib/internal/upload/retention.js.map +1 -0
- package/lib/internal/upload/upload-artifact.d.ts +2 -0
- package/lib/internal/upload/upload-artifact.js +103 -0
- package/lib/internal/upload/upload-artifact.js.map +1 -0
- package/lib/internal/upload/upload-zip-specification.d.ts +21 -0
- package/lib/internal/{upload-specification.js → upload/upload-zip-specification.js} +44 -36
- package/lib/internal/upload/upload-zip-specification.js.map +1 -0
- package/lib/internal/upload/zip.d.ts +9 -0
- package/lib/internal/upload/zip.js +113 -0
- package/lib/internal/upload/zip.js.map +1 -0
- package/package.json +26 -12
- package/lib/artifact-client.d.ts +0 -10
- package/lib/artifact-client.js +0 -12
- package/lib/artifact-client.js.map +0 -1
- package/lib/internal/artifact-client.d.ts +0 -41
- package/lib/internal/artifact-client.js +0 -182
- package/lib/internal/artifact-client.js.map +0 -1
- package/lib/internal/config-variables.d.ts +0 -12
- package/lib/internal/config-variables.js +0 -77
- package/lib/internal/config-variables.js.map +0 -1
- package/lib/internal/contracts.d.ts +0 -67
- package/lib/internal/contracts.js.map +0 -1
- package/lib/internal/crc64.d.ts +0 -21
- package/lib/internal/crc64.js +0 -303
- package/lib/internal/crc64.js.map +0 -1
- package/lib/internal/download-http-client.d.ts +0 -39
- package/lib/internal/download-http-client.js +0 -296
- package/lib/internal/download-http-client.js.map +0 -1
- package/lib/internal/download-options.d.ts +0 -7
- package/lib/internal/download-options.js +0 -3
- package/lib/internal/download-options.js.map +0 -1
- package/lib/internal/download-response.d.ts +0 -10
- package/lib/internal/download-response.js +0 -3
- package/lib/internal/download-response.js.map +0 -1
- package/lib/internal/download-specification.d.ts +0 -19
- package/lib/internal/download-specification.js +0 -78
- package/lib/internal/download-specification.js.map +0 -1
- package/lib/internal/http-manager.d.ts +0 -12
- package/lib/internal/http-manager.js +0 -32
- package/lib/internal/http-manager.js.map +0 -1
- package/lib/internal/path-and-artifact-name-validation.d.ts +0 -8
- package/lib/internal/path-and-artifact-name-validation.js.map +0 -1
- package/lib/internal/requestUtils.d.ts +0 -3
- package/lib/internal/requestUtils.js +0 -92
- package/lib/internal/requestUtils.js.map +0 -1
- package/lib/internal/status-reporter.d.ts +0 -21
- package/lib/internal/status-reporter.js +0 -52
- package/lib/internal/status-reporter.js.map +0 -1
- package/lib/internal/upload-gzip.d.ts +0 -14
- package/lib/internal/upload-gzip.js +0 -147
- package/lib/internal/upload-gzip.js.map +0 -1
- package/lib/internal/upload-http-client.d.ts +0 -48
- package/lib/internal/upload-http-client.js +0 -415
- package/lib/internal/upload-http-client.js.map +0 -1
- package/lib/internal/upload-options.d.ts +0 -34
- package/lib/internal/upload-options.js +0 -3
- package/lib/internal/upload-options.js.map +0 -1
- package/lib/internal/upload-response.d.ts +0 -19
- package/lib/internal/upload-response.js +0 -3
- package/lib/internal/upload-response.js.map +0 -1
- package/lib/internal/upload-specification.d.ts +0 -11
- package/lib/internal/upload-specification.js.map +0 -1
- package/lib/internal/utils.d.ts +0 -71
- package/lib/internal/utils.js +0 -292
- package/lib/internal/utils.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,213 +1,156 @@
|
|
|
1
1
|
# `@actions/artifact`
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
You can use this package to interact with the actions artifacts.
|
|
6
|
-
- [Upload an Artifact](#Upload-an-Artifact)
|
|
7
|
-
- [Download a Single Artifact](#Download-a-Single-Artifact)
|
|
8
|
-
- [Download All Artifacts](#Download-all-Artifacts)
|
|
9
|
-
- [Additional Documentation](#Additional-Documentation)
|
|
10
|
-
- [Contributions](#Contributions)
|
|
11
|
-
|
|
12
|
-
Relative paths and absolute paths are both allowed. Relative paths are rooted against the current working directory.
|
|
13
|
-
|
|
14
|
-
## Upload an Artifact
|
|
15
|
-
|
|
16
|
-
Method Name: `uploadArtifact`
|
|
17
|
-
|
|
18
|
-
#### Inputs
|
|
19
|
-
- `name`
|
|
20
|
-
- The name of the artifact that is being uploaded
|
|
21
|
-
- Required
|
|
22
|
-
- `files`
|
|
23
|
-
- A list of file paths that describe what should be uploaded as part of the artifact
|
|
24
|
-
- If a path is provided that does not exist, an error will be thrown
|
|
25
|
-
- Can be absolute or relative. Internally everything is normalized and resolved
|
|
26
|
-
- Required
|
|
27
|
-
- `rootDirectory`
|
|
28
|
-
- A file path that denotes the root directory of the files being uploaded. This path is used to strip the paths provided in `files` to control how they are uploaded and structured
|
|
29
|
-
- If a file specified in `files` is not in the `rootDirectory`, an error will be thrown
|
|
30
|
-
- Required
|
|
31
|
-
- `options`
|
|
32
|
-
- Extra options that allow for the customization of the upload behavior
|
|
33
|
-
- Optional
|
|
34
|
-
|
|
35
|
-
#### Available Options
|
|
36
|
-
|
|
37
|
-
- `continueOnError`
|
|
38
|
-
- Indicates if the artifact upload should continue in the event a file fails to upload. If there is a error during upload, a partial artifact will always be created and available for download at the end. The `size` reported will be the amount of storage that the user or org will be charged for the partial artifact.
|
|
39
|
-
- If set to `false`, and an error is encountered, all other uploads will stop and any files that were queued will not be attempted to be uploaded. The partial artifact available will only include files up until the failure.
|
|
40
|
-
- If set to `true` and an error is encountered, the failed file will be skipped and ignored and all other queued files will be attempted to be uploaded. There will be an artifact available for download at the end with everything excluding the file that failed to upload
|
|
41
|
-
- Optional, defaults to `true` if not specified
|
|
42
|
-
- `retentionDays`
|
|
43
|
-
- Duration after which artifact will expire in days
|
|
44
|
-
- Minimum value: 1
|
|
45
|
-
- Maximum value: 90 unless changed by repository setting
|
|
46
|
-
- If this is set to a greater value than the retention settings allowed, the retention on artifacts will be reduced to match the max value allowed on the server, and the upload process will continue. An input of 0 assumes default retention value.
|
|
47
|
-
|
|
48
|
-
#### Example using Absolute File Paths
|
|
3
|
+
Interact programmatically with [Actions Artifacts](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts).
|
|
49
4
|
|
|
50
|
-
|
|
51
|
-
const artifact = require('@actions/artifact');
|
|
52
|
-
const artifactClient = artifact.create()
|
|
53
|
-
const artifactName = 'my-artifact';
|
|
54
|
-
const files = [
|
|
55
|
-
'/home/user/files/plz-upload/file1.txt',
|
|
56
|
-
'/home/user/files/plz-upload/file2.txt',
|
|
57
|
-
'/home/user/files/plz-upload/dir/file3.txt'
|
|
58
|
-
]
|
|
59
|
-
const rootDirectory = '/home/user/files/plz-upload'
|
|
60
|
-
const options = {
|
|
61
|
-
continueOnError: true
|
|
62
|
-
}
|
|
5
|
+
This 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.
|
|
63
6
|
|
|
64
|
-
const uploadResult = await artifactClient.uploadArtifact(artifactName, files, rootDirectory, options)
|
|
65
|
-
```
|
|
66
7
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
]
|
|
78
|
-
|
|
79
|
-
const rootDirectory = '.' // Also possible to use __dirname
|
|
80
|
-
const options = {
|
|
81
|
-
continueOnError: false
|
|
82
|
-
}
|
|
8
|
+
- [`@actions/artifact`](#actionsartifact)
|
|
9
|
+
- [v2 - What's New](#v2---whats-new)
|
|
10
|
+
- [Improvements](#improvements)
|
|
11
|
+
- [Breaking changes](#breaking-changes)
|
|
12
|
+
- [Quick Start](#quick-start)
|
|
13
|
+
- [Examples](#examples)
|
|
14
|
+
- [Upload and Download](#upload-and-download)
|
|
15
|
+
- [Downloading from other workflow runs or repos](#downloading-from-other-workflow-runs-or-repos)
|
|
16
|
+
- [Speeding up large uploads](#speeding-up-large-uploads)
|
|
17
|
+
- [Additional Resources](#additional-resources)
|
|
83
18
|
|
|
84
|
-
|
|
85
|
-
```
|
|
19
|
+
## v2 - What's New
|
|
86
20
|
|
|
87
|
-
|
|
21
|
+
> [!IMPORTANT]
|
|
22
|
+
> @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).
|
|
88
23
|
|
|
89
|
-
The
|
|
24
|
+
The 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.
|
|
90
25
|
|
|
91
|
-
|
|
92
|
-
- The name of the artifact that was uploaded
|
|
93
|
-
- `artifactItems`
|
|
94
|
-
- A list of all files that describe what is uploaded if there are no errors encountered. Usually this will be equal to the inputted `files` with the exception of empty directories (will not be uploaded)
|
|
95
|
-
- `size`
|
|
96
|
-
- Total size of the artifact that was uploaded in bytes
|
|
97
|
-
- `failedItems`
|
|
98
|
-
- A list of items that were not uploaded successfully (this will include queued items that were not uploaded if `continueOnError` is set to false). This is a subset of `artifactItems`
|
|
26
|
+
### Improvements
|
|
99
27
|
|
|
100
|
-
|
|
28
|
+
1. All upload and download operations are much quicker, up to 80% faster download times and 96% faster upload times in worst case scenarios.
|
|
29
|
+
2. 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.
|
|
30
|
+
3. Artifacts can now be downloaded and deleted from the UI _before_ the entire workflow run finishes.
|
|
31
|
+
4. 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!)
|
|
32
|
+
5. 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.
|
|
101
33
|
|
|
102
|
-
|
|
34
|
+
### Breaking changes
|
|
103
35
|
|
|
104
|
-
|
|
105
|
-
- `name`
|
|
106
|
-
- The name of the artifact to download
|
|
107
|
-
- Required
|
|
108
|
-
- `path`
|
|
109
|
-
- Path that denotes where the artifact will be downloaded to
|
|
110
|
-
- Optional. Defaults to the GitHub workspace directory(`$GITHUB_WORKSPACE`) if not specified
|
|
111
|
-
- `options`
|
|
112
|
-
- Extra options that allow for the customization of the download behavior
|
|
113
|
-
- Optional
|
|
36
|
+
1. Firewall rules required for self-hosted runners.
|
|
114
37
|
|
|
38
|
+
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.
|
|
115
39
|
|
|
116
|
-
|
|
40
|
+
e.g.
|
|
117
41
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
42
|
+
```bash
|
|
43
|
+
curl https://api.github.com/meta | jq .domains.actions
|
|
44
|
+
```
|
|
121
45
|
|
|
122
|
-
|
|
46
|
+
2. Uploading to the same named Artifact multiple times.
|
|
123
47
|
|
|
124
|
-
|
|
125
|
-
const artifact = require('@actions/artifact');
|
|
126
|
-
const artifactClient = artifact.create()
|
|
127
|
-
const artifactName = 'my-artifact';
|
|
128
|
-
const path = 'some/directory'
|
|
129
|
-
const options = {
|
|
130
|
-
createArtifactFolder: false
|
|
131
|
-
}
|
|
48
|
+
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.
|
|
132
49
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
// Post download, the directory structure will look like this
|
|
136
|
-
/some
|
|
137
|
-
/directory
|
|
138
|
-
/file1.txt
|
|
139
|
-
/file2.txt
|
|
140
|
-
/dir
|
|
141
|
-
/file3.txt
|
|
142
|
-
|
|
143
|
-
// If createArtifactFolder is set to true, the directory structure will look like this
|
|
144
|
-
/some
|
|
145
|
-
/directory
|
|
146
|
-
/my-artifact
|
|
147
|
-
/file1.txt
|
|
148
|
-
/file2.txt
|
|
149
|
-
/dir
|
|
150
|
-
/file3.txt
|
|
151
|
-
```
|
|
50
|
+
3. Limit of Artifacts for an individual job.
|
|
152
51
|
|
|
153
|
-
|
|
52
|
+
Each job in a workflow run now has a limit of 10 artifacts.
|
|
154
53
|
|
|
155
|
-
|
|
54
|
+
## Quick Start
|
|
156
55
|
|
|
157
|
-
|
|
158
|
-
- The name of the artifact that was downloaded
|
|
159
|
-
- `downloadPath`
|
|
160
|
-
- The full Path to where the artifact was downloaded
|
|
56
|
+
Install the package:
|
|
161
57
|
|
|
58
|
+
```bash
|
|
59
|
+
npm i @actions/artifact
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Import the module:
|
|
162
63
|
|
|
163
|
-
|
|
64
|
+
```js
|
|
65
|
+
// ES6 module
|
|
66
|
+
import {DefaultArtifactClient} from '@actions/artifact'
|
|
164
67
|
|
|
165
|
-
|
|
68
|
+
// CommonJS
|
|
69
|
+
const {DefaultArtifactClient} = require('@actions/artifact')
|
|
70
|
+
```
|
|
166
71
|
|
|
167
|
-
|
|
168
|
-
- `path`
|
|
169
|
-
- Path that denotes where the artifact will be downloaded to
|
|
170
|
-
- Optional. Defaults to the GitHub workspace directory(`$GITHUB_WORKSPACE`) if not specified
|
|
72
|
+
Then instantiate:
|
|
171
73
|
|
|
172
74
|
```js
|
|
173
|
-
const artifact =
|
|
174
|
-
const artifactClient = artifact.create();
|
|
175
|
-
const downloadResponse = await artifactClient.downloadAllArtifacts();
|
|
176
|
-
|
|
177
|
-
// output result
|
|
178
|
-
for (response in downloadResponse) {
|
|
179
|
-
console.log(response.artifactName);
|
|
180
|
-
console.log(response.downloadPath);
|
|
181
|
-
}
|
|
75
|
+
const artifact = new DefaultArtifactClient()
|
|
182
76
|
```
|
|
183
77
|
|
|
184
|
-
|
|
78
|
+
ℹ️ For a comprehensive list of classes, interfaces, functions and more, see the [generated documentation](./docs/generated/README.md).
|
|
79
|
+
|
|
80
|
+
## Examples
|
|
81
|
+
|
|
82
|
+
### Upload and Download
|
|
83
|
+
|
|
84
|
+
The 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).
|
|
85
|
+
|
|
185
86
|
```js
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
87
|
+
const {id, size} = await artifact.uploadArtifact(
|
|
88
|
+
// name of the artifact
|
|
89
|
+
'my-artifact',
|
|
90
|
+
// files to include (supports absolute and relative paths)
|
|
91
|
+
['/absolute/path/file1.txt', './relative/file2.txt'],
|
|
92
|
+
{
|
|
93
|
+
// optional: how long to retain the artifact
|
|
94
|
+
// if unspecified, defaults to repository/org retention settings (the limit of this value)
|
|
95
|
+
retentionDays: 10
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
console.log(`Created artifact with id: ${id} (bytes: ${size}`)
|
|
100
|
+
|
|
101
|
+
const {downloadPath} = await artifact.downloadArtifact(id, {
|
|
102
|
+
// optional: download destination path. otherwise defaults to $GITHUB_WORKSPACE
|
|
103
|
+
path: '/tmp/dst/path',
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
console.log(`Downloaded artifact ${id} to: ${downloadPath}`)
|
|
191
107
|
```
|
|
192
108
|
|
|
193
|
-
|
|
109
|
+
### Downloading from other workflow runs or repos
|
|
194
110
|
|
|
195
|
-
|
|
111
|
+
It 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`.
|
|
196
112
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
113
|
+
```ts
|
|
114
|
+
const findBy = {
|
|
115
|
+
// must have actions:read permission on target repository
|
|
116
|
+
token: process.env['GITHUB_TOKEN'],
|
|
117
|
+
workflowRunId: 123,
|
|
118
|
+
repositoryOwner: 'actions',
|
|
119
|
+
repositoryName: 'toolkit'
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
await artifact.downloadArtifact(1337, {
|
|
123
|
+
findBy
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
// can also be used in other methods
|
|
202
127
|
|
|
203
|
-
|
|
128
|
+
await artifact.getArtifact('my-artifact', {
|
|
129
|
+
findBy
|
|
130
|
+
})
|
|
204
131
|
|
|
205
|
-
|
|
132
|
+
await artifact.listArtifacts({
|
|
133
|
+
findBy
|
|
134
|
+
})
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Speeding up large uploads
|
|
206
138
|
|
|
207
|
-
|
|
139
|
+
If 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.
|
|
208
140
|
|
|
209
|
-
|
|
141
|
+
```ts
|
|
142
|
+
await artifact.uploadArtifact('my-massive-artifact', ['big_file.bin'], {
|
|
143
|
+
// The level of compression for Zlib to be applied to the artifact archive.
|
|
144
|
+
// - 0: No compression
|
|
145
|
+
// - 1: Best speed
|
|
146
|
+
// - 6: Default compression (same as GNU Gzip)
|
|
147
|
+
// - 9: Best compression
|
|
148
|
+
compressionLevel: 0
|
|
149
|
+
})
|
|
150
|
+
```
|
|
210
151
|
|
|
211
|
-
|
|
152
|
+
## Additional Resources
|
|
212
153
|
|
|
213
|
-
|
|
154
|
+
- [Releases](./RELEASES.md)
|
|
155
|
+
- [Contribution Guide](./CONTRIBUTIONS.md)
|
|
156
|
+
- [Frequently Asked Questions](./docs/faq.md)
|
package/lib/artifact.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
const client_1 = require("./internal/client");
|
|
18
|
+
__exportStar(require("./internal/shared/interfaces"), exports);
|
|
19
|
+
__exportStar(require("./internal/shared/errors"), exports);
|
|
20
|
+
__exportStar(require("./internal/client"), exports);
|
|
21
|
+
const client = new client_1.DefaultArtifactClient();
|
|
22
|
+
exports.default = client;
|
|
23
|
+
//# sourceMappingURL=artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../src/artifact.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAuE;AAEvE,+DAA4C;AAC5C,2DAAwC;AACxC,oDAAiC;AAEjC,MAAM,MAAM,GAAmB,IAAI,8BAAqB,EAAE,CAAA;AAC1D,kBAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
|
|
2
|
+
import type { IBinaryWriter } from "@protobuf-ts/runtime";
|
|
3
|
+
import type { BinaryReadOptions } from "@protobuf-ts/runtime";
|
|
4
|
+
import type { IBinaryReader } from "@protobuf-ts/runtime";
|
|
5
|
+
import type { PartialMessage } from "@protobuf-ts/runtime";
|
|
6
|
+
import type { JsonValue } from "@protobuf-ts/runtime";
|
|
7
|
+
import type { JsonReadOptions } from "@protobuf-ts/runtime";
|
|
8
|
+
import type { JsonWriteOptions } from "@protobuf-ts/runtime";
|
|
9
|
+
import { MessageType } from "@protobuf-ts/runtime";
|
|
10
|
+
/**
|
|
11
|
+
* A Timestamp represents a point in time independent of any time zone
|
|
12
|
+
* or calendar, represented as seconds and fractions of seconds at
|
|
13
|
+
* nanosecond resolution in UTC Epoch time. It is encoded using the
|
|
14
|
+
* Proleptic Gregorian Calendar which extends the Gregorian calendar
|
|
15
|
+
* backwards to year one. It is encoded assuming all minutes are 60
|
|
16
|
+
* seconds long, i.e. leap seconds are "smeared" so that no leap second
|
|
17
|
+
* table is needed for interpretation. Range is from
|
|
18
|
+
* 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
|
|
19
|
+
* By restricting to that range, we ensure that we can convert to
|
|
20
|
+
* and from RFC 3339 date strings.
|
|
21
|
+
* See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
|
|
22
|
+
*
|
|
23
|
+
* # Examples
|
|
24
|
+
*
|
|
25
|
+
* Example 1: Compute Timestamp from POSIX `time()`.
|
|
26
|
+
*
|
|
27
|
+
* Timestamp timestamp;
|
|
28
|
+
* timestamp.set_seconds(time(NULL));
|
|
29
|
+
* timestamp.set_nanos(0);
|
|
30
|
+
*
|
|
31
|
+
* Example 2: Compute Timestamp from POSIX `gettimeofday()`.
|
|
32
|
+
*
|
|
33
|
+
* struct timeval tv;
|
|
34
|
+
* gettimeofday(&tv, NULL);
|
|
35
|
+
*
|
|
36
|
+
* Timestamp timestamp;
|
|
37
|
+
* timestamp.set_seconds(tv.tv_sec);
|
|
38
|
+
* timestamp.set_nanos(tv.tv_usec * 1000);
|
|
39
|
+
*
|
|
40
|
+
* Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
|
|
41
|
+
*
|
|
42
|
+
* FILETIME ft;
|
|
43
|
+
* GetSystemTimeAsFileTime(&ft);
|
|
44
|
+
* UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
|
|
45
|
+
*
|
|
46
|
+
* // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
|
|
47
|
+
* // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
|
|
48
|
+
* Timestamp timestamp;
|
|
49
|
+
* timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
|
|
50
|
+
* timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
|
|
51
|
+
*
|
|
52
|
+
* Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
|
|
53
|
+
*
|
|
54
|
+
* long millis = System.currentTimeMillis();
|
|
55
|
+
*
|
|
56
|
+
* Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
|
|
57
|
+
* .setNanos((int) ((millis % 1000) * 1000000)).build();
|
|
58
|
+
*
|
|
59
|
+
*
|
|
60
|
+
* Example 5: Compute Timestamp from current time in Python.
|
|
61
|
+
*
|
|
62
|
+
* timestamp = Timestamp()
|
|
63
|
+
* timestamp.GetCurrentTime()
|
|
64
|
+
*
|
|
65
|
+
* # JSON Mapping
|
|
66
|
+
*
|
|
67
|
+
* In JSON format, the Timestamp type is encoded as a string in the
|
|
68
|
+
* [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
|
|
69
|
+
* format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
|
|
70
|
+
* where {year} is always expressed using four digits while {month}, {day},
|
|
71
|
+
* {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
|
|
72
|
+
* seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
|
|
73
|
+
* are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
|
|
74
|
+
* is required. A proto3 JSON serializer should always use UTC (as indicated by
|
|
75
|
+
* "Z") when printing the Timestamp type and a proto3 JSON parser should be
|
|
76
|
+
* able to accept both UTC and other timezones (as indicated by an offset).
|
|
77
|
+
*
|
|
78
|
+
* For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
|
|
79
|
+
* 01:30 UTC on January 15, 2017.
|
|
80
|
+
*
|
|
81
|
+
* In JavaScript, one can convert a Date object to this format using the
|
|
82
|
+
* standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
|
|
83
|
+
* method. In Python, a standard `datetime.datetime` object can be converted
|
|
84
|
+
* to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
|
|
85
|
+
* with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
|
|
86
|
+
* can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
|
|
87
|
+
* http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
|
|
88
|
+
* ) to obtain a formatter capable of generating timestamps in this format.
|
|
89
|
+
*
|
|
90
|
+
*
|
|
91
|
+
*
|
|
92
|
+
* @generated from protobuf message google.protobuf.Timestamp
|
|
93
|
+
*/
|
|
94
|
+
export interface Timestamp {
|
|
95
|
+
/**
|
|
96
|
+
* Represents seconds of UTC time since Unix epoch
|
|
97
|
+
* 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
|
|
98
|
+
* 9999-12-31T23:59:59Z inclusive.
|
|
99
|
+
*
|
|
100
|
+
* @generated from protobuf field: int64 seconds = 1;
|
|
101
|
+
*/
|
|
102
|
+
seconds: string;
|
|
103
|
+
/**
|
|
104
|
+
* Non-negative fractions of a second at nanosecond resolution. Negative
|
|
105
|
+
* second values with fractions must still have non-negative nanos values
|
|
106
|
+
* that count forward in time. Must be from 0 to 999,999,999
|
|
107
|
+
* inclusive.
|
|
108
|
+
*
|
|
109
|
+
* @generated from protobuf field: int32 nanos = 2;
|
|
110
|
+
*/
|
|
111
|
+
nanos: number;
|
|
112
|
+
}
|
|
113
|
+
declare class Timestamp$Type extends MessageType<Timestamp> {
|
|
114
|
+
constructor();
|
|
115
|
+
/**
|
|
116
|
+
* Creates a new `Timestamp` for the current time.
|
|
117
|
+
*/
|
|
118
|
+
now(): Timestamp;
|
|
119
|
+
/**
|
|
120
|
+
* Converts a `Timestamp` to a JavaScript Date.
|
|
121
|
+
*/
|
|
122
|
+
toDate(message: Timestamp): Date;
|
|
123
|
+
/**
|
|
124
|
+
* Converts a JavaScript Date to a `Timestamp`.
|
|
125
|
+
*/
|
|
126
|
+
fromDate(date: Date): Timestamp;
|
|
127
|
+
/**
|
|
128
|
+
* In JSON format, the `Timestamp` type is encoded as a string
|
|
129
|
+
* in the RFC 3339 format.
|
|
130
|
+
*/
|
|
131
|
+
internalJsonWrite(message: Timestamp, options: JsonWriteOptions): JsonValue;
|
|
132
|
+
/**
|
|
133
|
+
* In JSON format, the `Timestamp` type is encoded as a string
|
|
134
|
+
* in the RFC 3339 format.
|
|
135
|
+
*/
|
|
136
|
+
internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Timestamp): Timestamp;
|
|
137
|
+
create(value?: PartialMessage<Timestamp>): Timestamp;
|
|
138
|
+
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Timestamp): Timestamp;
|
|
139
|
+
internalBinaryWrite(message: Timestamp, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @generated MessageType for protobuf message google.protobuf.Timestamp
|
|
143
|
+
*/
|
|
144
|
+
export declare const Timestamp: Timestamp$Type;
|
|
145
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Timestamp = void 0;
|
|
4
|
+
const runtime_1 = require("@protobuf-ts/runtime");
|
|
5
|
+
const runtime_2 = require("@protobuf-ts/runtime");
|
|
6
|
+
const runtime_3 = require("@protobuf-ts/runtime");
|
|
7
|
+
const runtime_4 = require("@protobuf-ts/runtime");
|
|
8
|
+
const runtime_5 = require("@protobuf-ts/runtime");
|
|
9
|
+
const runtime_6 = require("@protobuf-ts/runtime");
|
|
10
|
+
const runtime_7 = require("@protobuf-ts/runtime");
|
|
11
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
12
|
+
class Timestamp$Type extends runtime_7.MessageType {
|
|
13
|
+
constructor() {
|
|
14
|
+
super("google.protobuf.Timestamp", [
|
|
15
|
+
{ no: 1, name: "seconds", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
|
|
16
|
+
{ no: 2, name: "nanos", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new `Timestamp` for the current time.
|
|
21
|
+
*/
|
|
22
|
+
now() {
|
|
23
|
+
const msg = this.create();
|
|
24
|
+
const ms = Date.now();
|
|
25
|
+
msg.seconds = runtime_6.PbLong.from(Math.floor(ms / 1000)).toString();
|
|
26
|
+
msg.nanos = (ms % 1000) * 1000000;
|
|
27
|
+
return msg;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Converts a `Timestamp` to a JavaScript Date.
|
|
31
|
+
*/
|
|
32
|
+
toDate(message) {
|
|
33
|
+
return new Date(runtime_6.PbLong.from(message.seconds).toNumber() * 1000 + Math.ceil(message.nanos / 1000000));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Converts a JavaScript Date to a `Timestamp`.
|
|
37
|
+
*/
|
|
38
|
+
fromDate(date) {
|
|
39
|
+
const msg = this.create();
|
|
40
|
+
const ms = date.getTime();
|
|
41
|
+
msg.seconds = runtime_6.PbLong.from(Math.floor(ms / 1000)).toString();
|
|
42
|
+
msg.nanos = (ms % 1000) * 1000000;
|
|
43
|
+
return msg;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* In JSON format, the `Timestamp` type is encoded as a string
|
|
47
|
+
* in the RFC 3339 format.
|
|
48
|
+
*/
|
|
49
|
+
internalJsonWrite(message, options) {
|
|
50
|
+
let ms = runtime_6.PbLong.from(message.seconds).toNumber() * 1000;
|
|
51
|
+
if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z"))
|
|
52
|
+
throw new Error("Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");
|
|
53
|
+
if (message.nanos < 0)
|
|
54
|
+
throw new Error("Unable to encode invalid Timestamp to JSON. Nanos must not be negative.");
|
|
55
|
+
let z = "Z";
|
|
56
|
+
if (message.nanos > 0) {
|
|
57
|
+
let nanosStr = (message.nanos + 1000000000).toString().substring(1);
|
|
58
|
+
if (nanosStr.substring(3) === "000000")
|
|
59
|
+
z = "." + nanosStr.substring(0, 3) + "Z";
|
|
60
|
+
else if (nanosStr.substring(6) === "000")
|
|
61
|
+
z = "." + nanosStr.substring(0, 6) + "Z";
|
|
62
|
+
else
|
|
63
|
+
z = "." + nanosStr + "Z";
|
|
64
|
+
}
|
|
65
|
+
return new Date(ms).toISOString().replace(".000Z", z);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* In JSON format, the `Timestamp` type is encoded as a string
|
|
69
|
+
* in the RFC 3339 format.
|
|
70
|
+
*/
|
|
71
|
+
internalJsonRead(json, options, target) {
|
|
72
|
+
if (typeof json !== "string")
|
|
73
|
+
throw new Error("Unable to parse Timestamp from JSON " + (0, runtime_5.typeofJsonValue)(json) + ".");
|
|
74
|
+
let matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);
|
|
75
|
+
if (!matches)
|
|
76
|
+
throw new Error("Unable to parse Timestamp from JSON. Invalid format.");
|
|
77
|
+
let ms = Date.parse(matches[1] + "-" + matches[2] + "-" + matches[3] + "T" + matches[4] + ":" + matches[5] + ":" + matches[6] + (matches[8] ? matches[8] : "Z"));
|
|
78
|
+
if (Number.isNaN(ms))
|
|
79
|
+
throw new Error("Unable to parse Timestamp from JSON. Invalid value.");
|
|
80
|
+
if (ms < Date.parse("0001-01-01T00:00:00Z") || ms > Date.parse("9999-12-31T23:59:59Z"))
|
|
81
|
+
throw new globalThis.Error("Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");
|
|
82
|
+
if (!target)
|
|
83
|
+
target = this.create();
|
|
84
|
+
target.seconds = runtime_6.PbLong.from(ms / 1000).toString();
|
|
85
|
+
target.nanos = 0;
|
|
86
|
+
if (matches[7])
|
|
87
|
+
target.nanos = (parseInt("1" + matches[7] + "0".repeat(9 - matches[7].length)) - 1000000000);
|
|
88
|
+
return target;
|
|
89
|
+
}
|
|
90
|
+
create(value) {
|
|
91
|
+
const message = { seconds: "0", nanos: 0 };
|
|
92
|
+
globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
|
|
93
|
+
if (value !== undefined)
|
|
94
|
+
(0, runtime_3.reflectionMergePartial)(this, message, value);
|
|
95
|
+
return message;
|
|
96
|
+
}
|
|
97
|
+
internalBinaryRead(reader, length, options, target) {
|
|
98
|
+
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
|
|
99
|
+
while (reader.pos < end) {
|
|
100
|
+
let [fieldNo, wireType] = reader.tag();
|
|
101
|
+
switch (fieldNo) {
|
|
102
|
+
case /* int64 seconds */ 1:
|
|
103
|
+
message.seconds = reader.int64().toString();
|
|
104
|
+
break;
|
|
105
|
+
case /* int32 nanos */ 2:
|
|
106
|
+
message.nanos = reader.int32();
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
let u = options.readUnknownField;
|
|
110
|
+
if (u === "throw")
|
|
111
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
112
|
+
let d = reader.skip(wireType);
|
|
113
|
+
if (u !== false)
|
|
114
|
+
(u === true ? runtime_2.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return message;
|
|
118
|
+
}
|
|
119
|
+
internalBinaryWrite(message, writer, options) {
|
|
120
|
+
/* int64 seconds = 1; */
|
|
121
|
+
if (message.seconds !== "0")
|
|
122
|
+
writer.tag(1, runtime_1.WireType.Varint).int64(message.seconds);
|
|
123
|
+
/* int32 nanos = 2; */
|
|
124
|
+
if (message.nanos !== 0)
|
|
125
|
+
writer.tag(2, runtime_1.WireType.Varint).int32(message.nanos);
|
|
126
|
+
let u = options.writeUnknownFields;
|
|
127
|
+
if (u !== false)
|
|
128
|
+
(u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
129
|
+
return writer;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @generated MessageType for protobuf message google.protobuf.Timestamp
|
|
134
|
+
*/
|
|
135
|
+
exports.Timestamp = new Timestamp$Type();
|
|
136
|
+
//# sourceMappingURL=timestamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp.js","sourceRoot":"","sources":["../../../../src/generated/google/protobuf/timestamp.ts"],"names":[],"mappings":"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"}
|