mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-11-25 09:51:01 -05:00
Moved File
to file.ts
, made version-utils.ts
This commit is contained in:
parent
ffa0520996
commit
07fccebe08
12 changed files with 83 additions and 84 deletions
|
@ -1,4 +1,4 @@
|
||||||
import { File } from "../../utils/file-utils";
|
import { File } from "../../utils/file";
|
||||||
import ModPublisher from "../mod-publisher";
|
import ModPublisher from "../mod-publisher";
|
||||||
import PublisherTarget from "../publisher-target";
|
import PublisherTarget from "../publisher-target";
|
||||||
import { convertToCurseForgeVersions, uploadFile } from "../../utils/curseforge-utils";
|
import { convertToCurseForgeVersions, uploadFile } from "../../utils/curseforge-utils";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Publisher from "../publisher";
|
import Publisher from "../publisher";
|
||||||
import PublisherTarget from "../publisher-target";
|
import PublisherTarget from "../publisher-target";
|
||||||
import * as github from "@actions/github";
|
import * as github from "@actions/github";
|
||||||
import { File } from "../../utils/file-utils";
|
import { File } from "../../utils/file";
|
||||||
|
|
||||||
interface GitHubPublisherOptions {
|
interface GitHubPublisherOptions {
|
||||||
tag?: string;
|
tag?: string;
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import { context } from "@actions/github";
|
import { context } from "@actions/github";
|
||||||
import { parseVersionNameFromFileVersion } from "../utils/minecraft-utils";
|
import { File } from "../utils/file";
|
||||||
import { File, getFiles, parseVersionFromFilename, parseVersionTypeFromFilename } from "../utils/file-utils";
|
import { getFiles } from "../utils/file-utils";
|
||||||
import Publisher from "./publisher";
|
import Publisher from "./publisher";
|
||||||
import PublisherTarget from "./publisher-target";
|
import PublisherTarget from "./publisher-target";
|
||||||
import MinecraftVersionResolver from "../utils/minecraft-version-resolver";
|
import MinecraftVersionResolver from "../utils/minecraft-version-resolver";
|
||||||
|
import { parseVersionFromName, parseVersionTypeFromName } from "../utils/version-utils";
|
||||||
|
|
||||||
interface ModPublisherOptions {
|
interface ModPublisherOptions {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { createVersion } from "../../utils/modrinth-utils";
|
import { createVersion } from "../../utils/modrinth-utils";
|
||||||
import { File } from "../../utils/file-utils";
|
import { File } from "../../utils/file";
|
||||||
import ModPublisher from "../mod-publisher";
|
import ModPublisher from "../mod-publisher";
|
||||||
import PublisherTarget from "../publisher-target";
|
import PublisherTarget from "../publisher-target";
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { File } from "utils/file-utils";
|
import { File } from "../utils/file";
|
||||||
import Logger from "../utils/logger";
|
import Logger from "../utils/logger";
|
||||||
import { getEmptyLogger } from "../utils/logger-utils";
|
import { getEmptyLogger } from "../utils/logger-utils";
|
||||||
import PublisherTarget from "./publisher-target";
|
import PublisherTarget from "./publisher-target";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import { FormData } from "formdata-node";
|
import { FormData } from "formdata-node";
|
||||||
import { fileFromPath } from "formdata-node/file-from-path";
|
import { fileFromPath } from "formdata-node/file-from-path";
|
||||||
import { File } from "../utils/file-utils";
|
import { File } from "./file";
|
||||||
import { findVersionByName } from "./minecraft-utils";
|
import { findVersionByName } from "./minecraft-utils";
|
||||||
|
|
||||||
const baseUrl = "https://minecraft.curseforge.com/api";
|
const baseUrl = "https://minecraft.curseforge.com/api";
|
||||||
|
|
|
@ -1,33 +1,5 @@
|
||||||
import fs from "fs";
|
|
||||||
import path from "path";
|
|
||||||
import glob from "fast-glob";
|
import glob from "fast-glob";
|
||||||
|
import { File } from "./file";
|
||||||
export class File {
|
|
||||||
public name: string;
|
|
||||||
public path: string;
|
|
||||||
|
|
||||||
public constructor(filePath: string) {
|
|
||||||
this.name = path.basename(filePath);
|
|
||||||
this.path = filePath;
|
|
||||||
Object.freeze(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getBuffer(): Promise<Buffer> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
fs.readFile(this.path, (error, data) => {
|
|
||||||
if (error) {
|
|
||||||
reject(error);
|
|
||||||
} else {
|
|
||||||
resolve(data);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public equals(file: unknown): boolean {
|
|
||||||
return file instanceof File && file.path === this.path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export type FileSelector = string | { primary?: string, secondary?: string };
|
export type FileSelector = string | { primary?: string, secondary?: string };
|
||||||
|
|
||||||
|
@ -62,20 +34,3 @@ export async function getFiles(files: FileSelector): Promise<File[]> {
|
||||||
}
|
}
|
||||||
return results.filter((x, i, self) => self.findIndex(y => x.equals(y)) === i);
|
return results.filter((x, i, self) => self.findIndex(y => x.equals(y)) === i);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseVersionFromFilename(filename: string): string {
|
|
||||||
filename = path.parse(filename).name;
|
|
||||||
const match = filename.match(/[a-z]{0,2}\d+\.\d+.*/i);
|
|
||||||
return match ? match[0] : filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function parseVersionTypeFromFilename(filename: string): "alpha" | "beta" | "release" {
|
|
||||||
filename = path.parse(filename).name;
|
|
||||||
if (filename.match(/[+-_]alpha/i)) {
|
|
||||||
return "alpha";
|
|
||||||
} else if (filename.match(/[+-_]beta/i)) {
|
|
||||||
return "beta";
|
|
||||||
} else {
|
|
||||||
return "release";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
29
src/utils/file.ts
Normal file
29
src/utils/file.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
export class File {
|
||||||
|
public name: string;
|
||||||
|
public path: string;
|
||||||
|
|
||||||
|
public constructor(filePath: string) {
|
||||||
|
this.name = path.basename(filePath);
|
||||||
|
this.path = filePath;
|
||||||
|
Object.freeze(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getBuffer(): Promise<Buffer> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
fs.readFile(this.path, (error, data) => {
|
||||||
|
if (error) {
|
||||||
|
reject(error);
|
||||||
|
} else {
|
||||||
|
resolve(data);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public equals(file: unknown): boolean {
|
||||||
|
return file instanceof File && file.path === this.path;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import { FormData } from "formdata-node";
|
import { FormData } from "formdata-node";
|
||||||
import { fileFromPath } from "formdata-node/file-from-path";
|
import { fileFromPath } from "formdata-node/file-from-path";
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import { File } from "./file-utils";
|
import { File } from "./file";
|
||||||
|
|
||||||
export async function createVersion(id: string, data: Record<string, any>, files: File[], token: string): Promise<string> {
|
export async function createVersion(id: string, data: Record<string, any>, files: File[], token: string): Promise<string> {
|
||||||
data = {
|
data = {
|
||||||
|
|
14
src/utils/version-utils.ts
Normal file
14
src/utils/version-utils.ts
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
export function parseVersionFromName(name: string): string {
|
||||||
|
const match = name.match(/[a-z]{0,2}\d+\.\d+.*/i);
|
||||||
|
return match ? match[0] : name;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function parseVersionTypeFromName(name: string): "alpha" | "beta" | "release" {
|
||||||
|
if (name.match(/[+-_]alpha/i)) {
|
||||||
|
return "alpha";
|
||||||
|
} else if (name.match(/[+-_]beta/i)) {
|
||||||
|
return "beta";
|
||||||
|
} else {
|
||||||
|
return "release";
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import { describe, test, expect } from "@jest/globals";
|
import { describe, test, expect } from "@jest/globals";
|
||||||
import { getFiles, getRequiredFiles, parseVersionFromFilename, parseVersionTypeFromFilename } from "../src/utils/file-utils";
|
import { getFiles, getRequiredFiles } from "../src/utils/file-utils";
|
||||||
|
|
||||||
describe("getFiles", () => {
|
describe("getFiles", () => {
|
||||||
test("all files matching the given pattern are returned", async () => {
|
test("all files matching the given pattern are returned", async () => {
|
||||||
|
@ -26,32 +26,3 @@ describe("getRequiredFiles", () => {
|
||||||
await expect(getRequiredFiles("FOO.md")).rejects.toBeInstanceOf(Error);
|
await expect(getRequiredFiles("FOO.md")).rejects.toBeInstanceOf(Error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("parseVersionFromFilename", () => {
|
|
||||||
test("file version is correctly extracted from the filename", () => {
|
|
||||||
expect(parseVersionFromFilename("sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("mc1.17.1-0.3.2+build.7");
|
|
||||||
expect(parseVersionFromFilename("build/libs/sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("mc1.17.1-0.3.2+build.7");
|
|
||||||
expect(parseVersionFromFilename("fabric-api-0.40.1+1.18_experimental.jar")).toStrictEqual("0.40.1+1.18_experimental");
|
|
||||||
expect(parseVersionFromFilename("TechReborn-5.0.8-beta+build.111.jar")).toStrictEqual("5.0.8-beta+build.111");
|
|
||||||
expect(parseVersionFromFilename("TechReborn-1.17-5.0.1-beta+build.29.jar")).toStrictEqual("1.17-5.0.1-beta+build.29");
|
|
||||||
expect(parseVersionFromFilename("Terra-forge-5.3.3-BETA+ec3b0e5d.jar")).toStrictEqual("5.3.3-BETA+ec3b0e5d");
|
|
||||||
expect(parseVersionFromFilename("modmenu-2.0.12.jar")).toStrictEqual("2.0.12");
|
|
||||||
expect(parseVersionFromFilename("enhancedblockentities-0.5+1.17.jar")).toStrictEqual("0.5+1.17");
|
|
||||||
expect(parseVersionFromFilename("sync-mc1.17.x-1.2.jar")).toStrictEqual("mc1.17.x-1.2");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("parseVersionTypeFromFilename", () => {
|
|
||||||
test("version type is correctly extracted from the filename", () => {
|
|
||||||
expect(parseVersionTypeFromFilename("sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("release");
|
|
||||||
expect(parseVersionTypeFromFilename("build/libs/sodium-fabric-mc1.17.1-0.3.2+build.7.jar")).toStrictEqual("release");
|
|
||||||
expect(parseVersionTypeFromFilename("fabric-api-0.40.1+1.18_experimental.jar")).toStrictEqual("release");
|
|
||||||
expect(parseVersionTypeFromFilename("TechReborn-5.0.8-beta+build.111.jar")).toStrictEqual("beta");
|
|
||||||
expect(parseVersionTypeFromFilename("TechReborn-1.17-5.0.1-beta+build.29.jar")).toStrictEqual("beta");
|
|
||||||
expect(parseVersionTypeFromFilename("Terra-forge-5.3.3-BETA+ec3b0e5d.jar")).toStrictEqual("beta");
|
|
||||||
expect(parseVersionTypeFromFilename("Terra-forge-5.3.3-alpha+ec3b0e5d.jar")).toStrictEqual("alpha");
|
|
||||||
expect(parseVersionTypeFromFilename("modmenu-2.0.12.jar")).toStrictEqual("release");
|
|
||||||
expect(parseVersionTypeFromFilename("enhancedblockentities-0.5+1.17.jar")).toStrictEqual("release");
|
|
||||||
expect(parseVersionTypeFromFilename("sync-mc1.17.x-1.2.jar")).toStrictEqual("release");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
29
test/version-utils.test.ts
Normal file
29
test/version-utils.test.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { describe, test, expect } from "@jest/globals";
|
||||||
|
import { parseVersionFromName, parseVersionTypeFromName } from "../src/utils/version-utils";
|
||||||
|
|
||||||
|
describe("parseVersionFromName", () => {
|
||||||
|
test("file version is correctly extracted from the filename", () => {
|
||||||
|
expect(parseVersionFromName("sodium-fabric-mc1.17.1-0.3.2+build.7")).toStrictEqual("mc1.17.1-0.3.2+build.7");
|
||||||
|
expect(parseVersionFromName("fabric-api-0.40.1+1.18_experimental")).toStrictEqual("0.40.1+1.18_experimental");
|
||||||
|
expect(parseVersionFromName("TechReborn-5.0.8-beta+build.111")).toStrictEqual("5.0.8-beta+build.111");
|
||||||
|
expect(parseVersionFromName("TechReborn-1.17-5.0.1-beta+build.29")).toStrictEqual("1.17-5.0.1-beta+build.29");
|
||||||
|
expect(parseVersionFromName("Terra-forge-5.3.3-BETA+ec3b0e5d")).toStrictEqual("5.3.3-BETA+ec3b0e5d");
|
||||||
|
expect(parseVersionFromName("modmenu-2.0.12")).toStrictEqual("2.0.12");
|
||||||
|
expect(parseVersionFromName("enhancedblockentities-0.5+1.17")).toStrictEqual("0.5+1.17");
|
||||||
|
expect(parseVersionFromName("sync-mc1.17.x-1.2")).toStrictEqual("mc1.17.x-1.2");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("parseVersionTypeFromName", () => {
|
||||||
|
test("version type is correctly extracted from the filename", () => {
|
||||||
|
expect(parseVersionTypeFromName("sodium-fabric-mc1.17.1-0.3.2+build.7")).toStrictEqual("release");
|
||||||
|
expect(parseVersionTypeFromName("fabric-api-0.40.1+1.18_experimental")).toStrictEqual("release");
|
||||||
|
expect(parseVersionTypeFromName("TechReborn-5.0.8-beta+build.111")).toStrictEqual("beta");
|
||||||
|
expect(parseVersionTypeFromName("TechReborn-1.17-5.0.1-beta+build.29")).toStrictEqual("beta");
|
||||||
|
expect(parseVersionTypeFromName("Terra-forge-5.3.3-BETA+ec3b0e5d")).toStrictEqual("beta");
|
||||||
|
expect(parseVersionTypeFromName("Terra-forge-5.3.3-alpha+ec3b0e5d")).toStrictEqual("alpha");
|
||||||
|
expect(parseVersionTypeFromName("modmenu-2.0.12")).toStrictEqual("release");
|
||||||
|
expect(parseVersionTypeFromName("enhancedblockentities-0.5+1.17")).toStrictEqual("release");
|
||||||
|
expect(parseVersionTypeFromName("sync-mc1.17.x-1.2")).toStrictEqual("release");
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue