diff --git a/lib/FileFinder.js b/lib/FileFinder.js deleted file mode 100644 index b5d1a76..0000000 --- a/lib/FileFinder.js +++ /dev/null @@ -1,151 +0,0 @@ -"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.prototype.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.FileFinder = void 0; -const glob = __importStar(require("@actions/glob")); -const fs_1 = require("fs"); -const core_1 = require("@actions/core"); -const path = __importStar(require("path")); -const util_1 = require("util"); -const stats = util_1.promisify(fs_1.stat); -class FileFinder { - constructor(searchPath, globOptions) { - this.searchPath = searchPath; - this.globOptions = globOptions || FileFinder.DefaultGlobOptions; - } - findFiles() { - return __awaiter(this, void 0, void 0, function* () { - const searchResults = []; - const globber = yield glob.create(this.searchPath, this.globOptions); - const rawSearchResults = yield globber.glob(); - /* - Files are saved with case insensitivity. Uploading both a.txt and A.txt will files to be overwritten - Detect any files that could be overwritten for user awareness - */ - const set = new Set(); - /* - Directories will be rejected if attempted to be uploaded. This includes just empty - directories so filter any directories out from the raw search results - */ - for (const searchResult of rawSearchResults) { - const fileStats = yield stats(searchResult); - // isDirectory() returns false for symlinks if using fs.lstat(), make sure to use fs.stat() instead - if (!fileStats.isDirectory()) { - core_1.debug(`File:${searchResult} was found using the provided searchPath`); - searchResults.push(searchResult); - // detect any files that would be overwritten because of case insensitivity - if (set.has(searchResult.toLowerCase())) { - core_1.info(`Uploads are case insensitive: ${searchResult} was detected that it will be overwritten by another file with the same path`); - } - else { - set.add(searchResult.toLowerCase()); - } - } - else { - core_1.debug(`Removing ${searchResult} from rawSearchResults because it is a directory`); - } - } - // Calculate the root directory for the artifact using the search paths that were utilized - const searchPaths = globber.getSearchPaths(); - if (searchPaths.length > 1) { - core_1.info(`Multiple search paths detected. Calculating the least common ancestor of all paths`); - const lcaSearchPath = this.getMultiPathLCA(searchPaths); - core_1.info(`The least common ancestor is ${lcaSearchPath}. This will be the root directory of the artifact`); - return { - filesToUpload: searchResults, - rootDirectory: lcaSearchPath - }; - } - /* - Special case for a single file artifact that is uploaded without a directory or wildcard pattern. The directory structure is - not preserved and the root directory will be the single files parent directory - */ - if (searchResults.length === 1 && searchPaths[0] === searchResults[0]) { - return { - filesToUpload: searchResults, - rootDirectory: path.dirname(searchResults[0]) - }; - } - return { - filesToUpload: searchResults, - rootDirectory: searchPaths[0] - }; - }); - } - getMultiPathLCA(searchPaths) { - if (searchPaths.length < 2) { - throw new Error('At least two search paths must be provided'); - } - const commonPaths = new Array(); - const splitPaths = new Array(); - let smallestPathLength = Number.MAX_SAFE_INTEGER; - // split each of the search paths using the platform specific separator - for (const searchPath of searchPaths) { - core_1.debug(`Using search path ${searchPath}`); - const splitSearchPath = path.normalize(searchPath).split(path.sep); - // keep track of the smallest path length so that we don't accidentally later go out of bounds - smallestPathLength = Math.min(smallestPathLength, splitSearchPath.length); - splitPaths.push(splitSearchPath); - } - // on Unix-like file systems, the file separator exists at the beginning of the file path, make sure to preserve it - if (searchPaths[0].startsWith(path.sep)) { - commonPaths.push(path.sep); - } - let splitIndex = 0; - // function to check if the paths are the same at a specific index - function isPathTheSame() { - const compare = splitPaths[0][splitIndex]; - for (let i = 1; i < splitPaths.length; i++) { - if (compare !== splitPaths[i][splitIndex]) { - // a non-common index has been reached - return false; - } - } - return true; - } - // loop over all the search paths until there is a non-common ancestor or we go out of bounds - while (splitIndex < smallestPathLength) { - if (!isPathTheSame()) { - break; - } - // if all are the same, add to the end result & increment the index - commonPaths.push(splitPaths[0][splitIndex]); - splitIndex++; - } - return path.join(...commonPaths); - } -} -exports.FileFinder = FileFinder; -FileFinder.DefaultGlobOptions = { - followSymbolicLinks: true, - implicitDescendants: true, - omitBrokenSymbolicLinks: true -}; -//# sourceMappingURL=FileFinder.js.map \ No newline at end of file diff --git a/lib/FileFinder.js.map b/lib/FileFinder.js.map deleted file mode 100644 index 54c5c92..0000000 --- a/lib/FileFinder.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FileFinder.js","sourceRoot":"","sources":["../src/FileFinder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/Inputs.js b/lib/Inputs.js deleted file mode 100644 index 611c86d..0000000 --- a/lib/Inputs.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Inputs = void 0; -const core_1 = __importDefault(require("@actions/core")); -const NoFileOption_1 = require("./NoFileOption"); -class Inputs { - static get ArtifactName() { - return core_1.default.getInput("name"); - } - static get ArtifactPath() { - return core_1.default.getInput("path"); - } - static get Retention() { - return core_1.default.getInput("retention-days"); - } - static get Endpoint() { - return core_1.default.getInput("nextcloud-url"); - } - static get Username() { - return core_1.default.getInput("nextcloud-username"); - } - static get Password() { - return core_1.default.getInput("nextcloud-password"); - } - static get NoFileBehvaior() { - const notFoundAction = core_1.default.getInput("if-no-files-found"); - const noFileBehavior = NoFileOption_1.NoFileOption[notFoundAction]; - if (!noFileBehavior) { - core_1.default.setFailed(`Unrecognized ${"ifNoFilesFound"} input. Provided: ${notFoundAction}. Available options: ${Object.keys(NoFileOption_1.NoFileOption)}`); - } - return noFileBehavior; - } -} -exports.Inputs = Inputs; -//# sourceMappingURL=Inputs.js.map \ No newline at end of file diff --git a/lib/Inputs.js.map b/lib/Inputs.js.map deleted file mode 100644 index ebacdf3..0000000 --- a/lib/Inputs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Inputs.js","sourceRoot":"","sources":["../src/Inputs.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiC;AACjC,iDAA8C;AAE9C,MAAa,MAAM;IACf,MAAM,KAAK,YAAY;QACnB,OAAO,cAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,YAAY;QACnB,OAAO,cAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,SAAS;QAChB,OAAO,cAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,cAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,cAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,cAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,cAAc;QACrB,MAAM,cAAc,GAAG,cAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAiB,2BAAY,CAAC,cAA2C,CAAC,CAAC;QAE/F,IAAI,CAAC,cAAc,EAAE;YACjB,cAAI,CAAC,SAAS,CACV,gBAAgB,gBAAgB,qBAAqB,cAAc,wBAAwB,MAAM,CAAC,IAAI,CAClG,2BAAY,CACf,EAAE,CACN,CAAC;SACL;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AAvCD,wBAuCC"} \ No newline at end of file diff --git a/lib/NoFileOption.js b/lib/NoFileOption.js deleted file mode 100644 index 9a2e42f..0000000 --- a/lib/NoFileOption.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NoFileOption = void 0; -var NoFileOption; -(function (NoFileOption) { - /** - * Default. Output a warning but do not fail the action - */ - NoFileOption["warn"] = "warn"; - /** - * Fail the action with an error message - */ - NoFileOption["error"] = "error"; - /** - * Do not output any warnings or errors, the action does not fail - */ - NoFileOption["ignore"] = "ignore"; -})(NoFileOption = exports.NoFileOption || (exports.NoFileOption = {})); -//# sourceMappingURL=NoFileOption.js.map \ No newline at end of file diff --git a/lib/NoFileOption.js.map b/lib/NoFileOption.js.map deleted file mode 100644 index 9f27ce6..0000000 --- a/lib/NoFileOption.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"NoFileOption.js","sourceRoot":"","sources":["../src/NoFileOption.ts"],"names":[],"mappings":";;;AAAA,IAAY,YAeT;AAfH,WAAY,YAAY;IACpB;;OAEG;IACH,6BAAa,CAAA;IAEb;;OAEG;IACH,+BAAe,CAAA;IAEf;;OAEG;IACH,iCAAiB,CAAA;AACnB,CAAC,EAfS,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAerB"} \ No newline at end of file diff --git a/lib/nextcloud-artifacts.js b/lib/nextcloud-artifacts.js deleted file mode 100644 index 2feed29..0000000 --- a/lib/nextcloud-artifacts.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const Inputs_1 = require("./Inputs"); -const NextcloudArtifact_1 = require("./nextcloud/NextcloudArtifact"); -var artifact = new NextcloudArtifact_1.NextcloudArtifact(Inputs_1.Inputs.ArtifactName, Inputs_1.Inputs.ArtifactPath, Inputs_1.Inputs.NoFileBehvaior); -artifact.run(); -//# sourceMappingURL=nextcloud-artifacts.js.map \ No newline at end of file diff --git a/lib/nextcloud-artifacts.js.map b/lib/nextcloud-artifacts.js.map deleted file mode 100644 index e9cb89c..0000000 --- a/lib/nextcloud-artifacts.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"nextcloud-artifacts.js","sourceRoot":"","sources":["../src/nextcloud-artifacts.ts"],"names":[],"mappings":";;AAAA,qCAAkC;AAClC,qEAAkE;AAElE,IAAI,QAAQ,GAAG,IAAI,qCAAiB,CAAC,eAAM,CAAC,YAAY,EAAE,eAAM,CAAC,YAAY,EAAE,eAAM,CAAC,cAAc,CAAC,CAAC;AACtG,QAAQ,CAAC,GAAG,EAAE,CAAC"} \ No newline at end of file diff --git a/lib/nextcloud/NextcloudArtifact.js b/lib/nextcloud/NextcloudArtifact.js deleted file mode 100644 index e760ff2..0000000 --- a/lib/nextcloud/NextcloudArtifact.js +++ /dev/null @@ -1,73 +0,0 @@ -"use strict"; -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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NextcloudArtifact = void 0; -const core_1 = __importDefault(require("@actions/core")); -const FileFinder_1 = require("../FileFinder"); -const Inputs_1 = require("../Inputs"); -const NextcloudClient_1 = require("./NextcloudClient"); -const NoFileOption_1 = require("../NoFileOption"); -class NextcloudArtifact { - constructor(name, path, errorBehavior) { - this.name = name; - this.path = path; - this.errorBehavior = errorBehavior; - } - run() { - return __awaiter(this, void 0, void 0, function* () { - const fileFinder = new FileFinder_1.FileFinder(this.path); - const files = yield fileFinder.findFiles(); - if (files.filesToUpload.length > 0) { - yield this.uploadFiles(files); - } - else { - this.logNoFilesFound(); - } - }); - } - uploadFiles(files) { - return __awaiter(this, void 0, void 0, function* () { - this.logUpload(files.filesToUpload.length, files.rootDirectory); - const client = new NextcloudClient_1.NextcloudClient(Inputs_1.Inputs.Endpoint, this.name, files.rootDirectory); - yield client.uploadFiles(files.filesToUpload); - }); - } - logUpload(fileCount, rootDirectory) { - const s = fileCount === 1 ? '' : 's'; - core_1.default.info(`With the provided path, there will be ${fileCount} file${s} uploaded`); - core_1.default.debug(`Root artifact directory is ${rootDirectory}`); - if (fileCount > 10000) { - core_1.default.warning(`There are over 10,000 files in this artifact, consider create an archive before upload to improve the upload performance.`); - } - } - logNoFilesFound() { - const errorMessage = `No files were found with the provided path: ${this.path}. No artifacts will be uploaded.`; - switch (this.errorBehavior) { - case NoFileOption_1.NoFileOption.warn: { - core_1.default.warning(errorMessage); - break; - } - case NoFileOption_1.NoFileOption.error: { - core_1.default.setFailed(errorMessage); - break; - } - case NoFileOption_1.NoFileOption.ignore: { - core_1.default.info(errorMessage); - break; - } - } - } -} -exports.NextcloudArtifact = NextcloudArtifact; -//# sourceMappingURL=NextcloudArtifact.js.map \ No newline at end of file diff --git a/lib/nextcloud/NextcloudArtifact.js.map b/lib/nextcloud/NextcloudArtifact.js.map deleted file mode 100644 index 3cc247c..0000000 --- a/lib/nextcloud/NextcloudArtifact.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"NextcloudArtifact.js","sourceRoot":"","sources":["../../src/nextcloud/NextcloudArtifact.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yDAAiC;AACjC,8CAA2C;AAC3C,sCAAmC;AACnC,uDAAoD;AACpD,kDAA+C;AAE/C,MAAa,iBAAiB;IAC1B,YACY,IAAY,EACZ,IAAY,EACZ,aAA2B;QAF3B,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAc;IAAI,CAAC;IAE/B,GAAG;;YACZ,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YAE3C,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACjC;iBACI;gBACD,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;KAAA;IAEa,WAAW,CAAC,KAA0D;;YAChF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAEhE,MAAM,MAAM,GAAG,IAAI,iCAAe,CAAC,eAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAEpF,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;KAAA;IAEO,SAAS,CAAC,SAAiB,EAAE,aAAqB;QACtD,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,cAAI,CAAC,IAAI,CACL,yCAAyC,SAAS,QAAQ,CAAC,WAAW,CACzE,CAAC;QACF,cAAI,CAAC,KAAK,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;QAE1D,IAAI,SAAS,GAAG,KAAK,EAAE;YACnB,cAAI,CAAC,OAAO,CACR,2HAA2H,CAC9H,CAAC;SACL;IACL,CAAC;IAEO,eAAe;QACnB,MAAM,YAAY,GAAG,+CAA+C,IAAI,CAAC,IAAI,kCAAkC,CAAC;QAChH,QAAQ,IAAI,CAAC,aAAa,EAAE;YACxB,KAAK,2BAAY,CAAC,IAAI,CAAC,CAAC;gBACpB,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM;aACT;YACD,KAAK,2BAAY,CAAC,KAAK,CAAC,CAAC;gBACrB,cAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC7B,MAAM;aACT;YACD,KAAK,2BAAY,CAAC,MAAM,CAAC,CAAC;gBACtB,cAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACxB,MAAM;aACT;SACJ;IACL,CAAC;CACJ;AAzDD,8CAyDC"} \ No newline at end of file diff --git a/lib/nextcloud/NextcloudClient.js b/lib/nextcloud/NextcloudClient.js deleted file mode 100644 index d72bdb1..0000000 --- a/lib/nextcloud/NextcloudClient.js +++ /dev/null @@ -1,183 +0,0 @@ -"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.prototype.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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NextcloudClient = void 0; -const fsSync = __importStar(require("fs")); -const fs = __importStar(require("fs/promises")); -const path = __importStar(require("path")); -const core_1 = __importDefault(require("@actions/core")); -const os = __importStar(require("os")); -const crypto_1 = require("crypto"); -const archiver = __importStar(require("archiver")); -const node_fetch_1 = __importDefault(require("node-fetch")); -const Inputs_1 = require("../Inputs"); -const btoa_1 = __importDefault(require("btoa")); -class NextcloudClient { - constructor(endpoint, artifact, rootDirectory) { - this.endpoint = endpoint; - this.artifact = artifact; - this.rootDirectory = rootDirectory; - this.guid = crypto_1.randomUUID(); - this.headers = { 'Authorization': 'Basic ' + btoa_1.default(`${Inputs_1.Inputs.Username}:${Inputs_1.Inputs.Password}`) }; - } - uploadFiles(files) { - return __awaiter(this, void 0, void 0, function* () { - const spec = this.uploadSpec(files); - var zip = yield this.zipFiles(spec); - const path = yield this.upload(zip); - yield this.shareFile(path); - }); - } - uploadSpec(files) { - const specifications = []; - if (!fsSync.existsSync(this.rootDirectory)) { - throw new Error(`this.rootDirectory ${this.rootDirectory} does not exist`); - } - if (!fsSync.lstatSync(this.rootDirectory).isDirectory()) { - throw new Error(`this.rootDirectory ${this.rootDirectory} is not a valid directory`); - } - // Normalize and resolve, this allows for either absolute or relative paths to be used - let root = path.normalize(this.rootDirectory); - root = path.resolve(root); - /* - Example to demonstrate behavior - - Input: - artifactName: my-artifact - rootDirectory: '/home/user/files/plz-upload' - artifactFiles: [ - '/home/user/files/plz-upload/file1.txt', - '/home/user/files/plz-upload/file2.txt', - '/home/user/files/plz-upload/dir/file3.txt' - ] - - Output: - specifications: [ - ['/home/user/files/plz-upload/file1.txt', 'my-artifact/file1.txt'], - ['/home/user/files/plz-upload/file1.txt', 'my-artifact/file2.txt'], - ['/home/user/files/plz-upload/file1.txt', 'my-artifact/dir/file3.txt'] - ] - */ - for (let file of files) { - if (!fsSync.existsSync(file)) { - throw new Error(`File ${file} does not exist`); - } - if (!fsSync.lstatSync(file).isDirectory()) { - // Normalize and resolve, this allows for either absolute or relative paths to be used - file = path.normalize(file); - file = path.resolve(file); - if (!file.startsWith(root)) { - throw new Error(`The rootDirectory: ${root} is not a parent directory of the file: ${file}`); - } - // Check for forbidden characters in file paths that will be rejected during upload - const uploadPath = file.replace(root, ''); - /* - uploadFilePath denotes where the file will be uploaded in the file container on the server. During a run, if multiple artifacts are uploaded, they will all - be saved in the same container. The artifact name is used as the root directory in the container to separate and distinguish uploaded artifacts - - path.join handles all the following cases and would return 'artifact-name/file-to-upload.txt - join('artifact-name/', 'file-to-upload.txt') - join('artifact-name/', '/file-to-upload.txt') - join('artifact-name', 'file-to-upload.txt') - join('artifact-name', '/file-to-upload.txt') - */ - specifications.push({ - absolutePath: file, - uploadPath: path.join(this.artifact, uploadPath) - }); - } - else { - // Directories are rejected by the server during upload - core_1.default.debug(`Removing ${file} from rawSearchResults because it is a directory`); - } - } - return specifications; - } - zipFiles(specs) { - return __awaiter(this, void 0, void 0, function* () { - const tempArtifactDir = path.join(os.tmpdir(), this.guid); - const artifactPath = path.join(tempArtifactDir, `artifact-${this.artifact}`); - yield fs.mkdir(artifactPath, { recursive: true }); - for (let spec of specs) { - yield fs.copyFile(spec.absolutePath, path.join(artifactPath, spec.uploadPath)); - } - const archivePath = path.join(artifactPath, `${this.artifact}.zip`); - yield this.zip(path.join(artifactPath, this.artifact), archivePath); - return archivePath; - }); - } - zip(dirpath, destpath) { - return __awaiter(this, void 0, void 0, function* () { - const archive = archiver.create('zip', { zlib: { level: 9 } }); - const stream = fsSync.createWriteStream(destpath); - archive.directory(dirpath, false) - .on('error', e => Promise.reject()) - .on('close', () => Promise.resolve()) - .pipe(stream); - return archive.finalize(); - }); - } - upload(file) { - return __awaiter(this, void 0, void 0, function* () { - const filePath = `/artifacts/${this.guid}/${this.artifact}`; - const url = this.endpoint + `/remote.php/dav/files/${Inputs_1.Inputs.Username}` + filePath; - const stream = fsSync.createReadStream(file); - const res = yield node_fetch_1.default(url, { - method: 'PUT', - body: stream, - headers: this.headers - }); - core_1.default.debug(yield res.json()); - return filePath; - }); - } - shareFile(nextcloudPath) { - return __awaiter(this, void 0, void 0, function* () { - const url = this.endpoint + `/ocs/v2.php/apps/files_sharing/api/v1/shares`; - const body = { - path: nextcloudPath, - shareType: 3, - publicUpload: "false", - permissions: 1, - }; - const res = yield node_fetch_1.default(url, { - method: 'PUT', - headers: this.headers, - body: JSON.stringify(body), - }); - core_1.default.debug(yield res.json()); - }); - } -} -exports.NextcloudClient = NextcloudClient; -//# sourceMappingURL=NextcloudClient.js.map \ No newline at end of file diff --git a/lib/nextcloud/NextcloudClient.js.map b/lib/nextcloud/NextcloudClient.js.map deleted file mode 100644 index 7b058a5..0000000 --- a/lib/nextcloud/NextcloudClient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"NextcloudClient.js","sourceRoot":"","sources":["../../src/nextcloud/NextcloudClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file