From 0f0c7b41aa5d88386969251df1451eaa8a01db13 Mon Sep 17 00:00:00 2001 From: Egor Kushnarev Date: Fri, 15 Mar 2024 16:26:47 +0300 Subject: [PATCH] review notes fix --- src/artifact-provider.mts | 1 - src/deb/deb-builder.mts | 3 ++- src/fs.mts | 4 ---- src/http.mts | 18 +++++++++--------- src/jfrog/artifact-provider.mts | 11 ++--------- src/s3-metapointer.mts | 9 ++++++++- 6 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/artifact-provider.mts b/src/artifact-provider.mts index 8f17db7..efe3c90 100644 --- a/src/artifact-provider.mts +++ b/src/artifact-provider.mts @@ -14,5 +14,4 @@ export interface ArtifactProvider { artifactsByBuildNumber(buildNumber: string): Promise; artifactUrl(artifact: Artifact): Promise; getArtifactContent(artifact: Artifact, range?: ByteRange): Promise; - createMetapointerFile(artifact: Artifact, fileName: string): void; } diff --git a/src/deb/deb-builder.mts b/src/deb/deb-builder.mts index a104ef9..8b0c207 100644 --- a/src/deb/deb-builder.mts +++ b/src/deb/deb-builder.mts @@ -8,6 +8,7 @@ import * as tar from 'tar'; import type { Artifact, ArtifactProvider } from '../artifact-provider.mjs'; import { createDir, execToolToFile, removeDir } from '../fs.mjs'; import type { Config } from '../config.mjs'; +import { createMetapointerFile } from '../s3-metapointer.mjs'; import type { Deployer } from '../deployer.mjs'; import type { Packages } from '../repo.mjs'; @@ -195,7 +196,7 @@ export class DebBuilder implements Deployer { distribution, this.debName(deb.version, arch)); const relativeDebPath = path.relative(this.root, debPath); - this.artifactProvider.createMetapointerFile(deb.artifact, debPath); + createMetapointerFile(deb.artifact.md5, debPath); const debSize = controlTar.headers['content-range']?.split('/')[1]; const sha1 = controlTar.headers['x-checksum-sha1']; const sha256 = controlTar.headers['x-checksum-sha256']; diff --git a/src/fs.mts b/src/fs.mts index a2363b4..f3d619c 100644 --- a/src/fs.mts +++ b/src/fs.mts @@ -22,10 +22,6 @@ export function removeDir(dirName: string): void { } } -export function createMetapointerContent(fileMd5Hash: string): string { - return `#metapointer jfrogart\noid md5:${fileMd5Hash}`; -} - // eslint-disable-next-line max-params export async function execToolToFile(tool: string, args: string[], outputPath?: string, append?: boolean): Promise { if (!append && outputPath && existsSync(outputPath)) { diff --git a/src/http.mts b/src/http.mts index ba35c16..6047514 100644 --- a/src/http.mts +++ b/src/http.mts @@ -12,7 +12,7 @@ export interface RequestData { redirectHandler?: (url: string) => string | undefined; } -export function requestStream(url: string, method: string, requestData?: RequestData): Promise { +export function requestStream(url: URL, method: string, requestData?: RequestData): Promise { return new Promise((resolve, reject) => { try { const req = httpRequest(url, { method }); @@ -22,7 +22,7 @@ export function requestStream(url: string, method: string, requestData?: Request if (incomingMessage.statusCode !== 200) { const stCode = incomingMessage.statusCode ?? 'NO_CODE'; const stMessage = incomingMessage.statusMessage ?? 'NO_MESSAGE'; - const message = `[${method} ${url}]:${stCode}/${stMessage}`; + const message = `[${method} ${url.toString()}]:${stCode}/${stMessage}`; reject(new Error(message)); } @@ -31,7 +31,7 @@ export function requestStream(url: string, method: string, requestData?: Request .on('error', (err: Error) => { const errno = (err as {errno?: string}).errno ?? ''; if (errno === 'ETIMEDOUT') { - reject(new Error(`Request (${url}) timeout.`)); + reject(new Error(`Request (${url.toString()}) timeout.`)); } else { reject(err); } @@ -61,7 +61,7 @@ export function requestStream(url: string, method: string, requestData?: Request }); } -export async function request(url: string, method: string, requestData?: RequestData): Promise { +export async function request(url: URL, method: string, requestData?: RequestData): Promise { const responseStream = await requestStream(url, method, requestData); let buffer: Buffer | undefined = undefined; @@ -74,7 +74,7 @@ export async function request(url: string, method: string, requestData?: Request return buffer ? buffer : Buffer.from(''); } -export function requestRange(url: string, range: string): Promise { +export function requestRange(url: URL, range: string): Promise { return new Promise((resolve, reject) => { try { const req = httpRequest(url, { method: 'GET' }); @@ -88,7 +88,7 @@ export function requestRange(url: string, range: string): Promise { const errno = (err as {errno?: string}).errno ?? ''; if (errno === 'ETIMEDOUT') { - reject(new Error(`Request (${url}) timeout.`)); + reject(new Error(`Request (${url.toString()}) timeout.`)); } else { reject(err); } @@ -114,10 +114,10 @@ export function requestRange(url: string, range: string): Promise { +export function get(url: URL): Promise { return request(url, 'GET', undefined); } -export function post(url: string, requestData?: RequestData): Promise { +export function post(url: URL, requestData?: RequestData): Promise { return request(url, 'POST', requestData); } diff --git a/src/jfrog/artifact-provider.mts b/src/jfrog/artifact-provider.mts index 5ad1585..91b4ff9 100644 --- a/src/jfrog/artifact-provider.mts +++ b/src/jfrog/artifact-provider.mts @@ -1,12 +1,10 @@ import { type ArtifactoryClient, type ArtifactoryItemMeta, type ByteRange, createArtifactoryClient } from 's3-groundskeeper'; -import { createFile } from '../fs.mjs'; import { get } from '../http.mjs'; import type { Artifact, ArtifactProvider } from '../artifact-provider.mjs'; import type { ArtifactProviderConfig } from '../artifact-provider-config.mjs'; import type { IncomingMessage } from 'http'; -import metapointerContent from '../s3-metapointer.mjs'; interface BuildsList { buildsNumbers: { @@ -65,11 +63,6 @@ export default class JfrogArtifactProvider implements ArtifactProvider { }); } - // eslint-disable-next-line class-methods-use-this - public createMetapointerFile(artifact: Artifact, fileName: string): void { - createFile(fileName, metapointerContent(artifact.md5)); - } - private async getArtifactoryItemMeta(artifact: Artifact): Promise { const aqlItemField = 'actual_md5'; @@ -99,7 +92,7 @@ export default class JfrogArtifactProvider implements ArtifactProvider { const buildsEndpoint = this.artifactoryClient.resolveUrl(`api/build/${this.config.project}`); if (!this.buildsList) { - const allBuilds = await get(buildsEndpoint.toString()); + const allBuilds = await get(buildsEndpoint); this.buildsList = JSON.parse(allBuilds.toString()) as BuildsList; } @@ -122,7 +115,7 @@ export default class JfrogArtifactProvider implements ArtifactProvider { for (const value of buildTimes(buildNumber)) { const buildInfoEndpointUrl = new URL(buildNumber, buildsEndpoint); buildInfoEndpointUrl.searchParams.set('started', value.toISOString()); - infoPromises.push(get(buildInfoEndpointUrl.toString())); + infoPromises.push(get(buildInfoEndpointUrl)); } const infos = await Promise.all(infoPromises); diff --git a/src/s3-metapointer.mts b/src/s3-metapointer.mts index ce93b26..5241d47 100644 --- a/src/s3-metapointer.mts +++ b/src/s3-metapointer.mts @@ -1,3 +1,10 @@ -export default function metapointerContent(fileMd5Hash: string): string { +import { createFile } from './fs.mjs'; + +export function content(fileMd5Hash: string): string { return `#metapointer jfrogart\noid md5:${fileMd5Hash}`; } + +// eslint-disable-next-line class-methods-use-this +export function createMetapointerFile(md5: string, fileName: string): void { + createFile(fileName, content(md5)); +}