Allows adding info/details to mod changes section of the changelog. Because this uses numbers, the TOML parser has been changed. The old parser produced weird artifacts when processing numbers. Refactor: For most tags (except for ignore), allows for optional lists. [MOD INFO] [[infos]] projectID = 620262 info = "Replaced by Alfheim Lighting Engine" [[infos]] projectID = 230976 info = "Replaced by Universal Tweaks" [[infos]] projectID = 271492 info = "Replaced by Universal Tweaks" [[infos]] projectID = 271740 info = "Replaced by Universal Tweaks" [[infos]] projectID = 278385 info = "Replaced by Universal Tweaks" [[infos]] projectID = 278494 info = "Replaced by Vintage Fix" [[infos]] projectID = 280510 info = "Replaced by Universal Tweaks" [[infos]] projectID = 284904 info = "Replaced by Universal Tweaks" [[infos]] projectID = 288885 info = "Replaced by Universal Tweaks" [MOD INFO]
102 lines
2.6 KiB
TypeScript
102 lines
2.6 KiB
TypeScript
import { Commit, FixUpInfo, InputReleaseType, ParsedModInfo } from "../../types/changelogTypes";
|
|
import { getLastGitTag, getTags, isEnvVariableSet } from "../../util/util";
|
|
|
|
export default class ChangelogData {
|
|
since: string;
|
|
to: string;
|
|
releaseType: InputReleaseType;
|
|
isTest: boolean;
|
|
|
|
builder: string[];
|
|
commitList: Commit[];
|
|
|
|
commitFixes: Map<string, FixUpInfo>;
|
|
shaList: Set<string>;
|
|
|
|
// Map of a commit SHA to the commits which need to be added to its commit list.
|
|
combineList: Map<string, Commit[]>;
|
|
|
|
// Set of tags
|
|
tags: Set<string>;
|
|
|
|
// Map of project IDs to info text and/or details
|
|
modInfoList: Map<number, ParsedModInfo>;
|
|
|
|
/**
|
|
* A normal initialisation.
|
|
*/
|
|
async init(): Promise<void> {
|
|
this.since = getLastGitTag();
|
|
this.to = "HEAD";
|
|
|
|
// If this is a tagged build, fetch the tag before last.
|
|
if (isEnvVariableSet("GITHUB_TAG")) {
|
|
this.since = getLastGitTag(process.env.GITHUB_TAG);
|
|
this.to = process.env.GITHUB_TAG;
|
|
}
|
|
|
|
// Get Release Type
|
|
this.releaseType = "Release";
|
|
if (isEnvVariableSet("RELEASE_TYPE")) this.releaseType = process.env.RELEASE_TYPE as InputReleaseType;
|
|
|
|
// See if current run is test
|
|
if (isEnvVariableSet("TEST_CHANGELOG")) {
|
|
try {
|
|
this.isTest = JSON.parse(process.env.TEST_CHANGELOG);
|
|
} catch (err) {
|
|
throw new Error("Test Changelog Env Variable set to Invalid Value.");
|
|
}
|
|
}
|
|
|
|
// Initialise Final Builder
|
|
this.builder = [];
|
|
|
|
// List of all commits to put into changelog commit section
|
|
this.commitList = [];
|
|
|
|
this.commitFixes = new Map<string, FixUpInfo>();
|
|
this.shaList = new Set<string>();
|
|
this.combineList = new Map<string, Commit[]>();
|
|
|
|
this.tags = new Set<string>(await getTags(this.to));
|
|
|
|
this.modInfoList = new Map<number, ParsedModInfo>();
|
|
}
|
|
|
|
shouldIterate(): boolean {
|
|
return isEnvVariableSet("COMPARE_TAG");
|
|
}
|
|
|
|
/**
|
|
* Gets the compare tags, or iterations. Also sets up the iteration environment.
|
|
* @return tags The Compare Tags
|
|
*/
|
|
getIterations(): string[] {
|
|
const iterations = process.env.COMPARE_TAG;
|
|
return iterations.split(",").map((tag) => tag.trim());
|
|
}
|
|
|
|
/**
|
|
* Setups the state for a iteration. Init must be called first.
|
|
*/
|
|
setupIteration(compareTag: string): void {
|
|
this.since = compareTag;
|
|
}
|
|
|
|
/**
|
|
* Resets the state for a future iteration. Init must be called first.
|
|
*/
|
|
resetForIteration(): void {
|
|
// Reset all lists, except builder
|
|
this.commitList = [];
|
|
|
|
this.commitFixes = new Map<string, FixUpInfo>();
|
|
this.shaList = new Set<string>();
|
|
this.combineList = new Map<string, Commit[]>();
|
|
|
|
this.modInfoList = new Map<number, ParsedModInfo>();
|
|
|
|
// Tags list is fine because the `to` stays the same
|
|
}
|
|
}
|