semantic-release-minecraft 2.2.1 β†’ 2.3.1

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/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## [2.3.1](https://github.com/pynickle/semantic-release-minecraft/compare/v2.3.0...v2.3.1) (2025-10-22)
2
+
3
+ ### πŸ› Bug Fixes
4
+
5
+ * fix incorrect json key for publishing ([ad6b973](https://github.com/pynickle/semantic-release-minecraft/commit/ad6b97381a2883c452a75cd9a49817cdb196eb19))
6
+
7
+ ## [2.3.0](https://github.com/pynickle/semantic-release-minecraft/compare/v2.2.1...v2.3.0) (2025-10-22)
8
+
9
+ ### ✨ Features
10
+
11
+ * add global dependency configuration ([c1d1700](https://github.com/pynickle/semantic-release-minecraft/commit/c1d17003faffe1d8754759db7a1bcfd6c5fd5ac4))
12
+
13
+ ### πŸ“š Documentation
14
+
15
+ * add missing platform api token configuration part ([833b18d](https://github.com/pynickle/semantic-release-minecraft/commit/833b18d59f64a0e786fe6adbf3c6be133c2043ff))
16
+
1
17
  ## [2.2.1](https://github.com/pynickle/semantic-release-minecraft/compare/v2.2.0...v2.2.1) (2025-10-21)
2
18
 
3
19
  ### πŸ› Bug Fixes
package/README.md CHANGED
@@ -29,6 +29,25 @@ If you don't want to read through the lengthy configuration introduction below,
29
29
 
30
30
  ---
31
31
 
32
+ ### πŸ› οΈ CI Secret Configuration
33
+
34
+ For Modrinth and CurseForge API token configuration, you can set them via environment variables in tools like GitHub Actions:
35
+
36
+ ```yaml
37
+ CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }}
38
+ MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
39
+ ```
40
+
41
+ Remember to configure the repository secrets in the repository settings.
42
+
43
+ Below are the links to obtain API tokens for CurseForge and Modrinth:
44
+
45
+ [CurseForge](https://authors-old.curseforge.com/account/api-tokens)
46
+
47
+ > Once obtained, your Modrinth API token can only be viewed once. Please ensure you save your API token securely.
48
+
49
+ [Modrinth](https://modrinth.com/settings/pats)
50
+
32
51
  ### 🌍 Global Configuration
33
52
 
34
53
  | Field | Type | Description | Default | Example |
@@ -40,6 +59,17 @@ If you don't want to read through the lengthy configuration introduction below,
40
59
  | `strategies` | `Record<any, any>[]` | Store an array of strategy configurations for each release. See explanation below. | `[{}]` | `[{ 'loader': 'fabric' }, { 'loader': 'neoforge' }]` |
41
60
  | `glob` | `string \| string[]` | Glob patterns that matches all files requiring upload | `['build/libs/!(*-@(dev\|sources\|javadoc)).jar','build/libs/*-@(dev\|sources\|javadoc).jar',]` | - |
42
61
  | `primary_file_glob` | `string \| string[]` | Glob pattern matching the primary file | - | - |
62
+ | `dependencies` | Array of Objects | Global Dependency relations. See sub-table below. | `[]` | ~~~ |
63
+
64
+ #### πŸ•ΈοΈ Global Dependencies Sub-Configuration
65
+
66
+ | Field | Type | Description | Default | Example |
67
+ |-------------------------|------------------------------------------------------------|----------------------------------------|---------|--------------|
68
+ | `slug` | `string` | Project Slug of dependency (required). | - | `'yacl'` |
69
+ | `curseforge_project_id` | `string` | CurseForge Project ID of dependency. | - | ~~~ |
70
+ | `modrinth_project_id` | `string` | Modrinth Project ID of dependency. | - | ~~~ |
71
+ | `type` | `'required' \| 'optional' \| 'incompatible' \| 'embedded'` | Dependency type (required). | - | `'embedded'` |
72
+
43
73
 
44
74
  ### βš™οΈ Strategy (Template) Configuration
45
75
 
@@ -75,7 +105,7 @@ Configure under the `curseforge` object. Requires `project_id` to enable.
75
105
  | `changelog_type` | `'text' \| 'html' \| 'markdown'` | Changelog format. | `'markdown'` | `'html'` |
76
106
  | `display_name` | `string` | CurseForge-specific display name. | Global | `'Iris 1.9.6 for Fabric 1.21.10'` |
77
107
  | `is_marked_for_manual_release` | `boolean` | Mark release as manual so you can choose when to release. | `false` | `true` |
78
- | `relations` | Array of Objects | Dependency relations. See sub-table below. | `[]` | - |
108
+ | `relations` | Array of Objects | Dependency relations. See sub-table below. | Global | - |
79
109
  | `glob` | `string \| string[]` | CurseForge-specific file glob. | Global | ~~~ |
80
110
  | `primary_file_glob` | `string \| string[]` | CurseForge-specific primary file. | Global | ~~~ |
81
111
 
@@ -99,7 +129,7 @@ Configure under the `modrinth` object. Requires `project_id` to enable.
99
129
  | `game_versions` | `string[]` | Modrinth-specific game versions. | Global | `'1.12.2'` |
100
130
  | `mod_loaders` | `string[]` | Modrinth-specific loaders. | Global | `'quilt'` |
101
131
  | `changelog` | `string` | Custom changelog. | `nextRelease.notes` | `'See full changelog'` |
102
- | `dependencies` | Array of Objects | Dependency relations. See sub-table below. | `[]` | - |
132
+ | `dependencies` | Array of Objects | Dependency relations. See sub-table below. | Global | - |
103
133
  | `featured` | `boolean` | Mark as featured version. | `false` | `true` |
104
134
  | `status` | `'listed' \| 'archived' \| 'draft' \| 'unlisted' \| 'scheduled' \| 'unknown'` | Version visibility status. | `'listed'` | `'draft'` |
105
135
  | `requested_status` | `'listed' \| 'archived' \| 'draft' \| 'unlisted'` | Requested status (for moderation). | `'listed'` | `'unlisted'` |
@@ -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;AAQ9D;;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"}
1
+ {"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,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"}
@@ -1,10 +1,11 @@
1
1
  import axios from 'axios';
2
2
  import FormData from 'form-data';
3
3
  import { readFileSync } from 'fs';
4
+ import lodash from 'lodash';
4
5
  import { basename } from 'path';
6
+ import { DependencyTypeMap } from './definitions/curseforge.js';
5
7
  import { findFilesAndPrimaryFile } from './utils/platform/utils.js';
6
8
  import { resolveAndRenderTemplate, resolveAndRenderTemplates, } from './utils/template-utils.js';
7
- import lodash from "lodash";
8
9
  /**
9
10
  * Publishes files to CurseForge.
10
11
  */
@@ -75,6 +76,28 @@ function prepareMetadata(pluginConfig, context, strategy, curseforgeGameVersionI
75
76
  }
76
77
  : {},
77
78
  };
79
+ if (curseforge?.relations) {
80
+ metadata.relations = {
81
+ projects: curseforge?.relations.map((item) => ({
82
+ slug: item.slug,
83
+ projectId: item.project_id,
84
+ type: item.type,
85
+ })),
86
+ };
87
+ }
88
+ else {
89
+ let projects = [];
90
+ for (const dependency of pluginConfig.dependencies || []) {
91
+ projects.push({
92
+ slug: dependency.slug,
93
+ projectId: dependency.curseforge_project_id,
94
+ type: DependencyTypeMap[dependency.type],
95
+ });
96
+ }
97
+ metadata.relations = {
98
+ projects,
99
+ };
100
+ }
78
101
  metadata.displayName =
79
102
  resolveAndRenderTemplate([curseforge?.display_name, pluginConfig.display_name], {
80
103
  ...context,
@@ -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,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACH,wBAAwB,EACxB,yBAAyB,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,YAA0B,EAC1B,OAAuB,EACvB,QAAgC,EAChC,wBAAmC;IAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;IAEpC,MAAM,SAAS,GAAG,UAAW,CAAC,UAAW,CAAC;IAE1C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,uBAAuB,CACxD,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,YAAY,CACf,CAAC;IACF,MAAM,CAAC,GAAG,CACN,cAAc,KAAK,CAAC,MAAM,kCAAkC,SAAS,KAAK,CAC7E,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAC5B,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,wBAAwB,CAC3B,CAAC;IAEF,IAAI,aAAa,GAAG,MAAM,oBAAoB,CAC1C,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,WAAW,CACd,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC3B,SAAS;QACb,CAAC;QAED,MAAM,oBAAoB,CACtB,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,CAChB,CAAC;IACN,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAC/B,YAA0B,EAC1B,OAAuB,EACvB,QAAa,EACb,QAAgB,EAChB,aAAsB;IAEtB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;IAEpC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAiB,CAAC;IACrC,MAAM,SAAS,GAAG,UAAW,CAAC,UAAW,CAAC;IAE1C,wBAAwB;IACxB,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;QACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;KAC/B,CAAC,CAAC;IAEH,IAAI,aAAa,EAAE,CAAC;QAChB,QAAQ,CAAC,YAAY,GAAG,aAAa,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC7B,8CAA8C,SAAS,cAAc,EACrE,IAAI,EACJ;QACI,OAAO,EAAE;YACL,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,aAAa,EAAE,MAAM;SACxB;KACJ,CACJ,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE9B,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CACN,yCAAyC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,OAAO,CAAC,EAAE,EAAE,CACnG,CAAC;QACF,OAAO,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CACX,gDAAgD,OAAO,EAAE,CAC5D,CAAC;IACN,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACpB,YAA0B,EAC1B,OAAuB,EACvB,QAAgC,EAChC,wBAA8C;IAE9C,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;IACpC,MAAM,QAAQ,GAAQ;QAClB,YAAY,EAAE,wBAAwB;QACtC,WAAW,EAAE,YAAY,CAAC,YAAY,IAAI,SAAS;QACnD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAC,CAAC;QACzG,aAAa,EAAE,UAAU,EAAE,cAAc,IAAI,UAAU;QACvD,wBAAwB,EACpB,UAAU,EAAE,4BAA4B,IAAI,KAAK;QACrD,SAAS,EAAE,UAAU,EAAE,SAAS;YAC5B,CAAC,CAAC;gBACI,QAAQ,EAAE,UAAU,EAAE,SAAS;aAClC;YACH,CAAC,CAAC,EAAE;KACX,CAAC;IAEF,QAAQ,CAAC,WAAW;QAChB,wBAAwB,CACpB,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,EACrD;YAEI,GAAG,OAAO;YACV,GAAG,QAAQ;SACd,CACJ,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;IAElC,QAAQ,CAAC,UAAU;QACf,yBAAyB,CACrB,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,WAAW,CAAC,EAChE;YACI,GAAG,OAAO;YACV,GAAG,QAAQ;SACd,CACJ,IAAI,EAAE,CAAC;IAEZ,OAAO,QAAQ,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"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"}
@@ -37,4 +37,11 @@ export interface CurseForgeGameVersionMap {
37
37
  environments: CurseForgeGameVersion[];
38
38
  }
39
39
  export declare const BUKKIT_GAME_VERSION_TYPE: CurseForgeGameVersionType;
40
+ export type GlobalDependencyType = 'required' | 'optional' | 'incompatible' | 'embedded';
41
+ export declare const DependencyTypeMap: {
42
+ required: string;
43
+ optional: string;
44
+ incompatible: string;
45
+ embedded: string;
46
+ };
40
47
  //# sourceMappingURL=curseforge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../../src/definitions/curseforge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACrC;;OAEG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IAEvC;;OAEG;IACH,yBAAyB,EAAE,qBAAqB,EAAE,CAAC;IAEnD;;OAEG;IACH,wBAAwB,EAAE,qBAAqB,EAAE,CAAC;IAElD;;OAEG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IAEvC;;OAEG;IACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAEjC;;OAEG;IACH,YAAY,EAAE,qBAAqB,EAAE,CAAC;CACzC;AAED,eAAO,MAAM,wBAAwB,EAAE,yBAItC,CAAC"}
1
+ {"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../../src/definitions/curseforge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACrC;;OAEG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IAEvC;;OAEG;IACH,yBAAyB,EAAE,qBAAqB,EAAE,CAAC;IAEnD;;OAEG;IACH,wBAAwB,EAAE,qBAAqB,EAAE,CAAC;IAElD;;OAEG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IAEvC;;OAEG;IACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAEjC;;OAEG;IACH,YAAY,EAAE,qBAAqB,EAAE,CAAC;CACzC;AAED,eAAO,MAAM,wBAAwB,EAAE,yBAItC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC1B,UAAU,GACV,UAAU,GACV,cAAc,GACd,UAAU,CAAC;AAEjB,eAAO,MAAM,iBAAiB;;;;;CAK7B,CAAC"}
@@ -3,4 +3,10 @@ export const BUKKIT_GAME_VERSION_TYPE = {
3
3
  name: 'Bukkit',
4
4
  slug: 'bukkit',
5
5
  };
6
+ export const DependencyTypeMap = {
7
+ required: 'requiredDependency',
8
+ optional: 'optionalDependency',
9
+ incompatible: 'incompatible',
10
+ embedded: 'embeddedLibrary',
11
+ };
6
12
  //# sourceMappingURL=curseforge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../../src/definitions/curseforge.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IAC/D,EAAE,EAAE,CAAC;IACL,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;CACjB,CAAC"}
1
+ {"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../../src/definitions/curseforge.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IAC/D,EAAE,EAAE,CAAC;IACL,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;CACjB,CAAC;AAQF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,iBAAiB;CAC9B,CAAC"}
@@ -1,8 +1,15 @@
1
+ import { GlobalDependencyType } from './curseforge';
1
2
  export type PluginConfig = {
2
3
  release_type?: 'alpha' | 'beta' | 'release';
3
4
  game_versions?: string | string[];
4
5
  mod_loaders?: string | string[];
5
6
  display_name?: string;
7
+ dependencies?: Array<{
8
+ slug: string;
9
+ curseforge_project_id?: string;
10
+ modrinth_project_id?: string;
11
+ type: GlobalDependencyType;
12
+ }>;
6
13
  strategies?: Record<any, any>[];
7
14
  glob?: string | string[];
8
15
  primary_file_glob: string | string[];
@@ -21,7 +28,7 @@ export type PluginConfig = {
21
28
  relations?: Array<{
22
29
  slug: string;
23
30
  project_id?: string;
24
- type: 'embedded_library' | 'incompatible' | 'optional_dependency' | 'required_dependency' | 'tool';
31
+ type: 'embeddedLibrary' | 'incompatible' | 'optionalDependency' | 'requiredDependency' | 'tool';
25
32
  }>;
26
33
  glob?: string | string[];
27
34
  primary_file_glob?: string | string[];
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-config.d.ts","sourceRoot":"","sources":["../../src/definitions/plugin-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACvB,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAEhC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAErC,UAAU,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAClC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACjC,yBAAyB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9C,uBAAuB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;QAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,SAAS,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,IAAI,EACE,kBAAkB,GAClB,cAAc,GACd,qBAAqB,GACrB,qBAAqB,GACrB,MAAM,CAAC;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,KAAK,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,eAAe,EACT,UAAU,GACV,UAAU,GACV,cAAc,GACd,UAAU,CAAC;SACpB,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EACD,QAAQ,GACR,UAAU,GACV,OAAO,GACP,UAAU,GACV,WAAW,GACX,SAAS,CAAC;QAChB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;QAChE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzC,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"plugin-config.d.ts","sourceRoot":"","sources":["../../src/definitions/plugin-config.ts"],"names":[],"mappings":"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"}
@@ -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,CAmJjB"}
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,CA8JjB"}
package/dist/modrinth.js CHANGED
@@ -36,7 +36,6 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
36
36
  project_id: projectId,
37
37
  file_parts: filePartNames,
38
38
  version_type: pluginConfig.release_type || 'release',
39
- dependencies: modrinth?.dependencies || [],
40
39
  featured: modrinth?.featured || false,
41
40
  status: modrinth?.status || 'listed',
42
41
  requested_status: modrinth?.requested_status || 'listed',
@@ -44,6 +43,20 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
44
43
  if (primaryFilePartName) {
45
44
  versionData.primary_file = primaryFilePartName;
46
45
  }
46
+ if (modrinth?.dependencies) {
47
+ versionData.dependencies = modrinth?.dependencies;
48
+ }
49
+ else {
50
+ let dependencies = [];
51
+ for (const dependency of pluginConfig.dependencies || []) {
52
+ dependencies.push({
53
+ project_id: dependency.modrinth_project_id ||
54
+ (await getModrinthProjectBySlug(dependency.slug, token)),
55
+ dependency_type: dependency.type,
56
+ });
57
+ }
58
+ versionData.dependencies = dependencies;
59
+ }
47
60
  const changelog = resolveAndRenderTemplate([modrinth?.changelog, nextRelease.notes], {
48
61
  ...context,
49
62
  ...strategy,
@@ -82,26 +95,35 @@ export async function publishToModrinth(pluginConfig, context, strategy) {
82
95
  }
83
96
  const headers = form.getHeaders();
84
97
  headers['Content-Length'] = form.getLengthSync();
85
- const versionResponse = await axios.post('https://api.modrinth.com/v2/version', form, {
98
+ const versionRes = await axios.post('https://api.modrinth.com/v2/version', form, {
86
99
  headers: {
87
100
  ...headers,
88
101
  Authorization: token,
89
102
  },
90
103
  validateStatus: (status) => status < 500,
91
104
  });
92
- const resData = versionResponse.data;
93
- if (versionResponse.status === 200) {
105
+ const resData = versionRes.data;
106
+ if (versionRes.status === 200) {
94
107
  logger.log(`Successfully published to Modrinth: ${resData.project_id} (File ID: ${resData.file_id})`);
95
- return versionResponse.data.id;
108
+ return versionRes.data.id;
96
109
  }
97
- else if (versionResponse.status === 400 ||
98
- versionResponse.status === 401) {
99
- throw new Error(`Failed to publish to Modrinth (${versionResponse.status}): ${resData.error}\n${resData.description}`);
110
+ else if (versionRes.status === 400 || versionRes.status === 401) {
111
+ throw new Error(`Failed to publish to Modrinth (${versionRes.status}): ${resData.error}\n${resData.description}`);
100
112
  }
101
113
  else {
102
- logger.log('Headers:', versionResponse.headers);
114
+ logger.log('Headers:', versionRes.headers);
103
115
  logger.log('Data:', resData);
104
- throw new Error(`Failed to publish to Modrinth (${versionResponse.status}): ${versionResponse.statusText}`);
116
+ throw new Error(`Failed to publish to Modrinth (${versionRes.status}): ${versionRes.statusText}`);
117
+ }
118
+ }
119
+ async function getModrinthProjectBySlug(slug, token) {
120
+ const projectRes = await axios.get(`https://api.modrinth.com/v2/project/${slug}`, {
121
+ headers: {
122
+ Authorization: token,
123
+ },
124
+ });
125
+ if (projectRes.status === 200) {
126
+ return projectRes.data.id;
105
127
  }
106
128
  }
107
129
  //# sourceMappingURL=modrinth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modrinth.js","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modrinth.js","sourceRoot":"","sources":["../src/modrinth.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semantic-release-minecraft",
3
- "version": "2.2.1",
3
+ "version": "2.3.1",
4
4
  "description": "Automated Release For Minecraft Project",
5
5
  "keywords": [
6
6
  "semantic-release",
package/src/curseforge.ts CHANGED
@@ -1,15 +1,16 @@
1
1
  import axios from 'axios';
2
2
  import FormData from 'form-data';
3
3
  import { readFileSync } from 'fs';
4
+ import lodash from 'lodash';
4
5
  import { basename } from 'path';
5
6
  import { PublishContext } from 'semantic-release';
7
+ import { DependencyTypeMap } from './definitions/curseforge.js';
6
8
  import { PluginConfig } from './definitions/plugin-config.js';
7
9
  import { findFilesAndPrimaryFile } from './utils/platform/utils.js';
8
10
  import {
9
11
  resolveAndRenderTemplate,
10
12
  resolveAndRenderTemplates,
11
13
  } from './utils/template-utils.js';
12
- import lodash from "lodash";
13
14
 
14
15
  /**
15
16
  * Publishes files to CurseForge.
@@ -134,7 +135,9 @@ function prepareMetadata(
134
135
  const metadata: any = {
135
136
  gameVersions: curseforgeGameVersionIds,
136
137
  releaseType: pluginConfig.release_type || 'release',
137
- changelog: lodash.template(curseforge?.changelog || context.nextRelease.notes)({...context, ...strategy}),
138
+ changelog: lodash.template(
139
+ curseforge?.changelog || context.nextRelease.notes
140
+ )({ ...context, ...strategy }),
138
141
  changelogType: curseforge?.changelog_type || 'markdown',
139
142
  isMarkedForManualRelease:
140
143
  curseforge?.is_marked_for_manual_release || false,
@@ -145,11 +148,32 @@ function prepareMetadata(
145
148
  : {},
146
149
  };
147
150
 
151
+ if (curseforge?.relations) {
152
+ metadata.relations = {
153
+ projects: curseforge?.relations.map((item) => ({
154
+ slug: item.slug,
155
+ projectId: item.project_id,
156
+ type: item.type,
157
+ })),
158
+ };
159
+ } else {
160
+ let projects = [];
161
+ for (const dependency of pluginConfig.dependencies || []) {
162
+ projects.push({
163
+ slug: dependency.slug,
164
+ projectId: dependency.curseforge_project_id,
165
+ type: DependencyTypeMap[dependency.type],
166
+ });
167
+ }
168
+ metadata.relations = {
169
+ projects,
170
+ };
171
+ }
172
+
148
173
  metadata.displayName =
149
174
  resolveAndRenderTemplate(
150
175
  [curseforge?.display_name, pluginConfig.display_name],
151
176
  {
152
-
153
177
  ...context,
154
178
  ...strategy,
155
179
  }
@@ -49,3 +49,16 @@ export const BUKKIT_GAME_VERSION_TYPE: CurseForgeGameVersionType = {
49
49
  name: 'Bukkit',
50
50
  slug: 'bukkit',
51
51
  };
52
+
53
+ export type GlobalDependencyType =
54
+ | 'required'
55
+ | 'optional'
56
+ | 'incompatible'
57
+ | 'embedded';
58
+
59
+ export const DependencyTypeMap = {
60
+ required: 'requiredDependency',
61
+ optional: 'optionalDependency',
62
+ incompatible: 'incompatible',
63
+ embedded: 'embeddedLibrary',
64
+ };
@@ -1,8 +1,16 @@
1
+ import { GlobalDependencyType } from './curseforge';
2
+
1
3
  export type PluginConfig = {
2
4
  release_type?: 'alpha' | 'beta' | 'release';
3
5
  game_versions?: string | string[];
4
6
  mod_loaders?: string | string[];
5
7
  display_name?: string;
8
+ dependencies?: Array<{
9
+ slug: string;
10
+ curseforge_project_id?: string;
11
+ modrinth_project_id?: string;
12
+ type: GlobalDependencyType;
13
+ }>;
6
14
 
7
15
  // Global release strategy configuration for multiple publish operations
8
16
  strategies?: Record<any, any>[];
@@ -26,10 +34,10 @@ export type PluginConfig = {
26
34
  slug: string;
27
35
  project_id?: string;
28
36
  type:
29
- | 'embedded_library'
37
+ | 'embeddedLibrary'
30
38
  | 'incompatible'
31
- | 'optional_dependency'
32
- | 'required_dependency'
39
+ | 'optionalDependency'
40
+ | 'requiredDependency'
33
41
  | 'tool';
34
42
  }>;
35
43
  glob?: string | string[];
package/src/modrinth.ts CHANGED
@@ -61,7 +61,6 @@ export async function publishToModrinth(
61
61
  project_id: projectId,
62
62
  file_parts: filePartNames,
63
63
  version_type: pluginConfig.release_type || 'release',
64
- dependencies: modrinth?.dependencies || [],
65
64
  featured: modrinth?.featured || false,
66
65
  status: modrinth?.status || 'listed',
67
66
  requested_status: modrinth?.requested_status || 'listed',
@@ -71,6 +70,21 @@ export async function publishToModrinth(
71
70
  versionData.primary_file = primaryFilePartName;
72
71
  }
73
72
 
73
+ if (modrinth?.dependencies) {
74
+ versionData.dependencies = modrinth?.dependencies;
75
+ } else {
76
+ let dependencies = [];
77
+ for (const dependency of pluginConfig.dependencies || []) {
78
+ dependencies.push({
79
+ project_id:
80
+ dependency.modrinth_project_id ||
81
+ (await getModrinthProjectBySlug(dependency.slug, token)),
82
+ dependency_type: dependency.type,
83
+ });
84
+ }
85
+ versionData.dependencies = dependencies;
86
+ }
87
+
74
88
  const changelog = resolveAndRenderTemplate(
75
89
  [modrinth?.changelog, nextRelease.notes],
76
90
  {
@@ -131,7 +145,7 @@ export async function publishToModrinth(
131
145
  const headers = form.getHeaders();
132
146
  headers['Content-Length'] = form.getLengthSync();
133
147
 
134
- const versionResponse = await axios.post(
148
+ const versionRes = await axios.post(
135
149
  'https://api.modrinth.com/v2/version',
136
150
  form,
137
151
  {
@@ -143,25 +157,39 @@ export async function publishToModrinth(
143
157
  }
144
158
  );
145
159
 
146
- const resData = versionResponse.data;
160
+ const resData = versionRes.data;
147
161
 
148
- if (versionResponse.status === 200) {
162
+ if (versionRes.status === 200) {
149
163
  logger.log(
150
164
  `Successfully published to Modrinth: ${resData.project_id} (File ID: ${resData.file_id})`
151
165
  );
152
- return versionResponse.data.id;
153
- } else if (
154
- versionResponse.status === 400 ||
155
- versionResponse.status === 401
156
- ) {
166
+ return versionRes.data.id;
167
+ } else if (versionRes.status === 400 || versionRes.status === 401) {
157
168
  throw new Error(
158
- `Failed to publish to Modrinth (${versionResponse.status}): ${resData.error}\n${resData.description}`
169
+ `Failed to publish to Modrinth (${versionRes.status}): ${resData.error}\n${resData.description}`
159
170
  );
160
171
  } else {
161
- logger.log('Headers:', versionResponse.headers);
172
+ logger.log('Headers:', versionRes.headers);
162
173
  logger.log('Data:', resData);
163
174
  throw new Error(
164
- `Failed to publish to Modrinth (${versionResponse.status}): ${versionResponse.statusText}`
175
+ `Failed to publish to Modrinth (${versionRes.status}): ${versionRes.statusText}`
165
176
  );
166
177
  }
167
178
  }
179
+
180
+ async function getModrinthProjectBySlug(
181
+ slug: string,
182
+ token: string
183
+ ): Promise<string | undefined> {
184
+ const projectRes = await axios.get(
185
+ `https://api.modrinth.com/v2/project/${slug}`,
186
+ {
187
+ headers: {
188
+ Authorization: token,
189
+ },
190
+ }
191
+ );
192
+ if (projectRes.status === 200) {
193
+ return projectRes.data.id;
194
+ }
195
+ }