semantic-release-dotnet
Version:
A semantic-release plugin for versioning .NET core projects.
114 lines • 4.67 kB
JavaScript
;
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.createFile = exports.updateFile = void 0;
const fs = require("fs");
const convert = require("xml-js");
function updateFile(options, logger, path, version) {
var _a, _b, _c;
return __awaiter(this, void 0, void 0, function* () {
// Load the file into memory.
logger.debug("updating file", path);
const xml = fs.readFileSync(path).toString();
const js = convert.xml2js(xml);
if (!js.elements) {
throw new Error("Cannot find top-level elements in " + path);
}
// Get the root-level object.
const root = js.elements.filter((x) => x.type === "element" && x.name === "Project")[0];
if (!root) {
throw new Error("Cannot find top-level <Project> element in " + path);
}
root.elements = (_a = root.elements) !== null && _a !== void 0 ? _a : [];
// Look through all the property groups and see if we already have a
// version.
const groups = (_b = root.elements.filter((x) => x.type === "element" && x.name == "PropertyGroup")) !== null && _b !== void 0 ? _b : [];
let foundVersion = false;
let firstGroup = undefined;
for (const group of groups) {
if (!group.elements) {
continue;
}
firstGroup = firstGroup !== null && firstGroup !== void 0 ? firstGroup : group;
const element = group.elements.filter((x) => x.type === "element" && x.name === "Version")[0];
if (!element) {
continue;
}
element.elements = [{ type: "text", text: version }];
foundVersion = true;
break;
}
// If we didn't find the file
if (!foundVersion) {
if (!firstGroup) {
firstGroup = {
type: "element",
name: "PropertyGroup",
};
root.elements.push(firstGroup);
}
firstGroup.elements = (_c = firstGroup.elements) !== null && _c !== void 0 ? _c : [];
firstGroup.elements.push({
type: "element",
name: "Version",
elements: [
{
type: "text",
text: version,
},
],
});
}
// Write it all out.
writeJs(options, path, js);
});
}
exports.updateFile = updateFile;
function createFile(options, logger, path, version) {
return __awaiter(this, void 0, void 0, function* () {
logger.debug("creating file", path);
const js = {
elements: [
{
type: "element",
name: "Project",
elements: [
{
type: "element",
name: "PropertyGroup",
elements: [
{
type: "element",
name: "Version",
elements: [
{
type: "text",
text: version,
},
],
},
],
},
],
},
],
};
writeJs(options, path, js);
});
}
exports.createFile = createFile;
function writeJs(options, path, js) {
return __awaiter(this, void 0, void 0, function* () {
const xml = convert.js2xml(js, { spaces: options.indent }) + "\n";
fs.writeFileSync(path, Buffer.from(xml, "utf-8"));
});
}
//# sourceMappingURL=files.js.map