From 10ee1b51889b956fa5aa2f477c0625543e3e84ac Mon Sep 17 00:00:00 2001 From: Sergi Philipsen <philipsen.sergi@gmail.com> Date: Thu, 23 Nov 2023 19:41:46 +0100 Subject: [PATCH] feat: add keywords and show them in frontend also add github button --- charts/ff-common/Chart.yaml | 3 + charts/ff-common/values.yaml | 2 +- charts/ff-test/Chart.yaml | 3 + charts/ff-test/values.yaml | 2 +- charts/frank-framework/.helmignore | 23 + charts/frank-framework/Chart.lock | 6 + charts/frank-framework/Chart.yaml | 13 + charts/frank-framework/README.md | 172 ++++++++ charts/frank-framework/icon.svg | 5 + charts/frank-framework/templates/NOTES.txt | 22 + .../frank-framework/templates/manifest.yaml | 17 + charts/frank-framework/values.schema.json | 413 ++++++++++++++++++ charts/frank-framework/values.yaml | 332 ++++++++++++++ charts/frank2example/Chart.yaml | 5 +- charts/frank2example/values.yaml | 2 +- charts/frankframework/Chart.yaml | 2 +- charts/frankframework/values.yaml | 2 +- ff-template/Chart.lock | 4 +- ff-template/Chart.yaml | 4 +- ff-template/values.yaml | 2 +- frontend/pages/[name].vue | 111 +++-- frontend/pages/index.vue | 72 +-- 22 files changed, 1130 insertions(+), 87 deletions(-) create mode 100644 charts/frank-framework/.helmignore create mode 100644 charts/frank-framework/Chart.lock create mode 100644 charts/frank-framework/Chart.yaml create mode 100644 charts/frank-framework/README.md create mode 100644 charts/frank-framework/icon.svg create mode 100644 charts/frank-framework/templates/NOTES.txt create mode 100644 charts/frank-framework/templates/manifest.yaml create mode 100644 charts/frank-framework/values.schema.json create mode 100644 charts/frank-framework/values.yaml diff --git a/charts/ff-common/Chart.yaml b/charts/ff-common/Chart.yaml index 43e42cb..cb50c75 100644 --- a/charts/ff-common/Chart.yaml +++ b/charts/ff-common/Chart.yaml @@ -5,3 +5,6 @@ version: 0.1.17 appVersion: "7.8" home: https://frankframework.org icon: https://raw.githubusercontent.com/frankframework/charts/master/charts/ff-common/icon.svg + +keywords: + - library \ No newline at end of file diff --git a/charts/ff-common/values.yaml b/charts/ff-common/values.yaml index 0281000..8f93d5d 100644 --- a/charts/ff-common/values.yaml +++ b/charts/ff-common/values.yaml @@ -12,7 +12,7 @@ fullnameOverride: "" ## ## Frank!Framework image -## ref: https://https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ ## @param image.registry Frank!Framework image registry ## @param image.repository Frank!Framework image repository ## @param image.tag Frank!Framework image tag (immutable tags are recommended) diff --git a/charts/ff-test/Chart.yaml b/charts/ff-test/Chart.yaml index 464ab03..d06baab 100644 --- a/charts/ff-test/Chart.yaml +++ b/charts/ff-test/Chart.yaml @@ -6,6 +6,9 @@ icon: https://raw.githubusercontent.com/frankframework/charts/master/charts/ff-t type: application version: 0.2.28 +keywords: + - e2e + dependencies: - name: ff-common version: ~0.1.17 diff --git a/charts/ff-test/values.yaml b/charts/ff-test/values.yaml index ca54f3d..e4b382d 100644 --- a/charts/ff-test/values.yaml +++ b/charts/ff-test/values.yaml @@ -12,7 +12,7 @@ fullnameOverride: "" ## ## Frank!Framework image -## ref: https://https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ ## @param image.registry Frank!Framework image registry ## @param image.repository Frank!Framework image repository ## @param image.tag Frank!Framework image tag (immutable tags are recommended) diff --git a/charts/frank-framework/.helmignore b/charts/frank-framework/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/frank-framework/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/frank-framework/Chart.lock b/charts/frank-framework/Chart.lock new file mode 100644 index 0000000..5412b95 --- /dev/null +++ b/charts/frank-framework/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: ff-common + repository: file://../ff-common + version: 0.1.17 +digest: sha256:353f8759953bd5fd67bd59a10d53622a7837c9cf1ac369c4d06bc221e41aadcb +generated: "2023-11-21T10:37:52.443945524+01:00" diff --git a/charts/frank-framework/Chart.yaml b/charts/frank-framework/Chart.yaml new file mode 100644 index 0000000..7f3fcd5 --- /dev/null +++ b/charts/frank-framework/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +appVersion: "7.8" +description: A Helm chart for running the Frank!Framework on Kubernetes +name: frank-framework +icon: https://raw.githubusercontent.com/frankframework/charts/master/charts/frank-framework/icon.svg +type: application +version: 0.2.9 +deprecated: true + +dependencies: + - name: ff-common + version: ~0.1.17 + repository: file://../ff-common diff --git a/charts/frank-framework/README.md b/charts/frank-framework/README.md new file mode 100644 index 0000000..dee5dd6 --- /dev/null +++ b/charts/frank-framework/README.md @@ -0,0 +1,172 @@ +# 🔌Frank!Framework Chart + +This Helm Chart can be used for running the Frank!Framework on Kubernetes. + +The image should be replaced to include a configuration. + +## Usage + +[Helm](https://helm.sh) must be installed to use the charts. Please refer to +Helm's [documentation](https://helm.sh/docs) to get started. + +Once Helm has been set up correctly, add the repo as follows: + +```shell +helm repo add frankframework https://frankframework.github.io/charts +``` + +If you had already added this repo earlier, run `helm repo update` to retrieve +the latest versions of the packages. You can then run `helm search repo +frankframework` to see the charts. + +To install the frankframework chart: + +```shell +helm install my-frank-framework frankframework/frank-framework +``` + +To uninstall the chart: + +```shell +helm delete my-frank-framework +``` + +## Parameters + +### Common parameters + +| Name | Description | Value | +| ------------------ | -------------------------------------------------------------------------------------------- | ----- | +| `nameOverride` | String to partially override common.names.fullname template (will maintain the release name) | `""` | +| `fullnameOverride` | String to fully override common.names.fullname template | `""` | + +### Frank!Framework image parameters + +| Name | Description | Value | +| ------------------- | ---------------------------------------------------------- | -------------------------- | +| `image.registry` | Frank!Framework image registry | `nexus.frankframework.org` | +| `image.repository` | Frank!Framework image repository | `frankframework` | +| `image.tag` | Frank!Framework image tag (immutable tags are recommended) | `""` | +| `image.pullPolicy` | Frank!Framework image pull policy | `IfNotPresent` | +| `image.pullSecrets` | Frank!Framework image pull secrets | `[]` | + +### Frank! Configuration parameters + +| Name | Description | Value | +| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | ------- | +| `frank.memory.percentage` | Set if the values for the memory are in percentages | `false` | +| `frank.memory.minimum` | Sets the initial size of the heap that will be used by the Frank!Framework | `4G` | +| `frank.memory.maximum` | Sets the maximum size of the heap that will be used by the Frank!Framework | `4G` | +| `frank.dtap.stage` | (Required) Set the `DTAP` stage. Options: `LOC`, `DEV`, `TST`, `ACC`, `PRD` | `""` | +| `frank.dtap.side` | Set the `DTAP` side of where the instance is running | `""` | +| `frank.credentials.secret` | Set the secret name of the existing secret | `""` | +| `frank.credentials.key` | Set the key inside the secret that contains the data (e.g. `credentials.properties`) | `""` | +| `frank.instance.name` | Set the name of the Frank! instance (default is the `fullname`) | `""` | +| `frank.configurations.names` | Set the configurations to load. Leave empty to use the default | `[]` | +| `frank.security.http.authentication` | Set http authentication for the Frank! | `false` | +| `frank.security.http.localUsers` | Set localUsers who can log in on the Frank! | `[]` | +| `frank.security.http.localUsers.username` | Set the username of the user | `""` | +| `frank.security.http.localUsers.password` | Set the password of the user | `""` | +| `frank.security.http.localUsers.roles` | Set the roles of the user. Options: `IbisTester`, `IbisDataAdmin`, `IbisAdmin`, `IbisWebService`, `IbisObserver` | `[]` | +| `frank.security.http.activeDirectory.enabled` | Enable Active Directory for authentication | `false` | +| `frank.security.http.activeDirectory.url` | Set url for Active Directory | `""` | +| `frank.security.http.activeDirectory.baseDn` | Set baseDn for Active Directory users | `""` | +| `frank.security.http.activeDirectory.roleMapping.tester` | Map the rol for Tester | `""` | +| `frank.security.http.activeDirectory.roleMapping.dataAdmin` | Map the rol for DataAdmin | `""` | +| `frank.security.http.activeDirectory.roleMapping.admin` | Map the rol for Admin | `""` | +| `frank.security.http.activeDirectory.roleMapping.webService` | Map the rol for WebService | `""` | +| `frank.security.http.activeDirectory.roleMapping.observer` | Map the rol for Observer | `""` | +| `frank.server.transactionManager` | Set the transaction manager for Tomcat. Options: `NARAYANA`, `BTM`, `` | `""` | +| `frank.environmentVariables` | Set extra environment variables for the Frank! | `{}` | + +### Frank!Framework Connection parameters + +| Name | Description | Value | +| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| `connections.create` | Create a `context.xml` and possibly overwrite the existing one, to configure the connections/resources. | `true` | +| `connections.jdbc` | Set multiple database connections. One connection should have an empty name, so it'll get picked up by default (unless `jdbc.required=false` is set) | `[]` | +| `connections.jdbc.name` | Name of the connection (leave empty to use default: `jdbc/${.Values.instance.name}` in lowercase) | `""` | +| `connections.jdbc.type` | DBMS type. Options: `oracle`, `mssql`, `mysql`, `mariadb`, `postgresql`, `db2`, `mongodb` | `""` | +| `connections.jdbc.host` | Host of where the database can be reached (like in the same cluster e.g. `<service>.<namespace>.svc.cluster.local`) | `""` | +| `connections.jdbc.post` | Port for the database (leave empty for default) | `""` | +| `connections.jdbc.database` | Name of the database to use (default is `.Values.instance.name`) | `""` | +| `connections.jdbc.username` | Username to connect to the database (or use string template for use with credentials e.g. `${database/username}`) | `""` | +| `connections.jdbc.password` | Password to connect to the database (or use string template for use with credentials e.g. `${database/password}`) | `""` | +| `connections.jdbc.ssl` | Set to `true` is the connection uses SSL, default is `false` | `""` | +| `connections.jms` | Set multiple massage services | `[]` | +| `connections.jms.name` | Name of the connection (leave empty to use default: `jms/${.Values.instance.name}` in lowercase) | `""` | +| `connections.jms.type` | MQ type. Options: `artemis`, `activemq` | `""` | +| `connections.jms.host` | Host of where the MQ can be reached (like in the same cluster e.g. `<service>.<namespace>.svc.cluster.local`) | `""` | +| `connections.jms.post` | Port for the MQ (leave empty for default) | `""` | + +### Frank!Framework deployment parameters + +| Name | Description | Value | +| ----------------------------------- | ------------------------------------------------------- | --------- | +| `replicaCount` | Number of Frank!Framework replicas to deploy | `1` | +| `livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `40` | +| `livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | +| `livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` | +| `livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `6` | +| `livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | +| `resources` | Set the resources for the Frank!Framework containers | `{}` | +| `resources.limits` | The resources limits for the Frank!Framework containers | `""` | +| `resources.requests.memory` | The requested memory for the Frank!Framework containers | `""` | +| `resources.requests.cpu` | The requested cpu for the Frank!Framework containers | `""` | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `tolerations` | Set tolerations for pod assignment | `[]` | +| `affinity` | Set affinity for pod assignment | `{}` | +| `timeZone` | used for database connection and log timestamps | `Etc/UTC` | + +### Traffic Exposure Parameters + +| Name | Description | Value | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| `service.type` | Frank!Framework service type | `ClusterIP` | +| `service.port` | Frank!Framework service port | `80` | +| `ingress.enabled` | Enable ingress record generation for Frank! | `false` | +| `ingress.className` | IngressClass that will be used to implement the Ingress (Kubernetes 1.18+) | `""` | +| `ingress.annotations` | Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations. | `{}` | +| `ingress.hosts` | Set hosts for ingress | `[]` | +| `ingress.hosts.host` | Set hostname | `""` | +| `ingress.hosts.paths` | Set multiple paths | `[]` | +| `ingress.hosts.paths.path` | Set path (context url) | `""` | +| `ingress.hosts.paths.pathType` | Set type of path | `""` | +| `ingress.tls` | Define tls secrets for hosts (implementation not done yet) | `[]` | + +### Other Parameters + +| Name | Description | Value | +| ---------------------------- | --------------------------------------------------------- | ------ | +| `serviceAccount.create` | Enable creation of ServiceAccount for Frank!Framework pod | `true` | +| `serviceAccount.annotations` | Additional custom annotations for the ServiceAccount | `{}` | +| `serviceAccount.name` | The name of the ServiceAccount to use. | `""` | +| `podAnnotations` | Annotations for Frank!Framework pods | `{}` | +| `podLabels` | Extra labels for Frank!Framework pods | `{}` | +| `podSecurityContext` | Set Frank!Framework pod's Security Context | `{}` | +| `securityContext` | Set Frank!Framework container's Security Context | `{}` | + +## Configuration and installation details + +### DTAP Stage + +The Frank!Framework will start with different settings enabled, depending on what DTAP stage is configured. + +For more information about DTAP stages read: https://frank-manual.readthedocs.io/en/latest/deploying/dtapAndProperties.html + +## Notable changes + +### 0.2.10 + +The name of the chart has been renamed (frankframework) to match the project, organisation and Docker image. + +### 0.2.8 + +The `.Values.frank.memory` notation has been changed. It is now possible to define a minimum and a maximum, and to set percentages. + +### 0.2.7 + +The `.Values.frank.dtap.stage` and `.Values.frank.dtap.side` are now empty by default. + +* `.Values.frank.dtap.stage` is now required and should be set to the right stage. Read more in the [Installation details](#dtap-stage) +* `.Values.frank.dtap.side` will default to the release namespace deployed in. diff --git a/charts/frank-framework/icon.svg b/charts/frank-framework/icon.svg new file mode 100644 index 0000000..8888c37 --- /dev/null +++ b/charts/frank-framework/icon.svg @@ -0,0 +1,5 @@ +<svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect width="300" height="300" rx="55" fill="#FDC300"/> +<path d="M118.36 109.56V81.912C86.488 79.992 71.704 96.12 71.704 123H58.84V150.648H71.704V219H100.504V150.648H118.36V123H100.504C100.504 111.864 107.608 108.6 118.36 109.56ZM182.673 109.56V81.912C150.801 79.992 136.017 96.12 136.017 123H123.153V150.648H136.017V219H164.817V150.648H182.673V123H164.817C164.817 111.864 171.921 108.6 182.673 109.56Z" fill="white"/> +<path d="M198.048 171H221.088L226.848 123V84.6H192.288V123L198.048 171ZM209.568 221.688C219.552 221.688 227.808 213.432 227.808 203.448C227.808 193.464 219.552 185.208 209.568 185.208C199.584 185.208 191.328 193.464 191.328 203.448C191.328 213.432 199.584 221.688 209.568 221.688Z" fill="#1E1E1E"/> +</svg> diff --git a/charts/frank-framework/templates/NOTES.txt b/charts/frank-framework/templates/NOTES.txt new file mode 100644 index 0000000..c08f4b4 --- /dev/null +++ b/charts/frank-framework/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "ff-common.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "ff-common.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "ff-common.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "ff-common.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} diff --git a/charts/frank-framework/templates/manifest.yaml b/charts/frank-framework/templates/manifest.yaml new file mode 100644 index 0000000..9bc749b --- /dev/null +++ b/charts/frank-framework/templates/manifest.yaml @@ -0,0 +1,17 @@ +{{ template "ff-common.configmap.context.tpl" . }} +--- +{{ template "ff-common.configmap.env.tpl" . }} +--- +{{ template "ff-common.configmap.tomcat-users.tpl" . }} +--- +{{ template "ff-common.configmap.ldap-role-mapping.tpl" . }} +--- +{{ template "ff-common.deployment.tpl" . }} +--- +{{ template "ff-common.hpa.tpl" . }} +--- +{{ template "ff-common.serviceAccount.tpl" . }} +--- +{{ template "ff-common.service.tpl" . }} +--- +{{ template "ff-common.ingress.tpl" . }} diff --git a/charts/frank-framework/values.schema.json b/charts/frank-framework/values.schema.json new file mode 100644 index 0000000..7020af3 --- /dev/null +++ b/charts/frank-framework/values.schema.json @@ -0,0 +1,413 @@ +{ + "title": "Chart Values", + "type": "object", + "properties": { + "nameOverride": { + "type": "string", + "description": "String to partially override common.names.fullname template (will maintain the release name)", + "default": "" + }, + "fullnameOverride": { + "type": "string", + "description": "String to fully override common.names.fullname template", + "default": "" + }, + "image": { + "type": "object", + "properties": { + "registry": { + "type": "string", + "description": "Frank!Framework image registry", + "default": "nexus.frankframework.org" + }, + "repository": { + "type": "string", + "description": "Frank!Framework image repository", + "default": "frankframework" + }, + "tag": { + "type": "string", + "description": "Frank!Framework image tag (immutable tags are recommended)", + "default": "" + }, + "pullPolicy": { + "type": "string", + "description": "Frank!Framework image pull policy", + "default": "IfNotPresent" + }, + "pullSecrets": { + "type": "array", + "description": "Frank!Framework image pull secrets", + "default": [], + "items": {} + } + } + }, + "frank": { + "type": "object", + "properties": { + "memory": { + "type": "object", + "properties": { + "percentage": { + "type": "boolean", + "description": "Set if the values for the memory are in percentages", + "default": false + }, + "minimum": { + "type": "string", + "description": "Sets the initial size of the heap that will be used by the Frank!Framework", + "default": "4G" + }, + "maximum": { + "type": "string", + "description": "Sets the maximum size of the heap that will be used by the Frank!Framework", + "default": "4G" + } + } + }, + "dtap": { + "type": "object", + "properties": { + "stage": { + "type": "string", + "description": "(Required) Set the `DTAP` stage. Options: `LOC`, `DEV`, `TST`, `ACC`, `PRD`", + "default": "" + }, + "side": { + "type": "string", + "description": "Set the `DTAP` side of where the instance is running", + "default": "" + } + } + }, + "credentials": { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "Set the secret name of the existing secret", + "default": "" + }, + "key": { + "type": "string", + "description": "Set the key inside the secret that contains the data (e.g. `credentials.properties`)", + "default": "" + } + } + }, + "instance": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Set the name of the Frank! instance (default is the `fullname`)", + "default": "" + } + } + }, + "configurations": { + "type": "object", + "properties": { + "names": { + "type": "array", + "description": "Set the configurations to load. Leave empty to use the default", + "default": [], + "items": {} + } + } + }, + "security": { + "type": "object", + "properties": { + "http": { + "type": "object", + "properties": { + "authentication": { + "type": "boolean", + "description": "Set http authentication for the Frank!", + "default": false + }, + "localUsers": { + "type": "array", + "description": "Set localUsers who can log in on the Frank!", + "default": [], + "items": {} + }, + "activeDirectory": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable Active Directory for authentication", + "default": false + }, + "url": { + "type": "string", + "description": "Set url for Active Directory", + "default": "" + }, + "baseDn": { + "type": "string", + "description": "Set baseDn for Active Directory users", + "default": "" + }, + "roleMapping": { + "type": "object", + "properties": { + "tester": { + "type": "string", + "description": "Map the rol for Tester", + "default": "" + }, + "dataAdmin": { + "type": "string", + "description": "Map the rol for DataAdmin", + "default": "" + }, + "admin": { + "type": "string", + "description": "Map the rol for Admin", + "default": "" + }, + "webService": { + "type": "string", + "description": "Map the rol for WebService", + "default": "" + }, + "observer": { + "type": "string", + "description": "Map the rol for Observer", + "default": "" + } + } + } + } + } + } + } + } + }, + "server": { + "type": "object", + "properties": { + "transactionManager": { + "type": "string", + "description": "Set the transaction manager for Tomcat. Options: `NARAYANA`, `BTM`, ``", + "default": "NARAYANA" + } + } + } + } + }, + "autoscaling": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "", + "default": false + }, + "minReplicas": { + "type": "number", + "description": "", + "default": 1 + }, + "maxReplicas": { + "type": "number", + "description": "", + "default": 100 + }, + "targetCPUUtilizationPercentage": { + "type": "number", + "description": "", + "default": 80 + }, + "targetMemoryUtilizationPercentage": { + "type": "number", + "description": "", + "default": 80 + } + } + }, + "connections": { + "type": "object", + "properties": { + "create": { + "type": "boolean", + "description": "Create a `context.xml` and possibly overwrite the existing one, to configure the connections/resources.", + "default": true + }, + "jdbc": { + "type": "array", + "description": "Set multiple database connections. One connection should have an empty name, so it'll get picked up by default (unless `jdbc.required=false` is set)", + "default": [], + "items": {} + }, + "jms": { + "type": "array", + "description": "Set multiple massage services", + "default": [], + "items": {} + } + } + }, + "ingress": { + "type": "object", + "properties": { + "hosts": { + "type": "array", + "description": "", + "items": { + "type": "object", + "properties": { + "host": { + "type": "string", + "description": "" + }, + "paths": { + "type": "array", + "description": "", + "items": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "" + }, + "pathType": { + "type": "string", + "description": "" + } + } + } + } + } + } + }, + "enabled": { + "type": "boolean", + "description": "Enable ingress record generation for Frank!", + "default": false + }, + "className": { + "type": "string", + "description": "IngressClass that will be used to implement the Ingress (Kubernetes 1.18+)", + "default": "" + }, + "annotations": { + "type": "object", + "description": "Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.", + "default": {} + }, + "tls": { + "type": "array", + "description": "Define tls secrets for hosts (implementation not done yet)", + "default": [], + "items": {} + } + } + }, + "replicaCount": { + "type": "number", + "description": "Number of Frank!Framework replicas to deploy", + "default": 1 + }, + "livenessProbe": { + "type": "object", + "properties": { + "initialDelaySeconds": { + "type": "number", + "description": "Initial delay seconds for livenessProbe", + "default": 40 + }, + "periodSeconds": { + "type": "number", + "description": "Period seconds for livenessProbe", + "default": 10 + }, + "timeoutSeconds": { + "type": "number", + "description": "Timeout seconds for livenessProbe", + "default": 1 + }, + "failureThreshold": { + "type": "number", + "description": "Failure threshold for livenessProbe", + "default": 6 + }, + "successThreshold": { + "type": "number", + "description": "Success threshold for livenessProbe", + "default": 1 + } + } + }, + "nodeSelector": { + "type": "object", + "description": "Node labels for pod assignment", + "default": {} + }, + "tolerations": { + "type": "array", + "description": "Set tolerations for pod assignment", + "default": [], + "items": {} + }, + "affinity": { + "type": "object", + "description": "Set affinity for pod assignment", + "default": {} + }, + "timeZone": { + "type": "string", + "description": "used for database connection and log timestamps", + "default": "Etc/UTC" + }, + "service": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Frank!Framework service type", + "default": "ClusterIP" + }, + "port": { + "type": "number", + "description": "Frank!Framework service port", + "default": 80 + } + } + }, + "serviceAccount": { + "type": "object", + "properties": { + "create": { + "type": "boolean", + "description": "Enable creation of ServiceAccount for Frank!Framework pod", + "default": true + }, + "annotations": { + "type": "object", + "description": "Additional custom annotations for the ServiceAccount", + "default": {} + }, + "name": { + "type": "string", + "description": "The name of the ServiceAccount to use.", + "default": "" + } + } + }, + "podAnnotations": { + "type": "object", + "description": "Annotations for Frank!Framework pods", + "default": {} + }, + "podLabels": { + "type": "object", + "description": "Extra labels for Frank!Framework pods", + "default": {} + } + } +} \ No newline at end of file diff --git a/charts/frank-framework/values.yaml b/charts/frank-framework/values.yaml new file mode 100644 index 0000000..8f93d5d --- /dev/null +++ b/charts/frank-framework/values.yaml @@ -0,0 +1,332 @@ +## @section Common parameters +## + +## @param nameOverride String to partially override common.names.fullname template (will maintain the release name) +## +nameOverride: "" +## @param fullnameOverride String to fully override common.names.fullname template +## +fullnameOverride: "" + +## @section Frank!Framework image parameters +## + +## Frank!Framework image +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## @param image.registry Frank!Framework image registry +## @param image.repository Frank!Framework image repository +## @param image.tag Frank!Framework image tag (immutable tags are recommended) +## +image: + registry: nexus.frankframework.org + repository: frankframework + tag: "" + ## @param image.pullPolicy Frank!Framework image pull policy + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## @param image.pullSecrets Frank!Framework image pull secrets + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + +## @section Frank! Configuration parameters +## + +## @skip frank [object] +## +frank: + ## @param frank.memory.percentage Set if the values for the memory are in percentages + ## @param frank.memory.minimum Sets the initial size of the heap that will be used by the Frank!Framework + ## @param frank.memory.maximum Sets the maximum size of the heap that will be used by the Frank!Framework + ## For Java 8 it is best suited to use the same amount of memory for both the minimum and maximum. + ## For Java 11 and above, it is possible to use percentages. E.g. minimum: 20.0, maximum: 80.0. + ## ref: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDJJFI + ## + memory: + percentage: false + minimum: 4G + maximum: 4G + ## @skip frank.dtap [object] + ## @param frank.dtap.stage (Required) Set the `DTAP` stage. Options: `LOC`, `DEV`, `TST`, `ACC`, `PRD` + ## @param frank.dtap.side Set the `DTAP` side of where the instance is running + ## + dtap: + stage: "" + side: "" + ## @skip frank.credentials [object] + ## @param frank.credentials.secret Set the secret name of the existing secret + ## @param frank.credentials.key Set the key inside the secret that contains the data (e.g. `credentials.properties`) + ## + credentials: + secret: "" + key: "" + ## @skip frank.instance [string] + ## @param frank.instance.name Set the name of the Frank! instance (default is the `fullname`) + ## + instance: + name: "" + ## @skip frank.configurations [object] + ## @param frank.configurations.names [array] Set the configurations to load. Leave empty to use the default + ## e.g. + ## configurations.names: + ## - main + ## + configurations: + names: [] + ## @skip frank.security [object] + ## @skip frank.security.http [object] + ## + security: + http: + ## @param frank.security.http.authentication Set http authentication for the Frank! + ## + authentication: false + ## @param frank.security.http.localUsers [array] Set localUsers who can log in on the Frank! + ## @param frank.security.http.localUsers.username [string] Set the username of the user + ## @param frank.security.http.localUsers.password [string] Set the password of the user + ## @param frank.security.http.localUsers.roles [array] Set the roles of the user. Options: `IbisTester`, `IbisDataAdmin`, `IbisAdmin`, `IbisWebService`, `IbisObserver` + ## e.g. + ## localUsers: + ## - username: Tester + ## password: ChangeMe! + ## roles: + ## - IbisTester + ## + localUsers: [] + ## @skip frank.security.http.activeDirectory [object] + ## @param frank.security.http.activeDirectory.enabled Enable Active Directory for authentication + ## @param frank.security.http.activeDirectory.url Set url for Active Directory + ## @param frank.security.http.activeDirectory.baseDn Set baseDn for Active Directory users + ## @skip frank.security.http.activeDirectory.roleMapping [object] + ## @param frank.security.http.activeDirectory.roleMapping.tester Map the rol for Tester + ## @param frank.security.http.activeDirectory.roleMapping.dataAdmin Map the rol for DataAdmin + ## @param frank.security.http.activeDirectory.roleMapping.admin Map the rol for Admin + ## @param frank.security.http.activeDirectory.roleMapping.webService Map the rol for WebService + ## @param frank.security.http.activeDirectory.roleMapping.observer Map the rol for Observer + ## + activeDirectory: + enabled: false + url: "" + baseDn: "" + roleMapping: + tester: "" + dataAdmin: "" + admin: "" + webService: "" + observer: "" + ## @skip frank.server [object] + ## + server: + ## @param frank.server.transactionManager [string] Set the transaction manager for Tomcat. Options: `NARAYANA`, `BTM`, `` + ## + transactionManager: NARAYANA + ## @param frank.environmentVariables [object] Set extra environment variables for the Frank! + ## + environmentVariables: {} + +## @section Frank!Framework Connection parameters +## + +## @skip connections [object] +## +connections: + ## @param connections.create Create a `context.xml` and possibly overwrite the existing one, to configure the connections/resources. + ## + create: true + ## @param connections.jdbc [array] Set multiple database connections. One connection should have an empty name, so it'll get picked up by default (unless `jdbc.required=false` is set) + ## @param connections.jdbc.name [nullable,string] Name of the connection (leave empty to use default: `jdbc/${.Values.instance.name}` in lowercase) + ## @param connections.jdbc.type [string] DBMS type. Options: `oracle`, `mssql`, `mysql`, `mariadb`, `postgresql`, `db2`, `mongodb` + ## @param connections.jdbc.host [string] Host of where the database can be reached (like in the same cluster e.g. `<service>.<namespace>.svc.cluster.local`) + ## @param connections.jdbc.post [nullable,string] Port for the database (leave empty for default) + ## @param connections.jdbc.database [nullable,string] Name of the database to use (default is `.Values.instance.name`) + ## @param connections.jdbc.username [string] Username to connect to the database (or use string template for use with credentials e.g. `${database/username}`) + ## @param connections.jdbc.password [string] Password to connect to the database (or use string template for use with credentials e.g. `${database/password}`) + ## @param connections.jdbc.ssl [nullable,string] Set to `true` is the connection uses SSL, default is `false` + ## + jdbc: [] + ## @param connections.jms [array] Set multiple massage services + ## @param connections.jms.name [nullable,string] Name of the connection (leave empty to use default: `jms/${.Values.instance.name}` in lowercase) + ## @param connections.jms.type [string] MQ type. Options: `artemis`, `activemq` + ## @param connections.jms.host [string] Host of where the MQ can be reached (like in the same cluster e.g. `<service>.<namespace>.svc.cluster.local`) + ## @param connections.jms.post [nullable,string] Port for the MQ (leave empty for default) + ## + jms: [] + +## @section Frank!Framework deployment parameters +## + +## @param replicaCount Number of Frank!Framework replicas to deploy +## NOTE: ReadWriteMany PVC(s) are required if replicaCount > 1 +## +replicaCount: 1 + +## Configure extra options for Frank!Framework containers' liveness, readiness and startup probes +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes +## @param livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe +## @param livenessProbe.periodSeconds Period seconds for livenessProbe +## @param livenessProbe.timeoutSeconds Timeout seconds for livenessProbe +## @param livenessProbe.failureThreshold Failure threshold for livenessProbe +## @param livenessProbe.successThreshold Success threshold for livenessProbe +## +livenessProbe: + initialDelaySeconds: 40 + periodSeconds: 10 + timeoutSeconds: 1 + failureThreshold: 6 + successThreshold: 1 +## Frank!Framework container's resource requests and limits +## ref: https://kubernetes.io/docs/user-guide/compute-resources/ +## @param resources [object] Set the resources for the Frank!Framework containers +## @param resources.limits [string] The resources limits for the Frank!Framework containers +## @param resources.requests.memory [string] The requested memory for the Frank!Framework containers +## @param resources.requests.cpu [string] The requested cpu for the Frank!Framework containers +## e.g.: +## resources +## limits: +## cpu: 2000m +## memory: 4200M +## requests: +## cpu: 2000m +## memory: 4200M +## +resources: {} + +## @skip autoscaling +## +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + targetMemoryUtilizationPercentage: 80 + +## @param nodeSelector Node labels for pod assignment +## ref: https://kubernetes.io/docs/user-guide/node-selection/ +## +nodeSelector: {} + +## @param tolerations Set tolerations for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +## +tolerations: [] + +## @param affinity Set affinity for pod assignment +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +## NOTE: podAffinityPreset, podAntiAffinityPreset, and nodeAffinityPreset will be ignored when it's set +## +affinity: {} + +## @param timeZone used for database connection and log timestamps +## +timeZone: Etc/UTC + +## @section Traffic Exposure Parameters +## + +## Frank!Framework service parameters +## +service: + ## @param service.type Frank!Framework service type + ## + type: ClusterIP + ## @param service.port Frank!Framework service port + port: 80 + +## Configure the ingress resource that allows you to access the Frank!Framework installation +## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/ +## +ingress: + ## @param ingress.enabled Enable ingress record generation for Frank! + ## + enabled: false + ## @param ingress.className IngressClass that will be used to implement the Ingress (Kubernetes 1.18+) + ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster . + ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/ + ## + className: "" + ## @param ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations. + ## For a full list of possible ingress annotations, please see + ## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md + ## Use this parameter to set the required annotations for cert-manager, see + ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations + ## e.g: + ## annotations: + ## kubernetes.io/ingress.class: nginx + ## kubernetes.io/tls-acme: 'true' + ## + annotations: {} + ## @param ingress.hosts [array] Set hosts for ingress + ## @param ingress.hosts.host [string] Set hostname + ## @param ingress.hosts.paths [array] Set multiple paths + ## @param ingress.hosts.paths.path [string] Set path (context url) + ## @param ingress.hosts.paths.pathType [string] Set type of path + ## + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + ## @param ingress.tls [array] Define tls secrets for hosts (implementation not done yet) + ## e.g. + ## tls: + ## - secretName: chart-example-tls + ## hosts: + ## - chart-example.local + ## + tls: [] + +## @section Other Parameters +## + +## Frank!Framework Service Account +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ +## +serviceAccount: + ## @param serviceAccount.create Enable creation of ServiceAccount for Frank!Framework pod + ## + create: true + ## @param serviceAccount.annotations Additional custom annotations for the ServiceAccount + ## + annotations: {} + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the ff-common.fullname template + ## + name: "" + +## @param podAnnotations Annotations for Frank!Framework pods +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +## +podAnnotations: {} + +## @param podLabels Extra labels for Frank!Framework pods +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +## +podLabels: {} + +## Configure Pods Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param podSecurityContext [object] Set Frank!Framework pod's Security Context +## +podSecurityContext: {} + +## Configure Container Security Context (only main container) +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container +## @param securityContext [object] Set Frank!Framework container's Security Context +## e.g. +## securityContext: {} +## capabilities: +## drop: +## - ALL +## readOnlyRootFilesystem: true +## runAsNonRoot: true +## runAsUser: 1000 +## +securityContext: {} diff --git a/charts/frank2example/Chart.yaml b/charts/frank2example/Chart.yaml index a0e6f3e..e75d6af 100644 --- a/charts/frank2example/Chart.yaml +++ b/charts/frank2example/Chart.yaml @@ -4,7 +4,10 @@ description: A Helm chart for running Frank2Example on Kubernetes name: frank2example icon: https://raw.githubusercontent.com/frankframework/charts/master/charts/frank2example/icon.svg type: application -version: 0.2.10 +version: 0.2.11 + +keywords: + - demo dependencies: - name: ff-common diff --git a/charts/frank2example/values.yaml b/charts/frank2example/values.yaml index 634f137..35810bf 100644 --- a/charts/frank2example/values.yaml +++ b/charts/frank2example/values.yaml @@ -12,7 +12,7 @@ fullnameOverride: "" ## ## Frank!Framework image -## ref: https://https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ ## @param image.registry Frank!Framework image registry ## @param image.repository Frank!Framework image repository ## @param image.tag Frank!Framework image tag (immutable tags are recommended) diff --git a/charts/frankframework/Chart.yaml b/charts/frankframework/Chart.yaml index c9bdee2..8340890 100644 --- a/charts/frankframework/Chart.yaml +++ b/charts/frankframework/Chart.yaml @@ -4,7 +4,7 @@ description: A Helm chart for running the Frank!Framework on Kubernetes name: frankframework icon: https://raw.githubusercontent.com/frankframework/charts/master/charts/frankframework/icon.svg type: application -version: 0.2.10 +version: 0.2.11 dependencies: - name: ff-common diff --git a/charts/frankframework/values.yaml b/charts/frankframework/values.yaml index 0281000..8f93d5d 100644 --- a/charts/frankframework/values.yaml +++ b/charts/frankframework/values.yaml @@ -12,7 +12,7 @@ fullnameOverride: "" ## ## Frank!Framework image -## ref: https://https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ ## @param image.registry Frank!Framework image registry ## @param image.repository Frank!Framework image repository ## @param image.tag Frank!Framework image tag (immutable tags are recommended) diff --git a/ff-template/Chart.lock b/ff-template/Chart.lock index f33c7d9..3250dfe 100644 --- a/ff-template/Chart.lock +++ b/ff-template/Chart.lock @@ -2,5 +2,5 @@ dependencies: - name: ff-common repository: file://../charts/ff-common version: 0.1.17 -digest: sha256:4225859041b2b69925615ac9392a6ac202c174d64f4c001d6a52d0d49e8d81f9 -generated: "2023-11-21T10:34:09.343662149+01:00" +digest: sha256:8609921b4e64986a156b9e34628f7f3e01c42227d034038eefe79b8de41c5307 +generated: "2023-11-23T19:42:55.0815619+01:00" diff --git a/ff-template/Chart.yaml b/ff-template/Chart.yaml index 385f963..868544d 100644 --- a/ff-template/Chart.yaml +++ b/ff-template/Chart.yaml @@ -4,9 +4,9 @@ description: A Helm chart for running a Frank! on Kubernetes name: ff-template icon: https://raw.githubusercontent.com/frankframework/charts/master/ff-template/icon.svg type: application -version: 0.1.6 +version: 0.1.7 dependencies: - name: ff-common - version: ~0.1.15 + version: ~0.1.17 repository: file://../charts/ff-common diff --git a/ff-template/values.yaml b/ff-template/values.yaml index 0281000..8f93d5d 100644 --- a/ff-template/values.yaml +++ b/ff-template/values.yaml @@ -12,7 +12,7 @@ fullnameOverride: "" ## ## Frank!Framework image -## ref: https://https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ +## ref: https://nexus.frankframework.org/#browse/browse:frankframework-docker:v2%2Ffrankframework%2Ftags/ ## @param image.registry Frank!Framework image registry ## @param image.repository Frank!Framework image repository ## @param image.tag Frank!Framework image tag (immutable tags are recommended) diff --git a/frontend/pages/[name].vue b/frontend/pages/[name].vue index c4cc476..a593a8c 100644 --- a/frontend/pages/[name].vue +++ b/frontend/pages/[name].vue @@ -1,58 +1,79 @@ <template> - <main class="pt-10"> - <NuxtLink to="/"><UIcon name="i-heroicons-arrow-left" /> All Charts</NuxtLink> - <div class="flex mt-10"> - <div class="flex-auto"> - <div class="flex items-top"> - <img :src="currentChart[0].icon" v-if="currentChart[0].icon" class="w-28 mr-5 max-h-28" /> - <div v-else class="w-28 h-28 mr-5 p-3 rounded-2xl bg-gray-100"> - <svg xmlns="http://www.w3.org/2000/svg" class="w-100 h-100 fill-gray-400" viewBox="0 0 500 500"> - <path - d="M136.52938,121.13478c-.572-.54252-1.19462-1.12636-1.81-1.71761-12.61677-12.12115-22.38092-26.13637-28.279-42.702-1.65073-4.63637-2.89692-9.36515-2.67587-14.35871.021-.4739.01959-.94915.05226-1.42214.445-6.44594,4.75912-9.70322,11.05839-8.17669a27.325,27.325,0,0,1,5.73149,2.19653c6.89022,3.45538,12.5062,8.56359,17.67051,14.16571a112.52651,112.52651,0,0,1,21.722,33.42965,8.29635,8.29635,0,0,0,.38946.861c.07116.12855.22232.21282.55927.51883A176.357,176.357,0,0,1,241.968,79.06864c-.17651-.8761-.28195-1.54571-.44772-2.2a112.49436,112.49436,0,0,1-2.65292-36.95637,84.07478,84.07478,0,0,1,4.44444-21.76378,31.32555,31.32555,0,0,1,5.47651-10.17139,15.687,15.687,0,0,1,3.16336-2.82149,7.026,7.026,0,0,1,8.03255-.056,17.27854,17.27854,0,0,1,5.8402,6.73185A53.05435,53.05435,0,0,1,271.08657,26.508a112.50469,112.50469,0,0,1,2.12263,33.00356,95.59806,95.59806,0,0,1-3.49052,19.91081c7.12171,1.31193,14.20955,2.32869,21.1473,3.97713a186.37909,186.37909,0,0,1,20.44069,6.0033A188.31671,188.31671,0,0,1,331.0769,97.9721c6.34538,3.16433,12.38553,6.94066,18.71757,10.53829.20571-.433.50439-.94982.706-1.50212A108.65959,108.65959,0,0,1,383.40128,60.246a37.75787,37.75787,0,0,1,11.822-6.883,17.24558,17.24558,0,0,1,3.67827-.84512c6.264-.71729,8.89351,3.2244,9.35653,7.93183a29.94372,29.94372,0,0,1-.77381,10.35466A87.90551,87.90551,0,0,1,396.75426,95.492c-6.79016,10.97178-14.85015,20.85494-25.09307,28.83042-.30234.2354-.56784.51814-1.07988.99029a177.77993,177.77993,0,0,1,26.59293,30.88244,10.96227,10.96227,0,0,1-1.689.29762c-10.59546.015-21.1911-.01829-31.78622.04607a4.004,4.004,0,0,1-3.17246-1.69,147.87522,147.87522,0,0,0-88.17776-46.54846,143.35862,143.35862,0,0,0-30.27955-1.16923,146.40735,146.40735,0,0,0-82.53728,31.81054,140.06663,140.06663,0,0,0-16.97616,15.84186,4.72839,4.72839,0,0,1-3.86326,1.75742c-10.12056-.07028-20.24188-.035-30.36293-.03495h-2.15212c.618-2.408,6.84026-10.93786,13.88352-18.55281C125.31349,132.2744,130.87768,126.8839,136.52938,121.13478Z" /> - <path - d="M394.52934,347.9123a176.63854,176.63854,0,0,1-23.97343,27.16338c.70941.59068,1.28594,1.07041,1.86212,1.55057A108.31456,108.31456,0,0,1,406.10131,424.772a34.61831,34.61831,0,0,1,2.202,14.42026,14.88544,14.88544,0,0,1-.74786,3.69206,7.20762,7.20762,0,0,1-8.15793,5.02308,22.23329,22.23329,0,0,1-6.76276-2.00629,51.23237,51.23237,0,0,1-9.18151-5.8151,107.59183,107.59183,0,0,1-32.936-46.7072c-.18746-.51334-.39218-1.0204-.72243-1.87691a194.65008,194.65008,0,0,1-25.01223,14.00774,181.66925,181.66925,0,0,1-26.6869,9.72442,187.55649,187.55649,0,0,1-28.3045,5.38805c.16807.84015.26446,1.5098.43745,2.15907a109.172,109.172,0,0,1,2.9708,36.44311,80.804,80.804,0,0,1-4.42286,22.4773,78.24971,78.24971,0,0,1-4.16475,8.74473,13.39,13.39,0,0,1-2.33865,2.97083c-3.98009,4.109-8.73225,4.144-12.61157-.07366a27.28012,27.28012,0,0,1-3.907-5.61776c-3.07685-5.77569-4.6604-12.056-5.791-18.46021a116.86329,116.86329,0,0,1-1.35893-26.465,94.4795,94.4795,0,0,1,2.88466-19.18513c.14009-.53269.268-1.0696.37134-1.61034.02629-.13754-.06342-.2973-.17067-.73825a176.12108,176.12108,0,0,1-80.96855-24.99386c-.40992.90921-.76206,1.67473-1.10168,2.44579a110.47729,110.47729,0,0,1-30.90112,41.42041,38.16071,38.16071,0,0,1-12.04706,6.95909,12.08987,12.08987,0,0,1-6.51516.70023,7.11858,7.11858,0,0,1-5.40329-4.4892c-1.41614-3.424-1.16526-6.985-.68438-10.51691a55.45267,55.45267,0,0,1,4.30768-14.25037A112.49985,112.49985,0,0,1,134.88761,380.779c.459-.43461.92981-.857,1.38087-1.29954a3.76029,3.76029,0,0,0,.36534-.65529,178.90466,178.90466,0,0,1-28.469-31.31672c.98458-.08018,1.64327-.18,2.30205-.1806,10.51436-.00976,21.029.02736,31.54284-.04358a4.70554,4.70554,0,0,1,3.70344,1.62615,146.94611,146.94611,0,0,0,39.40276,28.88494,139.94667,139.94667,0,0,0,49.70395,14.77367q70.68048,6.87067,121.59971-42.85452a7.64571,7.64571,0,0,1,5.99261-2.44347c9.80139.12121,19.60512.04986,29.408.04986h2.53353Z" /> - <path - d="M350.73576,197.76167c2.78711,0,5.47037.18919,8.11487-.0501,2.9951-.271,5.139.8001,7.32354,2.81308,12.61275,11.62214,25.35732,23.10129,38.05863,34.62729.63855.57948,1.29039,1.14432,2.1101,1.8701.76445-.65718,1.48119-1.24318,2.16483-1.8655Q428.14636,217.27914,447.756,199.37a5.44772,5.44772,0,0,1,4.20358-1.64576c3.21888.13038,6.44673.03746,9.8412.03746V303.13036c-1.72309.50368-24.8756.60366-27.63911.0611v-53.362l-.53656-.25427c-9.01079,8.21784-18.0216,16.43564-27.23786,24.8408-9.22584-8.31119-18.34194-16.52347-27.458-24.73577l-.52449.19192c-.023,4.45359-.00774,8.90828-.01046,13.36233q-.00408,6.63942-.00058,13.27882v26.87211h-27.428C350.45161,301.61243,350.21289,203.72342,350.73576,197.76167Z" /> - <path - d="M97.63436,197.88229h27.26325c.55054,1.75251.65821,102.97139.09469,105.525H97.70468c-.15021-6.70344-.04736-13.38394-.06622-20.06131-.01871-6.62261-.0041-13.24531-.0041-20.03958H63.84679V303.047c-2.05946.61518-25.33374.67417-27.64758.123V197.89436H63.73742v37.18876c1.96793.56844,30.92319.67339,33.872.12942.00818-2.97713.02-6.02646.024-9.0758q.0063-4.7433.00094-9.4866,0-4.625,0-9.25C97.63437,204.32179,97.63436,201.24346,97.63436,197.88229Z" /> - <path - d="M157.5757,303.3683V198.1946c1.617-.52913,61.545-.73586,65.46219-.20457v22.41432c-.87869.063-1.7857.18341-2.69279.18454q-16.0086.01994-32.01725.00881l-2.96767,0v17.43353H218.7067V261.2229H185.65838c-.55339,1.98509-.70531,15.81681-.25622,19.64583.84488.05679,1.75.16952,2.6553.17059q16.00862.01863,32.01727.00822h2.96945V303.3683Z" /> - <path - d="M254.28291,303.40855c-.50074-2.82232-.39948-103.60181.09747-105.51735h27.16208v77.76453c1.17173.06084,2.09122.14921,3.01077.15005q16.128.01468,32.2561.00658c.92562,0,1.85125,0,2.90733,0v27.59622Z" /> - </svg> - </div> - <div> - <h1 class="text-4xl font-bold">{{ currentChart[0].name }}</h1> - <p>{{ currentChart[0].description }}</p> - <span - class="bg-yellow-100 text-yellow-800 text-xs font-medium px-2.5 py-0.5 rounded-full dark:bg-yellow-900 dark:text-yellow-300">{{ - currentChart[0].version }}</span> - </div> - </div> - <hr class="h-px my-8 bg-gray-200 border-0 dark:bg-gray-700" /> - <ContentDoc class="prose max-w-full dark:text-white" :path="`${path}/readme`" /> + <main class="pt-10"> + <div class="flex justify-between"> + <NuxtLink to="/"> + <UIcon name="i-heroicons-arrow-left"/> + All Charts + </NuxtLink> + <NuxtLink class="flex items-center gap-1" :to="'https://github.com/frankframework/charts/tree/master/charts/' + currentChart[0].name"> + <svg class="gh-icon" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 32.58 31.77"> + <path + d="M16.29,0a16.29,16.29,0,0,0-5.15,31.75c.82.15,1.11-.36,1.11-.79s0-1.41,0-2.77C7.7,29.18,6.74,26,6.74,26a4.36,4.36,0,0,0-1.81-2.39c-1.47-1,.12-1,.12-1a3.43,3.43,0,0,1,2.49,1.68,3.48,3.48,0,0,0,4.74,1.36,3.46,3.46,0,0,1,1-2.18c-3.62-.41-7.42-1.81-7.42-8a6.3,6.3,0,0,1,1.67-4.37,5.94,5.94,0,0,1,.16-4.31s1.37-.44,4.48,1.67a15.41,15.41,0,0,1,8.16,0c3.11-2.11,4.47-1.67,4.47-1.67A5.91,5.91,0,0,1,25,11.07a6.3,6.3,0,0,1,1.67,4.37c0,6.26-3.81,7.63-7.44,8a3.85,3.85,0,0,1,1.11,3c0,2.18,0,3.94,0,4.47s.29.94,1.12.78A16.29,16.29,0,0,0,16.29,0Z"></path> + </svg> + View on GitHub + </NuxtLink> + </div> + <div class="flex mt-10"> + <div class="flex-auto"> + <div class="flex items-top"> + <img :src="currentChart[0].icon" v-if="currentChart[0].icon" class="w-28 mr-5 max-h-28"/> + <div v-else class="w-28 h-28 mr-5 p-3 rounded-2xl bg-gray-100"> + <svg xmlns="http://www.w3.org/2000/svg" class="w-100 h-100 fill-gray-400" viewBox="0 0 500 500"> + <path + d="M136.52938,121.13478c-.572-.54252-1.19462-1.12636-1.81-1.71761-12.61677-12.12115-22.38092-26.13637-28.279-42.702-1.65073-4.63637-2.89692-9.36515-2.67587-14.35871.021-.4739.01959-.94915.05226-1.42214.445-6.44594,4.75912-9.70322,11.05839-8.17669a27.325,27.325,0,0,1,5.73149,2.19653c6.89022,3.45538,12.5062,8.56359,17.67051,14.16571a112.52651,112.52651,0,0,1,21.722,33.42965,8.29635,8.29635,0,0,0,.38946.861c.07116.12855.22232.21282.55927.51883A176.357,176.357,0,0,1,241.968,79.06864c-.17651-.8761-.28195-1.54571-.44772-2.2a112.49436,112.49436,0,0,1-2.65292-36.95637,84.07478,84.07478,0,0,1,4.44444-21.76378,31.32555,31.32555,0,0,1,5.47651-10.17139,15.687,15.687,0,0,1,3.16336-2.82149,7.026,7.026,0,0,1,8.03255-.056,17.27854,17.27854,0,0,1,5.8402,6.73185A53.05435,53.05435,0,0,1,271.08657,26.508a112.50469,112.50469,0,0,1,2.12263,33.00356,95.59806,95.59806,0,0,1-3.49052,19.91081c7.12171,1.31193,14.20955,2.32869,21.1473,3.97713a186.37909,186.37909,0,0,1,20.44069,6.0033A188.31671,188.31671,0,0,1,331.0769,97.9721c6.34538,3.16433,12.38553,6.94066,18.71757,10.53829.20571-.433.50439-.94982.706-1.50212A108.65959,108.65959,0,0,1,383.40128,60.246a37.75787,37.75787,0,0,1,11.822-6.883,17.24558,17.24558,0,0,1,3.67827-.84512c6.264-.71729,8.89351,3.2244,9.35653,7.93183a29.94372,29.94372,0,0,1-.77381,10.35466A87.90551,87.90551,0,0,1,396.75426,95.492c-6.79016,10.97178-14.85015,20.85494-25.09307,28.83042-.30234.2354-.56784.51814-1.07988.99029a177.77993,177.77993,0,0,1,26.59293,30.88244,10.96227,10.96227,0,0,1-1.689.29762c-10.59546.015-21.1911-.01829-31.78622.04607a4.004,4.004,0,0,1-3.17246-1.69,147.87522,147.87522,0,0,0-88.17776-46.54846,143.35862,143.35862,0,0,0-30.27955-1.16923,146.40735,146.40735,0,0,0-82.53728,31.81054,140.06663,140.06663,0,0,0-16.97616,15.84186,4.72839,4.72839,0,0,1-3.86326,1.75742c-10.12056-.07028-20.24188-.035-30.36293-.03495h-2.15212c.618-2.408,6.84026-10.93786,13.88352-18.55281C125.31349,132.2744,130.87768,126.8839,136.52938,121.13478Z"/> + <path + d="M394.52934,347.9123a176.63854,176.63854,0,0,1-23.97343,27.16338c.70941.59068,1.28594,1.07041,1.86212,1.55057A108.31456,108.31456,0,0,1,406.10131,424.772a34.61831,34.61831,0,0,1,2.202,14.42026,14.88544,14.88544,0,0,1-.74786,3.69206,7.20762,7.20762,0,0,1-8.15793,5.02308,22.23329,22.23329,0,0,1-6.76276-2.00629,51.23237,51.23237,0,0,1-9.18151-5.8151,107.59183,107.59183,0,0,1-32.936-46.7072c-.18746-.51334-.39218-1.0204-.72243-1.87691a194.65008,194.65008,0,0,1-25.01223,14.00774,181.66925,181.66925,0,0,1-26.6869,9.72442,187.55649,187.55649,0,0,1-28.3045,5.38805c.16807.84015.26446,1.5098.43745,2.15907a109.172,109.172,0,0,1,2.9708,36.44311,80.804,80.804,0,0,1-4.42286,22.4773,78.24971,78.24971,0,0,1-4.16475,8.74473,13.39,13.39,0,0,1-2.33865,2.97083c-3.98009,4.109-8.73225,4.144-12.61157-.07366a27.28012,27.28012,0,0,1-3.907-5.61776c-3.07685-5.77569-4.6604-12.056-5.791-18.46021a116.86329,116.86329,0,0,1-1.35893-26.465,94.4795,94.4795,0,0,1,2.88466-19.18513c.14009-.53269.268-1.0696.37134-1.61034.02629-.13754-.06342-.2973-.17067-.73825a176.12108,176.12108,0,0,1-80.96855-24.99386c-.40992.90921-.76206,1.67473-1.10168,2.44579a110.47729,110.47729,0,0,1-30.90112,41.42041,38.16071,38.16071,0,0,1-12.04706,6.95909,12.08987,12.08987,0,0,1-6.51516.70023,7.11858,7.11858,0,0,1-5.40329-4.4892c-1.41614-3.424-1.16526-6.985-.68438-10.51691a55.45267,55.45267,0,0,1,4.30768-14.25037A112.49985,112.49985,0,0,1,134.88761,380.779c.459-.43461.92981-.857,1.38087-1.29954a3.76029,3.76029,0,0,0,.36534-.65529,178.90466,178.90466,0,0,1-28.469-31.31672c.98458-.08018,1.64327-.18,2.30205-.1806,10.51436-.00976,21.029.02736,31.54284-.04358a4.70554,4.70554,0,0,1,3.70344,1.62615,146.94611,146.94611,0,0,0,39.40276,28.88494,139.94667,139.94667,0,0,0,49.70395,14.77367q70.68048,6.87067,121.59971-42.85452a7.64571,7.64571,0,0,1,5.99261-2.44347c9.80139.12121,19.60512.04986,29.408.04986h2.53353Z"/> + <path + d="M350.73576,197.76167c2.78711,0,5.47037.18919,8.11487-.0501,2.9951-.271,5.139.8001,7.32354,2.81308,12.61275,11.62214,25.35732,23.10129,38.05863,34.62729.63855.57948,1.29039,1.14432,2.1101,1.8701.76445-.65718,1.48119-1.24318,2.16483-1.8655Q428.14636,217.27914,447.756,199.37a5.44772,5.44772,0,0,1,4.20358-1.64576c3.21888.13038,6.44673.03746,9.8412.03746V303.13036c-1.72309.50368-24.8756.60366-27.63911.0611v-53.362l-.53656-.25427c-9.01079,8.21784-18.0216,16.43564-27.23786,24.8408-9.22584-8.31119-18.34194-16.52347-27.458-24.73577l-.52449.19192c-.023,4.45359-.00774,8.90828-.01046,13.36233q-.00408,6.63942-.00058,13.27882v26.87211h-27.428C350.45161,301.61243,350.21289,203.72342,350.73576,197.76167Z"/> + <path + d="M97.63436,197.88229h27.26325c.55054,1.75251.65821,102.97139.09469,105.525H97.70468c-.15021-6.70344-.04736-13.38394-.06622-20.06131-.01871-6.62261-.0041-13.24531-.0041-20.03958H63.84679V303.047c-2.05946.61518-25.33374.67417-27.64758.123V197.89436H63.73742v37.18876c1.96793.56844,30.92319.67339,33.872.12942.00818-2.97713.02-6.02646.024-9.0758q.0063-4.7433.00094-9.4866,0-4.625,0-9.25C97.63437,204.32179,97.63436,201.24346,97.63436,197.88229Z"/> + <path + d="M157.5757,303.3683V198.1946c1.617-.52913,61.545-.73586,65.46219-.20457v22.41432c-.87869.063-1.7857.18341-2.69279.18454q-16.0086.01994-32.01725.00881l-2.96767,0v17.43353H218.7067V261.2229H185.65838c-.55339,1.98509-.70531,15.81681-.25622,19.64583.84488.05679,1.75.16952,2.6553.17059q16.00862.01863,32.01727.00822h2.96945V303.3683Z"/> + <path + d="M254.28291,303.40855c-.50074-2.82232-.39948-103.60181.09747-105.51735h27.16208v77.76453c1.17173.06084,2.09122.14921,3.01077.15005q16.128.01468,32.2561.00658c.92562,0,1.85125,0,2.90733,0v27.59622Z"/> + </svg> + </div> + <div> + <h1 class="text-4xl font-bold">{{ currentChart[0].name }}</h1> + <p>{{ currentChart[0].description }}</p> + <div class="mb-0.5"> + <span + class="bg-[#fdc300] font-bold text-black text-xs mr-0.5 px-2.5 py-0.5 rounded-full">{{ + currentChart[0].version + }}</span> + <span v-if="currentChart[0].deprecated" + class="bg-red-100 text-red-800 text-xs mr-0.5 font-medium px-2.5 py-0.5 rounded-full dark:bg-red-900 dark:text-red-300">deprecated</span> </div> - <div class="flex-none ml-5 w-64 border-l-1 border-gray-100"> - <div class="sticky top-10"> - <h1 class="font-bold">Chart Versions</h1> - <div v-for="chart in charts.entries[currentChart[0].name]"> - {{ chart.version }} - {{ formatDate(chart.created) }} - </div> - <h1 class="font-bold mt-3">Chart</h1> - <NuxtLink :to="charts.entries[currentChart[0].name][0].urls[0]">Download</NuxtLink> - </div> + <div> + <span v-for="keyword in currentChart[0].keywords" + class="bg-yellow-100 text-yellow-800 text-xs mr-0.5 font-medium px-2.5 py-0.5 rounded-full dark:bg-yellow-900 dark:text-yellow-300">{{ keyword }}</span> </div> + </div> </div> - </main> + <hr class="h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"/> + <ContentDoc class="prose max-w-full dark:text-white" :path="`${path}/readme`"/> + </div> + <div class="flex-none ml-5 border-l-1 border-gray-100"> + <div class="sticky top-10"> + <h1 class="font-bold">Chart Versions</h1> + <div v-for="chart in charts.entries[currentChart[0].name]"> + {{ chart.version }} - {{ formatDate(chart.created) }} + </div> + <h1 class="font-bold mt-3">Chart</h1> + <NuxtLink :to="charts.entries[currentChart[0].name][0].urls[0]">Download</NuxtLink> + </div> + </div> + </div> + </main> </template> <script setup> const route = useRoute() const path = 'charts/' + route.params.name -const { data: currentChart } = await useAsyncData(path, () => { - return queryContent(path).find() +const {data: currentChart} = await useAsyncData(path, () => { + return queryContent(path).find() }) -const { data: charts } = await useAsyncData('charts', () => queryContent('charts').findOne()) +const {data: charts} = await useAsyncData('charts', () => queryContent('charts').findOne()) const formatDate = (date) => new Date(date).toLocaleDateString('en-GB'); </script> diff --git a/frontend/pages/index.vue b/frontend/pages/index.vue index 255cec0..1ad77b7 100644 --- a/frontend/pages/index.vue +++ b/frontend/pages/index.vue @@ -1,37 +1,47 @@ <template> <main> - <h1 class="text-4xl font-extrabold mt-10 mb-5">Charts</h1> - <NuxtLink v-for="chart in data.entries" :to="`/${chart[0].name}`"> - <UCard class="mb-3 hover:bg-slate-50"> - <div class="flex items-top"> - <img :src="chart[0].icon" v-if="chart[0].icon" class="w-28 mr-5 max-h-28" /> - <div v-else class="w-28 h-28 mr-5 p-3 rounded-2xl bg-gray-100"> - <svg xmlns="http://www.w3.org/2000/svg" class="w-100 h-100 fill-gray-400" viewBox="0 0 500 500"> - <path - d="M136.52938,121.13478c-.572-.54252-1.19462-1.12636-1.81-1.71761-12.61677-12.12115-22.38092-26.13637-28.279-42.702-1.65073-4.63637-2.89692-9.36515-2.67587-14.35871.021-.4739.01959-.94915.05226-1.42214.445-6.44594,4.75912-9.70322,11.05839-8.17669a27.325,27.325,0,0,1,5.73149,2.19653c6.89022,3.45538,12.5062,8.56359,17.67051,14.16571a112.52651,112.52651,0,0,1,21.722,33.42965,8.29635,8.29635,0,0,0,.38946.861c.07116.12855.22232.21282.55927.51883A176.357,176.357,0,0,1,241.968,79.06864c-.17651-.8761-.28195-1.54571-.44772-2.2a112.49436,112.49436,0,0,1-2.65292-36.95637,84.07478,84.07478,0,0,1,4.44444-21.76378,31.32555,31.32555,0,0,1,5.47651-10.17139,15.687,15.687,0,0,1,3.16336-2.82149,7.026,7.026,0,0,1,8.03255-.056,17.27854,17.27854,0,0,1,5.8402,6.73185A53.05435,53.05435,0,0,1,271.08657,26.508a112.50469,112.50469,0,0,1,2.12263,33.00356,95.59806,95.59806,0,0,1-3.49052,19.91081c7.12171,1.31193,14.20955,2.32869,21.1473,3.97713a186.37909,186.37909,0,0,1,20.44069,6.0033A188.31671,188.31671,0,0,1,331.0769,97.9721c6.34538,3.16433,12.38553,6.94066,18.71757,10.53829.20571-.433.50439-.94982.706-1.50212A108.65959,108.65959,0,0,1,383.40128,60.246a37.75787,37.75787,0,0,1,11.822-6.883,17.24558,17.24558,0,0,1,3.67827-.84512c6.264-.71729,8.89351,3.2244,9.35653,7.93183a29.94372,29.94372,0,0,1-.77381,10.35466A87.90551,87.90551,0,0,1,396.75426,95.492c-6.79016,10.97178-14.85015,20.85494-25.09307,28.83042-.30234.2354-.56784.51814-1.07988.99029a177.77993,177.77993,0,0,1,26.59293,30.88244,10.96227,10.96227,0,0,1-1.689.29762c-10.59546.015-21.1911-.01829-31.78622.04607a4.004,4.004,0,0,1-3.17246-1.69,147.87522,147.87522,0,0,0-88.17776-46.54846,143.35862,143.35862,0,0,0-30.27955-1.16923,146.40735,146.40735,0,0,0-82.53728,31.81054,140.06663,140.06663,0,0,0-16.97616,15.84186,4.72839,4.72839,0,0,1-3.86326,1.75742c-10.12056-.07028-20.24188-.035-30.36293-.03495h-2.15212c.618-2.408,6.84026-10.93786,13.88352-18.55281C125.31349,132.2744,130.87768,126.8839,136.52938,121.13478Z" /> - <path - d="M394.52934,347.9123a176.63854,176.63854,0,0,1-23.97343,27.16338c.70941.59068,1.28594,1.07041,1.86212,1.55057A108.31456,108.31456,0,0,1,406.10131,424.772a34.61831,34.61831,0,0,1,2.202,14.42026,14.88544,14.88544,0,0,1-.74786,3.69206,7.20762,7.20762,0,0,1-8.15793,5.02308,22.23329,22.23329,0,0,1-6.76276-2.00629,51.23237,51.23237,0,0,1-9.18151-5.8151,107.59183,107.59183,0,0,1-32.936-46.7072c-.18746-.51334-.39218-1.0204-.72243-1.87691a194.65008,194.65008,0,0,1-25.01223,14.00774,181.66925,181.66925,0,0,1-26.6869,9.72442,187.55649,187.55649,0,0,1-28.3045,5.38805c.16807.84015.26446,1.5098.43745,2.15907a109.172,109.172,0,0,1,2.9708,36.44311,80.804,80.804,0,0,1-4.42286,22.4773,78.24971,78.24971,0,0,1-4.16475,8.74473,13.39,13.39,0,0,1-2.33865,2.97083c-3.98009,4.109-8.73225,4.144-12.61157-.07366a27.28012,27.28012,0,0,1-3.907-5.61776c-3.07685-5.77569-4.6604-12.056-5.791-18.46021a116.86329,116.86329,0,0,1-1.35893-26.465,94.4795,94.4795,0,0,1,2.88466-19.18513c.14009-.53269.268-1.0696.37134-1.61034.02629-.13754-.06342-.2973-.17067-.73825a176.12108,176.12108,0,0,1-80.96855-24.99386c-.40992.90921-.76206,1.67473-1.10168,2.44579a110.47729,110.47729,0,0,1-30.90112,41.42041,38.16071,38.16071,0,0,1-12.04706,6.95909,12.08987,12.08987,0,0,1-6.51516.70023,7.11858,7.11858,0,0,1-5.40329-4.4892c-1.41614-3.424-1.16526-6.985-.68438-10.51691a55.45267,55.45267,0,0,1,4.30768-14.25037A112.49985,112.49985,0,0,1,134.88761,380.779c.459-.43461.92981-.857,1.38087-1.29954a3.76029,3.76029,0,0,0,.36534-.65529,178.90466,178.90466,0,0,1-28.469-31.31672c.98458-.08018,1.64327-.18,2.30205-.1806,10.51436-.00976,21.029.02736,31.54284-.04358a4.70554,4.70554,0,0,1,3.70344,1.62615,146.94611,146.94611,0,0,0,39.40276,28.88494,139.94667,139.94667,0,0,0,49.70395,14.77367q70.68048,6.87067,121.59971-42.85452a7.64571,7.64571,0,0,1,5.99261-2.44347c9.80139.12121,19.60512.04986,29.408.04986h2.53353Z" /> - <path - d="M350.73576,197.76167c2.78711,0,5.47037.18919,8.11487-.0501,2.9951-.271,5.139.8001,7.32354,2.81308,12.61275,11.62214,25.35732,23.10129,38.05863,34.62729.63855.57948,1.29039,1.14432,2.1101,1.8701.76445-.65718,1.48119-1.24318,2.16483-1.8655Q428.14636,217.27914,447.756,199.37a5.44772,5.44772,0,0,1,4.20358-1.64576c3.21888.13038,6.44673.03746,9.8412.03746V303.13036c-1.72309.50368-24.8756.60366-27.63911.0611v-53.362l-.53656-.25427c-9.01079,8.21784-18.0216,16.43564-27.23786,24.8408-9.22584-8.31119-18.34194-16.52347-27.458-24.73577l-.52449.19192c-.023,4.45359-.00774,8.90828-.01046,13.36233q-.00408,6.63942-.00058,13.27882v26.87211h-27.428C350.45161,301.61243,350.21289,203.72342,350.73576,197.76167Z" /> - <path - d="M97.63436,197.88229h27.26325c.55054,1.75251.65821,102.97139.09469,105.525H97.70468c-.15021-6.70344-.04736-13.38394-.06622-20.06131-.01871-6.62261-.0041-13.24531-.0041-20.03958H63.84679V303.047c-2.05946.61518-25.33374.67417-27.64758.123V197.89436H63.73742v37.18876c1.96793.56844,30.92319.67339,33.872.12942.00818-2.97713.02-6.02646.024-9.0758q.0063-4.7433.00094-9.4866,0-4.625,0-9.25C97.63437,204.32179,97.63436,201.24346,97.63436,197.88229Z" /> - <path - d="M157.5757,303.3683V198.1946c1.617-.52913,61.545-.73586,65.46219-.20457v22.41432c-.87869.063-1.7857.18341-2.69279.18454q-16.0086.01994-32.01725.00881l-2.96767,0v17.43353H218.7067V261.2229H185.65838c-.55339,1.98509-.70531,15.81681-.25622,19.64583.84488.05679,1.75.16952,2.6553.17059q16.00862.01863,32.01727.00822h2.96945V303.3683Z" /> - <path - d="M254.28291,303.40855c-.50074-2.82232-.39948-103.60181.09747-105.51735h27.16208v77.76453c1.17173.06084,2.09122.14921,3.01077.15005q16.128.01468,32.2561.00658c.92562,0,1.85125,0,2.90733,0v27.59622Z" /> - </svg> - </div> - <div> - <h2 class="text-2xl font-bold">{{ chart[0].name }}</h2> - <p>{{ chart[0].description }}</p> - <span - class="bg-yellow-100 text-yellow-800 text-xs font-medium px-2.5 py-0.5 rounded-full dark:bg-yellow-900 dark:text-yellow-300">{{ chart[0].version }}</span> - </div> - </div> - </UCard> - </NuxtLink> + <h1 class="text-4xl font-extrabold mt-10 mb-5">Charts</h1> + <NuxtLink v-for="chart in data.entries" :to="`/${chart[0].name}`"> + <UCard class="mb-3 hover:bg-slate-50"> + <div class="flex items-top"> + <img :src="chart[0].icon" v-if="chart[0].icon" class="w-28 mr-5 max-h-28"/> + <div v-else class="w-28 h-28 mr-5 p-3 rounded-2xl bg-gray-100"> + <svg xmlns="http://www.w3.org/2000/svg" class="w-100 h-100 fill-gray-400" viewBox="0 0 500 500"> + <path + d="M136.52938,121.13478c-.572-.54252-1.19462-1.12636-1.81-1.71761-12.61677-12.12115-22.38092-26.13637-28.279-42.702-1.65073-4.63637-2.89692-9.36515-2.67587-14.35871.021-.4739.01959-.94915.05226-1.42214.445-6.44594,4.75912-9.70322,11.05839-8.17669a27.325,27.325,0,0,1,5.73149,2.19653c6.89022,3.45538,12.5062,8.56359,17.67051,14.16571a112.52651,112.52651,0,0,1,21.722,33.42965,8.29635,8.29635,0,0,0,.38946.861c.07116.12855.22232.21282.55927.51883A176.357,176.357,0,0,1,241.968,79.06864c-.17651-.8761-.28195-1.54571-.44772-2.2a112.49436,112.49436,0,0,1-2.65292-36.95637,84.07478,84.07478,0,0,1,4.44444-21.76378,31.32555,31.32555,0,0,1,5.47651-10.17139,15.687,15.687,0,0,1,3.16336-2.82149,7.026,7.026,0,0,1,8.03255-.056,17.27854,17.27854,0,0,1,5.8402,6.73185A53.05435,53.05435,0,0,1,271.08657,26.508a112.50469,112.50469,0,0,1,2.12263,33.00356,95.59806,95.59806,0,0,1-3.49052,19.91081c7.12171,1.31193,14.20955,2.32869,21.1473,3.97713a186.37909,186.37909,0,0,1,20.44069,6.0033A188.31671,188.31671,0,0,1,331.0769,97.9721c6.34538,3.16433,12.38553,6.94066,18.71757,10.53829.20571-.433.50439-.94982.706-1.50212A108.65959,108.65959,0,0,1,383.40128,60.246a37.75787,37.75787,0,0,1,11.822-6.883,17.24558,17.24558,0,0,1,3.67827-.84512c6.264-.71729,8.89351,3.2244,9.35653,7.93183a29.94372,29.94372,0,0,1-.77381,10.35466A87.90551,87.90551,0,0,1,396.75426,95.492c-6.79016,10.97178-14.85015,20.85494-25.09307,28.83042-.30234.2354-.56784.51814-1.07988.99029a177.77993,177.77993,0,0,1,26.59293,30.88244,10.96227,10.96227,0,0,1-1.689.29762c-10.59546.015-21.1911-.01829-31.78622.04607a4.004,4.004,0,0,1-3.17246-1.69,147.87522,147.87522,0,0,0-88.17776-46.54846,143.35862,143.35862,0,0,0-30.27955-1.16923,146.40735,146.40735,0,0,0-82.53728,31.81054,140.06663,140.06663,0,0,0-16.97616,15.84186,4.72839,4.72839,0,0,1-3.86326,1.75742c-10.12056-.07028-20.24188-.035-30.36293-.03495h-2.15212c.618-2.408,6.84026-10.93786,13.88352-18.55281C125.31349,132.2744,130.87768,126.8839,136.52938,121.13478Z"/> + <path + d="M394.52934,347.9123a176.63854,176.63854,0,0,1-23.97343,27.16338c.70941.59068,1.28594,1.07041,1.86212,1.55057A108.31456,108.31456,0,0,1,406.10131,424.772a34.61831,34.61831,0,0,1,2.202,14.42026,14.88544,14.88544,0,0,1-.74786,3.69206,7.20762,7.20762,0,0,1-8.15793,5.02308,22.23329,22.23329,0,0,1-6.76276-2.00629,51.23237,51.23237,0,0,1-9.18151-5.8151,107.59183,107.59183,0,0,1-32.936-46.7072c-.18746-.51334-.39218-1.0204-.72243-1.87691a194.65008,194.65008,0,0,1-25.01223,14.00774,181.66925,181.66925,0,0,1-26.6869,9.72442,187.55649,187.55649,0,0,1-28.3045,5.38805c.16807.84015.26446,1.5098.43745,2.15907a109.172,109.172,0,0,1,2.9708,36.44311,80.804,80.804,0,0,1-4.42286,22.4773,78.24971,78.24971,0,0,1-4.16475,8.74473,13.39,13.39,0,0,1-2.33865,2.97083c-3.98009,4.109-8.73225,4.144-12.61157-.07366a27.28012,27.28012,0,0,1-3.907-5.61776c-3.07685-5.77569-4.6604-12.056-5.791-18.46021a116.86329,116.86329,0,0,1-1.35893-26.465,94.4795,94.4795,0,0,1,2.88466-19.18513c.14009-.53269.268-1.0696.37134-1.61034.02629-.13754-.06342-.2973-.17067-.73825a176.12108,176.12108,0,0,1-80.96855-24.99386c-.40992.90921-.76206,1.67473-1.10168,2.44579a110.47729,110.47729,0,0,1-30.90112,41.42041,38.16071,38.16071,0,0,1-12.04706,6.95909,12.08987,12.08987,0,0,1-6.51516.70023,7.11858,7.11858,0,0,1-5.40329-4.4892c-1.41614-3.424-1.16526-6.985-.68438-10.51691a55.45267,55.45267,0,0,1,4.30768-14.25037A112.49985,112.49985,0,0,1,134.88761,380.779c.459-.43461.92981-.857,1.38087-1.29954a3.76029,3.76029,0,0,0,.36534-.65529,178.90466,178.90466,0,0,1-28.469-31.31672c.98458-.08018,1.64327-.18,2.30205-.1806,10.51436-.00976,21.029.02736,31.54284-.04358a4.70554,4.70554,0,0,1,3.70344,1.62615,146.94611,146.94611,0,0,0,39.40276,28.88494,139.94667,139.94667,0,0,0,49.70395,14.77367q70.68048,6.87067,121.59971-42.85452a7.64571,7.64571,0,0,1,5.99261-2.44347c9.80139.12121,19.60512.04986,29.408.04986h2.53353Z"/> + <path + d="M350.73576,197.76167c2.78711,0,5.47037.18919,8.11487-.0501,2.9951-.271,5.139.8001,7.32354,2.81308,12.61275,11.62214,25.35732,23.10129,38.05863,34.62729.63855.57948,1.29039,1.14432,2.1101,1.8701.76445-.65718,1.48119-1.24318,2.16483-1.8655Q428.14636,217.27914,447.756,199.37a5.44772,5.44772,0,0,1,4.20358-1.64576c3.21888.13038,6.44673.03746,9.8412.03746V303.13036c-1.72309.50368-24.8756.60366-27.63911.0611v-53.362l-.53656-.25427c-9.01079,8.21784-18.0216,16.43564-27.23786,24.8408-9.22584-8.31119-18.34194-16.52347-27.458-24.73577l-.52449.19192c-.023,4.45359-.00774,8.90828-.01046,13.36233q-.00408,6.63942-.00058,13.27882v26.87211h-27.428C350.45161,301.61243,350.21289,203.72342,350.73576,197.76167Z"/> + <path + d="M97.63436,197.88229h27.26325c.55054,1.75251.65821,102.97139.09469,105.525H97.70468c-.15021-6.70344-.04736-13.38394-.06622-20.06131-.01871-6.62261-.0041-13.24531-.0041-20.03958H63.84679V303.047c-2.05946.61518-25.33374.67417-27.64758.123V197.89436H63.73742v37.18876c1.96793.56844,30.92319.67339,33.872.12942.00818-2.97713.02-6.02646.024-9.0758q.0063-4.7433.00094-9.4866,0-4.625,0-9.25C97.63437,204.32179,97.63436,201.24346,97.63436,197.88229Z"/> + <path + d="M157.5757,303.3683V198.1946c1.617-.52913,61.545-.73586,65.46219-.20457v22.41432c-.87869.063-1.7857.18341-2.69279.18454q-16.0086.01994-32.01725.00881l-2.96767,0v17.43353H218.7067V261.2229H185.65838c-.55339,1.98509-.70531,15.81681-.25622,19.64583.84488.05679,1.75.16952,2.6553.17059q16.00862.01863,32.01727.00822h2.96945V303.3683Z"/> + <path + d="M254.28291,303.40855c-.50074-2.82232-.39948-103.60181.09747-105.51735h27.16208v77.76453c1.17173.06084,2.09122.14921,3.01077.15005q16.128.01468,32.2561.00658c.92562,0,1.85125,0,2.90733,0v27.59622Z"/> + </svg> + </div> + <div> + <h2 class="text-2xl font-bold">{{ chart[0].name }}</h2> + <p>{{ chart[0].description }}</p> + <div class="mb-0.5"> + <span + class="bg-[#fdc300] font-bold text-black text-xs mr-0.5 px-2.5 py-0.5 rounded-full">{{ + chart[0].version + }}</span> + <span v-if="chart[0].deprecated" + class="bg-red-100 text-red-800 text-xs mr-0.5 font-medium px-2.5 py-0.5 rounded-full dark:bg-red-900 dark:text-red-300">deprecated</span> + </div> + <div> + <span v-for="keyword in chart[0].keywords" + class="bg-yellow-100 text-yellow-800 text-xs mr-0.5 font-medium px-2.5 py-0.5 rounded-full dark:bg-yellow-900 dark:text-yellow-300">{{ keyword }}</span> + </div> + </div> + </div> + </UCard> + </NuxtLink> </main> </template> <script setup> -const { data } = await useAsyncData('charts', () => queryContent('charts').findOne()) +const {data} = await useAsyncData('charts', () => queryContent('charts').findOne()) </script> \ No newline at end of file