mirror of https://github.com/halo-dev/halo
refactor: uinify some properties of plugins and themes (#4061)
#### What type of PR is this? /kind improvement /area core /milestone 2.7.x /kind api-change #### What this PR does / why we need it: 统一主题和插件描述文件的部分字段 1. 统一网站字段为 homepage,将主题的 website 标记为过时并兼容为 homepage 2. 主题添加 license 字段 3. 插件添加 repo #### Which issue(s) this PR fixes: Fixes #4011 #### Does this PR introduce a user-facing change? ```release-note 统一主题和插件描述文件的部分字段 ```pull/4104/head^2
parent
ff7ab4e4f1
commit
2791d2f0e5
|
@ -61,7 +61,7 @@ public class Plugin extends AbstractExtension {
|
|||
*
|
||||
* @see <a href="semver.org">semantic version</a>
|
||||
*/
|
||||
@Schema(required = true, pattern = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-("
|
||||
@Schema(requiredMode = REQUIRED, pattern = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-("
|
||||
+ "(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\."
|
||||
+ "(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\"
|
||||
+ ".[0-9a-zA-Z-]+)*))?$")
|
||||
|
@ -75,6 +75,8 @@ public class Plugin extends AbstractExtension {
|
|||
|
||||
private String homepage;
|
||||
|
||||
private String repo;
|
||||
|
||||
private String description;
|
||||
|
||||
private List<License> license;
|
||||
|
@ -94,6 +96,10 @@ public class Plugin extends AbstractExtension {
|
|||
private String configMapName;
|
||||
}
|
||||
|
||||
/**
|
||||
* In the future, we may consider using {@link run.halo.app.infra.model.License} instead of it.
|
||||
* But now, replace it will lead to incompatibility with downstream.
|
||||
*/
|
||||
@Data
|
||||
public static class License {
|
||||
private String name;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package run.halo.app.core.extension;
|
||||
|
||||
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED;
|
||||
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.util.List;
|
||||
|
@ -14,6 +15,7 @@ import org.springframework.util.Assert;
|
|||
import run.halo.app.extension.AbstractExtension;
|
||||
import run.halo.app.extension.GVK;
|
||||
import run.halo.app.infra.ConditionList;
|
||||
import run.halo.app.infra.model.License;
|
||||
|
||||
/**
|
||||
* <p>Theme extension.</p>
|
||||
|
@ -42,18 +44,21 @@ public class Theme extends AbstractExtension {
|
|||
public static class ThemeSpec {
|
||||
private static final String WILDCARD = "*";
|
||||
|
||||
@Schema(required = true, minLength = 1)
|
||||
@Schema(requiredMode = REQUIRED, minLength = 1)
|
||||
private String displayName;
|
||||
|
||||
@Schema(required = true)
|
||||
@Schema(requiredMode = REQUIRED)
|
||||
private Author author;
|
||||
|
||||
private String description;
|
||||
|
||||
private String logo;
|
||||
|
||||
@Deprecated(forRemoval = true, since = "2.7.0")
|
||||
private String website;
|
||||
|
||||
private String homepage;
|
||||
|
||||
private String repo;
|
||||
|
||||
private String version;
|
||||
|
@ -69,6 +74,8 @@ public class Theme extends AbstractExtension {
|
|||
|
||||
private String configMapName;
|
||||
|
||||
private List<License> license;
|
||||
|
||||
@Schema
|
||||
private CustomTemplates customTemplates;
|
||||
|
||||
|
@ -89,6 +96,13 @@ public class Theme extends AbstractExtension {
|
|||
}
|
||||
return StringUtils.defaultString(this.require, WILDCARD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compatible with {@link #website} property.
|
||||
*/
|
||||
public String getHomepage() {
|
||||
return StringUtils.defaultString(this.homepage, this.website);
|
||||
}
|
||||
}
|
||||
|
||||
@Data
|
||||
|
@ -125,7 +139,7 @@ public class Theme extends AbstractExtension {
|
|||
@ToString
|
||||
public static class Author {
|
||||
|
||||
@Schema(required = true, minLength = 1)
|
||||
@Schema(requiredMode = REQUIRED, minLength = 1)
|
||||
private String name;
|
||||
|
||||
private String website;
|
||||
|
@ -138,7 +152,6 @@ public class Theme extends AbstractExtension {
|
|||
private List<TemplateDescriptor> page;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Type used to describe custom template page.
|
||||
*
|
||||
|
@ -148,14 +161,14 @@ public class Theme extends AbstractExtension {
|
|||
@Data
|
||||
public static class TemplateDescriptor {
|
||||
|
||||
@Schema(required = true, minLength = 1)
|
||||
@Schema(requiredMode = REQUIRED, minLength = 1)
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
private String screenshot;
|
||||
|
||||
@Schema(required = true, minLength = 1)
|
||||
@Schema(requiredMode = REQUIRED, minLength = 1)
|
||||
private String file;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package run.halo.app.infra.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Common data objects for license.
|
||||
*/
|
||||
@Data
|
||||
public class License {
|
||||
private String name;
|
||||
private String url;
|
||||
}
|
|
@ -39,7 +39,7 @@ class ThemeTest {
|
|||
|
||||
themeSpec.setRepo("https://test.com");
|
||||
themeSpec.setLogo("https://test.com");
|
||||
themeSpec.setWebsite("https://test.com");
|
||||
themeSpec.setHomepage("https://test.com");
|
||||
themeSpec.setDescription("test-description");
|
||||
themeSpec.setConfigMapName("test-config-map");
|
||||
themeSpec.setSettingName("test-setting");
|
||||
|
@ -56,7 +56,7 @@ class ThemeTest {
|
|||
},
|
||||
"description": "test-description",
|
||||
"logo": "https://test.com",
|
||||
"website": "https://test.com",
|
||||
"homepage": "https://test.com",
|
||||
"repo": "https://test.com",
|
||||
"version": "*",
|
||||
"requires": "*",
|
||||
|
|
|
@ -86,6 +86,12 @@ export interface PluginSpec {
|
|||
* @memberof PluginSpec
|
||||
*/
|
||||
pluginDependencies?: { [key: string]: string };
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof PluginSpec
|
||||
*/
|
||||
repo?: string;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
|
|
@ -18,6 +18,9 @@ import { Author } from "./author";
|
|||
// May contain unused imports in some cases
|
||||
// @ts-ignore
|
||||
import { CustomTemplates } from "./custom-templates";
|
||||
// May contain unused imports in some cases
|
||||
// @ts-ignore
|
||||
import { License } from "./license";
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -55,6 +58,18 @@ export interface ThemeSpec {
|
|||
* @memberof ThemeSpec
|
||||
*/
|
||||
displayName: string;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof ThemeSpec
|
||||
*/
|
||||
homepage?: string;
|
||||
/**
|
||||
*
|
||||
* @type {Array<License>}
|
||||
* @memberof ThemeSpec
|
||||
*/
|
||||
license?: Array<License>;
|
||||
/**
|
||||
*
|
||||
* @type {string}
|
||||
|
@ -96,6 +111,7 @@ export interface ThemeSpec {
|
|||
*
|
||||
* @type {string}
|
||||
* @memberof ThemeSpec
|
||||
* @deprecated
|
||||
*/
|
||||
website?: string;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue