semantic-release-minecraft 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.releaserc.json +5 -4
- package/CHANGELOG.md +17 -0
- package/dist/curseforge.d.ts.map +1 -1
- package/dist/curseforge.js +18 -16
- package/dist/curseforge.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/modrinth.d.ts.map +1 -1
- package/dist/modrinth.js +44 -26
- package/dist/modrinth.js.map +1 -1
- package/dist/prepare.d.ts +1 -1
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +31 -22
- package/dist/prepare.js.map +1 -1
- package/package.json +1 -1
- package/src/curseforge.ts +31 -33
- package/src/index.ts +5 -13
- package/src/modrinth.ts +59 -41
- package/src/prepare.ts +80 -69
package/.releaserc.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{ "type": "fix", "section": "🐛 Bug修复" },
|
|
15
15
|
{ "type": "docs", "section": "📚 文档更新" },
|
|
16
16
|
{ "type": "style", "section": "💄 样式优化" },
|
|
17
|
-
{ "type": "
|
|
17
|
+
{ "type": "ref", "section": "♻️ 代码重构" },
|
|
18
18
|
{ "type": "perf", "section": "⚡ 性能优化" },
|
|
19
19
|
{ "type": "test", "section": "✅ 测试" },
|
|
20
20
|
{ "type": "build", "section": "📦 构建" },
|
|
@@ -34,16 +34,17 @@
|
|
|
34
34
|
{
|
|
35
35
|
"assets": [
|
|
36
36
|
"CHANGELOG.md",
|
|
37
|
-
"package.json"
|
|
37
|
+
"package.json",
|
|
38
|
+
"package-lock.json"
|
|
38
39
|
],
|
|
39
40
|
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
40
41
|
}
|
|
41
42
|
]
|
|
42
43
|
],
|
|
43
|
-
"preset": "
|
|
44
|
+
"preset": "conventionalcommits",
|
|
44
45
|
"releaseRules": [
|
|
45
46
|
{
|
|
46
|
-
"type": "
|
|
47
|
+
"type": "ref",
|
|
47
48
|
"release": "patch"
|
|
48
49
|
},
|
|
49
50
|
{
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [2.0.10](https://github.com/pynickle/semantic-release-minecraft/compare/v2.0.9...v2.0.10) (2025-10-21)
|
|
2
|
+
|
|
3
|
+
### ♻️ 代码重构
|
|
4
|
+
|
|
5
|
+
* refactor code to make better understanding and performance ([f9f12da](https://github.com/pynickle/semantic-release-minecraft/commit/f9f12daac890b238848047e316b558fbc5d59389))
|
|
6
|
+
|
|
7
|
+
### 🔧 其他更改
|
|
8
|
+
|
|
9
|
+
* change preset to conventional commits and fix missing change of refactor ([06136f4](https://github.com/pynickle/semantic-release-minecraft/commit/06136f4c29e1ab6abe7101f130e734c05051a091))
|
|
10
|
+
* change refactor to ref ([c93ccb7](https://github.com/pynickle/semantic-release-minecraft/commit/c93ccb761452525e4a765137acdbbdd36b4fa18e))
|
|
11
|
+
|
|
12
|
+
## [2.0.9](https://github.com/pynickle/semantic-release-minecraft/compare/v2.0.8...v2.0.9) (2025-10-20)
|
|
13
|
+
|
|
14
|
+
### 🐛 Bug修复
|
|
15
|
+
|
|
16
|
+
* try to fix modrinth upload error ([8751372](https://github.com/pynickle/semantic-release-minecraft/commit/875137212046de59dd422d0d56b40541c8c4a0d5))
|
|
17
|
+
|
|
1
18
|
## [2.0.8](https://github.com/pynickle/semantic-release-minecraft/compare/v2.0.7...v2.0.8) (2025-10-20)
|
|
2
19
|
|
|
3
20
|
### 🐛 Bug修复
|
package/dist/curseforge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,wBAAwB,CAAC,EAAE,MAAM,EAAE,GACpC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,wBAAwB,CAAC,EAAE,MAAM,EAAE,GACpC,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
|
package/dist/curseforge.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import FormData from 'form-data';
|
|
3
|
-
import {
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
4
|
import { basename } from 'path';
|
|
5
5
|
import { findFilesAndPrimaryFile } from './utils/platform/utils.js';
|
|
6
6
|
import { resolveAndRenderTemplate, resolveAndRenderTemplates, } from './utils/template-utils.js';
|
|
@@ -13,33 +13,35 @@ export async function publishToCurseforge(pluginConfig, context, strategy, curse
|
|
|
13
13
|
const projectId = curseforge.project_id;
|
|
14
14
|
const { files, primaryFile } = await findFilesAndPrimaryFile(pluginConfig, context, strategy, 'curseforge');
|
|
15
15
|
logger.log(`Publishing ${files.length} file(s) to CurseForge project ${projectId}...`);
|
|
16
|
-
|
|
16
|
+
const metadata = prepareMetadata(pluginConfig, context, strategy, curseforgeGameVersionIds);
|
|
17
|
+
let primaryFileId = await uploadCurseForgeFile(pluginConfig, context, metadata, primaryFile);
|
|
17
18
|
for (const filePath of files) {
|
|
18
19
|
if (filePath === primaryFile) {
|
|
19
20
|
continue;
|
|
20
21
|
}
|
|
21
|
-
await uploadCurseForgeFile(pluginConfig, context,
|
|
22
|
+
await uploadCurseForgeFile(pluginConfig, context, metadata, filePath, primaryFileId);
|
|
22
23
|
}
|
|
23
24
|
return primaryFileId;
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Uploads a single file to CurseForge.
|
|
27
28
|
*/
|
|
28
|
-
async function uploadCurseForgeFile(pluginConfig, context,
|
|
29
|
+
async function uploadCurseForgeFile(pluginConfig, context, metadata, filePath, primaryFileId) {
|
|
29
30
|
const { env, logger } = context;
|
|
30
31
|
const { curseforge } = pluginConfig;
|
|
31
32
|
const apiKey = env.CURSEFORGE_TOKEN;
|
|
32
33
|
const projectId = curseforge.project_id;
|
|
34
|
+
// add file to form data
|
|
33
35
|
const form = new FormData();
|
|
34
|
-
const file =
|
|
36
|
+
const file = readFileSync(filePath);
|
|
35
37
|
form.append('file', file, {
|
|
36
38
|
filename: basename(filePath),
|
|
37
39
|
});
|
|
38
|
-
const metadata = prepareMetadata(pluginConfig, context, strategy, curseforgeGameVersionIds);
|
|
39
40
|
if (primaryFileId) {
|
|
40
41
|
metadata.parentFileID = primaryFileId;
|
|
41
42
|
}
|
|
42
43
|
form.append('metadata', JSON.stringify(metadata));
|
|
44
|
+
// post to CurseForge API
|
|
43
45
|
const response = await axios.post(`https://upload.curseforge.com/api/projects/${projectId}/upload-file`, form, {
|
|
44
46
|
headers: {
|
|
45
47
|
...form.getHeaders(),
|
|
@@ -69,16 +71,16 @@ function prepareMetadata(pluginConfig, context, strategy, curseforgeGameVersionI
|
|
|
69
71
|
isMarkedForManualRelease: curseforge?.is_marked_for_manual_release || false,
|
|
70
72
|
relations: curseforge?.relations || [],
|
|
71
73
|
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
metadata.displayName =
|
|
75
|
+
resolveAndRenderTemplate([curseforge?.display_name, pluginConfig.display_name], {
|
|
76
|
+
nextRelease,
|
|
77
|
+
...strategy,
|
|
78
|
+
}) || context.nextRelease.name;
|
|
79
|
+
metadata.modLoaders =
|
|
80
|
+
resolveAndRenderTemplates([pluginConfig.curseforge?.mod_loaders, pluginConfig.mod_loaders], {
|
|
81
|
+
nextRelease,
|
|
82
|
+
...strategy,
|
|
83
|
+
}) || [];
|
|
82
84
|
return metadata;
|
|
83
85
|
}
|
|
84
86
|
//# sourceMappingURL=curseforge.js.map
|
package/dist/curseforge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,cAAc,EACd,uBAAuB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,uBAAuB,iBAWnC;AAED,wBAAsB,OAAO,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,cAAc,EACd,uBAAuB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,uBAAuB,iBAWnC;AAED,wBAAsB,OAAO,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,iBAe1B;AAED,wBAAsB,OAAO,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAwC5B"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { publishToCurseforge } from './curseforge.js';
|
|
|
2
2
|
import { publishToModrinth } from './modrinth.js';
|
|
3
3
|
import { getCurseForgeGameVersionIds } from './prepare.js';
|
|
4
4
|
// Game version IDs transformed from user's input, used during publishing to CurseForge
|
|
5
|
-
let
|
|
5
|
+
let curseforgeGameVersionsIdsPerStrategy = [];
|
|
6
6
|
export async function verifyConditions(pluginConfig, context) {
|
|
7
7
|
const { env } = context;
|
|
8
8
|
if (env.CURSEFORGE_TOKEN && !pluginConfig.curseforge?.project_id) {
|
|
@@ -17,10 +17,9 @@ export async function prepare(pluginConfig, context) {
|
|
|
17
17
|
if (env.CURSEFORGE_TOKEN) {
|
|
18
18
|
const apiToken = env.CURSEFORGE_TOKEN;
|
|
19
19
|
logger.log('Fetching CurseForge game versions and types...');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
logger.log(`Successfully transform into ${Object.keys(curseforgeGameVersionsIds[0]).length} CurseForge game versions for every strategy`);
|
|
20
|
+
curseforgeGameVersionsIdsPerStrategy =
|
|
21
|
+
await getCurseForgeGameVersionIds(apiToken, pluginConfig, context);
|
|
22
|
+
logger.log(`Successfully transform into ${Object.keys(curseforgeGameVersionsIdsPerStrategy[0]).length} CurseForge game versions for each strategy`);
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
export async function publish(pluginConfig, context) {
|
|
@@ -28,7 +27,7 @@ export async function publish(pluginConfig, context) {
|
|
|
28
27
|
const results = [];
|
|
29
28
|
for (const [index, strategy] of (pluginConfig.strategies || [{}]).entries()) {
|
|
30
29
|
if (env.CURSEFORGE_TOKEN) {
|
|
31
|
-
const curseforgeId = await publishToCurseforge(pluginConfig, context, strategy,
|
|
30
|
+
const curseforgeId = await publishToCurseforge(pluginConfig, context, strategy, curseforgeGameVersionsIdsPerStrategy[index]);
|
|
32
31
|
results.push({
|
|
33
32
|
url: `https://www.curseforge.com/minecraft/mc-mods/${pluginConfig.curseforge.project_id}/files/${curseforgeId}`,
|
|
34
33
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,uFAAuF;AACvF,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,uFAAuF;AACvF,IAAI,oCAAoC,GAAoB,EAAE,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,YAA0B,EAC1B,OAAgC;IAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAExB,IAAI,GAAG,CAAC,gBAAgB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,YAA0B,EAC1B,OAAuB;IAEvB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEhC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAE7D,oCAAoC;YAChC,MAAM,2BAA2B,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,GAAG,CACN,+BAA+B,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,6CAA6C,CAC1I,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,YAA0B,EAC1B,OAAuB;IAEvB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAC5B,YAAY,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAClC,CAAC,OAAO,EAAE,EAAE,CAAC;QACV,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAC1C,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,oCAAoC,CAAC,KAAK,CAAC,CAC9C,CAAC;YACF,OAAO,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,gDAAgD,YAAY,CAAC,UAAW,CAAC,UAAU,UAAU,YAAY,EAAE;aACnH,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,GAAG,CACN,oFAAoF,CACvF,CAAC;QACN,CAAC;QAED,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CACtC,YAAY,EACZ,OAAO,EACP,QAAQ,CACX,CAAC;YACF,OAAO,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,4BAA4B,YAAY,CAAC,QAAS,CAAC,UAAU,YAAY,UAAU,EAAE;aAC7F,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,GAAG,CACN,gFAAgF,CACnF,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
package/dist/modrinth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modrinth.d.ts","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"modrinth.d.ts","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAO9D;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CA2JjB"}
|
package/dist/modrinth.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import FormData from 'form-data';
|
|
3
|
-
import {
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
4
|
import { basename } from 'path';
|
|
5
5
|
import { findFilesAndPrimaryFile } from './utils/platform/utils.js';
|
|
6
6
|
import { resolveAndRenderTemplate, resolveAndRenderTemplates, } from './utils/template-utils.js';
|
|
@@ -18,12 +18,15 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
|
|
|
18
18
|
const form = new FormData();
|
|
19
19
|
const filePartNames = [];
|
|
20
20
|
let primaryFilePartName = undefined;
|
|
21
|
+
const fileBuffers = [];
|
|
22
|
+
const fileNames = [];
|
|
21
23
|
for (let i = 0; i < files.length; i++) {
|
|
22
24
|
const filePath = files[i];
|
|
23
|
-
const
|
|
25
|
+
const fileBuffer = readFileSync(filePath);
|
|
26
|
+
fileBuffers.push(fileBuffer);
|
|
24
27
|
const fileName = basename(filePath);
|
|
28
|
+
fileNames.push(fileName);
|
|
25
29
|
const filePartName = `file-${i}`;
|
|
26
|
-
form.append(filePartName, file, { filename: fileName });
|
|
27
30
|
filePartNames.push(filePartName);
|
|
28
31
|
if (filePath === primaryFile) {
|
|
29
32
|
primaryFilePartName = filePartName;
|
|
@@ -37,8 +40,10 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
|
|
|
37
40
|
featured: modrinth?.featured || false,
|
|
38
41
|
status: modrinth?.status || 'listed',
|
|
39
42
|
requested_status: modrinth?.requested_status || 'listed',
|
|
40
|
-
primary_file: primaryFilePartName,
|
|
41
43
|
};
|
|
44
|
+
if (primaryFilePartName) {
|
|
45
|
+
versionData.primary_file = primaryFilePartName;
|
|
46
|
+
}
|
|
42
47
|
const changelog = resolveAndRenderTemplate([modrinth?.changelog, nextRelease.notes], {
|
|
43
48
|
nextRelease,
|
|
44
49
|
...strategy,
|
|
@@ -46,38 +51,49 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
|
|
|
46
51
|
if (changelog) {
|
|
47
52
|
versionData.changelog = changelog;
|
|
48
53
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
versionData.name =
|
|
55
|
+
resolveAndRenderTemplate([modrinth?.display_name, pluginConfig.display_name], {
|
|
56
|
+
nextRelease,
|
|
57
|
+
...strategy,
|
|
58
|
+
}) || nextRelease.name;
|
|
59
|
+
versionData.version_number =
|
|
60
|
+
resolveAndRenderTemplate([modrinth?.version_number], {
|
|
61
|
+
nextRelease,
|
|
62
|
+
...strategy,
|
|
63
|
+
}) || nextRelease.version;
|
|
64
|
+
versionData.game_versions =
|
|
65
|
+
resolveAndRenderTemplates([modrinth?.game_versions, pluginConfig.game_versions], {
|
|
66
|
+
nextRelease,
|
|
67
|
+
...strategy,
|
|
68
|
+
}) || [];
|
|
69
|
+
versionData.loaders =
|
|
70
|
+
resolveAndRenderTemplates([modrinth?.mod_loaders, pluginConfig.mod_loaders], {
|
|
71
|
+
nextRelease,
|
|
72
|
+
...strategy,
|
|
73
|
+
}) || [];
|
|
74
|
+
form.append('data', JSON.stringify(versionData), {
|
|
75
|
+
contentType: 'application/json',
|
|
57
76
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
...strategy,
|
|
67
|
-
});
|
|
68
|
-
versionData.loaders = modLoaders || [];
|
|
77
|
+
for (let i = 0; i < files.length; i++) {
|
|
78
|
+
const filePartName = filePartNames[i];
|
|
79
|
+
const fileBuffer = fileBuffers[i];
|
|
80
|
+
const fileName = fileNames[i];
|
|
81
|
+
form.append(filePartName, fileBuffer, { filename: fileName });
|
|
82
|
+
}
|
|
83
|
+
const headers = form.getHeaders();
|
|
84
|
+
headers['Content-Length'] = form.getLengthSync();
|
|
69
85
|
for (const [key, value] of Object.entries(versionData)) {
|
|
70
86
|
logger.log(key, value);
|
|
71
87
|
}
|
|
72
88
|
logger.log(JSON.stringify(versionData));
|
|
73
|
-
form.append('data', JSON.stringify(versionData));
|
|
74
89
|
const versionResponse = await axios.post('https://api.modrinth.com/v2/version', form, {
|
|
75
90
|
headers: {
|
|
76
|
-
...
|
|
91
|
+
...headers,
|
|
77
92
|
Authorization: token,
|
|
78
93
|
},
|
|
79
94
|
validateStatus: (status) => status < 500,
|
|
80
95
|
});
|
|
96
|
+
// form.append('data', JSON.stringify(versionData));
|
|
81
97
|
const resData = versionResponse.data;
|
|
82
98
|
if (versionResponse.status === 200) {
|
|
83
99
|
logger.log(`Successfully published to Modrinth: ${resData.project_id} (File ID: ${resData.file_id})`);
|
|
@@ -88,7 +104,9 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
|
|
|
88
104
|
throw new Error(`Failed to publish to Modrinth (${versionResponse.status}): ${resData.error}\n${resData.description}`);
|
|
89
105
|
}
|
|
90
106
|
else {
|
|
91
|
-
|
|
107
|
+
logger.log('Headers:', versionResponse.headers);
|
|
108
|
+
logger.log('Data:', resData);
|
|
109
|
+
throw new Error(`Failed to publish to Modrinth (${versionResponse.status}): ${versionResponse.statusText}`);
|
|
92
110
|
}
|
|
93
111
|
}
|
|
94
112
|
//# sourceMappingURL=modrinth.js.map
|
package/dist/modrinth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modrinth.js","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"modrinth.js","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"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"}
|
package/dist/prepare.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ import { PluginConfig } from './definitions/plugin-config.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get CurseForge game version IDs based on the plugin configuration.
|
|
5
5
|
*/
|
|
6
|
-
export declare function getCurseForgeGameVersionIds(apiToken: string, pluginConfig: PluginConfig, context: PrepareContext
|
|
6
|
+
export declare function getCurseForgeGameVersionIds(apiToken: string, pluginConfig: PluginConfig, context: PrepareContext): Promise<Array<number[]>>;
|
|
7
7
|
//# sourceMappingURL=prepare.d.ts.map
|
package/dist/prepare.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAI9D;;GAEG;AACH,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAI9D;;GAEG;AACH,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAqF1B"}
|
package/dist/prepare.js
CHANGED
|
@@ -5,31 +5,40 @@ import { toArray } from './utils/utils.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Get CurseForge game version IDs based on the plugin configuration.
|
|
7
7
|
*/
|
|
8
|
-
export async function getCurseForgeGameVersionIds(apiToken, pluginConfig, context
|
|
8
|
+
export async function getCurseForgeGameVersionIds(apiToken, pluginConfig, context) {
|
|
9
9
|
const { nextRelease } = context;
|
|
10
10
|
const curseforgeConfig = pluginConfig.curseforge;
|
|
11
|
-
const modLoaders = resolveAndRenderTemplates([pluginConfig.curseforge?.mod_loaders, pluginConfig.mod_loaders], {
|
|
12
|
-
nextRelease,
|
|
13
|
-
...strategy,
|
|
14
|
-
}) || [];
|
|
15
|
-
const javaVersions = toArray(curseforgeConfig.java_versions);
|
|
16
|
-
const gameVersions = toArray(curseforgeConfig.game_versions || pluginConfig.game_versions);
|
|
17
|
-
const pluginGameVersions = toArray(curseforgeConfig.game_versions_for_plugins);
|
|
18
|
-
const addonGameVersions = toArray(curseforgeConfig.game_versions_for_addon);
|
|
19
|
-
const environments = toArray(curseforgeConfig.environments);
|
|
20
11
|
const map = await createCurseForgeGameVersionMap(apiToken);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
12
|
+
let curseforgeGameVersionsIdsPerStrategy = [];
|
|
13
|
+
for (const strategy of pluginConfig.strategies || [{}]) {
|
|
14
|
+
// fetch plugin config values with template rendering
|
|
15
|
+
const modLoaders = resolveAndRenderTemplates([
|
|
16
|
+
pluginConfig.curseforge?.mod_loaders,
|
|
17
|
+
pluginConfig.mod_loaders,
|
|
18
|
+
], {
|
|
19
|
+
nextRelease,
|
|
20
|
+
...strategy,
|
|
21
|
+
}) || [];
|
|
22
|
+
const javaVersions = toArray(curseforgeConfig.java_versions);
|
|
23
|
+
const gameVersions = toArray(curseforgeConfig.game_versions || pluginConfig.game_versions);
|
|
24
|
+
const pluginGameVersions = toArray(curseforgeConfig.game_versions_for_plugins);
|
|
25
|
+
const addonGameVersions = toArray(curseforgeConfig.game_versions_for_addon);
|
|
26
|
+
const environments = toArray(curseforgeConfig.environments);
|
|
27
|
+
const javaVersionNames = javaVersions.map((javaVersion) => `Java ${javaVersion}`);
|
|
28
|
+
// TODO: Modrinth 和 CurseForge 的游戏版本命名格式转化,以 Modrinth 为基准
|
|
29
|
+
// const gameVersionNames = gameVersions.map(x => formatCurseForgeGameVersionSnapshot(x));
|
|
30
|
+
// get CurseForge game version IDs from mapped game versions
|
|
31
|
+
const gameVersionIds = findCurseForgeGameVersionIdsByNames(map.game_versions, gameVersions);
|
|
32
|
+
const loaderIds = findCurseForgeGameVersionIdsByNames(map.loaders, modLoaders);
|
|
33
|
+
const javaIds = findCurseForgeGameVersionIdsByNames(map.java_versions, javaVersionNames);
|
|
34
|
+
const pluginGameVersionIds = findCurseForgeGameVersionIdsByNames(map.game_versions_for_plugins, pluginGameVersions);
|
|
35
|
+
const addonGameVersionIds = findCurseForgeGameVersionIdsByNames(map.game_versions_for_addons, addonGameVersions);
|
|
36
|
+
const environmentIds = findCurseForgeGameVersionIdsByNames(map.environments, environments);
|
|
37
|
+
const curseforgeGameVersionIds = [];
|
|
38
|
+
curseforgeGameVersionIds.push(...gameVersionIds, ...loaderIds, ...javaIds, ...pluginGameVersionIds, ...addonGameVersionIds, ...environmentIds);
|
|
39
|
+
curseforgeGameVersionsIdsPerStrategy.push(curseforgeGameVersionIds);
|
|
40
|
+
}
|
|
41
|
+
return curseforgeGameVersionsIdsPerStrategy;
|
|
33
42
|
}
|
|
34
43
|
/**
|
|
35
44
|
* Create a CurseForge game version map by categorizing game versions based on their type names.
|
package/dist/prepare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACH,wBAAwB,GAI3B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,QAAgB,EAChB,YAA0B,EAC1B,OAAuB
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/curseforge.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import FormData from 'form-data';
|
|
3
|
-
import {
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
4
|
import { basename } from 'path';
|
|
5
5
|
import { PublishContext } from 'semantic-release';
|
|
6
6
|
import { PluginConfig } from './definitions/plugin-config.js';
|
|
@@ -34,11 +34,17 @@ export async function publishToCurseforge(
|
|
|
34
34
|
`Publishing ${files.length} file(s) to CurseForge project ${projectId}...`
|
|
35
35
|
);
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
const metadata = prepareMetadata(
|
|
38
38
|
pluginConfig,
|
|
39
39
|
context,
|
|
40
40
|
strategy,
|
|
41
|
-
curseforgeGameVersionIds
|
|
41
|
+
curseforgeGameVersionIds
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
let primaryFileId = await uploadCurseForgeFile(
|
|
45
|
+
pluginConfig,
|
|
46
|
+
context,
|
|
47
|
+
metadata,
|
|
42
48
|
primaryFile
|
|
43
49
|
);
|
|
44
50
|
|
|
@@ -50,8 +56,7 @@ export async function publishToCurseforge(
|
|
|
50
56
|
await uploadCurseForgeFile(
|
|
51
57
|
pluginConfig,
|
|
52
58
|
context,
|
|
53
|
-
|
|
54
|
-
curseforgeGameVersionIds,
|
|
59
|
+
metadata,
|
|
55
60
|
filePath,
|
|
56
61
|
primaryFileId
|
|
57
62
|
);
|
|
@@ -66,8 +71,7 @@ export async function publishToCurseforge(
|
|
|
66
71
|
async function uploadCurseForgeFile(
|
|
67
72
|
pluginConfig: PluginConfig,
|
|
68
73
|
context: PublishContext,
|
|
69
|
-
|
|
70
|
-
curseforgeGameVersionIds: number[] | undefined,
|
|
74
|
+
metadata: any,
|
|
71
75
|
filePath: string,
|
|
72
76
|
primaryFileId?: number
|
|
73
77
|
): Promise<number> {
|
|
@@ -77,25 +81,20 @@ async function uploadCurseForgeFile(
|
|
|
77
81
|
const apiKey = env.CURSEFORGE_TOKEN!;
|
|
78
82
|
const projectId = curseforge!.project_id!;
|
|
79
83
|
|
|
84
|
+
// add file to form data
|
|
80
85
|
const form = new FormData();
|
|
81
|
-
const file =
|
|
86
|
+
const file = readFileSync(filePath);
|
|
82
87
|
form.append('file', file, {
|
|
83
88
|
filename: basename(filePath),
|
|
84
89
|
});
|
|
85
90
|
|
|
86
|
-
const metadata = prepareMetadata(
|
|
87
|
-
pluginConfig,
|
|
88
|
-
context,
|
|
89
|
-
strategy,
|
|
90
|
-
curseforgeGameVersionIds
|
|
91
|
-
);
|
|
92
|
-
|
|
93
91
|
if (primaryFileId) {
|
|
94
92
|
metadata.parentFileID = primaryFileId;
|
|
95
93
|
}
|
|
96
94
|
|
|
97
95
|
form.append('metadata', JSON.stringify(metadata));
|
|
98
96
|
|
|
97
|
+
// post to CurseForge API
|
|
99
98
|
const response = await axios.post(
|
|
100
99
|
`https://upload.curseforge.com/api/projects/${projectId}/upload-file`,
|
|
101
100
|
form,
|
|
@@ -142,24 +141,23 @@ function prepareMetadata(
|
|
|
142
141
|
relations: curseforge?.relations || [],
|
|
143
142
|
};
|
|
144
143
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
metadata.modLoaders = modLoaders || [];
|
|
144
|
+
metadata.displayName =
|
|
145
|
+
resolveAndRenderTemplate(
|
|
146
|
+
[curseforge?.display_name, pluginConfig.display_name],
|
|
147
|
+
{
|
|
148
|
+
nextRelease,
|
|
149
|
+
...strategy,
|
|
150
|
+
}
|
|
151
|
+
) || context.nextRelease.name;
|
|
152
|
+
|
|
153
|
+
metadata.modLoaders =
|
|
154
|
+
resolveAndRenderTemplates(
|
|
155
|
+
[pluginConfig.curseforge?.mod_loaders, pluginConfig.mod_loaders],
|
|
156
|
+
{
|
|
157
|
+
nextRelease,
|
|
158
|
+
...strategy,
|
|
159
|
+
}
|
|
160
|
+
) || [];
|
|
163
161
|
|
|
164
162
|
return metadata;
|
|
165
163
|
}
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { publishToModrinth } from './modrinth.js';
|
|
|
9
9
|
import { getCurseForgeGameVersionIds } from './prepare.js';
|
|
10
10
|
|
|
11
11
|
// Game version IDs transformed from user's input, used during publishing to CurseForge
|
|
12
|
-
let
|
|
12
|
+
let curseforgeGameVersionsIdsPerStrategy: Array<number[]> = [];
|
|
13
13
|
|
|
14
14
|
export async function verifyConditions(
|
|
15
15
|
pluginConfig: PluginConfig,
|
|
@@ -36,19 +36,11 @@ export async function prepare(
|
|
|
36
36
|
const apiToken = env.CURSEFORGE_TOKEN;
|
|
37
37
|
logger.log('Fetching CurseForge game versions and types...');
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
await getCurseForgeGameVersionIds(
|
|
42
|
-
apiToken,
|
|
43
|
-
pluginConfig,
|
|
44
|
-
context,
|
|
45
|
-
strategy
|
|
46
|
-
)
|
|
47
|
-
);
|
|
48
|
-
}
|
|
39
|
+
curseforgeGameVersionsIdsPerStrategy =
|
|
40
|
+
await getCurseForgeGameVersionIds(apiToken, pluginConfig, context);
|
|
49
41
|
|
|
50
42
|
logger.log(
|
|
51
|
-
`Successfully transform into ${Object.keys(
|
|
43
|
+
`Successfully transform into ${Object.keys(curseforgeGameVersionsIdsPerStrategy[0]).length} CurseForge game versions for each strategy`
|
|
52
44
|
);
|
|
53
45
|
}
|
|
54
46
|
}
|
|
@@ -68,7 +60,7 @@ export async function publish(
|
|
|
68
60
|
pluginConfig,
|
|
69
61
|
context,
|
|
70
62
|
strategy,
|
|
71
|
-
|
|
63
|
+
curseforgeGameVersionsIdsPerStrategy[index]
|
|
72
64
|
);
|
|
73
65
|
results.push({
|
|
74
66
|
url: `https://www.curseforge.com/minecraft/mc-mods/${pluginConfig.curseforge!.project_id}/files/${curseforgeId}`,
|
package/src/modrinth.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import FormData from 'form-data';
|
|
3
|
-
import {
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
4
|
import { basename } from 'path';
|
|
5
5
|
import { PublishContext } from 'semantic-release';
|
|
6
6
|
import { PluginConfig } from './definitions/plugin-config.js';
|
|
@@ -35,17 +35,21 @@ export async function publishToModrinth(
|
|
|
35
35
|
|
|
36
36
|
// use multipart/form-data to upload files and version data
|
|
37
37
|
const form = new FormData();
|
|
38
|
+
|
|
38
39
|
const filePartNames: string[] = [];
|
|
39
40
|
let primaryFilePartName: string | undefined = undefined;
|
|
41
|
+
const fileBuffers: Buffer[] = [];
|
|
42
|
+
const fileNames: string[] = [];
|
|
40
43
|
|
|
41
44
|
for (let i = 0; i < files.length; i++) {
|
|
42
45
|
const filePath = files[i];
|
|
43
|
-
const
|
|
46
|
+
const fileBuffer = readFileSync(filePath);
|
|
47
|
+
fileBuffers.push(fileBuffer);
|
|
44
48
|
const fileName = basename(filePath);
|
|
49
|
+
fileNames.push(fileName);
|
|
45
50
|
|
|
46
51
|
const filePartName = `file-${i}`;
|
|
47
52
|
|
|
48
|
-
form.append(filePartName, file, { filename: fileName });
|
|
49
53
|
filePartNames.push(filePartName);
|
|
50
54
|
|
|
51
55
|
if (filePath === primaryFile) {
|
|
@@ -61,9 +65,12 @@ export async function publishToModrinth(
|
|
|
61
65
|
featured: modrinth?.featured || false,
|
|
62
66
|
status: modrinth?.status || 'listed',
|
|
63
67
|
requested_status: modrinth?.requested_status || 'listed',
|
|
64
|
-
primary_file: primaryFilePartName,
|
|
65
68
|
};
|
|
66
69
|
|
|
70
|
+
if (primaryFilePartName) {
|
|
71
|
+
versionData.primary_file = primaryFilePartName;
|
|
72
|
+
}
|
|
73
|
+
|
|
67
74
|
const changelog = resolveAndRenderTemplate(
|
|
68
75
|
[modrinth?.changelog, nextRelease.notes],
|
|
69
76
|
{
|
|
@@ -76,65 +83,74 @@ export async function publishToModrinth(
|
|
|
76
83
|
versionData.changelog = changelog;
|
|
77
84
|
}
|
|
78
85
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
versionData.name =
|
|
87
|
+
resolveAndRenderTemplate(
|
|
88
|
+
[modrinth?.display_name, pluginConfig.display_name],
|
|
89
|
+
{
|
|
90
|
+
nextRelease,
|
|
91
|
+
...strategy,
|
|
92
|
+
}
|
|
93
|
+
) || nextRelease.name;
|
|
94
|
+
|
|
95
|
+
versionData.version_number =
|
|
96
|
+
resolveAndRenderTemplate([modrinth?.version_number], {
|
|
82
97
|
nextRelease,
|
|
83
98
|
...strategy,
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
}) || nextRelease.version;
|
|
100
|
+
|
|
101
|
+
versionData.game_versions =
|
|
102
|
+
resolveAndRenderTemplates(
|
|
103
|
+
[modrinth?.game_versions, pluginConfig.game_versions],
|
|
104
|
+
{
|
|
105
|
+
nextRelease,
|
|
106
|
+
...strategy,
|
|
107
|
+
}
|
|
108
|
+
) || [];
|
|
109
|
+
|
|
110
|
+
versionData.loaders =
|
|
111
|
+
resolveAndRenderTemplates(
|
|
112
|
+
[modrinth?.mod_loaders, pluginConfig.mod_loaders],
|
|
113
|
+
{
|
|
114
|
+
nextRelease,
|
|
115
|
+
...strategy,
|
|
116
|
+
}
|
|
117
|
+
) || [];
|
|
118
|
+
|
|
119
|
+
form.append('data', JSON.stringify(versionData), {
|
|
120
|
+
contentType: 'application/json',
|
|
92
121
|
});
|
|
93
122
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
[
|
|
98
|
-
{
|
|
99
|
-
nextRelease,
|
|
100
|
-
...strategy,
|
|
101
|
-
}
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
versionData.game_versions = gameVersions || [];
|
|
123
|
+
for (let i = 0; i < files.length; i++) {
|
|
124
|
+
const filePartName = filePartNames[i];
|
|
125
|
+
const fileBuffer = fileBuffers[i];
|
|
126
|
+
const fileName = fileNames[i];
|
|
105
127
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
{
|
|
109
|
-
nextRelease,
|
|
110
|
-
...strategy,
|
|
111
|
-
}
|
|
112
|
-
);
|
|
128
|
+
form.append(filePartName, fileBuffer, { filename: fileName });
|
|
129
|
+
}
|
|
113
130
|
|
|
114
|
-
|
|
131
|
+
const headers = form.getHeaders();
|
|
132
|
+
headers['Content-Length'] = form.getLengthSync();
|
|
115
133
|
|
|
116
134
|
for (const [key, value] of Object.entries(versionData)) {
|
|
117
135
|
logger.log(key, value);
|
|
118
136
|
}
|
|
119
137
|
|
|
120
|
-
logger.log(
|
|
121
|
-
JSON.stringify(versionData)
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
form.append('data', JSON.stringify(versionData));
|
|
138
|
+
logger.log(JSON.stringify(versionData));
|
|
125
139
|
|
|
126
140
|
const versionResponse = await axios.post(
|
|
127
141
|
'https://api.modrinth.com/v2/version',
|
|
128
142
|
form,
|
|
129
143
|
{
|
|
130
144
|
headers: {
|
|
131
|
-
...
|
|
145
|
+
...headers,
|
|
132
146
|
Authorization: token,
|
|
133
147
|
},
|
|
134
148
|
validateStatus: (status) => status < 500,
|
|
135
149
|
}
|
|
136
150
|
);
|
|
137
151
|
|
|
152
|
+
// form.append('data', JSON.stringify(versionData));
|
|
153
|
+
|
|
138
154
|
const resData = versionResponse.data;
|
|
139
155
|
|
|
140
156
|
if (versionResponse.status === 200) {
|
|
@@ -150,8 +166,10 @@ export async function publishToModrinth(
|
|
|
150
166
|
`Failed to publish to Modrinth (${versionResponse.status}): ${resData.error}\n${resData.description}`
|
|
151
167
|
);
|
|
152
168
|
} else {
|
|
169
|
+
logger.log('Headers:', versionResponse.headers);
|
|
170
|
+
logger.log('Data:', resData);
|
|
153
171
|
throw new Error(
|
|
154
|
-
`Failed to publish to Modrinth (${versionResponse.status}): ${
|
|
172
|
+
`Failed to publish to Modrinth (${versionResponse.status}): ${versionResponse.statusText}`
|
|
155
173
|
);
|
|
156
174
|
}
|
|
157
175
|
}
|
package/src/prepare.ts
CHANGED
|
@@ -16,81 +16,92 @@ import { toArray } from './utils/utils.js';
|
|
|
16
16
|
export async function getCurseForgeGameVersionIds(
|
|
17
17
|
apiToken: string,
|
|
18
18
|
pluginConfig: PluginConfig,
|
|
19
|
-
context: PrepareContext
|
|
20
|
-
|
|
21
|
-
): Promise<number[]> {
|
|
19
|
+
context: PrepareContext
|
|
20
|
+
): Promise<Array<number[]>> {
|
|
22
21
|
const { nextRelease } = context;
|
|
23
22
|
|
|
24
23
|
const curseforgeConfig = pluginConfig.curseforge!;
|
|
25
24
|
|
|
26
|
-
const modLoaders =
|
|
27
|
-
resolveAndRenderTemplates(
|
|
28
|
-
[pluginConfig.curseforge?.mod_loaders, pluginConfig.mod_loaders],
|
|
29
|
-
{
|
|
30
|
-
nextRelease,
|
|
31
|
-
...strategy,
|
|
32
|
-
}
|
|
33
|
-
) || [];
|
|
34
|
-
|
|
35
|
-
const javaVersions = toArray(curseforgeConfig.java_versions);
|
|
36
|
-
const gameVersions = toArray(
|
|
37
|
-
curseforgeConfig.game_versions || pluginConfig.game_versions
|
|
38
|
-
);
|
|
39
|
-
const pluginGameVersions = toArray(
|
|
40
|
-
curseforgeConfig.game_versions_for_plugins
|
|
41
|
-
);
|
|
42
|
-
const addonGameVersions = toArray(curseforgeConfig.game_versions_for_addon);
|
|
43
|
-
const environments = toArray(curseforgeConfig.environments);
|
|
44
|
-
|
|
45
25
|
const map = await createCurseForgeGameVersionMap(apiToken);
|
|
46
26
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
map
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
map
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
27
|
+
let curseforgeGameVersionsIdsPerStrategy: Array<number[]> = [];
|
|
28
|
+
|
|
29
|
+
for (const strategy of pluginConfig.strategies || [{}]) {
|
|
30
|
+
// fetch plugin config values with template rendering
|
|
31
|
+
const modLoaders =
|
|
32
|
+
resolveAndRenderTemplates(
|
|
33
|
+
[
|
|
34
|
+
pluginConfig.curseforge?.mod_loaders,
|
|
35
|
+
pluginConfig.mod_loaders,
|
|
36
|
+
],
|
|
37
|
+
{
|
|
38
|
+
nextRelease,
|
|
39
|
+
...strategy,
|
|
40
|
+
}
|
|
41
|
+
) || [];
|
|
42
|
+
|
|
43
|
+
const javaVersions = toArray(curseforgeConfig.java_versions);
|
|
44
|
+
const gameVersions = toArray(
|
|
45
|
+
curseforgeConfig.game_versions || pluginConfig.game_versions
|
|
46
|
+
);
|
|
47
|
+
const pluginGameVersions = toArray(
|
|
48
|
+
curseforgeConfig.game_versions_for_plugins
|
|
49
|
+
);
|
|
50
|
+
const addonGameVersions = toArray(
|
|
51
|
+
curseforgeConfig.game_versions_for_addon
|
|
52
|
+
);
|
|
53
|
+
const environments = toArray(curseforgeConfig.environments);
|
|
54
|
+
|
|
55
|
+
const javaVersionNames = javaVersions.map(
|
|
56
|
+
(javaVersion: string) => `Java ${javaVersion}`
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
// TODO: Modrinth 和 CurseForge 的游戏版本命名格式转化,以 Modrinth 为基准
|
|
60
|
+
// const gameVersionNames = gameVersions.map(x => formatCurseForgeGameVersionSnapshot(x));
|
|
61
|
+
|
|
62
|
+
// get CurseForge game version IDs from mapped game versions
|
|
63
|
+
const gameVersionIds = findCurseForgeGameVersionIdsByNames(
|
|
64
|
+
map.game_versions,
|
|
65
|
+
gameVersions
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const loaderIds = findCurseForgeGameVersionIdsByNames(
|
|
69
|
+
map.loaders,
|
|
70
|
+
modLoaders
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const javaIds = findCurseForgeGameVersionIdsByNames(
|
|
74
|
+
map.java_versions,
|
|
75
|
+
javaVersionNames
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const pluginGameVersionIds = findCurseForgeGameVersionIdsByNames(
|
|
79
|
+
map.game_versions_for_plugins,
|
|
80
|
+
pluginGameVersions
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
const addonGameVersionIds = findCurseForgeGameVersionIdsByNames(
|
|
84
|
+
map.game_versions_for_addons,
|
|
85
|
+
addonGameVersions
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const environmentIds = findCurseForgeGameVersionIdsByNames(
|
|
89
|
+
map.environments,
|
|
90
|
+
environments
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const curseforgeGameVersionIds: number[] = [];
|
|
94
|
+
curseforgeGameVersionIds.push(
|
|
95
|
+
...gameVersionIds,
|
|
96
|
+
...loaderIds,
|
|
97
|
+
...javaIds,
|
|
98
|
+
...pluginGameVersionIds,
|
|
99
|
+
...addonGameVersionIds,
|
|
100
|
+
...environmentIds
|
|
101
|
+
);
|
|
102
|
+
curseforgeGameVersionsIdsPerStrategy.push(curseforgeGameVersionIds);
|
|
103
|
+
}
|
|
104
|
+
return curseforgeGameVersionsIdsPerStrategy;
|
|
94
105
|
}
|
|
95
106
|
|
|
96
107
|
/**
|