Compare commits

...
Author SHA1 Message Date
github-actions[bot] e75c94e3f6 CI Build Artifacts 2026-08-13 02:40:45 +00:00
github-actions[bot] ed511ffa52 CI Build Artifacts 2026-08-06 03:37:56 +00:00
github-actions[bot] baedb241d0 CI Build Artifacts 2026-07-09 10:25:06 +00:00
github-actions[bot] 76d3da0420 CI Build Artifacts 2026-06-29 09:03:30 +00:00
github-actions[bot] 8a4e687c61 CI Build Artifacts 2026-04-24 08:42:41 +00:00
1030 changed files with 37565 additions and 2 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+111 -1
View File
@@ -1,6 +1,116 @@
apiVersion: v1
entries:
harvester:
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.2
created: "2026-08-06T03:37:29.641760406Z"
description: Rancher UI Extension for Harvester
digest: 268213cdf656bd6b995b1e96659eefd6a649e9166588442ed452ec6f9e37ded8
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
urls:
- assets/harvester/harvester-1.8.2.tgz
version: 1.8.2
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.1
created: "2026-06-29T09:03:05.788811487Z"
description: Rancher UI Extension for Harvester
digest: d3421615d52a305a3ffb160f09680200fc4336fb7cfd6153b9fd89c31aaf9e9c
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
urls:
- assets/harvester/harvester-1.8.1.tgz
version: 1.8.1
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.0
created: "2026-04-24T08:42:25.876102825Z"
description: Rancher UI Extension for Harvester
digest: 3d59157b1f071cf7e6da5efa2024c2484681075c18b1ef1ee9d114805b995af9
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
urls:
- assets/harvester/harvester-1.8.0.tgz
version: 1.8.0
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/rancher-version: '>= 2.13.0-0'
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.7.3
created: "2026-08-13T02:40:24.127885544Z"
description: Rancher UI Extension for Harvester
digest: a6ca6cab128884cd2bb9b01cfb29cfa6778dbd4624c06068a05c6d7fcbc80635
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
urls:
- assets/harvester/harvester-1.7.3.tgz
version: 1.7.3
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/rancher-version: '>= 2.13.0-0'
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.7.2
created: "2026-07-09T10:22:38.522196614Z"
description: Rancher UI Extension for Harvester
digest: 596cffcf148af5fed7ad4a42f31666265fff66b837c78442d77bf8288b681105
icon: https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
name: harvester
type: application
urls:
- assets/harvester/harvester-1.7.2.tgz
version: 1.7.2
- annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/display-name: Harvester
@@ -309,4 +419,4 @@ entries:
urls:
- assets/harvester/harvester-1.0.0.tgz
version: 1.0.0
generated: "2026-02-09T01:38:47.351589605Z"
generated: "2026-08-13T02:40:24.127443128Z"
+19
View File
@@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/rancher-version: '>= 2.13.0-0'
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.7.2
description: Rancher UI Extension for Harvester
name: harvester
type: application
version: 1.7.2
icon: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
+178
View File
@@ -0,0 +1,178 @@
# harvester-ui-extension
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
> **Note:**
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
## Installation
For detailed installation instructions, please refer to the [official Harvester documentation](https://docs.harvesterhci.io/v1.5/rancher/harvester-ui-extension#installation-on-rancher-210).
## Development Setup
Ensure **Node.js v20 or later** is installed for development and debugging.
### Standalone Mode
Run the extension standalone with hot reload at `https://localhost:8005`.
```bash
# Install dependencies
yarn install
# Start the development server
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
# Example with specific server version
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
```
You may also define environment variables in a `.env` file:
```env
RANCHER_ENV=harvester
VUE_APP_SERVER_VERSION=v1.5.0
API=https://192.168.1.123
```
### Rancher Integration Mode
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
```bash
API=https://your-rancher-ip yarn dev
```
## Commit Message Guidelines
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
### Commit Message Format
All commit messages must follow the conventional commit format:
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Supported Types
- **feat**: New features
- **fix**: Bug fixes
- **docs**: Documentation changes
- **style**: Code style changes (formatting, missing semicolons, etc.)
- **refactor**: Code refactoring
- **perf**: Performance improvements
- **test**: Adding or updating tests
- **build**: Build system or external dependencies
- **ci**: CI/CD changes
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
- **wip**: Work in progress
- **deps**: Dependency updates
- **security**: Security fixes
### Examples
```bash
# Feature
git commit -m "feat: add new virtual machine creation wizard"
# Bug fix
git commit -m "fix: resolve memory leak in VM console"
# Documentation
git commit -m "docs: update installation instructions"
# Breaking change
git commit -m "feat!: change API endpoint structure
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
```
### Git Hooks
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
- **pre-commit**: Runs ESLint to ensure code quality
- **commit-msg**: Validates commit message format using commit-lint
These hooks are automatically installed when you run `yarn install`.
### Manual Validation
You can manually validate commit messages:
```bash
# Validate the last commit
yarn commitlint
# Validate a specific commit
npx commitlint --from <commit-hash>
# Validate a range of commits
npx commitlint --from <start-hash> --to <end-hash>
```
## Branch Structure
- **`main`** – Main development branch
- **`release-harvester-vX.Y`** – Stable release branches per version series
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
> **Note:**
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
## Testing Guidelines
### UI Extension Testing
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
- Examples:
- Test `1.0.x` series → `v1.0-head`
- Test `1.5.x` series → `v1.5-head`
**Steps:**
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
2. Refresh the Harvester repository using the target `vX.Y-head` branch
3. Go to the **Extensions** page and install the desired version
### Standalone Mode Testing
To test the standalone UI, configure Harvester to load the UI from an external source.
- Examples of `ui-index`:
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
**Steps:**
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
2. Set **ui-source** to `External`
3. Set **ui-index** to the desired URL
## Contributing
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
## License
Copyright (c) 2014-2025 [SUSE, LLC.](https://www.suse.com/)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "extension-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "extension-server.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "extension-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "extension-server.labels" -}}
helm.sh/chart: {{ include "extension-server.chart" . }}
{{ include "extension-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "extension-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "extension-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Pkg annotations
*/}}
{{- define "extension-server.pluginMetadata" -}}
{{- with .Values.plugin.metadata }}
{{- range $key, $value := . }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
+15
View File
@@ -0,0 +1,15 @@
apiVersion: catalog.cattle.io/v1
kind: UIPlugin
metadata:
name: {{ include "extension-server.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "extension-server.labels" . | nindent 4 }}
spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: {{ .Values.plugin.endpoint | quote }}
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
+16
View File
@@ -0,0 +1,16 @@
nameOverride: ""
fullnameOverride: ""
plugin:
enabled: true
versionOverride: ""
endpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.7.2
compressedEndpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.7.2.tgz
noCache: false
noAuth: false
metadata:
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: ">= 1.16.0-0"
catalog.cattle.io/rancher-version: ">= 2.13.0-0"
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
+19
View File
@@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/rancher-version: '>= 2.13.0-0'
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.7.3
description: Rancher UI Extension for Harvester
name: harvester
type: application
version: 1.7.3
icon: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
+178
View File
@@ -0,0 +1,178 @@
# harvester-ui-extension
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
> **Note:**
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
## Installation
For detailed installation instructions, please refer to the [official Harvester documentation](https://docs.harvesterhci.io/v1.5/rancher/harvester-ui-extension#installation-on-rancher-210).
## Development Setup
Ensure **Node.js v20 or later** is installed for development and debugging.
### Standalone Mode
Run the extension standalone with hot reload at `https://localhost:8005`.
```bash
# Install dependencies
yarn install
# Start the development server
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
# Example with specific server version
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
```
You may also define environment variables in a `.env` file:
```env
RANCHER_ENV=harvester
VUE_APP_SERVER_VERSION=v1.5.0
API=https://192.168.1.123
```
### Rancher Integration Mode
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
```bash
API=https://your-rancher-ip yarn dev
```
## Commit Message Guidelines
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
### Commit Message Format
All commit messages must follow the conventional commit format:
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Supported Types
- **feat**: New features
- **fix**: Bug fixes
- **docs**: Documentation changes
- **style**: Code style changes (formatting, missing semicolons, etc.)
- **refactor**: Code refactoring
- **perf**: Performance improvements
- **test**: Adding or updating tests
- **build**: Build system or external dependencies
- **ci**: CI/CD changes
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
- **wip**: Work in progress
- **deps**: Dependency updates
- **security**: Security fixes
### Examples
```bash
# Feature
git commit -m "feat: add new virtual machine creation wizard"
# Bug fix
git commit -m "fix: resolve memory leak in VM console"
# Documentation
git commit -m "docs: update installation instructions"
# Breaking change
git commit -m "feat!: change API endpoint structure
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
```
### Git Hooks
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
- **pre-commit**: Runs ESLint to ensure code quality
- **commit-msg**: Validates commit message format using commit-lint
These hooks are automatically installed when you run `yarn install`.
### Manual Validation
You can manually validate commit messages:
```bash
# Validate the last commit
yarn commitlint
# Validate a specific commit
npx commitlint --from <commit-hash>
# Validate a range of commits
npx commitlint --from <start-hash> --to <end-hash>
```
## Branch Structure
- **`main`** – Main development branch
- **`release-harvester-vX.Y`** – Stable release branches per version series
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
> **Note:**
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
## Testing Guidelines
### UI Extension Testing
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
- Examples:
- Test `1.0.x` series → `v1.0-head`
- Test `1.5.x` series → `v1.5-head`
**Steps:**
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
2. Refresh the Harvester repository using the target `vX.Y-head` branch
3. Go to the **Extensions** page and install the desired version
### Standalone Mode Testing
To test the standalone UI, configure Harvester to load the UI from an external source.
- Examples of `ui-index`:
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
**Steps:**
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
2. Set **ui-source** to `External`
3. Set **ui-index** to the desired URL
## Contributing
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
## License
Copyright (c) 2014-2025 [SUSE, LLC.](https://www.suse.com/)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "extension-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "extension-server.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "extension-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "extension-server.labels" -}}
helm.sh/chart: {{ include "extension-server.chart" . }}
{{ include "extension-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "extension-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "extension-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Pkg annotations
*/}}
{{- define "extension-server.pluginMetadata" -}}
{{- with .Values.plugin.metadata }}
{{- range $key, $value := . }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
+15
View File
@@ -0,0 +1,15 @@
apiVersion: catalog.cattle.io/v1
kind: UIPlugin
metadata:
name: {{ include "extension-server.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "extension-server.labels" . | nindent 4 }}
spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: {{ .Values.plugin.endpoint | quote }}
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
+16
View File
@@ -0,0 +1,16 @@
nameOverride: ""
fullnameOverride: ""
plugin:
enabled: true
versionOverride: ""
endpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.7.3
compressedEndpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.7.3.tgz
noCache: false
noAuth: false
metadata:
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: ">= 1.16.0-0"
catalog.cattle.io/rancher-version: ">= 2.13.0-0"
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
+19
View File
@@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.0
description: Rancher UI Extension for Harvester
name: harvester
type: application
version: 1.8.0
icon: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
+177
View File
@@ -0,0 +1,177 @@
# harvester-ui-extension
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
> **Note:**
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
## Installation
For Harvester UI extension installation instructions, please refer to the page **Rancher Integration** -> **Harvester UI Extension** in [official Harvester documentation](https://docs.harvesterhci.io).
## Development Setup
Ensure **Node.js v20 or later** is installed for development and debugging.
### Standalone Mode
Run the extension standalone with hot reload at `https://localhost:8005`.
```bash
# Install dependencies
yarn install
# Start the development server
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
# Example with specific server version
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
```
You may also define environment variables in a `.env` file:
```env
RANCHER_ENV=harvester
VUE_APP_SERVER_VERSION=v1.5.0
API=https://192.168.1.123
```
### Rancher Integration Mode
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
```bash
API=https://your-rancher-ip yarn dev
```
## Commit Message Guidelines
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
### Commit Message Format
All commit messages must follow the conventional commit format:
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Supported Types
- **feat**: New features
- **fix**: Bug fixes
- **docs**: Documentation changes
- **style**: Code style changes (formatting, missing semicolons, etc.)
- **refactor**: Code refactoring
- **perf**: Performance improvements
- **test**: Adding or updating tests
- **build**: Build system or external dependencies
- **ci**: CI/CD changes
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
- **wip**: Work in progress
- **deps**: Dependency updates
- **security**: Security fixes
### Examples
```bash
# Feature
git commit -m "feat: add new virtual machine creation wizard"
# Bug fix
git commit -m "fix: resolve memory leak in VM console"
# Documentation
git commit -m "docs: update installation instructions"
# Breaking change
git commit -m "feat!: change API endpoint structure
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
```
### Git Hooks
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
- **pre-commit**: Runs ESLint to ensure code quality
- **commit-msg**: Validates commit message format using commit-lint
These hooks are automatically installed when you run `yarn install`.
### Manual Validation
You can manually validate commit messages:
```bash
# Validate the last commit
yarn commitlint
# Validate a specific commit
npx commitlint --from <commit-hash>
# Validate a range of commits
npx commitlint --from <start-hash> --to <end-hash>
```
## Branch Structure
- **`main`** – Main development branch
- **`release-harvester-vX.Y`** – Stable release branches per version series
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
> **Note:**
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
## Testing Guidelines
### UI Extension Testing
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
- Examples:
- Test `1.0.x` series → `v1.0-head`
- Test `1.5.x` series → `v1.5-head`
**Steps:**
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
2. Refresh the Harvester repository using the target `vX.Y-head` branch
3. Go to the **Extensions** page and install the desired version
### Standalone Mode Testing
To test the standalone UI, configure Harvester to load the UI from an external source.
- Examples of `ui-index`:
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
**Steps:**
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
2. Set **ui-source** to `External`
3. Set **ui-index** to the desired URL
## Contributing
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
## License
Copyright (c) 2014-2026 [SUSE, LLC.](https://www.suse.com/)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "extension-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "extension-server.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "extension-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "extension-server.labels" -}}
helm.sh/chart: {{ include "extension-server.chart" . }}
{{ include "extension-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "extension-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "extension-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Pkg annotations
*/}}
{{- define "extension-server.pluginMetadata" -}}
{{- with .Values.plugin.metadata }}
{{- range $key, $value := . }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
+15
View File
@@ -0,0 +1,15 @@
apiVersion: catalog.cattle.io/v1
kind: UIPlugin
metadata:
name: {{ include "extension-server.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "extension-server.labels" . | nindent 4 }}
spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: {{ .Values.plugin.endpoint | quote }}
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
+16
View File
@@ -0,0 +1,16 @@
nameOverride: ""
fullnameOverride: ""
plugin:
enabled: true
versionOverride: ""
endpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.0
compressedEndpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.0.tgz
noCache: false
noAuth: false
metadata:
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: ">= 1.16.0-0"
catalog.cattle.io/rancher-version: ">= 2.14.0-0"
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
+19
View File
@@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.1
description: Rancher UI Extension for Harvester
name: harvester
type: application
version: 1.8.1
icon: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
+177
View File
@@ -0,0 +1,177 @@
# harvester-ui-extension
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
> **Note:**
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
## Installation
For Harvester UI extension installation instructions, please refer to the page **Rancher Integration** -> **Harvester UI Extension** in [official Harvester documentation](https://docs.harvesterhci.io).
## Development Setup
Ensure **Node.js v20 or later** is installed for development and debugging.
### Standalone Mode
Run the extension standalone with hot reload at `https://localhost:8005`.
```bash
# Install dependencies
yarn install
# Start the development server
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
# Example with specific server version
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
```
You may also define environment variables in a `.env` file:
```env
RANCHER_ENV=harvester
VUE_APP_SERVER_VERSION=v1.5.0
API=https://192.168.1.123
```
### Rancher Integration Mode
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
```bash
API=https://your-rancher-ip yarn dev
```
## Commit Message Guidelines
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
### Commit Message Format
All commit messages must follow the conventional commit format:
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Supported Types
- **feat**: New features
- **fix**: Bug fixes
- **docs**: Documentation changes
- **style**: Code style changes (formatting, missing semicolons, etc.)
- **refactor**: Code refactoring
- **perf**: Performance improvements
- **test**: Adding or updating tests
- **build**: Build system or external dependencies
- **ci**: CI/CD changes
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
- **wip**: Work in progress
- **deps**: Dependency updates
- **security**: Security fixes
### Examples
```bash
# Feature
git commit -m "feat: add new virtual machine creation wizard"
# Bug fix
git commit -m "fix: resolve memory leak in VM console"
# Documentation
git commit -m "docs: update installation instructions"
# Breaking change
git commit -m "feat!: change API endpoint structure
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
```
### Git Hooks
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
- **pre-commit**: Runs ESLint to ensure code quality
- **commit-msg**: Validates commit message format using commit-lint
These hooks are automatically installed when you run `yarn install`.
### Manual Validation
You can manually validate commit messages:
```bash
# Validate the last commit
yarn commitlint
# Validate a specific commit
npx commitlint --from <commit-hash>
# Validate a range of commits
npx commitlint --from <start-hash> --to <end-hash>
```
## Branch Structure
- **`main`** – Main development branch
- **`release-harvester-vX.Y`** – Stable release branches per version series
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
> **Note:**
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
## Testing Guidelines
### UI Extension Testing
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
- Examples:
- Test `1.0.x` series → `v1.0-head`
- Test `1.5.x` series → `v1.5-head`
**Steps:**
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
2. Refresh the Harvester repository using the target `vX.Y-head` branch
3. Go to the **Extensions** page and install the desired version
### Standalone Mode Testing
To test the standalone UI, configure Harvester to load the UI from an external source.
- Examples of `ui-index`:
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
**Steps:**
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
2. Set **ui-source** to `External`
3. Set **ui-index** to the desired URL
## Contributing
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
## License
Copyright (c) 2014-2026 [SUSE, LLC.](https://www.suse.com/)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "extension-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "extension-server.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "extension-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "extension-server.labels" -}}
helm.sh/chart: {{ include "extension-server.chart" . }}
{{ include "extension-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "extension-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "extension-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Pkg annotations
*/}}
{{- define "extension-server.pluginMetadata" -}}
{{- with .Values.plugin.metadata }}
{{- range $key, $value := . }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
+15
View File
@@ -0,0 +1,15 @@
apiVersion: catalog.cattle.io/v1
kind: UIPlugin
metadata:
name: {{ include "extension-server.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "extension-server.labels" . | nindent 4 }}
spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: {{ .Values.plugin.endpoint | quote }}
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
+16
View File
@@ -0,0 +1,16 @@
nameOverride: ""
fullnameOverride: ""
plugin:
enabled: true
versionOverride: ""
endpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.1
compressedEndpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.1.tgz
noCache: false
noAuth: false
metadata:
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: ">= 1.16.0-0"
catalog.cattle.io/rancher-version: ">= 2.14.0-0"
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
+19
View File
@@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
catalog.cattle.io/os: linux
catalog.cattle.io/permits-os: linux, windows
catalog.cattle.io/scope: management
catalog.cattle.io/ui-component: plugins
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: '>= 1.16.0-0'
catalog.cattle.io/rancher-version: '>= 2.14.0-0'
catalog.cattle.io/ui-extensions-version: '>= 3.0.0 < 4.0.0'
apiVersion: v2
appVersion: 1.8.2
description: Rancher UI Extension for Harvester
name: harvester
type: application
version: 1.8.2
icon: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/main/pkg/harvester/icon.svg
+177
View File
@@ -0,0 +1,177 @@
# harvester-ui-extension
The Harvester UI Extension is a Rancher extension that provides the user interface for [Harvester](https://harvesterhci.io) within the [Rancher Dashboard](https://github.com/rancher/dashboard).
> **Note:**
> This extension is available starting from **Rancher 2.10.0**. Ensure your Rancher version is **2.10.0 or later** to access Harvester integration.
## Installation
For Harvester UI extension installation instructions, please refer to the page **Rancher Integration** -> **Harvester UI Extension** in [official Harvester documentation](https://docs.harvesterhci.io).
## Development Setup
Ensure **Node.js v20 or later** is installed for development and debugging.
### Standalone Mode
Run the extension standalone with hot reload at `https://localhost:8005`.
```bash
# Install dependencies
yarn install
# Start the development server
RANCHER_ENV=harvester API=https://your-harvester-ip yarn dev
# Example with specific server version
RANCHER_ENV=harvester VUE_APP_SERVER_VERSION=v1.5.0 API=https://192.168.1.123 yarn dev
```
You may also define environment variables in a `.env` file:
```env
RANCHER_ENV=harvester
VUE_APP_SERVER_VERSION=v1.5.0
API=https://192.168.1.123
```
### Rancher Integration Mode
To run as a Rancher extension, follow the [Rancher UI Extension Guide](https://extensions.rancher.io/extensions/next/extensions-getting-started#running-the-app).
```bash
API=https://your-rancher-ip yarn dev
```
## Commit Message Guidelines
This project uses [commit-lint](https://commitlint.js.org/) with [Conventional Commits](https://www.conventionalcommits.org/) to ensure consistent and meaningful commit messages.
### Commit Message Format
All commit messages must follow the conventional commit format:
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Supported Types
- **feat**: New features
- **fix**: Bug fixes
- **docs**: Documentation changes
- **style**: Code style changes (formatting, missing semicolons, etc.)
- **refactor**: Code refactoring
- **perf**: Performance improvements
- **test**: Adding or updating tests
- **build**: Build system or external dependencies
- **ci**: CI/CD changes
- **chore**: Other changes that don't modify src or test files
- **revert**: Reverts a previous commit
- **wip**: Work in progress
- **deps**: Dependency updates
- **security**: Security fixes
### Examples
```bash
# Feature
git commit -m "feat: add new virtual machine creation wizard"
# Bug fix
git commit -m "fix: resolve memory leak in VM console"
# Documentation
git commit -m "docs: update installation instructions"
# Breaking change
git commit -m "feat!: change API endpoint structure
BREAKING CHANGE: The /api/v1/vms endpoint has been replaced with /api/v2/vms"
```
### Git Hooks
The project uses [Husky](https://typicode.github.io/husky/) to automatically validate commit messages and run linting before commits:
- **pre-commit**: Runs ESLint to ensure code quality
- **commit-msg**: Validates commit message format using commit-lint
These hooks are automatically installed when you run `yarn install`.
### Manual Validation
You can manually validate commit messages:
```bash
# Validate the last commit
yarn commitlint
# Validate a specific commit
npx commitlint --from <commit-hash>
# Validate a range of commits
npx commitlint --from <start-hash> --to <end-hash>
```
## Branch Structure
- **`main`** – Main development branch
- **`release-harvester-vX.Y`** – Stable release branches per version series
- **`vX.Y-head`** – Testing branches for ongoing changes to extension builds in each release series
> **Note:**
> The `vX.Y-head` branches are auto-generated and kept in sync with release branches. Use these for testing the latest changes in each version series.
## Testing Guidelines
### UI Extension Testing
To validate changes in a release series, switch to the appropriate `vX.Y-head` branch. For main branch testing, use `main-head`.
- Examples:
- Test `1.0.x` series → `v1.0-head`
- Test `1.5.x` series → `v1.5-head`
**Steps:**
1. Navigate to **Rancher UI** → **Local** → **App** → **Repositories**
2. Refresh the Harvester repository using the target `vX.Y-head` branch
3. Go to the **Extensions** page and install the desired version
### Standalone Mode Testing
To test the standalone UI, configure Harvester to load the UI from an external source.
- Examples of `ui-index`:
- Main branch → `https://releases.rancher.com/harvester-ui/dashboard/latest/index.html`
- Release series `1.5.x` → `https://releases.rancher.com/harvester-ui/dashboard/release-harvester-v1.5/index.html`
**Steps:**
1. Go to **Harvester UI** → **Advanced** → **Settings** → **UI**
2. Set **ui-source** to `External`
3. Set **ui-index** to the desired URL
## Contributing
If you want to contribute, start by reading this document, then visit our [Getting Started guide](https://extensions.rancher.io/extensions/next/extensions-getting-started) to learn how to develop and submit changes.
## License
Copyright (c) 2014-2026 [SUSE, LLC.](https://www.suse.com/)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "extension-server.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "extension-server.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "extension-server.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "extension-server.labels" -}}
helm.sh/chart: {{ include "extension-server.chart" . }}
{{ include "extension-server.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "extension-server.selectorLabels" -}}
app.kubernetes.io/name: {{ include "extension-server.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Pkg annotations
*/}}
{{- define "extension-server.pluginMetadata" -}}
{{- with .Values.plugin.metadata }}
{{- range $key, $value := . }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
+15
View File
@@ -0,0 +1,15 @@
apiVersion: catalog.cattle.io/v1
kind: UIPlugin
metadata:
name: {{ include "extension-server.fullname" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "extension-server.labels" . | nindent 4 }}
spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: {{ .Values.plugin.endpoint | quote }}
compressedEndpoint: {{ .Values.plugin.compressedEndpoint | quote }}
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
+16
View File
@@ -0,0 +1,16 @@
nameOverride: ""
fullnameOverride: ""
plugin:
enabled: true
versionOverride: ""
endpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.2
compressedEndpoint: >-
https://raw.githubusercontent.com/harvester/harvester-ui-extension/gh-pages/extensions/harvester/1.8.2.tgz
noCache: false
noAuth: false
metadata:
catalog.cattle.io/display-name: Harvester
catalog.cattle.io/kube-version: ">= 1.16.0-0"
catalog.cattle.io/rancher-version: ">= 2.14.0-0"
catalog.cattle.io/ui-extensions-version: ">= 3.0.0 < 4.0.0"
Binary file not shown.
+185
View File
@@ -0,0 +1,185 @@
plugin/harvester-1.7.2.umd.min.131.js
plugin/harvester-1.7.2.umd.min.131.js.map
plugin/harvester-1.7.2.umd.min.207.js
plugin/harvester-1.7.2.umd.min.207.js.map
plugin/harvester-1.7.2.umd.min.238.js
plugin/harvester-1.7.2.umd.min.238.js.map
plugin/harvester-1.7.2.umd.min.327.js
plugin/harvester-1.7.2.umd.min.327.js.map
plugin/harvester-1.7.2.umd.min.35.js
plugin/harvester-1.7.2.umd.min.35.js.map
plugin/harvester-1.7.2.umd.min.368.js
plugin/harvester-1.7.2.umd.min.368.js.map
plugin/harvester-1.7.2.umd.min.37.js
plugin/harvester-1.7.2.umd.min.37.js.map
plugin/harvester-1.7.2.umd.min.395.js
plugin/harvester-1.7.2.umd.min.395.js.map
plugin/harvester-1.7.2.umd.min.431.js
plugin/harvester-1.7.2.umd.min.431.js.map
plugin/harvester-1.7.2.umd.min.472.js
plugin/harvester-1.7.2.umd.min.472.js.map
plugin/harvester-1.7.2.umd.min.60.js
plugin/harvester-1.7.2.umd.min.60.js.map
plugin/harvester-1.7.2.umd.min.610.js
plugin/harvester-1.7.2.umd.min.610.js.map
plugin/harvester-1.7.2.umd.min.683.js
plugin/harvester-1.7.2.umd.min.683.js.map
plugin/harvester-1.7.2.umd.min.782.js
plugin/harvester-1.7.2.umd.min.782.js.map
plugin/harvester-1.7.2.umd.min.819.js
plugin/harvester-1.7.2.umd.min.819.js.map
plugin/harvester-1.7.2.umd.min.937.js
plugin/harvester-1.7.2.umd.min.937.js.map
plugin/harvester-1.7.2.umd.min.939.js
plugin/harvester-1.7.2.umd.min.939.js.map
plugin/harvester-1.7.2.umd.min.csv.js
plugin/harvester-1.7.2.umd.min.csv.js.map
plugin/harvester-1.7.2.umd.min.detail.js
plugin/harvester-1.7.2.umd.min.detail.js.map
plugin/harvester-1.7.2.umd.min.dialog.js
plugin/harvester-1.7.2.umd.min.dialog.js.map
plugin/harvester-1.7.2.umd.min.edit.js
plugin/harvester-1.7.2.umd.min.edit.js.map
plugin/harvester-1.7.2.umd.min.formatters.js
plugin/harvester-1.7.2.umd.min.formatters.js.map
plugin/harvester-1.7.2.umd.min.js
plugin/harvester-1.7.2.umd.min.js.map
plugin/harvester-1.7.2.umd.min.list.js
plugin/harvester-1.7.2.umd.min.list.js.map
plugin/harvester-1.7.2.umd.min.promptRemove.js
plugin/harvester-1.7.2.umd.min.promptRemove.js.map
plugin/harvester-1.7.2.umd.min.xterm.js
plugin/harvester-1.7.2.umd.min.xterm.js.map
plugin/img/activedirectory.0baa2998.svg
plugin/img/adfs.6e70726e.svg
plugin/img/aliyun-black.a9967561.svg
plugin/img/aliyun.d05bff3f.svg
plugin/img/aliyunecs-black.93dd5b27.svg
plugin/img/aliyunecs.b57b715b.svg
plugin/img/amazonec2-black.5d49a518.svg
plugin/img/amazonec2.259f7435.svg
plugin/img/amazoneks-black.e3999509.svg
plugin/img/amazoneks.44a8a254.svg
plugin/img/aws.988ade4f.svg
plugin/img/azure-black.4bcdbe6b.svg
plugin/img/azure.7d30d447.svg
plugin/img/azuread-black.d272db7e.svg
plugin/img/azuread.774efe5f.svg
plugin/img/azuread.7914bb78.svg
plugin/img/azureaks-black.09cdc074.svg
plugin/img/azureaks.239d69fb.svg
plugin/img/baidu-black.32fb0569.svg
plugin/img/baidu.063c3510.svg
plugin/img/banner.00f803a6.svg
plugin/img/banner.245c572a.svg
plugin/img/banner.e66743c3.svg
plugin/img/banner.ee2db63b.svg
plugin/img/cloudca-black.2c8fc541.svg
plugin/img/cloudca.fb088dd5.svg
plugin/img/cloudscale-black.87d94917.svg
plugin/img/cloudscale.dd348191.svg
plugin/img/cognito.0f11062a.svg
plugin/img/custom.2ff19310.svg
plugin/img/custom.6f45244d.svg
plugin/img/decoration-cloud-big-white.4229596e.svg
plugin/img/decoration-ground.3f64fcbb.svg
plugin/img/digitalocean-black.3d5310a1.svg
plugin/img/digitalocean.b0aa5786.svg
plugin/img/email.b67ceff2.svg
plugin/img/equinix-black.0870820e.svg
plugin/img/equinix.c112c186.svg
plugin/img/error-desert-landscape.2a9d44f4.svg
plugin/img/exoscale.af115826.svg
plugin/img/favicon.20240f8a.png
plugin/img/freeipa.ef110cc0.svg
plugin/img/gcp.f7a1243c.svg
plugin/img/generic-catalog.1842a50e.svg
plugin/img/github.9c864145.svg
plugin/img/githubapp.9c864145.svg
plugin/img/gke-black.64bdd882.svg
plugin/img/gke.4c1ecbcd.svg
plugin/img/google.789cf860.svg
plugin/img/googlegke-black.64bdd882.svg
plugin/img/googlegke.4c1ecbcd.svg
plugin/img/googleoauth.4619a2a5.svg
plugin/img/grafana.2db31bb8.svg
plugin/img/half-logo.1bc560ee.svg
plugin/img/harvester.0168283e.svg
plugin/img/harvester.20240f8a.png
plugin/img/huaweicce-black.d378b855.svg
plugin/img/huaweicce.22b4ecea.svg
plugin/img/icon.42954c0f.svg
plugin/img/import.ac396542.svg
plugin/img/jaeger.1c7d1266.svg
plugin/img/k3s-black.b4765216.svg
plugin/img/k3s.f0881505.svg
plugin/img/keycloak.ca7b4848.svg
plugin/img/kiali.d0e257dd.svg
plugin/img/kubernetes-black.2ade6358.svg
plugin/img/kubernetes.ac396542.svg
plugin/img/linode.642005fe.svg
plugin/img/linodelke-black.81aa799d.svg
plugin/img/linodelke.642005fe.svg
plugin/img/linux.a96776e5.svg
plugin/img/local-cluster.272d4fc9.svg
plugin/img/login-landscape.0a4b1a5f.svg
plugin/img/login-landscape.60cd520b.svg
plugin/img/login-landscape.6734e5cc.svg
plugin/img/login-landscape.6e1253bb.svg
plugin/img/longhorn.4809470b.svg
plugin/img/minikube-black.94055a38.svg
plugin/img/minikube.117e4a38.svg
plugin/img/neuvector.513801d3.svg
plugin/img/nutanix.862c3637.svg
plugin/img/oci-black.cd3524de.svg
plugin/img/oci.3a81eed0.svg
plugin/img/okta.58a2aa35.svg
plugin/img/openid.451743dd.svg
plugin/img/openldap.59040f23.svg
plugin/img/openstack-black.af3ac5a0.svg
plugin/img/openstack.475580f8.svg
plugin/img/oracle.74aae75e.svg
plugin/img/oracleoke-black.ec0a34a2.svg
plugin/img/oracleoke.64fac528.svg
plugin/img/otc-black.5629758c.svg
plugin/img/otc.1b7d926f.svg
plugin/img/otccce.1b7d926f.svg
plugin/img/outscale.d0d823da.svg
plugin/img/ovhcloudmks.612c966f.svg
plugin/img/ovhcloudpubliccloud.612c966f.svg
plugin/img/packet-black.5fc90c03.svg
plugin/img/packet.ef1f45fa.svg
plugin/img/pagerduty.9871fbd3.svg
plugin/img/ping.5b5afc6e.svg
plugin/img/pinganyunecs-black.bf0b3440.svg
plugin/img/pinganyunecs.b74db865.svg
plugin/img/pnap-black.a7948015.svg
plugin/img/pnap.81704b7a.svg
plugin/img/prometheus.be8ac54d.svg
plugin/img/rackspace-black.0e8f8bc4.svg
plugin/img/rackspace.5e8dcb5a.svg
plugin/img/rancher-logo.203b74e2.svg
plugin/img/rancher-logo.487fcd1d.svg
plugin/img/rancher-logo.788ed883.svg
plugin/img/rancher-logo.920195b3.svg
plugin/img/rancher-logo.af9af640.svg
plugin/img/rancher-logo.d26f6ac6.svg
plugin/img/rancher-logo.db10c962.svg
plugin/img/rancher-logo.ef1ab5b0.svg
plugin/img/rancher-logo.f190bd21.svg
plugin/img/rancher-logo.fd684d42.svg
plugin/img/rke.a01f31e7.svg
plugin/img/rke2.a01f31e7.svg
plugin/img/setup-step-one.7b236b40.svg
plugin/img/shibboleth.35ea1d68.svg
plugin/img/sks.af115826.svg
plugin/img/slack.34dfd73f.svg
plugin/img/softlayer.5d9a5c2a.svg
plugin/img/sunglasses.157dca2a.svg
plugin/img/tencenttke-black.140c30e5.svg
plugin/img/tencenttke.42042615.svg
plugin/img/vmwarevsphere-black.454d68ed.svg
plugin/img/vmwarevsphere.94d59db3.svg
plugin/img/webhook.f86c012b.svg
plugin/img/windows.f862ed7d.svg
plugin/package.json
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
(("undefined"!==typeof self?self:this)["webpackChunkharvester_1_7_2"]=("undefined"!==typeof self?self:this)["webpackChunkharvester_1_7_2"]||[]).push([[60],{45060:function(e,t,n){var o,a,i,r=n(4364);(function(n,r){a=[],o=r,i="function"===typeof o?o.apply(t,a):o,void 0===i||(e.exports=i)})(0,(function(){"use strict";function t(e,t){return"undefined"==typeof t?t={autoBom:!1}:"object"!=typeof t&&(r.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}function o(e,t,n){var o=new XMLHttpRequest;o.open("GET",e),o.responseType="blob",o.onload=function(){s(o.response,t,n)},o.onerror=function(){r.error("could not download file")},o.send()}function a(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function i(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(o){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var c="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof n.g&&n.g.global===n.g?n.g:void 0,s=c.saveAs||("object"!=typeof window||window!==c?function(){}:"download"in HTMLAnchorElement.prototype?function(e,t,n){var r=c.URL||c.webkitURL,s=document.createElement("a");t=t||e.name||"download",s.download=t,s.rel="noopener","string"==typeof e?(s.href=e,s.origin===location.origin?i(s):a(s.href)?o(e,t,n):i(s,s.target="_blank")):(s.href=r.createObjectURL(e),setTimeout((function(){r.revokeObjectURL(s.href)}),4e4),setTimeout((function(){i(s)}),0))}:"msSaveOrOpenBlob"in navigator?function(e,n,r){if(n=n||e.name||"download","string"!=typeof e)navigator.msSaveOrOpenBlob(t(e,r),n);else if(a(e))o(e,n,r);else{var c=document.createElement("a");c.href=e,c.target="_blank",setTimeout((function(){i(c)}))}}:function(e,t,n,a){if(a=a||open("","_blank"),a&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return o(e,t,n);var i="application/octet-stream"===e.type,r=/constructor/i.test(c.HTMLElement)||c.safari,s=/CriOS\/[\d]+/.test(navigator.userAgent);if((s||i&&r)&&"object"==typeof FileReader){var f=new FileReader;f.onloadend=function(){var e=f.result;e=s?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},f.readAsDataURL(e)}else{var l=c.URL||c.webkitURL,u=l.createObjectURL(e);a?a.location=u:location.href=u,a=null,setTimeout((function(){l.revokeObjectURL(u)}),4e4)}});c.saveAs=s.saveAs=s,e.exports=s}))}}]);
//# sourceMappingURL=harvester-1.7.2.umd.min.60.js.map
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
<style type="text/css">
.st0{fill:#00AAF2;}
</style>
<g>
<path class="st0" d="M55,43.1c0,3.5,0,7,0,10.5c0,1.2-0.4,1.5-1.5,1.3c-7.9-1.2-15.7-2.3-23.6-3.3c-1.4-0.2-1.9-0.7-1.9-2.2
c0.1-5.6,0.1-11.2,0-16.8c0-1.2,0.4-1.6,1.6-1.6c8,0,15.9,0,23.9,0c1.3,0,1.6,0.5,1.6,1.6C55,36.1,55,39.6,55,43.1z"/>
<path class="st0" d="M41.6,28.9c-4,0-8,0-11.9,0c-1.2,0-1.7-0.3-1.7-1.7c0.1-5.7,0.1-11.3,0-17c-0.2-0.7,0.3-1.5,1.1-1.6
c0.1,0,0.3,0,0.4,0c8.1-1.1,16.3-2.3,24.4-3.5c1.4-0.2,1.2,0.8,1.2,1.5c0,5.1,0,10.2,0,15.3c0,1.9,0,3.7,0,5.6
c0,1.1-0.4,1.5-1.5,1.5C49.5,28.9,45.6,28.9,41.6,28.9z"/>
<path class="st0" d="M15.3,31c3,0,6,0,8.9,0c0.6-0.2,1.2,0.2,1.4,0.8c0,0.2,0.1,0.4,0,0.5c0,5.8,0,11.7,0,17.5c0,1-0.5,1.1-1.3,1
c-5.9-0.9-11.8-1.7-17.7-2.5c-0.8,0.1-1.5-0.6-1.6-1.4c0-0.1,0-0.3,0-0.4c0.1-4.7,0.1-9.3,0-14C5,31.4,5.3,31,6.5,31
C9.4,31.1,12.4,31,15.3,31z"/>
<path class="st0" d="M15.3,28.9c-2.9,0-5.8,0-8.8,0c-1.1,0-1.5-0.4-1.5-1.5c0-4.6,0-9.2,0-13.8c-0.2-0.7,0.3-1.5,1-1.6
c0.1,0,0.3,0,0.4,0c5.9-0.8,11.8-1.6,17.7-2.6c1.4-0.2,1.5,0.3,1.5,1.3c0,5.6,0,11.2,0,16.8c0,1.2-0.5,1.4-1.6,1.4H15.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F25022;}
.st1{fill:#80BA01;}
.st2{fill:#02A4EF;}
.st3{fill:#FFB902;}
</style>
<g>
<g>
<path class="st0" d="M5,5h23.8c0,7.9,0,15.9,0,23.8c-7.9,0-15.9,0-23.8,0V5L5,5z"/>
<path class="st1" d="M31.2,5H55c0,7.9,0,15.9,0,23.8c-7.9,0-15.9,0-23.8,0C31.2,20.7,31.2,12.7,31.2,5L31.2,5z"/>
<path class="st2" d="M5,31.2c7.9,0,15.9,0,23.8,0c0,7.9,0,15.9,0,23.8H5V31.2L5,31.2z"/>
<path class="st3" d="M31.2,31.2c7.9,0,15.9,0,23.8,0c0,7.9,0,15.9,0,23.8H31.2C31.2,46.8,31.2,38.9,31.2,31.2L31.2,31.2z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 898 B

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 101 101" style="enable-background:new 0 0 101 101;" xml:space="preserve">
<path d="M18.4243984,67.0989532c-2.0441589-0.4743652-3.6163034-2.2131424-3.6163034-4.426281V38.327774
c0.1572266-2.213253,1.5723696-3.9520264,3.6163034-4.4263954l22.4841671-4.900425l2.3586082-9.6431732H17.1665936
C7.8899436,19.3577805,0.5,26.7875862,0.5,35.9566231v28.7712898c0,9.168808,7.5471687,16.7568512,16.6665936,16.7568512h26.1005802
l-2.3584976-9.6431732C40.9086761,71.8415909,18.4243984,67.0989456,18.4243984,67.0989532z M83.8334122,19.3575611h-26.258255
l2.3586121,9.6430607l22.484726,4.9005394c2.0440445,0.4744759,3.6156235,2.213253,3.6156235,4.426281v24.3451157
c-0.1567764,2.2131386-1.5716934,3.9519157-3.6156235,4.426281l-22.4847336,4.90065l-2.3586082,9.642952h26.2582512
c9.1195374,0,16.6665955-7.4298096,16.6665955-16.7567444V35.9562912
C100.3421021,26.7873688,92.9529495,19.3575611,83.8334122,19.3575611z M40.9085655,49.2355843h19.1822014v2.3711548H40.9085655
V49.2355843z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 101 101" style="enable-background:new 0 0 101 101;" xml:space="preserve">
<style type="text/css">
.st0{fill:#333333;}
</style>
<path class="st0" d="M18.4243984,67.0989532c-2.0441589-0.4743652-3.6163034-2.2131424-3.6163034-4.426281V38.327774
c0.1572266-2.213253,1.5723696-3.9520264,3.6163034-4.4263954l22.4841671-4.900425l2.3586082-9.6431732H17.1665936
C7.8899436,19.3577805,0.5,26.7875862,0.5,35.9566231v28.7712898c0,9.168808,7.5471687,16.7568512,16.6665936,16.7568512h26.1005802
l-2.3584976-9.6431732C40.9086761,71.8415909,18.4243984,67.0989456,18.4243984,67.0989532z M83.8334122,19.3575611h-26.258255
l2.3586121,9.6430607l22.484726,4.9005394c2.0440445,0.4744759,3.6156235,2.213253,3.6156235,4.426281v24.3451157
c-0.1567764,2.2131386-1.5716934,3.9519157-3.6156235,4.426281l-22.4847336,4.90065l-2.3586082,9.642952h26.2582512
c9.1195374,0,16.6665955-7.4298096,16.6665955-16.7567444V35.9562912
C100.3421021,26.7873688,92.9529495,19.3575611,83.8334122,19.3575611z M40.9085655,49.2355843h19.1822014v2.3711548H40.9085655
V49.2355843z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<path d="M94.9,15.4C93.3,10.8,89.5,6.8,84.5,5c-22.4-6.6-46.4-6.6-69,0c-4.8,1.8-8.6,5.6-10.4,10.6C-1.7,38-1.7,62,5.1,84.4
c1.8,4.8,5.6,8.6,10.4,10.4c22.4,6.8,46.4,6.8,69,0c4.8-1.8,8.6-5.6,10.4-10.4C101.7,62,101.7,38,94.9,15.4z M25.1,18.4
c2.4-4.8,8.4-6.8,13.2-4.4c4.8,2,9.2,6.4,12.4,6.4S56.9,16,61.3,14c1.2-0.6,2.4-1,3.8-1h0.6c5.4,0,9.8,4.4,9.8,9.8
c0,5.4-4.4,9.8-9.8,9.8h-0.6c-8-0.2-7.4-7-14.6-7s-8.2,6.6-15.8,7h-0.6c-1.6,0-3-0.2-4.6-1C24.7,29.2,22.7,23.2,25.1,18.4z
M71.5,85.8c-4.6,2.4-10.6,0.6-13-4.2c-1-2-1.8-4.4-2-6.8c-3.8-3.6-21.4,19.6-30.8,6.6c-9.4-13,20.6-20,17.6-27.4
c-2-4.4-9.4-3.2-15.8,1.4c-0.4,0.6-0.8,1-1.4,1.6c-3.8,3.8-10,3.8-13.8,0s-3.8-10,0-13.8s10-3.8,13.8,0C40.9,54,46.7,34,55.9,45
c8.8,10.6-14.2,17.6-14.2,24.8c0,5.6,13.2,1.4,14.6,1c0.2-4.8,1.4-8.8,2.4-9.2c1.8-1,13.2,4,17,11.2C78.1,77.4,76.3,83.4,71.5,85.8z
M81.7,59.4c-8.2,0-16.8-9.2-16.8-9.2S74.1,41,81.7,41c5,0,9.2,4.2,9.2,9.2S86.7,59.4,81.7,59.4z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F8982A;}
.st1{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M84.5,5c-22.4-6.6-46.4-6.6-69,0c-4.8,1.8-8.6,5.6-10.4,10.6C-1.7,38-1.7,62,5.1,84.4
c1.8,4.8,5.6,8.6,10.4,10.4c22.4,6.8,46.4,6.8,69,0c4.8-1.8,8.6-5.6,10.4-10.4c6.8-22.4,6.8-46.4,0-69C93.3,10.8,89.5,6.8,84.5,5z"
/>
<path class="st1" d="M81.7,41c-7.6,0-16.8,9.2-16.8,9.2s8.6,9.2,16.8,9.2c5,0,9.2-4.2,9.2-9.2S86.7,41,81.7,41L81.7,41z"/>
<path class="st1" d="M58.7,61.6c-1,0.4-2.2,4.4-2.4,9.2c-1.4,0.4-14.6,4.6-14.6-1c0-7.2,23-14.2,14.2-24.8c-9.2-11-15,9-29.8-1.8
l0,0c-3.8-3.8-10-3.8-13.8,0s-3.8,10,0,13.8s10,3.8,13.8,0c0.6-0.6,1-1,1.4-1.6c6.4-4.6,13.8-5.8,15.8-1.4c3,7.4-27,14.4-17.6,27.4
s27-10.2,30.8-6.6l0,0c0.2,2.4,1,4.8,2,6.8c2.4,4.8,8.4,6.6,13,4.2c4.8-2.4,6.6-8.4,4.2-13C71.9,65.6,60.5,60.6,58.7,61.6z"/>
<path class="st1" d="M34.1,32.6h0.6c7.6-0.4,8.6-7,15.8-7s6.6,6.8,14.6,7h0.6c5.4,0,9.8-4.4,9.8-9.8S71.1,13,65.7,13h-0.6
c-1.4,0-2.6,0.4-3.8,1c-4.4,2-7.4,6.4-10.6,6.4S43.1,16,38.3,14c-4.8-2.4-10.8-0.4-13.2,4.4s-0.4,10.8,4.4,13.2
C31.1,32.4,32.5,32.6,34.1,32.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<path d="M50,0l-8.2,4.2v6.2l-7.2-2.6L28.2,11v4.4l-5.8-1.6l-5,2.6v3.3l-4.6-1.1l-4.2,2.2v58.4l4.2,2.2v-0.2l4.6-1v3.4l5,2.6l5.8-1.6
V89l6.4,3.2l7.2-2.6v6.2L50,100l41.4-20.8V20.8L50,0z M14.8,78.7V21.1l2.6,0.6v56.5L14.8,78.7z M24.4,83.6V16.4l3.8,1.1v65
L24.4,83.6z M36.6,89.3V10.7l5.2,1.9v74.9L36.6,89.3z M89.4,78L52,96.8V3.2L89.4,22V78z"/>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F58536;}
.st1{fill:#9D5025;}
</style>
<g id="Layer_1-2">
<polygon class="st0" points="22.4,79.2 12.8,81.2 12.8,18.6 22.4,20.8 "/>
<polygon class="st0" points="34.6,82.8 22.4,86.2 22.4,13.8 34.6,17.2 "/>
<polygon class="st0" points="50,86.6 34.6,92.2 34.6,7.8 50,13.4 "/>
<polygon class="st0" points="91.4,79.2 50,100 50,0 91.4,20.8 "/>
<polygon class="st1" points="41.8,4.2 50,0 50,100 41.8,95.8 "/>
<polygon class="st1" points="28.2,11 34.6,7.8 34.6,92.2 28.2,89 "/>
<polygon class="st1" points="17.4,16.4 22.4,13.8 22.4,86.2 17.4,83.6 "/>
<polygon class="st1" points="12.8,18.6 8.6,20.8 8.6,79.2 12.8,81.4 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<g>
<polygon points="73.6,58.2 94,71.2 94,23.8 54,0.8 54,24.2 73.6,35.6 "/>
<polygon points="69.2,65 49.8,76.4 26.2,62.6 26.2,35 45.8,23.6 45.8,0 6,23.2 6,74.4 49.8,100 88.4,77.4 "/>
<path d="M59.8,62.4h-3.6l-9.6-12.8L43.8,52v10.4h-3V36h3v13l12-13h3.6L48.8,47.4L59.8,62.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 642 B

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4052D7;}
.st1{fill:#387EFA;}
</style>
<g>
<polygon class="st0" points="73.6,58.2 94,71.2 94,23.8 54,0.8 54,24.2 73.6,35.6 "/>
<polygon class="st1" points="69.2,65 49.8,76.4 26.2,62.6 26.2,35 45.8,23.6 45.8,0 6,23.2 6,74.4 49.8,100 88.4,77.4 "/>
<path class="st0" d="M59.8,62.4h-3.6l-9.6-12.8L43.8,52v10.4h-3V36h3v13l12-13h3.6L48.8,47.4L59.8,62.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 753 B

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 304 182" style="enable-background:new 0 0 304 182;" xml:space="preserve">
<style type="text/css">
.st0{fill:#252F3E;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FF9900;}
</style>
<g>
<path class="st0" d="M86.4,66.4c0,3.7,0.4,6.7,1.1,8.9c0.8,2.2,1.8,4.6,3.2,7.2c0.5,0.8,0.7,1.6,0.7,2.3c0,1-0.6,2-1.9,3l-6.3,4.2
c-0.9,0.6-1.8,0.9-2.6,0.9c-1,0-2-0.5-3-1.4C76.2,90,75,88.4,74,86.8c-1-1.7-2-3.6-3.1-5.9c-7.8,9.2-17.6,13.8-29.4,13.8
c-8.4,0-15.1-2.4-20-7.2c-4.9-4.8-7.4-11.2-7.4-19.2c0-8.5,3-15.4,9.1-20.6c6.1-5.2,14.2-7.8,24.5-7.8c3.4,0,6.9,0.3,10.6,0.8
c3.7,0.5,7.5,1.3,11.5,2.2v-7.3c0-7.6-1.6-12.9-4.7-16c-3.2-3.1-8.6-4.6-16.3-4.6c-3.5,0-7.1,0.4-10.8,1.3c-3.7,0.9-7.3,2-10.8,3.4
c-1.6,0.7-2.8,1.1-3.5,1.3c-0.7,0.2-1.2,0.3-1.6,0.3c-1.4,0-2.1-1-2.1-3.1v-4.9c0-1.6,0.2-2.8,0.7-3.5c0.5-0.7,1.4-1.4,2.8-2.1
c3.5-1.8,7.7-3.3,12.6-4.5c4.9-1.3,10.1-1.9,15.6-1.9c11.9,0,20.6,2.7,26.2,8.1c5.5,5.4,8.3,13.6,8.3,24.6V66.4z M45.8,81.6
c3.3,0,6.7-0.6,10.3-1.8c3.6-1.2,6.8-3.4,9.5-6.4c1.6-1.9,2.8-4,3.4-6.4c0.6-2.4,1-5.3,1-8.7v-4.2c-2.9-0.7-6-1.3-9.2-1.7
c-3.2-0.4-6.3-0.6-9.4-0.6c-6.7,0-11.6,1.3-14.9,4c-3.3,2.7-4.9,6.5-4.9,11.5c0,4.7,1.2,8.2,3.7,10.6
C37.7,80.4,41.2,81.6,45.8,81.6z M126.1,92.4c-1.8,0-3-0.3-3.8-1c-0.8-0.6-1.5-2-2.1-3.9L96.7,10.2c-0.6-2-0.9-3.3-0.9-4
c0-1.6,0.8-2.5,2.4-2.5h9.8c1.9,0,3.2,0.3,3.9,1c0.8,0.6,1.4,2,2,3.9l16.8,66.2l15.6-66.2c0.5-2,1.1-3.3,1.9-3.9c0.8-0.6,2.2-1,4-1
h8c1.9,0,3.2,0.3,4,1c0.8,0.6,1.5,2,1.9,3.9l15.8,67l17.3-67c0.6-2,1.3-3.3,2-3.9c0.8-0.6,2.1-1,3.9-1h9.3c1.6,0,2.5,0.8,2.5,2.5
c0,0.5-0.1,1-0.2,1.6c-0.1,0.6-0.3,1.4-0.7,2.5l-24.1,77.3c-0.6,2-1.3,3.3-2.1,3.9c-0.8,0.6-2.1,1-3.8,1h-8.6c-1.9,0-3.2-0.3-4-1
c-0.8-0.7-1.5-2-1.9-4L156,23l-15.4,64.4c-0.5,2-1.1,3.3-1.9,4c-0.8,0.7-2.2,1-4,1H126.1z M254.6,95.1c-5.2,0-10.4-0.6-15.4-1.8
c-5-1.2-8.9-2.5-11.5-4c-1.6-0.9-2.7-1.9-3.1-2.8c-0.4-0.9-0.6-1.9-0.6-2.8v-5.1c0-2.1,0.8-3.1,2.3-3.1c0.6,0,1.2,0.1,1.8,0.3
c0.6,0.2,1.5,0.6,2.5,1c3.4,1.5,7.1,2.7,11,3.5c4,0.8,7.9,1.2,11.9,1.2c6.3,0,11.2-1.1,14.6-3.3c3.4-2.2,5.2-5.4,5.2-9.5
c0-2.8-0.9-5.1-2.7-7c-1.8-1.9-5.2-3.6-10.1-5.2L246,52c-7.3-2.3-12.7-5.7-16-10.2c-3.3-4.4-5-9.3-5-14.5c0-4.2,0.9-7.9,2.7-11.1
c1.8-3.2,4.2-6,7.2-8.2c3-2.3,6.4-4,10.4-5.2c4-1.2,8.2-1.7,12.6-1.7c2.2,0,4.5,0.1,6.7,0.4c2.3,0.3,4.4,0.7,6.5,1.1
c2,0.5,3.9,1,5.7,1.6c1.8,0.6,3.2,1.2,4.2,1.8c1.4,0.8,2.4,1.6,3,2.5c0.6,0.8,0.9,1.9,0.9,3.3v4.7c0,2.1-0.8,3.2-2.3,3.2
c-0.8,0-2.1-0.4-3.8-1.2c-5.7-2.6-12.1-3.9-19.2-3.9c-5.7,0-10.2,0.9-13.3,2.8c-3.1,1.9-4.7,4.8-4.7,8.9c0,2.8,1,5.2,3,7.1
c2,1.9,5.7,3.8,11,5.5l14.2,4.5c7.2,2.3,12.4,5.5,15.5,9.6c3.1,4.1,4.6,8.8,4.6,14c0,4.3-0.9,8.2-2.6,11.6
c-1.8,3.4-4.2,6.4-7.3,8.8c-3.1,2.5-6.8,4.3-11.1,5.6C264.4,94.4,259.7,95.1,254.6,95.1z"/>
<g>
<path class="st1" d="M273.5,143.7c-32.9,24.3-80.7,37.2-121.8,37.2c-57.6,0-109.5-21.3-148.7-56.7c-3.1-2.8-0.3-6.6,3.4-4.4
c42.4,24.6,94.7,39.5,148.8,39.5c36.5,0,76.6-7.6,113.5-23.2C274.2,133.6,278.9,139.7,273.5,143.7z"/>
<path class="st1" d="M287.2,128.1c-4.2-5.4-27.8-2.6-38.5-1.3c-3.2,0.4-3.7-2.4-0.8-4.5c18.8-13.2,49.7-9.4,53.3-5
c3.6,4.5-1,35.4-18.6,50.2c-2.7,2.3-5.3,1.1-4.1-1.9C282.5,155.7,291.4,133.4,287.2,128.1z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<g>
<path d="M99.7962494,76.143692c0,6.9666519,0,13.9333115,0,20.899971c0,2.3885574-0.7961884,2.9857101-2.9857101,2.5876236
c-15.7247467-2.3885651-31.2504425-4.5781021-46.9751778-6.568573c-2.7866669-0.3980865-3.7819023-1.3933258-3.7819023-4.3790359
c0.1990433-11.1466522,0.1990433-22.2933121,0-33.4399605c0-2.3885689,0.7961922-3.1847534,3.1847534-3.1847534
c15.7247467,0,31.6485367,0,47.3732681,0c2.5876236,0,3.1847534,0.9952354,3.1847534,3.1847534
C99.7962494,62.0113258,99.7962494,68.9779816,99.7962494,76.143692z"/>
<path d="M73.1239014,47.6799202c-7.9618988,0-15.9237938,0-23.6866455,0c-2.3885689,0-3.3838043-0.5971413-3.3838043-3.3838081
c0.1990433-11.3457031,0.1990433-22.4923515,0-33.8380547c-0.398098-1.3933334,0.5971413-2.9857106,1.9904709-3.1847591
c0.1990471,0,0.5971413,0,0.796196,0c16.1228409-2.1895218,32.4447174-4.5780878,48.5675583-6.9666581
c2.7866592-0.3980963,2.3885574,1.5923775,2.3885574,2.9857106c0,10.1514168,0,20.3028297,0,30.2551994
c0,3.7819061,0,7.3647575,0,11.1466522c0,2.189518-0.7961884,2.9857101-2.9857101,2.9857101
C88.8486481,47.6799202,81.0857925,47.6799202,73.1239014,47.6799202z"/>
<path d="M20.7744389,51.8599129c5.9714222,0,11.9428425,0,17.7152119,0
c1.1942825-0.398098,2.3885689,0.3980942,2.7866669,1.5923767c0,0.398098,0.1990433,0.7961922,0,0.9952354
c0,11.5447464,0,23.2885437,0,34.8332977c0,1.9904785-0.9952354,2.1895218-2.587616,1.9904785
c-11.7437973-1.7914276-23.487587-3.3838043-35.2313843-4.9761887c-1.5923777,0.1990433-2.9857109-1.1942825-3.1847589-2.7866669
c0-0.1990433,0-0.5971451,0-0.7961884c0.1990481-9.3552322,0.1990481-18.5114059,0-27.8666344
c0-2.189518,0.5971407-2.9857101,2.9857106-2.9857101C9.0306444,52.0589561,15.0020695,51.8599129,20.7744389,51.8599129z"/>
<path d="M20.7744389,47.6799202c-5.772377,0-11.5447464,0-17.5161686,0c-2.1895218,0-2.9857106-0.7961922-2.9857106-2.9857101
c0-9.1561775,0-18.3123608,0-27.4685383c-0.3980963-1.3933325,0.5971406-2.9857101,1.9904737-3.1847544
c0.199048,0,0.5971406,0,0.7961888,0c11.7437944-1.5923777,23.4875927-3.1847591,35.032341-5.1752329
c2.7866631-0.3980961,2.9857101,0.5971403,2.9857101,2.5876141c0,11.1466541,0,22.2933064,0,33.4399567
c0,2.3885689-0.9952393,2.7866669-3.1847572,2.7866669H20.7744389z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<style type="text/css">
.st0{fill:#00AAF2;}
</style>
<g>
<path class="st0" d="M99.7962494,76.143692c0,6.9666519,0,13.9333115,0,20.899971
c0,2.3885574-0.7961884,2.9857101-2.9857101,2.5876236c-15.7247467-2.3885651-31.2504425-4.5781021-46.9751778-6.568573
c-2.7866669-0.3980865-3.7819023-1.3933258-3.7819023-4.3790359c0.1990433-11.1466522,0.1990433-22.2933121,0-33.4399605
c0-2.3885689,0.7961922-3.1847534,3.1847534-3.1847534c15.7247467,0,31.6485367,0,47.3732681,0
c2.5876236,0,3.1847534,0.9952354,3.1847534,3.1847534C99.7962494,62.0113258,99.7962494,68.9779816,99.7962494,76.143692z"/>
<path class="st0" d="M73.1239014,47.6799202c-7.9618988,0-15.9237938,0-23.6866455,0
c-2.3885689,0-3.3838043-0.5971413-3.3838043-3.3838081c0.1990433-11.3457031,0.1990433-22.4923515,0-33.8380547
c-0.398098-1.3933334,0.5971413-2.9857106,1.9904709-3.1847591c0.1990471,0,0.5971413,0,0.796196,0
c16.1228409-2.1895218,32.4447174-4.5780878,48.5675583-6.9666581c2.7866592-0.3980963,2.3885574,1.5923775,2.3885574,2.9857106
c0,10.1514168,0,20.3028297,0,30.2551994c0,3.7819061,0,7.3647575,0,11.1466522
c0,2.189518-0.7961884,2.9857101-2.9857101,2.9857101C88.8486481,47.6799202,81.0857925,47.6799202,73.1239014,47.6799202z"/>
<path class="st0" d="M20.7744389,51.8599129c5.9714222,0,11.9428425,0,17.7152119,0
c1.1942825-0.398098,2.3885689,0.3980942,2.7866669,1.5923767c0,0.398098,0.1990433,0.7961922,0,0.9952354
c0,11.5447464,0,23.2885437,0,34.8332977c0,1.9904785-0.9952354,2.1895218-2.587616,1.9904785
c-11.7437973-1.7914276-23.487587-3.3838043-35.2313843-4.9761887c-1.5923777,0.1990433-2.9857109-1.1942825-3.1847589-2.7866669
c0-0.1990433,0-0.5971451,0-0.7961884c0.1990481-9.3552322,0.1990481-18.5114059,0-27.8666344
c0-2.189518,0.5971407-2.9857101,2.9857106-2.9857101C9.0306444,52.0589561,15.0020695,51.8599129,20.7744389,51.8599129z"/>
<path class="st0" d="M20.7744389,47.6799202c-5.772377,0-11.5447464,0-17.5161686,0
c-2.1895218,0-2.9857106-0.7961922-2.9857106-2.9857101c0-9.1561775,0-18.3123608,0-27.4685383
c-0.3980963-1.3933325,0.5971406-2.9857101,1.9904737-3.1847544c0.199048,0,0.5971406,0,0.7961888,0
c11.7437944-1.5923777,23.4875927-3.1847591,35.032341-5.1752329c2.7866631-0.3980961,2.9857101,0.5971403,2.9857101,2.5876141
c0,11.1466541,0,22.2933064,0,33.4399567c0,2.3885689-0.9952393,2.7866669-3.1847572,2.7866669H20.7744389z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
<g>
<path d="M54.5,37.8000031C53.9000015,38,53.5,38.2000046,52.9000015,38.2000046v30.5999985
c0.4000015,0,0.8000031,0.1999969,1.1999969,0.4000015l15.5999985-10
c-0.4000015-0.8000031-0.4000015-1.8000031-0.4000015-2.8000031c0-1.4000015,0.4000015-3,1.1999969-4.1999969L54.5,37.8000031z"/>
<path d="M50.0999947,0L0.2999973,58.8000031L50.0999947,100l49.6000099-41.1999969L50.0999947,0z M76.9000015,64.5999985
c-1.8000031,0-3.5999985-0.5999985-5-1.8000031L57.2999954,72c1,1.4000015,1.4000015,3,1.5999985,4.5999985
C59.4999924,81,56.6999969,85,52.2999954,85.8000031c-4.4000015,0.6000061-8.4000015-2.1999969-9.1999969-6.6000061
c-0.1999969-0.8000031-0.1999969-1.5999985,0-2.5999985C43.0999985,75,43.5,73.4000015,44.5,72.1999969l-15.4000034-10
c-3,3-8,3-11,0c-1.4000015-1.4000015-2.4000015-3.5999985-2.4000015-5.5999985c0-4.4000015,3.5999985-8,8-8
C25.2999935,48.5999985,26.899992,49,28.0999966,50l16.0000019-14.8000031c-1.1999969-1.5999985-2-3.5999985-2-5.5999985
c0-5,4-8.8000031,9-8.8000031s8.8000031,4,8.8000031,8.8000031c0,2-0.8000031,4-2,5.5999985l15.4000015,14.4000015
c4-2,8.7999954-0.5999985,10.7999954,3.4000015s0.6000061,8.8000031-3.3999939,10.8000031
C79.2999954,64.1999969,78.0999985,64.5999985,76.9000015,64.5999985z"/>
<path d="M30.4999981,53.1999969C31.3000011,55,31.4999981,57,30.8999996,58.7999954l16.4000034,10.5999985
c0.4000015-0.1999969,0.8000031-0.4000015,1.4000015-0.4000015V38.4000015c-0.5999985,0-1.1999969-0.1999969-1.5999985-0.5999985
L30.4999981,53.1999969z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 60 60" style="enable-background:new 0 0 60 60;" xml:space="preserve">
<style type="text/css">
.st0{fill:#00AAF2;}
</style>
<g>
<path class="st0" d="M32.2,23.9c-0.3,0.1-0.5,0.2-0.8,0.2v15.3c0.2,0,0.4,0.1,0.6,0.2l7.8-5c-0.2-0.4-0.2-0.9-0.2-1.4
c0-0.7,0.2-1.5,0.6-2.1L32.2,23.9z"/>
<path class="st0" d="M30,5L5.1,34.4L30,55l24.8-20.6L30,5z M43.4,37.3c-0.9,0-1.8-0.3-2.5-0.9L33.6,41c0.5,0.7,0.7,1.5,0.8,2.3
c0.3,2.2-1.1,4.2-3.3,4.6c-2.2,0.3-4.2-1.1-4.6-3.3c-0.1-0.4-0.1-0.8,0-1.3c0-0.8,0.2-1.6,0.7-2.2l-7.7-5c-1.5,1.5-4,1.5-5.5,0
c-0.7-0.7-1.2-1.8-1.2-2.8c0-2.2,1.8-4,4-4c0.8,0,1.6,0.2,2.2,0.7l8-7.4c-0.6-0.8-1-1.8-1-2.8c0-2.5,2-4.4,4.5-4.4s4.4,2,4.4,4.4
c0,1-0.4,2-1,2.8l7.7,7.2c2-1,4.4-0.3,5.4,1.7s0.3,4.4-1.7,5.4C44.6,37.1,44,37.3,43.4,37.3z"/>
<path class="st0" d="M20.2,31.6c0.4,0.9,0.5,1.9,0.2,2.8l8.2,5.3c0.2-0.1,0.4-0.2,0.7-0.2V24.2c-0.3,0-0.6-0.1-0.8-0.3L20.2,31.6z"
/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More