Permalink
Cannot retrieve contributors at this time
178 lines (177 sloc)
10.1 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@actions/artifact/lib/internal/artifact-client.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | |
if (k2 === undefined) k2 = k; | |
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | |
}) : (function(o, m, k, k2) { | |
if (k2 === undefined) k2 = k; | |
o[k2] = m[k]; | |
})); | |
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | |
Object.defineProperty(o, "default", { enumerable: true, value: v }); | |
}) : function(o, v) { | |
o["default"] = v; | |
}); | |
var __importStar = (this && this.__importStar) || function (mod) { | |
if (mod && mod.__esModule) return mod; | |
var result = {}; | |
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | |
__setModuleDefault(result, mod); | |
return result; | |
}; | |
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | |
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | |
return new (P || (P = Promise))(function (resolve, reject) { | |
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | |
step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
}); | |
}; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
exports.DefaultArtifactClient = void 0; | |
const core = __importStar(require("@actions/core")); | |
const upload_specification_1 = require("./upload-specification"); | |
const upload_http_client_1 = require("./upload-http-client"); | |
const utils_1 = require("./utils"); | |
const path_and_artifact_name_validation_1 = require("./path-and-artifact-name-validation"); | |
const download_http_client_1 = require("./download-http-client"); | |
const download_specification_1 = require("./download-specification"); | |
const config_variables_1 = require("./config-variables"); | |
const path_1 = require("path"); | |
class DefaultArtifactClient { | |
/** | |
* Constructs a DefaultArtifactClient | |
*/ | |
static create() { | |
return new DefaultArtifactClient(); | |
} | |
/** | |
* Uploads an artifact | |
*/ | |
uploadArtifact(name, files, rootDirectory, options) { | |
return __awaiter(this, void 0, void 0, function* () { | |
core.info(`Starting artifact upload | |
For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging`); | |
path_and_artifact_name_validation_1.checkArtifactName(name); | |
// Get specification for the files being uploaded | |
const uploadSpecification = upload_specification_1.getUploadSpecification(name, rootDirectory, files); | |
const uploadResponse = { | |
artifactName: name, | |
artifactItems: [], | |
size: 0, | |
failedItems: [] | |
}; | |
const uploadHttpClient = new upload_http_client_1.UploadHttpClient(); | |
if (uploadSpecification.length === 0) { | |
core.warning(`No files found that can be uploaded`); | |
} | |
else { | |
// Create an entry for the artifact in the file container | |
const response = yield uploadHttpClient.createArtifactInFileContainer(name, options); | |
if (!response.fileContainerResourceUrl) { | |
core.debug(response.toString()); | |
throw new Error('No URL provided by the Artifact Service to upload an artifact to'); | |
} | |
core.debug(`Upload Resource URL: ${response.fileContainerResourceUrl}`); | |
core.info(`Container for artifact "${name}" successfully created. Starting upload of file(s)`); | |
// Upload each of the files that were found concurrently | |
const uploadResult = yield uploadHttpClient.uploadArtifactToFileContainer(response.fileContainerResourceUrl, uploadSpecification, options); | |
// Update the size of the artifact to indicate we are done uploading | |
// The uncompressed size is used for display when downloading a zip of the artifact from the UI | |
core.info(`File upload process has finished. Finalizing the artifact upload`); | |
yield uploadHttpClient.patchArtifactSize(uploadResult.totalSize, name); | |
if (uploadResult.failedItems.length > 0) { | |
core.info(`Upload finished. There were ${uploadResult.failedItems.length} items that failed to upload`); | |
} | |
else { | |
core.info(`Artifact has been finalized. All files have been successfully uploaded!`); | |
} | |
core.info(` | |
The raw size of all the files that were specified for upload is ${uploadResult.totalSize} bytes | |
The size of all the files that were uploaded is ${uploadResult.uploadSize} bytes. This takes into account any gzip compression used to reduce the upload size, time and storage | |
Note: The size of downloaded zips can differ significantly from the reported size. For more information see: https://github.com/actions/upload-artifact#zipped-artifact-downloads \r\n`); | |
uploadResponse.artifactItems = uploadSpecification.map(item => item.absoluteFilePath); | |
uploadResponse.size = uploadResult.uploadSize; | |
uploadResponse.failedItems = uploadResult.failedItems; | |
} | |
return uploadResponse; | |
}); | |
} | |
downloadArtifact(name, path, options) { | |
return __awaiter(this, void 0, void 0, function* () { | |
const downloadHttpClient = new download_http_client_1.DownloadHttpClient(); | |
const artifacts = yield downloadHttpClient.listArtifacts(); | |
if (artifacts.count === 0) { | |
throw new Error(`Unable to find any artifacts for the associated workflow`); | |
} | |
const artifactToDownload = artifacts.value.find(artifact => { | |
return artifact.name === name; | |
}); | |
if (!artifactToDownload) { | |
throw new Error(`Unable to find an artifact with the name: ${name}`); | |
} | |
const items = yield downloadHttpClient.getContainerItems(artifactToDownload.name, artifactToDownload.fileContainerResourceUrl); | |
if (!path) { | |
path = config_variables_1.getWorkSpaceDirectory(); | |
} | |
path = path_1.normalize(path); | |
path = path_1.resolve(path); | |
// During upload, empty directories are rejected by the remote server so there should be no artifacts that consist of only empty directories | |
const downloadSpecification = download_specification_1.getDownloadSpecification(name, items.value, path, (options === null || options === void 0 ? void 0 : options.createArtifactFolder) || false); | |
if (downloadSpecification.filesToDownload.length === 0) { | |
core.info(`No downloadable files were found for the artifact: ${artifactToDownload.name}`); | |
} | |
else { | |
// Create all necessary directories recursively before starting any download | |
yield utils_1.createDirectoriesForArtifact(downloadSpecification.directoryStructure); | |
core.info('Directory structure has been setup for the artifact'); | |
yield utils_1.createEmptyFilesForArtifact(downloadSpecification.emptyFilesToCreate); | |
yield downloadHttpClient.downloadSingleArtifact(downloadSpecification.filesToDownload); | |
} | |
return { | |
artifactName: name, | |
downloadPath: downloadSpecification.rootDownloadLocation | |
}; | |
}); | |
} | |
downloadAllArtifacts(path) { | |
return __awaiter(this, void 0, void 0, function* () { | |
const downloadHttpClient = new download_http_client_1.DownloadHttpClient(); | |
const response = []; | |
const artifacts = yield downloadHttpClient.listArtifacts(); | |
if (artifacts.count === 0) { | |
core.info('Unable to find any artifacts for the associated workflow'); | |
return response; | |
} | |
if (!path) { | |
path = config_variables_1.getWorkSpaceDirectory(); | |
} | |
path = path_1.normalize(path); | |
path = path_1.resolve(path); | |
let downloadedArtifacts = 0; | |
while (downloadedArtifacts < artifacts.count) { | |
const currentArtifactToDownload = artifacts.value[downloadedArtifacts]; | |
downloadedArtifacts += 1; | |
core.info(`starting download of artifact ${currentArtifactToDownload.name} : ${downloadedArtifacts}/${artifacts.count}`); | |
// Get container entries for the specific artifact | |
const items = yield downloadHttpClient.getContainerItems(currentArtifactToDownload.name, currentArtifactToDownload.fileContainerResourceUrl); | |
const downloadSpecification = download_specification_1.getDownloadSpecification(currentArtifactToDownload.name, items.value, path, true); | |
if (downloadSpecification.filesToDownload.length === 0) { | |
core.info(`No downloadable files were found for any artifact ${currentArtifactToDownload.name}`); | |
} | |
else { | |
yield utils_1.createDirectoriesForArtifact(downloadSpecification.directoryStructure); | |
yield utils_1.createEmptyFilesForArtifact(downloadSpecification.emptyFilesToCreate); | |
yield downloadHttpClient.downloadSingleArtifact(downloadSpecification.filesToDownload); | |
} | |
response.push({ | |
artifactName: currentArtifactToDownload.name, | |
downloadPath: downloadSpecification.rootDownloadLocation | |
}); | |
} | |
return response; | |
}); | |
} | |
} | |
exports.DefaultArtifactClient = DefaultArtifactClient; | |
//# sourceMappingURL=artifact-client.js.map |