@docker/actions-toolkit 0.59.0 → 0.61.0
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/lib/buildx/builder.js +60 -0
- package/lib/buildx/builder.js.map +1 -1
- package/lib/buildx/history.d.ts +17 -4
- package/lib/buildx/history.js +105 -19
- package/lib/buildx/history.js.map +1 -1
- package/lib/docker/assets.d.ts +1 -1
- package/lib/docker/assets.js +1 -1
- package/lib/docker/install.d.ts +9 -1
- package/lib/docker/install.js +93 -57
- package/lib/docker/install.js.map +1 -1
- package/lib/github.js +49 -47
- package/lib/github.js.map +1 -1
- package/lib/regclient/install.d.ts +25 -0
- package/lib/regclient/install.js +182 -0
- package/lib/regclient/install.js.map +1 -0
- package/lib/regclient/regctl.d.ts +39 -0
- package/lib/regclient/regctl.js +148 -0
- package/lib/regclient/regctl.js.map +1 -0
- package/lib/types/buildx/builder.d.ts +10 -0
- package/lib/types/buildx/history.d.ts +77 -6
- package/lib/types/github.d.ts +2 -2
- package/lib/types/regclient/regclient.d.ts +20 -0
- package/lib/types/regclient/regclient.js +18 -0
- package/lib/types/regclient/regclient.js.map +1 -0
- package/lib/util.d.ts +1 -0
- package/lib/util.js +16 -0
- package/lib/util.js.map +1 -1
- package/package.json +1 -1
- package/lib/hubRepository.d.ts +0 -31
- package/lib/hubRepository.js +0 -197
- package/lib/hubRepository.js.map +0 -1
package/lib/hubRepository.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2023 actions-toolkit authors
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Manifest } from './types/oci/manifest';
|
|
17
|
-
export declare class HubRepository {
|
|
18
|
-
private repo;
|
|
19
|
-
private token;
|
|
20
|
-
private static readonly http;
|
|
21
|
-
private constructor();
|
|
22
|
-
static build(repository: string): Promise<HubRepository>;
|
|
23
|
-
getPlatformManifest(tagOrDigest: string, os?: string): Promise<Manifest>;
|
|
24
|
-
extractImage(tag: string, destDir?: string): Promise<string>;
|
|
25
|
-
private static getToken;
|
|
26
|
-
private blobUrl;
|
|
27
|
-
getManifest<T>(tagOrDigest: string): Promise<T>;
|
|
28
|
-
getJSONBlob<T>(tagOrDigest: string): Promise<T>;
|
|
29
|
-
private registryGet;
|
|
30
|
-
private static getPlatformManifestDigest;
|
|
31
|
-
}
|
package/lib/hubRepository.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright 2023 actions-toolkit authors
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
-
if (k2 === undefined) k2 = k;
|
|
19
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
-
}
|
|
23
|
-
Object.defineProperty(o, k2, desc);
|
|
24
|
-
}) : (function(o, m, k, k2) {
|
|
25
|
-
if (k2 === undefined) k2 = k;
|
|
26
|
-
o[k2] = m[k];
|
|
27
|
-
}));
|
|
28
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
-
}) : function(o, v) {
|
|
31
|
-
o["default"] = v;
|
|
32
|
-
});
|
|
33
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
41
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
42
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
43
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
44
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
45
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
46
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
-
};
|
|
52
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.HubRepository = void 0;
|
|
54
|
-
const httpm = __importStar(require("@actions/http-client"));
|
|
55
|
-
const os_1 = __importDefault(require("os"));
|
|
56
|
-
const core = __importStar(require("@actions/core"));
|
|
57
|
-
const tc = __importStar(require("@actions/tool-cache"));
|
|
58
|
-
const fs_1 = __importDefault(require("fs"));
|
|
59
|
-
const mediatype_1 = require("./types/oci/mediatype");
|
|
60
|
-
const mediatype_2 = require("./types/docker/mediatype");
|
|
61
|
-
const dockerhub_1 = require("./dockerhub");
|
|
62
|
-
class HubRepository {
|
|
63
|
-
constructor(repository, token) {
|
|
64
|
-
this.repo = repository;
|
|
65
|
-
this.token = token;
|
|
66
|
-
}
|
|
67
|
-
static build(repository) {
|
|
68
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
const token = yield this.getToken(repository);
|
|
70
|
-
return new HubRepository(repository, token);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
getPlatformManifest(tagOrDigest, os) {
|
|
74
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
-
const index = yield this.getManifest(tagOrDigest);
|
|
76
|
-
if (index.mediaType != mediatype_1.MEDIATYPE_IMAGE_INDEX_V1 && index.mediaType != mediatype_2.MEDIATYPE_IMAGE_MANIFEST_LIST_V2) {
|
|
77
|
-
core.error(`Unsupported image media type: ${index.mediaType}`);
|
|
78
|
-
throw new Error(`Unsupported image media type: ${index.mediaType}`);
|
|
79
|
-
}
|
|
80
|
-
const digest = HubRepository.getPlatformManifestDigest(index, os);
|
|
81
|
-
return yield this.getManifest(digest);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
// Unpacks the image layers and returns the path to the extracted image.
|
|
85
|
-
// Only OCI indexes/manifest list are supported for now.
|
|
86
|
-
extractImage(tag, destDir) {
|
|
87
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
-
const manifest = yield this.getPlatformManifest(tag);
|
|
89
|
-
const paths = manifest.layers.map((layer) => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
const url = this.blobUrl(layer.digest);
|
|
91
|
-
return yield tc.downloadTool(url, undefined, undefined, {
|
|
92
|
-
authorization: `Bearer ${this.token}`
|
|
93
|
-
});
|
|
94
|
-
}));
|
|
95
|
-
let files = yield Promise.all(paths);
|
|
96
|
-
let extractFolder;
|
|
97
|
-
if (!destDir) {
|
|
98
|
-
extractFolder = yield tc.extractTar(files[0]);
|
|
99
|
-
files = files.slice(1);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
extractFolder = destDir;
|
|
103
|
-
}
|
|
104
|
-
yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
|
|
105
|
-
return yield tc.extractTar(file, extractFolder);
|
|
106
|
-
})));
|
|
107
|
-
fs_1.default.readdirSync(extractFolder).forEach(file => {
|
|
108
|
-
core.info(`extractImage(${this.repo}:${tag}) file: ${file}`);
|
|
109
|
-
});
|
|
110
|
-
return extractFolder;
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
static getToken(repo) {
|
|
114
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
-
const url = `https://auth.docker.io/token?service=registry.docker.io&scope=repository:${repo}:pull`;
|
|
116
|
-
const resp = yield this.http.get(url);
|
|
117
|
-
const body = yield resp.readBody();
|
|
118
|
-
const statusCode = resp.message.statusCode || 500;
|
|
119
|
-
if (statusCode != 200) {
|
|
120
|
-
throw dockerhub_1.DockerHub.parseError(resp, body);
|
|
121
|
-
}
|
|
122
|
-
const json = JSON.parse(body);
|
|
123
|
-
return json.token;
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
blobUrl(digest) {
|
|
127
|
-
return `https://registry-1.docker.io/v2/${this.repo}/blobs/${digest}`;
|
|
128
|
-
}
|
|
129
|
-
getManifest(tagOrDigest) {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
return yield this.registryGet(tagOrDigest, 'manifests', [mediatype_1.MEDIATYPE_IMAGE_INDEX_V1, mediatype_2.MEDIATYPE_IMAGE_MANIFEST_LIST_V2, mediatype_1.MEDIATYPE_IMAGE_MANIFEST_V1, mediatype_2.MEDIATYPE_IMAGE_MANIFEST_V2]);
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
getJSONBlob(tagOrDigest) {
|
|
135
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
return yield this.registryGet(tagOrDigest, 'blobs', [mediatype_1.MEDIATYPE_IMAGE_CONFIG_V1, mediatype_2.MEDIATYPE_IMAGE_CONFIG_V1]);
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
registryGet(tagOrDigest, endpoint, accept) {
|
|
140
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
const url = `https://registry-1.docker.io/v2/${this.repo}/${endpoint}/${tagOrDigest}`;
|
|
142
|
-
const headers = {
|
|
143
|
-
Authorization: `Bearer ${this.token}`,
|
|
144
|
-
Accept: accept.join(', ')
|
|
145
|
-
};
|
|
146
|
-
const resp = yield HubRepository.http.get(url, headers);
|
|
147
|
-
const body = yield resp.readBody();
|
|
148
|
-
const statusCode = resp.message.statusCode || 500;
|
|
149
|
-
if (statusCode != 200) {
|
|
150
|
-
core.error(`registryGet(${this.repo}:${tagOrDigest}) failed: ${statusCode} ${body}`);
|
|
151
|
-
throw dockerhub_1.DockerHub.parseError(resp, body);
|
|
152
|
-
}
|
|
153
|
-
return JSON.parse(body);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
static getPlatformManifestDigest(index, osOverride) {
|
|
157
|
-
// This doesn't handle all possible platforms normalizations, but it's good enough for now.
|
|
158
|
-
let pos = osOverride || os_1.default.platform();
|
|
159
|
-
if (pos == 'win32') {
|
|
160
|
-
pos = 'windows';
|
|
161
|
-
}
|
|
162
|
-
let arch = os_1.default.arch();
|
|
163
|
-
if (arch == 'x64') {
|
|
164
|
-
arch = 'amd64';
|
|
165
|
-
}
|
|
166
|
-
let variant = '';
|
|
167
|
-
if (arch == 'arm') {
|
|
168
|
-
variant = 'v7';
|
|
169
|
-
}
|
|
170
|
-
const manifest = index.manifests.find(m => {
|
|
171
|
-
if (!m.platform) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
if (m.platform.os != pos) {
|
|
175
|
-
core.debug(`Skipping manifest ${m.digest} because of os: ${m.platform.os} != ${pos}`);
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
if (m.platform.architecture != arch) {
|
|
179
|
-
core.debug(`Skipping manifest ${m.digest} because of arch: ${m.platform.architecture} != ${arch}`);
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
if ((m.platform.variant || '') != variant) {
|
|
183
|
-
core.debug(`Skipping manifest ${m.digest} because of variant: ${m.platform.variant} != ${variant}`);
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
return true;
|
|
187
|
-
});
|
|
188
|
-
if (!manifest) {
|
|
189
|
-
core.error(`Cannot find manifest for ${pos}/${arch}/${variant}`);
|
|
190
|
-
throw new Error(`Cannot find manifest for ${pos}/${arch}/${variant}`);
|
|
191
|
-
}
|
|
192
|
-
return manifest.digest;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
exports.HubRepository = HubRepository;
|
|
196
|
-
HubRepository.http = new httpm.HttpClient('setup-docker-action');
|
|
197
|
-
//# sourceMappingURL=hubRepository.js.map
|
package/lib/hubRepository.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hubRepository.js","sourceRoot":"","sources":["../src/hubRepository.ts"],"names":[],"mappings":"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"}
|