mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-12-29 10:04:49 -05:00
Documented target-specific properties
Also, GitHub should no longer emit warnings when someone uses them. Closes #13
This commit is contained in:
parent
f89c9cab04
commit
7aa44c48ce
7 changed files with 103 additions and 55 deletions
30
README.md
30
README.md
|
@ -124,6 +124,36 @@ jobs:
|
||||||
| [retry-attempts](#user-content-retry-attempts) | The maximum number of attempts to publish assets | `2` | `2` <br> `10` <br> `-1` |
|
| [retry-attempts](#user-content-retry-attempts) | The maximum number of attempts to publish assets | `2` | `2` <br> `10` <br> `-1` |
|
||||||
| [retry-delay](#user-content-retry-delay) | Time delay between attempts to publish assets (in milliseconds) | `10000` | `10000` <br> `60000` <br> `0` |
|
| [retry-delay](#user-content-retry-delay) | Time delay between attempts to publish assets (in milliseconds) | `10000` | `10000` <br> `60000` <br> `0` |
|
||||||
|
|
||||||
|
Note, that you can use any top-level property *(`name`, `version`, `dependencies`, `files`, etc.)* as a target-specific one. This can help you fine-tune `mc-publish` to suit your tastes and needs. For example, consider the following configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# It is a good idea to share the same primary file among different targets
|
||||||
|
files-primary: build/libs/!(*-@(dev\|sources)).jar
|
||||||
|
|
||||||
|
modrinth-id: aaaAAAaa
|
||||||
|
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
# Modrinth-specific name for your mod
|
||||||
|
modrinth-name: Modrinth Mod
|
||||||
|
# Modrinth-specific secondary files
|
||||||
|
modrinth-files-secondary: build/libs/*-@(dev\|sources).jar
|
||||||
|
# Modrinth-specific dependencies
|
||||||
|
# It is possible to use project ids instead of slugs
|
||||||
|
modrinth-dependencies: |
|
||||||
|
AANobbMI | depends | *
|
||||||
|
sodium
|
||||||
|
|
||||||
|
curseforge-id: 0
|
||||||
|
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
|
||||||
|
# CurseForge-specific name for your mod
|
||||||
|
curseforge-name: CurseForge Mod
|
||||||
|
# CurseForge-specific secondary files
|
||||||
|
curseforge-files-secondary: ""
|
||||||
|
# CurseForge-specific dependencies
|
||||||
|
# It is not possible to use project ids instead of slugs
|
||||||
|
curseforge-dependencies: |
|
||||||
|
sodium | depends | *
|
||||||
|
```
|
||||||
|
|
||||||
#### modrinth-id
|
#### modrinth-id
|
||||||
|
|
||||||
The ID of the Modrinth project to upload to.
|
The ID of the Modrinth project to upload to.
|
||||||
|
|
|
@ -5,125 +5,80 @@ branding:
|
||||||
color: orange
|
color: orange
|
||||||
icon: upload
|
icon: upload
|
||||||
inputs:
|
inputs:
|
||||||
|
modrinth:
|
||||||
|
publisher: true
|
||||||
|
curseforge:
|
||||||
|
publisher: true
|
||||||
|
github:
|
||||||
|
publisher: true
|
||||||
|
|
||||||
modrinth-id:
|
modrinth-id:
|
||||||
description: The ID of the Modrinth project to upload to
|
description: The ID of the Modrinth project to upload to
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
modrinth-featured:
|
modrinth-featured:
|
||||||
description: Indicates whether the version should be featured on Modrinth or not
|
description: Indicates whether the version should be featured on Modrinth or not
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
modrinth-unfeature-mode:
|
modrinth-unfeature-mode:
|
||||||
description: Determines the way automatic unfeaturing of older Modrinth versions works
|
description: Determines the way automatic unfeaturing of older Modrinth versions works
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
modrinth-token:
|
modrinth-token:
|
||||||
description: A valid token for the Modrinth API
|
description: A valid token for the Modrinth API
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
curseforge-id:
|
curseforge-id:
|
||||||
description: The ID of the CurseForge project to upload to
|
description: The ID of the CurseForge project to upload to
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
curseforge-token:
|
curseforge-token:
|
||||||
description: A valid token for the CurseForge API
|
description: A valid token for the CurseForge API
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
github-tag:
|
github-tag:
|
||||||
description: The tag name of the release to upload assets to
|
description: The tag name of the release to upload assets to
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-generate-changelog:
|
github-generate-changelog:
|
||||||
description: Indicates whether to automatically generate the changelog for this release. If changelog is specified, it will be pre-pended to the automatically generated notes. Unused if the GitHub Release already exists
|
description: Indicates whether to automatically generate the changelog for this release. If changelog is specified, it will be pre-pended to the automatically generated notes. Unused if the GitHub Release already exists
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-draft:
|
github-draft:
|
||||||
description: true to create a draft (unpublished) release, false to create a published one. Unused if the GitHub Release already exists
|
description: true to create a draft (unpublished) release, false to create a published one. Unused if the GitHub Release already exists
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-prerelease:
|
github-prerelease:
|
||||||
description: true to identify the release as a prerelease, false to identify the release as a full release. Unused if the GitHub Release already exists
|
description: true to identify the release as a prerelease, false to identify the release as a full release. Unused if the GitHub Release already exists
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-commitish:
|
github-commitish:
|
||||||
description: Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists
|
description: Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-discussion:
|
github-discussion:
|
||||||
description: If specified, a discussion of the specified category is created and linked to the release. Unused if the GitHub Release already exists
|
description: If specified, a discussion of the specified category is created and linked to the release. Unused if the GitHub Release already exists
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
github-token:
|
github-token:
|
||||||
description: A valid token for the GitHub API
|
description: A valid token for the GitHub API
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
files:
|
files:
|
||||||
description: A glob of the files to upload
|
description: A glob of the files to upload
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
files-primary:
|
files-primary:
|
||||||
description: A glob of the primary files to upload
|
description: A glob of the primary files to upload
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
files-secondary:
|
files-secondary:
|
||||||
description: A glob of the secondary files to upload
|
description: A glob of the secondary files to upload
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
name:
|
name:
|
||||||
description: The name of the version
|
description: The name of the version
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
version:
|
version:
|
||||||
description: The version number
|
description: The version number
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
version-type:
|
version-type:
|
||||||
description: The type of the release - alpha, beta, or release
|
description: The type of the release - alpha, beta, or release
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
changelog:
|
changelog:
|
||||||
description: The changelog for this version
|
description: The changelog for this version
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
changelog-file:
|
changelog-file:
|
||||||
description: A glob of the changelog file
|
description: A glob of the changelog file
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
loaders:
|
loaders:
|
||||||
description: A list of supported mod loaders
|
description: A list of supported mod loaders
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
game-versions:
|
game-versions:
|
||||||
description: A list of supported Minecraft versions
|
description: A list of supported Minecraft versions
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
dependencies:
|
dependencies:
|
||||||
description: A list of dependencies
|
description: A list of dependencies
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
version-resolver:
|
version-resolver:
|
||||||
description: Determines the way automatic game-versions resolvement works
|
description: Determines the way automatic game-versions resolvement works
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
java:
|
java:
|
||||||
description: A list of supported Java versions
|
description: A list of supported Java versions
|
||||||
required: false
|
|
||||||
default: ${undefined}
|
|
||||||
|
|
||||||
retry-attempts:
|
retry-attempts:
|
||||||
description: The maximum number of attempts to publish assets
|
description: The maximum number of attempts to publish assets
|
||||||
required: false
|
|
||||||
default: 2
|
default: 2
|
||||||
|
unique: true
|
||||||
retry-delay:
|
retry-delay:
|
||||||
description: Time delay between attempts to publish assets (in milliseconds)
|
description: Time delay between attempts to publish assets (in milliseconds)
|
||||||
required: false
|
|
||||||
default: 10000
|
default: 10000
|
||||||
|
unique: true
|
||||||
runs:
|
runs:
|
||||||
using: node12
|
using: node12
|
||||||
main: dist/index.js
|
main: dist/index.js
|
6
package-lock.json
generated
6
package-lock.json
generated
|
@ -6481,6 +6481,12 @@
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"yaml": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-JbfdlHKGP2Ik9IHylzWlGd4pPK++EU46/IxMykphS2ZKw7a7h+dHNmcXObLgpRDriBY+rpWslldikckX8oruWQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"yargs": {
|
"yargs": {
|
||||||
"version": "17.5.1",
|
"version": "17.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
"eslint": "^8.16.0",
|
"eslint": "^8.16.0",
|
||||||
"jest": "^28.1.0",
|
"jest": "^28.1.0",
|
||||||
"typescript": "^4.7.2",
|
"typescript": "^4.7.2",
|
||||||
|
"yaml": "2.0.0",
|
||||||
"yazl": "^2.5.1"
|
"yazl": "^2.5.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
import fixDeprecatedBuffer from "./buffer-fix";
|
import fixDeprecatedBuffer from "./fixes/buffer-fix";
|
||||||
|
import processActionYamlTemplate from "./templates/action-yml";
|
||||||
|
|
||||||
fixDeprecatedBuffer();
|
fixDeprecatedBuffer();
|
||||||
|
processActionYamlTemplate();
|
||||||
|
|
54
scripts/templates/action-yml.ts
Normal file
54
scripts/templates/action-yml.ts
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import fs from "fs";
|
||||||
|
import yaml from "yaml";
|
||||||
|
|
||||||
|
interface ActionInput {
|
||||||
|
description?: string;
|
||||||
|
required?: boolean;
|
||||||
|
default?: string;
|
||||||
|
unique?: boolean;
|
||||||
|
publisher?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function processActionYamlTemplate() {
|
||||||
|
processActionTemplate("./action.template.yml", "./action.yml");
|
||||||
|
}
|
||||||
|
|
||||||
|
function processActionTemplate(pathIn: string, pathOut: string) {
|
||||||
|
const content = fs.readFileSync(pathIn, "utf8");
|
||||||
|
const action = yaml.parse(content) as { inputs?: Record<string, ActionInput> };
|
||||||
|
if (!action.inputs) {
|
||||||
|
action.inputs = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
action.inputs = processInputs(action.inputs);
|
||||||
|
|
||||||
|
const updatedContent = yaml.stringify(action);
|
||||||
|
fs.writeFileSync(pathOut, updatedContent, "utf8");
|
||||||
|
}
|
||||||
|
|
||||||
|
function processInputs(inputs: Record<string, ActionInput>) {
|
||||||
|
const publishers = Object.entries(inputs).filter(([_, input]) => input.publisher).map(([key, _]) => key);
|
||||||
|
const nestedInputs = Object.entries(inputs).filter(([key, input]) => !input.publisher && !input.unique && !publishers.find(p => key.startsWith(p)));
|
||||||
|
|
||||||
|
for (const [key, input] of Object.entries(inputs)) {
|
||||||
|
if (input.publisher) {
|
||||||
|
delete inputs[key];
|
||||||
|
}
|
||||||
|
delete input.unique;
|
||||||
|
|
||||||
|
if (typeof input.required !== "boolean") {
|
||||||
|
input.required = false;
|
||||||
|
}
|
||||||
|
if (input.default === undefined) {
|
||||||
|
input.default = "${undefined}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const publisher of publishers) {
|
||||||
|
for (const [name, input] of nestedInputs) {
|
||||||
|
inputs[`${publisher}-${name}`] = { ...input };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputs;
|
||||||
|
}
|
Loading…
Reference in a new issue