Skip to content

Commit 8ad5a75

Browse files
committed
Using constants
1 parent 7716a88 commit 8ad5a75

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/spec-node/containerFeatures.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ import { supportsBuildContexts } from './dockerfileUtils';
1818
import { ContainerError } from '../spec-common/errors';
1919
import { requestResolveHeaders } from '../spec-utils/httpRequest';
2020

21+
// Constants for DockerHub registry access check
22+
const DOCKERHUB_AUTH_URL = 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:docker/dockerfile:pull&tag=1.4';
23+
const DOCKERHUB_REGISTRY_URL = 'https://registry-1.docker.io/v2/docker/dockerfile/manifests/1.4';
24+
const DEVCONTAINER_USER_AGENT = 'devcontainer';
25+
const DOCKER_MANIFEST_ACCEPT_HEADER = 'application/vnd.docker.distribution.manifest.v2+json';
26+
const DOCKERFILE_FRONTEND_CHECK_MAX_RETRIES = 5;
27+
const DOCKERFILE_FRONTEND_CHECK_RETRY_INTERVAL_MS = 2000;
28+
2129
// Escapes environment variable keys.
2230
//
2331
// Environment variables must contain:
@@ -223,13 +231,13 @@ function getOmitDevcontainerPropertyOverride(resolverParams: { omitConfigRemotEn
223231
return [];
224232
}
225233

226-
async function checkDockerfileFrontendAccessibleOrThrow(params: DockerResolverParameters): Promise<void> {
234+
async function checkDockerfileFrontendAccessible(params: DockerResolverParameters): Promise<void> {
227235
const { output } = params.common;
228236

229237
const tokenRes = await requestResolveHeaders({
230238
type: 'GET',
231-
url: 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:docker/dockerfile:pull&tag=1.4',
232-
headers: { 'user-agent': 'devcontainer' }
239+
url: DOCKERHUB_AUTH_URL,
240+
headers: { 'user-agent': DEVCONTAINER_USER_AGENT }
233241
}, output);
234242
if (!tokenRes || tokenRes.statusCode !== 200) {
235243
throw new Error('Token fetch failed: status ' + (tokenRes?.statusCode ?? 'unknown'));
@@ -248,11 +256,11 @@ async function checkDockerfileFrontendAccessibleOrThrow(params: DockerResolverPa
248256

249257
const manifestRes = await requestResolveHeaders({
250258
type: 'GET',
251-
url: 'https://registry-1.docker.io/v2/docker/dockerfile/manifests/1.4',
259+
url: DOCKERHUB_REGISTRY_URL,
252260
headers: {
253-
'user-agent': 'devcontainer',
261+
'user-agent': DEVCONTAINER_USER_AGENT,
254262
'authorization': `Bearer ${token}`,
255-
'accept': 'application/vnd.docker.distribution.manifest.v2+json'
263+
'accept': DOCKER_MANIFEST_ACCEPT_HEADER
256264
}
257265
}, output);
258266
if (!manifestRes || manifestRes.statusCode !== 200) {
@@ -264,10 +272,10 @@ async function ensureDockerfileFrontendAccessible(params: DockerResolverParamete
264272
const { output } = params.common;
265273
try {
266274
await retry(
267-
async () => { await checkDockerfileFrontendAccessibleOrThrow(params); },
268-
{ maxRetries: 5, retryIntervalMilliseconds: 2000, output }
275+
async () => { await checkDockerfileFrontendAccessible(params); },
276+
{ maxRetries: DOCKERFILE_FRONTEND_CHECK_MAX_RETRIES, retryIntervalMilliseconds: DOCKERFILE_FRONTEND_CHECK_RETRY_INTERVAL_MS, output }
269277
);
270-
output.write('Dockerfile frontend is accessible in DockerHub registry.', LogLevel.Info);
278+
output.write('Dockerfile frontend is accessible in DockerHub registry.', LogLevel.Info);
271279
return true;
272280
} catch (err) {
273281
output.write(

0 commit comments

Comments
 (0)