From f90312462331308de4e92d5427a73e9f7f17e82f Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 17:10:11 -0300 Subject: [PATCH 01/11] feat: add aif ui build pipeline --- .github/workflows/release-aif-extension.yml | 165 ++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 .github/workflows/release-aif-extension.yml diff --git a/.github/workflows/release-aif-extension.yml b/.github/workflows/release-aif-extension.yml new file mode 100644 index 0000000..9913889 --- /dev/null +++ b/.github/workflows/release-aif-extension.yml @@ -0,0 +1,165 @@ +name: Build AIF UI Extension [Container and Helm Chart - Multi-Arch] + +on: + push: + tags: + - aif-ui-* + +env: + CHART_PATH: charts/aif-ui + CHART_REGISTRY: oci://ghcr.io/suse/chart + IMAGE_NAME: ghcr.io/suse/aif-ui + +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + VERSION: ${{ steps.tags.outputs.VERSION }} + PUBLISH: ${{ steps.tags.outputs.PUBLISH }} + METADATA_TAGS: ${{ steps.tags.outputs.METADATA_TAGS }} + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + + - name: Calculate tags + id: tags + shell: bash + run: | + ref=${{ github.ref }} + case "$ref" in + refs/tags/aif-ui-*) + VERSION="${ref#refs/tags/aif-ui-}" + PUBLISH=true + if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + { + echo "METADATA_TAGS<> "$GITHUB_OUTPUT" + else + { + echo "METADATA_TAGS<> "$GITHUB_OUTPUT" + fi + ;; + *) + VERSION="${{ github.sha }}" + PUBLISH=false + { + echo "METADATA_TAGS<> "$GITHUB_OUTPUT" + ;; + esac + echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" + echo "PUBLISH=$PUBLISH" >> "$GITHUB_OUTPUT" + + build-container: + strategy: + matrix: + arch: + - amd64 + - arm64 + include: + - arch: amd64 + runner: ubuntu-24.04 + - arch: arm64 + runner: ubuntu-24.04-arm + runs-on: ${{ matrix.runner }} + needs: prepare + if: needs.prepare.outputs.PUBLISH == 'true' + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + + - name: Login to GHCR + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Node.js + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 + with: + node-version: '24' + cache: yarn + + - name: Enable Corepack + run: corepack enable + + - name: Install dependencies + run: yarn install --ignore-engines + + - name: Parse extension name + env: + GH_TOKEN: ${{ github.token }} + run: | + TAG="aif-ui-${{ needs.prepare.outputs.VERSION }}" + yarn parse-tag-name "$TAG" ${{ github.run_id }} "catalog" + + - name: Build extension image + run: | + TAG="aif-ui-${{ needs.prepare.outputs.VERSION }}" + yarn publish-pkgs -c -i '' -r ghcr.io -o 'suse' -t "$TAG" + + - name: Tag and push image + run: | + VERSION="${{ needs.prepare.outputs.VERSION }}" + docker tag $IMAGE_NAME:$VERSION $IMAGE_NAME:$VERSION-${{ matrix.arch }} + docker push $IMAGE_NAME:$VERSION-${{ matrix.arch }} + + manifest-and-chart: + needs: [prepare, build-container] + if: needs.prepare.outputs.PUBLISH == 'true' + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + + - name: Login to GHCR + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create multi-arch manifest + env: + VERSION: ${{ needs.prepare.outputs.VERSION }} + RELEASE_TAG: ${{ needs.prepare.outputs.METADATA_TAGS }} + run: | + while IFS= read -r tag; do + [[ -z "$tag" ]] && continue + docker buildx imagetools create \ + -t $IMAGE_NAME:$tag \ + $IMAGE_NAME:$VERSION-amd64 \ + $IMAGE_NAME:$VERSION-arm64 + done <<< "${RELEASE_TAG}" + + - name: Update Chart.yaml versions + run: | + yq -i '.version = "${{ needs.prepare.outputs.VERSION }}"' $CHART_PATH/Chart.yaml + yq -i '.appVersion = "${{ needs.prepare.outputs.VERSION }}"' $CHART_PATH/Chart.yaml + yq -i ' + .annotations."helm.sh/images" = + "- image: ghcr.io/suse/aif-ui:${{ needs.prepare.outputs.VERSION }}\n name: aif-ui" + ' $CHART_PATH/Chart.yaml + yq -i '.image.tag = "${{ needs.prepare.outputs.VERSION }}"' $CHART_PATH/values.yaml + + - name: Package and push Helm chart + run: | + chart_package=$(helm package $CHART_PATH --destination . | awk '{print $NF}') + helm push "$chart_package" $CHART_REGISTRY From 7b4fddbd25e74f1a4e28875a4122a9d203dbbda0 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 17:10:42 -0300 Subject: [PATCH 02/11] feat: move lifecycle manager charts to aif ui charts --- .../.helmignore | 0 charts/aif-ui/Chart.yaml | 21 ++ charts/aif-ui/README.md | 39 ++++ charts/aif-ui/templates/NOTES.txt | 11 + charts/aif-ui/templates/_helpers.tpl | 64 ++++++ charts/aif-ui/templates/deployment.yaml | 71 ++++++ charts/aif-ui/templates/service.yaml | 14 ++ charts/aif-ui/values.schema.json | 135 ++++++++++++ .../values.yaml | 22 +- charts/suse-ai-lifecycle-manager/Chart.yaml | 22 -- charts/suse-ai-lifecycle-manager/LICENSE | 202 ------------------ charts/suse-ai-lifecycle-manager/README.md | 91 -------- .../templates/NOTES.txt | 6 - .../templates/_helpers.tpl | 46 ---- .../templates/deployment.yaml | 63 ------ .../templates/service.yaml | 14 -- 16 files changed, 373 insertions(+), 448 deletions(-) rename charts/{suse-ai-lifecycle-manager => aif-ui}/.helmignore (100%) create mode 100644 charts/aif-ui/Chart.yaml create mode 100644 charts/aif-ui/README.md create mode 100644 charts/aif-ui/templates/NOTES.txt create mode 100644 charts/aif-ui/templates/_helpers.tpl create mode 100644 charts/aif-ui/templates/deployment.yaml create mode 100644 charts/aif-ui/templates/service.yaml create mode 100644 charts/aif-ui/values.schema.json rename charts/{suse-ai-lifecycle-manager => aif-ui}/values.yaml (61%) delete mode 100644 charts/suse-ai-lifecycle-manager/Chart.yaml delete mode 100644 charts/suse-ai-lifecycle-manager/LICENSE delete mode 100644 charts/suse-ai-lifecycle-manager/README.md delete mode 100644 charts/suse-ai-lifecycle-manager/templates/NOTES.txt delete mode 100644 charts/suse-ai-lifecycle-manager/templates/_helpers.tpl delete mode 100644 charts/suse-ai-lifecycle-manager/templates/deployment.yaml delete mode 100644 charts/suse-ai-lifecycle-manager/templates/service.yaml diff --git a/charts/suse-ai-lifecycle-manager/.helmignore b/charts/aif-ui/.helmignore similarity index 100% rename from charts/suse-ai-lifecycle-manager/.helmignore rename to charts/aif-ui/.helmignore diff --git a/charts/aif-ui/Chart.yaml b/charts/aif-ui/Chart.yaml new file mode 100644 index 0000000..e2b4599 --- /dev/null +++ b/charts/aif-ui/Chart.yaml @@ -0,0 +1,21 @@ +annotations: + helm.sh/images: | + - image: ghcr.io/suse/aif-ui:0.1.0 + name: aif-ui +apiVersion: v2 +name: aif-ui +version: 0.1.0 +description: SUSE AI Rancher UI Extension +type: application +keywords: + - rancher + - extension + - ai +home: https://github.com/SUSE/aif-ui +icon: https://github.com/SUSE/suse-ai-lifecycle-manager/blob/ai-factory/pkg/aif-ui/assets/logo.svg +sources: + - https://github.com/SUSE/aif-ui +appVersion: 1.1.0 +maintainers: + - url: https://www.suse.com/ + name: SUSE LLC diff --git a/charts/aif-ui/README.md b/charts/aif-ui/README.md new file mode 100644 index 0000000..638b95a --- /dev/null +++ b/charts/aif-ui/README.md @@ -0,0 +1,39 @@ +# AIF UI Helm Chart + +Deploys the SUSE AI Factory UI extension as a container-based Rancher Dashboard extension. + +The chart creates a Deployment and Service that serve the built extension assets (including `index.yaml`). The InstallAIExtension controller then creates a ClusterRepo pointing to the Service and a UIPlugin referencing the chart metadata. + +## Prerequisites + +- Rancher 2.10+ with UI Extensions support (`catalog.cattle.io/v1` API) +- Target namespace: `cattle-ui-plugin-system` + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `replicaCount` | int | `1` | Number of replicas | +| `image.registry` | string | `ghcr.io` | Container image registry | +| `image.repository` | string | `suse/aif-ui` | Container image repository | +| `image.tag` | string | `""` (uses `appVersion`) | Container image tag | +| `image.pullPolicy` | string | `IfNotPresent` | Image pull policy | +| `global.imageRegistry` | string | `""` | Global registry override (air-gap) | +| `global.imagePullSecrets` | list | `[]` | Global image pull secrets | +| `imagePullSecrets` | list | `[]` | Image pull secrets | +| `nameOverride` | string | `""` | Override chart name | +| `fullnameOverride` | string | `""` | Override full release name | +| `service.type` | string | `ClusterIP` | Service type | +| `service.port` | int | `8080` | Service port | +| `podAnnotations` | object | `{}` | Pod annotations | +| `podLabels` | object | `{}` | Additional pod labels | +| `podSecurityContext` | object | See `values.yaml` | Pod-level security context | +| `containerSecurityContext` | object | See `values.yaml` | Container-level security context | +| `resources` | object | `{}` | Container resource requests/limits | +| `probes.liveness.enabled` | bool | `true` | Enable liveness probe | +| `probes.readiness.enabled` | bool | `true` | Enable readiness probe | +| `nodeSelector` | object | `{}` | Node selector | +| `tolerations` | list | `[]` | Tolerations | +| `affinity` | object | `{}` | Affinity rules | +| `rollingUpdate.maxSurge` | string | `25%` | Rolling update max surge | +| `rollingUpdate.maxUnavailable` | string | `25%` | Rolling update max unavailable | diff --git a/charts/aif-ui/templates/NOTES.txt b/charts/aif-ui/templates/NOTES.txt new file mode 100644 index 0000000..80afa7a --- /dev/null +++ b/charts/aif-ui/templates/NOTES.txt @@ -0,0 +1,11 @@ +{{ .Chart.Name }} has been deployed. + +Release: {{ .Release.Name }} +Namespace: {{ .Release.Namespace }} + +Chart repository URL (for ClusterRepo / Rancher Extensions page): + http://{{ include "aif-ui.fullname" . }}-svc.{{ .Release.Namespace }}:{{ .Values.service.port }} + +Verify the deployment: + kubectl get deploy {{ include "aif-ui.fullname" . }} -n {{ .Release.Namespace }} + kubectl get svc {{ include "aif-ui.fullname" . }}-svc -n {{ .Release.Namespace }} diff --git a/charts/aif-ui/templates/_helpers.tpl b/charts/aif-ui/templates/_helpers.tpl new file mode 100644 index 0000000..ba6c420 --- /dev/null +++ b/charts/aif-ui/templates/_helpers.tpl @@ -0,0 +1,64 @@ +{{- define "aif-ui.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end }} + +{{- define "aif-ui.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 }} + +{{- define "aif-ui.labels" -}} +catalog.cattle.io/ui-extensions-catalog-image: {{ .Chart.Name }} +app.kubernetes.io/name: {{ include "aif-ui.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }} +{{- end }} + +{{- define "aif-ui.selectorLabels" -}} +app.kubernetes.io/name: {{ include "aif-ui.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{- define "aif-ui.image" -}} +{{- $registry := coalesce .Values.global.imageRegistry .Values.image.registry -}} +{{- $tag := .Values.image.tag | default .Chart.AppVersion -}} +{{- if $registry -}} +{{ $registry }}/{{ .Values.image.repository }}:{{ $tag }} +{{- else -}} +{{ .Values.image.repository }}:{{ $tag }} +{{- end -}} +{{- end }} + +{{- define "aif-ui.imagePullSecrets" -}} +{{- $secrets := list -}} +{{- if .Values.global }} +{{- range .Values.global.imagePullSecrets }} + {{- if kindIs "string" . }} + {{- $secrets = append $secrets (dict "name" .) -}} + {{- else }} + {{- $secrets = append $secrets . -}} + {{- end }} +{{- end }} +{{- end }} +{{- range .Values.imagePullSecrets }} + {{- if kindIs "string" . }} + {{- $secrets = append $secrets (dict "name" .) -}} + {{- else }} + {{- $secrets = append $secrets . -}} + {{- end }} +{{- end }} +{{- if $secrets }} +imagePullSecrets: + {{- toYaml $secrets | nindent 2 }} +{{- end }} +{{- end }} diff --git a/charts/aif-ui/templates/deployment.yaml b/charts/aif-ui/templates/deployment.yaml new file mode 100644 index 0000000..30b3f49 --- /dev/null +++ b/charts/aif-ui/templates/deployment.yaml @@ -0,0 +1,71 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "aif-ui.fullname" . }} + labels: + {{- include "aif-ui.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + revisionHistoryLimit: 10 + selector: + matchLabels: + {{- include "aif-ui.selectorLabels" . | nindent 6 }} + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: {{ .Values.rollingUpdate.maxSurge }} + maxUnavailable: {{ .Values.rollingUpdate.maxUnavailable }} + template: + metadata: + labels: + {{- include "aif-ui.selectorLabels" . | nindent 8 }} + catalog.cattle.io/ui-extensions-catalog-image: {{ .Chart.Name }} + {{- with .Values.podLabels }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- with .Values.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- include "aif-ui.imagePullSecrets" . | nindent 6 }} + containers: + - name: {{ include "aif-ui.name" . }} + image: {{ include "aif-ui.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- with .Values.containerSecurityContext }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.port }} + protocol: TCP + {{- if .Values.probes.liveness.enabled }} + livenessProbe: + {{- omit .Values.probes.liveness "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.probes.readiness.enabled }} + readinessProbe: + {{- omit .Values.probes.readiness "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- with .Values.resources }} + resources: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/aif-ui/templates/service.yaml b/charts/aif-ui/templates/service.yaml new file mode 100644 index 0000000..660659e --- /dev/null +++ b/charts/aif-ui/templates/service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "aif-ui.fullname" . }}-svc + labels: + {{- include "aif-ui.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + selector: + {{- include "aif-ui.selectorLabels" . | nindent 4 }} diff --git a/charts/aif-ui/values.schema.json b/charts/aif-ui/values.schema.json new file mode 100644 index 0000000..3a8a638 --- /dev/null +++ b/charts/aif-ui/values.schema.json @@ -0,0 +1,135 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "replicaCount": { + "type": "integer", + "default": 1, + "minimum": 0 + }, + "global": { + "type": "object", + "properties": { + "imageRegistry": { + "type": "string", + "default": "" + }, + "imagePullSecrets": { + "type": "array", + "default": [] + } + } + }, + "image": { + "type": "object", + "required": ["repository"], + "properties": { + "registry": { + "type": "string", + "default": "ghcr.io" + }, + "repository": { + "type": "string", + "default": "suse/aif-ui" + }, + "tag": { + "type": "string", + "default": "" + }, + "pullPolicy": { + "type": "string", + "enum": ["Always", "IfNotPresent", "Never"], + "default": "IfNotPresent" + } + } + }, + "imagePullSecrets": { + "type": "array", + "default": [] + }, + "nameOverride": { + "type": "string", + "default": "" + }, + "fullnameOverride": { + "type": "string", + "default": "" + }, + "service": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ClusterIP", "NodePort", "LoadBalancer"], + "default": "ClusterIP" + }, + "port": { + "type": "integer", + "default": 8080 + } + } + }, + "podAnnotations": { + "type": "object", + "default": {} + }, + "podLabels": { + "type": "object", + "default": {} + }, + "podSecurityContext": { + "type": "object" + }, + "containerSecurityContext": { + "type": "object" + }, + "resources": { + "type": "object" + }, + "probes": { + "type": "object", + "properties": { + "liveness": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + }, + "readiness": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": true + } + } + } + } + }, + "nodeSelector": { + "type": "object" + }, + "tolerations": { + "type": "array" + }, + "affinity": { + "type": "object" + }, + "rollingUpdate": { + "type": "object", + "properties": { + "maxSurge": { + "type": ["string", "integer"], + "default": "25%" + }, + "maxUnavailable": { + "type": ["string", "integer"], + "default": "25%" + } + } + } + } +} diff --git a/charts/suse-ai-lifecycle-manager/values.yaml b/charts/aif-ui/values.yaml similarity index 61% rename from charts/suse-ai-lifecycle-manager/values.yaml rename to charts/aif-ui/values.yaml index f6dfadf..6125fc8 100644 --- a/charts/suse-ai-lifecycle-manager/values.yaml +++ b/charts/aif-ui/values.yaml @@ -6,8 +6,8 @@ global: image: registry: ghcr.io - repository: suse/suse-ai-lifecycle-manager - tag: "1.1.0" + repository: suse/aif-ui + tag: "" pullPolicy: IfNotPresent imagePullSecrets: [] @@ -21,6 +21,20 @@ service: podAnnotations: {} podLabels: {} +podSecurityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + seccompProfile: + type: RuntimeDefault + +containerSecurityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: false + capabilities: + drop: ["ALL"] + resources: {} probes: @@ -28,13 +42,13 @@ probes: enabled: true httpGet: path: / - port: 8080 + port: http periodSeconds: 10 readiness: enabled: true httpGet: path: / - port: 8080 + port: http periodSeconds: 10 nodeSelector: {} diff --git a/charts/suse-ai-lifecycle-manager/Chart.yaml b/charts/suse-ai-lifecycle-manager/Chart.yaml deleted file mode 100644 index c7790f3..0000000 --- a/charts/suse-ai-lifecycle-manager/Chart.yaml +++ /dev/null @@ -1,22 +0,0 @@ -annotations: - helm.sh/images: | - - image: ghcr.io/suse/suse-ai-lifecycle-manager:1.1.0 - name: suse-ai-lifecycle-manager - license: Apache-2.0 -apiVersion: v2 -name: suse-ai-lifecycle-manager -version: 1.1.0 -description: SUSE AI Rancher UI Extension -type: application -keywords: - - rancher - - extension - - ai -home: https://github.com/SUSE/suse-ai-lifecycle-manager -icon: https://github.com/SUSE/suse-ai-lifecycle-manager/blob/main/pkg/suse-ai-lifecycle-manager/assets/logo.svg -sources: - - https://github.com/SUSE/suse-ai-lifecycle-manager -appVersion: 1.1.0 -maintainers: - - url: https://www.suse.com/ - name: SUSE LLC diff --git a/charts/suse-ai-lifecycle-manager/LICENSE b/charts/suse-ai-lifecycle-manager/LICENSE deleted file mode 100644 index e19fd8f..0000000 --- a/charts/suse-ai-lifecycle-manager/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2016 The Kubernetes Authors All Rights Reserved - - 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 - - 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. \ No newline at end of file diff --git a/charts/suse-ai-lifecycle-manager/README.md b/charts/suse-ai-lifecycle-manager/README.md deleted file mode 100644 index 6c5a3a2..0000000 --- a/charts/suse-ai-lifecycle-manager/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# SUSE AI Lifecycle Manager - -This chart installs the **Rancher Extension Catalog**, it contains extension assets bundled into an image and act as a catalog for custom extensions. -1. This Chart is installed. -2. The catalog needs to be added as a Helm repository in the Rancher Repositories. -3. The extension packaged as a container image is registered in Rancher via the UIPlugin custom resource. - -**Homepage:** - -## Maintainers - -| Name | Email | Url | -| ---- | ------ | --- | -| SUSE LLC | | | - -## Prerequisites - -- The following CRDs must exist: - - `uiplugins.catalog.cattle.io` - - `clusterrepos.catalog.cattle.io` - -You can verify with: -```bash -kubectl get crd uiplugins.catalog.cattle.io -``` - -## Installing the Chart - -This chart is distributed as an OCI Helm chart. To install the chart with the release name `suse-ui-ext`: - -```bash -helm install suse-ui-ext \ - -n cattle-ui-plugin-system \ - oci://ghcr.io/suse/chart/suse-ai-lifecycle-manager -``` - -The command deploys the suse ai extension catalog on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation. - -## Uninstalling the Chart - -To uninstall/delete the `suse-ui-ext` deployment: - -```bash -helm uninstall suse-ui-ext -n cattle-ui-plugin-system -``` - -The command removes all the Kubernetes components associated with the chart and deletes the release. - -## Parameters - -### Global parameters - -| Name | Description | Value | -| ------------------- | --------------------------------------------- | ----- | -| `replicaCount` | Number of suse-ai-lifecycle-manager replicas to deploy | `1` | -| `nameOverride` | String to partially override suse-ai-lifecycle-manager.fullname | `""` | -| `fullnameOverride` | String to fully override suse-ai-lifecycle-manager.fullname | `""` | - -### Image parameters - -| Name | Description | Value | -| ------------------ | ------------------------------------------ | ---------------------------- | -| `image.registry` | suse-ai-lifecycle-manager image registry | `ghcr.io` | -| `image.repository` | suse-ai-lifecycle-manager image repository | `suse/suse-ai-lifecycle-manager` | -| `image.tag` | suse-ai-lifecycle-manager image tag (immutable tags recommended)| `0.2.0` | -| `image.pullPolicy` | suse-ai-lifecycle-manager image pull policy | `IfNotPresent` | -| `imagePullSecrets` | suse-ai-lifecycle-manager image pull secrets | `[]` | -| `global.imagePullSecrets` | Global override for container image registry pull secrets |`[]` | -| `global.imageRegistry` | Global override for container image registry | `""` | - -### Service parameters - -| Name | Description | Value | -| -------------- | ----------------------- | ----------- | -| `service.type` | suse-ai-lifecycle-manager service type | `ClusterIP` | -| `service.port` | suse-ai-lifecycle-manager service HTTP port | `8080` | - - -## Troubleshooting - -### Check pod status - -```bash -kubectl get pods -l app.kubernetes.io/name=suse-ai-lifecycle-manager -n cattle-ui-plugin-system -``` - -### Check logs - -```bash -kubectl logs -l app.kubernetes.io/name=suse-ai-lifecycle-manager -n cattle-ui-plugin-system -``` diff --git a/charts/suse-ai-lifecycle-manager/templates/NOTES.txt b/charts/suse-ai-lifecycle-manager/templates/NOTES.txt deleted file mode 100644 index c48dafd..0000000 --- a/charts/suse-ai-lifecycle-manager/templates/NOTES.txt +++ /dev/null @@ -1,6 +0,0 @@ -Thank you for installing {{ .Chart.Name }}. - -Your release is named {{ .Release.Name }}. - -To use the deployed extension, add the url below to the repository in rancher: - http://{{ include "suse-ai-lifecycle-manager.fullname" . }}-svc.{{ .Release.Namespace }}:{{ .Values.service.port }} \ No newline at end of file diff --git a/charts/suse-ai-lifecycle-manager/templates/_helpers.tpl b/charts/suse-ai-lifecycle-manager/templates/_helpers.tpl deleted file mode 100644 index 696ced0..0000000 --- a/charts/suse-ai-lifecycle-manager/templates/_helpers.tpl +++ /dev/null @@ -1,46 +0,0 @@ -{{- define "suse-ai-lifecycle-manager.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride }} -{{- else -}} -{{- include "suse-ai-lifecycle-manager.name" . }} -{{- end -}} -{{- end }} - -{{- define "suse-ai-lifecycle-manager.name" -}} -{{- default .Chart.Name .Values.nameOverride -}} -{{- end }} - -{{- define "suse-ai-lifecycle-manager.labels" -}} -catalog.cattle.io/ui-extensions-catalog-image: {{ .Chart.Name }} -app.kubernetes.io/name: {{ include "suse-ai-lifecycle-manager.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Return the proper Docker Image Registry Secret Names -*/}} -{{- define "suse-ai-lifecycle-manager.imagePullSecrets" -}} -{{/* -Helm 2.11 supports the assignment of a value to a variable defined in a different scope, -but Helm 2.9 and 2.10 does not support it, so we need to implement this if-else logic. -Also, we can not use a single if because lazy evaluation is not an option -*/}} -{{- if .Values.global }} -{{- if .Values.global.imagePullSecrets }} -imagePullSecrets: -{{- range .Values.global.imagePullSecrets }} - {{- $imagePullSecrets := list }} - {{- if kindIs "string" . }} - {{- $imagePullSecrets = append $imagePullSecrets (dict "name" .) }} - {{- else }} - {{- $imagePullSecrets = append $imagePullSecrets . }} - {{- end }} - {{- toYaml $imagePullSecrets | nindent 2 }} -{{- end }} -{{- else if .Values.imagePullSecrets }} -imagePullSecrets: - {{ toYaml .Values.imagePullSecrets }} -{{- end -}} -{{- end -}} -{{- end -}} diff --git a/charts/suse-ai-lifecycle-manager/templates/deployment.yaml b/charts/suse-ai-lifecycle-manager/templates/deployment.yaml deleted file mode 100644 index 087dc4b..0000000 --- a/charts/suse-ai-lifecycle-manager/templates/deployment.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "suse-ai-lifecycle-manager.fullname" . }} - labels: - {{- include "suse-ai-lifecycle-manager.labels" . | nindent 4 }} -spec: - replicas: {{ .Values.replicaCount }} - revisionHistoryLimit: 10 - selector: - matchLabels: - {{- include "suse-ai-lifecycle-manager.labels" . | nindent 6 }} - strategy: - type: RollingUpdate - rollingUpdate: - maxSurge: {{ .Values.rollingUpdate.maxSurge }} - maxUnavailable: {{ .Values.rollingUpdate.maxUnavailable }} - template: - metadata: - labels: - {{- include "suse-ai-lifecycle-manager.labels" . | nindent 8 }} - annotations: - {{- toYaml .Values.podAnnotations | nindent 8 }} - spec: - securityContext: - fsGroup: 1000 - {{- include "suse-ai-lifecycle-manager.imagePullSecrets" . | nindent 6 }} - containers: - - name: {{ include "suse-ai-lifecycle-manager.name" . }} - image: "{{ with (coalesce .Values.global.imageRegistry .Values.image.registry) }}{{ . }}/{{ end }}{{ .Values.image.repository }}:{{ .Values.image.tag | default $.Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - securityContext: - runAsUser: 1000 - runAsGroup: 1000 - runAsNonRoot: true - readOnlyRootFilesystem: false - allowPrivilegeEscalation: false - capabilities: - drop: ["ALL"] - resources: - {{- toYaml .Values.resources | nindent 12 }} - ports: - - name: http - containerPort: {{ .Values.service.port }} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - {{- if .Values.probes.liveness.enabled }} - livenessProbe: - {{- omit .Values.probes.liveness "enabled" | toYaml | nindent 12 }} - {{- end }} - {{- if .Values.probes.readiness.enabled }} - readinessProbe: - {{- omit .Values.probes.readiness "enabled" | toYaml | nindent 12 }} - {{- end }} - restartPolicy: Always - dnsPolicy: ClusterFirst - terminationGracePeriodSeconds: 30 - nodeSelector: - {{- toYaml .Values.nodeSelector | nindent 8 }} - tolerations: - {{- toYaml .Values.tolerations | nindent 8 }} - affinity: - {{- toYaml .Values.affinity | nindent 8 }} diff --git a/charts/suse-ai-lifecycle-manager/templates/service.yaml b/charts/suse-ai-lifecycle-manager/templates/service.yaml deleted file mode 100644 index 2182cc8..0000000 --- a/charts/suse-ai-lifecycle-manager/templates/service.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "suse-ai-lifecycle-manager.fullname" . }}-svc - labels: - {{- include "suse-ai-lifecycle-manager.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - protocol: TCP - targetPort: {{ .Values.service.port }} - selector: - {{- include "suse-ai-lifecycle-manager.labels" . | nindent 4 }} From f3044a17f29d8fc762d37cf29ef2b82b9b0619b9 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 17:11:33 -0300 Subject: [PATCH 03/11] fix: remove license since the aif project don't have a license discussion yet --- LICENSE | 73 --------------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 137069b..0000000 --- a/LICENSE +++ /dev/null @@ -1,73 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -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 - -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. From cb28a194c60d2c81119f1c800124534b51d7feee Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 17:12:07 -0300 Subject: [PATCH 04/11] fix: rename ui package from suse ai lifecycle manager to aif ui --- package-lock.json | 9 ++++----- package.json | 7 +++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index d491f6b..dc1b2c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,12 @@ { - "name": "suse-ai-lifecycle-manager", - "version": "1.1.0", + "name": "aif-ui", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "suse-ai-lifecycle-manager", - "version": "1.1.0", - "license": "Apache-2.0", + "name": "aif-ui", + "version": "0.1.0", "dependencies": { "@rancher/shell": "^3.0.11" }, diff --git a/package.json b/package.json index bb08578..5511350 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,8 @@ { - "name": "suse-ai-lifecycle-manager", - "version": "1.1.0", - "description": "Rancher UI Extension for SUSE AI", + "name": "aif-ui", + "version": "0.1.0", + "description": "AIF UI", "private": false, - "license": "Apache-2.0", "engines": { "node": ">=20" }, From de0b0515bbf33d80374db205b489d049532b6f97 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 18:38:34 -0300 Subject: [PATCH 05/11] feat: change package name --- pkg/suse-ai-lifecycle-manager/package-lock.json | 8 ++++---- pkg/suse-ai-lifecycle-manager/package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/suse-ai-lifecycle-manager/package-lock.json b/pkg/suse-ai-lifecycle-manager/package-lock.json index 86e5e89..4ef77e3 100644 --- a/pkg/suse-ai-lifecycle-manager/package-lock.json +++ b/pkg/suse-ai-lifecycle-manager/package-lock.json @@ -1,12 +1,12 @@ { - "name": "suse-ai-lifecycle-manager", - "version": "1.1.0", + "name": "aif-ui", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "suse-ai-lifecycle-manager", - "version": "1.1.0", + "name": "aif-ui", + "version": "0.1.0", "dependencies": { "js-yaml": "^4.1.0" }, diff --git a/pkg/suse-ai-lifecycle-manager/package.json b/pkg/suse-ai-lifecycle-manager/package.json index 0df566e..ba41309 100644 --- a/pkg/suse-ai-lifecycle-manager/package.json +++ b/pkg/suse-ai-lifecycle-manager/package.json @@ -1,7 +1,7 @@ { - "name": "suse-ai-lifecycle-manager", + "name": "aif-ui", "description": "SUSE AI Factory", - "version": "1.1.0", + "version": "0.1.0", "private": false, "rancher": { "annotations": { From 68f3a0d0935b072eceed6906767ae93248bfc39e Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 18:58:35 -0300 Subject: [PATCH 06/11] refactor: rename pkg/suse-ai-lifecycle-manager to pkg/aif-ui Aligns the package directory with the new aif-ui package name. Updates EXTENSION_NAME constant, icon path, and type comment. --- pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintignore | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintrc.default.js | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintrc.js | 0 .../assets/generic-app.svg | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/assets/logo-icon.svg | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/assets/logo.svg | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/babel.config.js | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/commitlint.config.js | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/config/doc-links.ts | 0 .../config/feature-flags.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/config/i18n.ts | 0 .../config/labels-annotations.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/config/settings.ts | 0 .../config/suseai-rancher-ext.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/config/suseai.ts | 0 .../config/table-headers.ts | 0 .../formatters/AppHealthIndicator.vue | 0 .../formatters/AppStatusBadge.vue | 0 .../formatters/ClusterChips.vue | 0 .../formatters/InstallationProgress.vue | 0 .../formatters/ResourceUsage.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/index.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/l10n/en-us.json | 0 .../models/app/app-collection.ts | 0 .../models/app/app-installation.ts | 0 .../models/app/app-resource.ts | 0 .../models/base/resource-mixin.ts | 0 .../models/base/suseai-resource.ts | 0 .../models/chart/chart-resource.ts | 0 .../models/chart/chart-values.ts | 0 .../models/cluster/cluster-resource.ts | 0 .../models/cluster/repository-resource.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/package-lock.json | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/package.json | 2 +- pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/AIWorkloads.vue | 0 .../pages/AppInstances.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Apps.vue | 0 .../pages/BlueprintCreate.vue | 0 .../pages/BlueprintInstall.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Blueprints.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Install.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Manage.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Overview.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Settings.vue | 0 .../pages/components/AppWizard.vue | 0 .../pages/components/BlueprintCreateWizard.vue | 0 .../pages/components/BlueprintInstallWizard.vue | 0 .../pages/components/ClusterResourceTable.vue | 0 .../pages/components/ClusterSelect.vue | 0 .../pages/components/ValuesYaml.vue | 0 .../pages/components/wizard/BasicInfoStep.vue | 0 .../pages/components/wizard/BlueprintAppSelectorStep.vue | 0 .../pages/components/wizard/BlueprintBasicInfoStep.vue | 0 .../pages/components/wizard/BlueprintConfigStep.vue | 0 .../pages/components/wizard/BlueprintInstallBasicInfoStep.vue | 0 .../pages/components/wizard/BlueprintInstallReviewStep.vue | 0 .../pages/components/wizard/BlueprintReviewCreateStep.vue | 0 .../pages/components/wizard/InstallProgressModal.vue | 0 .../pages/components/wizard/ReviewStep.vue | 0 .../pages/components/wizard/TargetStep.vue | 0 .../pages/components/wizard/ValuesStep.vue | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/product.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/routing.ts | 0 .../services/app-collection.ts | 0 .../services/app-lifecycle-service.ts | 0 .../services/chart-service.ts | 0 .../services/chart-values.ts | 0 .../services/cluster-resources.ts | 0 .../services/cluster-service.ts | 0 .../services/fleet-bundle.ts | 0 .../services/git-publish.ts | 0 .../services/rancher-apps.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/services/repo-auth.ts | 0 .../services/ui-persist.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/store/modules/apps.ts | 0 .../store/modules/clusters.ts | 0 .../store/modules/installations.ts | 0 .../store/modules/repositories.ts | 0 .../store/suseai-common.ts | 0 .../store/types/state-types.ts | 0 .../store/types/store-types.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/style/brand.css | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/tsconfig.json | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/types/action-types.ts | 0 .../types/aiworkload-types.ts | 2 +- pkg/{suse-ai-lifecycle-manager => aif-ui}/types/app-types.ts | 0 .../types/blueprint-types.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/types/chart-types.ts | 0 .../types/cluster-types.ts | 0 .../types/installation-types.ts | 0 .../types/rancher-types.ts | 0 .../types/shims-components.d.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/app-status.ts | 0 .../utils/blueprint-api.ts | 0 .../utils/chart-resolver.ts | 0 .../utils/chart-version.ts | 0 .../utils/cluster-operations.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/constants.ts | 2 +- .../utils/error-handler.ts | 0 .../utils/feature-flags.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/i18n-mixin.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/logger.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/operator-api.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/promise.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/validation.ts | 0 .../validators/appInstallation.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/validators/common.ts | 0 .../validators/resourceManagement.ts | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/vue.config.js | 0 pkg/{suse-ai-lifecycle-manager => aif-ui}/yarn.lock | 0 110 files changed, 3 insertions(+), 3 deletions(-) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintignore (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintrc.default.js (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/.eslintrc.js (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/assets/generic-app.svg (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/assets/logo-icon.svg (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/assets/logo.svg (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/babel.config.js (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/commitlint.config.js (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/doc-links.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/feature-flags.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/i18n.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/labels-annotations.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/settings.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/suseai-rancher-ext.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/suseai.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/config/table-headers.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/formatters/AppHealthIndicator.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/formatters/AppStatusBadge.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/formatters/ClusterChips.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/formatters/InstallationProgress.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/formatters/ResourceUsage.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/index.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/l10n/en-us.json (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/app/app-collection.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/app/app-installation.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/app/app-resource.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/base/resource-mixin.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/base/suseai-resource.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/chart/chart-resource.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/chart/chart-values.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/cluster/cluster-resource.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/models/cluster/repository-resource.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/package-lock.json (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/package.json (93%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/AIWorkloads.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/AppInstances.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Apps.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/BlueprintCreate.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/BlueprintInstall.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Blueprints.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Install.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Manage.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Overview.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/Settings.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/AppWizard.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/BlueprintCreateWizard.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/BlueprintInstallWizard.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/ClusterResourceTable.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/ClusterSelect.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/ValuesYaml.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BasicInfoStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintAppSelectorStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintBasicInfoStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintConfigStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintInstallBasicInfoStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintInstallReviewStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/BlueprintReviewCreateStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/InstallProgressModal.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/ReviewStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/TargetStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/pages/components/wizard/ValuesStep.vue (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/product.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/routing.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/app-collection.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/app-lifecycle-service.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/chart-service.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/chart-values.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/cluster-resources.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/cluster-service.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/fleet-bundle.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/git-publish.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/rancher-apps.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/repo-auth.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/services/ui-persist.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/modules/apps.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/modules/clusters.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/modules/installations.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/modules/repositories.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/suseai-common.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/types/state-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/store/types/store-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/style/brand.css (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/tsconfig.json (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/action-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/aiworkload-types.ts (96%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/app-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/blueprint-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/chart-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/cluster-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/installation-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/rancher-types.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/types/shims-components.d.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/app-status.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/blueprint-api.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/chart-resolver.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/chart-version.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/cluster-operations.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/constants.ts (99%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/error-handler.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/feature-flags.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/i18n-mixin.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/logger.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/operator-api.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/promise.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/utils/validation.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/validators/appInstallation.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/validators/common.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/validators/resourceManagement.ts (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/vue.config.js (100%) rename pkg/{suse-ai-lifecycle-manager => aif-ui}/yarn.lock (100%) diff --git a/pkg/suse-ai-lifecycle-manager/.eslintignore b/pkg/aif-ui/.eslintignore similarity index 100% rename from pkg/suse-ai-lifecycle-manager/.eslintignore rename to pkg/aif-ui/.eslintignore diff --git a/pkg/suse-ai-lifecycle-manager/.eslintrc.default.js b/pkg/aif-ui/.eslintrc.default.js similarity index 100% rename from pkg/suse-ai-lifecycle-manager/.eslintrc.default.js rename to pkg/aif-ui/.eslintrc.default.js diff --git a/pkg/suse-ai-lifecycle-manager/.eslintrc.js b/pkg/aif-ui/.eslintrc.js similarity index 100% rename from pkg/suse-ai-lifecycle-manager/.eslintrc.js rename to pkg/aif-ui/.eslintrc.js diff --git a/pkg/suse-ai-lifecycle-manager/assets/generic-app.svg b/pkg/aif-ui/assets/generic-app.svg similarity index 100% rename from pkg/suse-ai-lifecycle-manager/assets/generic-app.svg rename to pkg/aif-ui/assets/generic-app.svg diff --git a/pkg/suse-ai-lifecycle-manager/assets/logo-icon.svg b/pkg/aif-ui/assets/logo-icon.svg similarity index 100% rename from pkg/suse-ai-lifecycle-manager/assets/logo-icon.svg rename to pkg/aif-ui/assets/logo-icon.svg diff --git a/pkg/suse-ai-lifecycle-manager/assets/logo.svg b/pkg/aif-ui/assets/logo.svg similarity index 100% rename from pkg/suse-ai-lifecycle-manager/assets/logo.svg rename to pkg/aif-ui/assets/logo.svg diff --git a/pkg/suse-ai-lifecycle-manager/babel.config.js b/pkg/aif-ui/babel.config.js similarity index 100% rename from pkg/suse-ai-lifecycle-manager/babel.config.js rename to pkg/aif-ui/babel.config.js diff --git a/pkg/suse-ai-lifecycle-manager/commitlint.config.js b/pkg/aif-ui/commitlint.config.js similarity index 100% rename from pkg/suse-ai-lifecycle-manager/commitlint.config.js rename to pkg/aif-ui/commitlint.config.js diff --git a/pkg/suse-ai-lifecycle-manager/config/doc-links.ts b/pkg/aif-ui/config/doc-links.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/doc-links.ts rename to pkg/aif-ui/config/doc-links.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/feature-flags.ts b/pkg/aif-ui/config/feature-flags.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/feature-flags.ts rename to pkg/aif-ui/config/feature-flags.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/i18n.ts b/pkg/aif-ui/config/i18n.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/i18n.ts rename to pkg/aif-ui/config/i18n.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/labels-annotations.ts b/pkg/aif-ui/config/labels-annotations.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/labels-annotations.ts rename to pkg/aif-ui/config/labels-annotations.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/settings.ts b/pkg/aif-ui/config/settings.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/settings.ts rename to pkg/aif-ui/config/settings.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/suseai-rancher-ext.ts b/pkg/aif-ui/config/suseai-rancher-ext.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/suseai-rancher-ext.ts rename to pkg/aif-ui/config/suseai-rancher-ext.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/suseai.ts b/pkg/aif-ui/config/suseai.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/suseai.ts rename to pkg/aif-ui/config/suseai.ts diff --git a/pkg/suse-ai-lifecycle-manager/config/table-headers.ts b/pkg/aif-ui/config/table-headers.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/config/table-headers.ts rename to pkg/aif-ui/config/table-headers.ts diff --git a/pkg/suse-ai-lifecycle-manager/formatters/AppHealthIndicator.vue b/pkg/aif-ui/formatters/AppHealthIndicator.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/formatters/AppHealthIndicator.vue rename to pkg/aif-ui/formatters/AppHealthIndicator.vue diff --git a/pkg/suse-ai-lifecycle-manager/formatters/AppStatusBadge.vue b/pkg/aif-ui/formatters/AppStatusBadge.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/formatters/AppStatusBadge.vue rename to pkg/aif-ui/formatters/AppStatusBadge.vue diff --git a/pkg/suse-ai-lifecycle-manager/formatters/ClusterChips.vue b/pkg/aif-ui/formatters/ClusterChips.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/formatters/ClusterChips.vue rename to pkg/aif-ui/formatters/ClusterChips.vue diff --git a/pkg/suse-ai-lifecycle-manager/formatters/InstallationProgress.vue b/pkg/aif-ui/formatters/InstallationProgress.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/formatters/InstallationProgress.vue rename to pkg/aif-ui/formatters/InstallationProgress.vue diff --git a/pkg/suse-ai-lifecycle-manager/formatters/ResourceUsage.vue b/pkg/aif-ui/formatters/ResourceUsage.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/formatters/ResourceUsage.vue rename to pkg/aif-ui/formatters/ResourceUsage.vue diff --git a/pkg/suse-ai-lifecycle-manager/index.ts b/pkg/aif-ui/index.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/index.ts rename to pkg/aif-ui/index.ts diff --git a/pkg/suse-ai-lifecycle-manager/l10n/en-us.json b/pkg/aif-ui/l10n/en-us.json similarity index 100% rename from pkg/suse-ai-lifecycle-manager/l10n/en-us.json rename to pkg/aif-ui/l10n/en-us.json diff --git a/pkg/suse-ai-lifecycle-manager/models/app/app-collection.ts b/pkg/aif-ui/models/app/app-collection.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/app/app-collection.ts rename to pkg/aif-ui/models/app/app-collection.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/app/app-installation.ts b/pkg/aif-ui/models/app/app-installation.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/app/app-installation.ts rename to pkg/aif-ui/models/app/app-installation.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/app/app-resource.ts b/pkg/aif-ui/models/app/app-resource.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/app/app-resource.ts rename to pkg/aif-ui/models/app/app-resource.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/base/resource-mixin.ts b/pkg/aif-ui/models/base/resource-mixin.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/base/resource-mixin.ts rename to pkg/aif-ui/models/base/resource-mixin.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/base/suseai-resource.ts b/pkg/aif-ui/models/base/suseai-resource.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/base/suseai-resource.ts rename to pkg/aif-ui/models/base/suseai-resource.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/chart/chart-resource.ts b/pkg/aif-ui/models/chart/chart-resource.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/chart/chart-resource.ts rename to pkg/aif-ui/models/chart/chart-resource.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/chart/chart-values.ts b/pkg/aif-ui/models/chart/chart-values.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/chart/chart-values.ts rename to pkg/aif-ui/models/chart/chart-values.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/cluster/cluster-resource.ts b/pkg/aif-ui/models/cluster/cluster-resource.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/cluster/cluster-resource.ts rename to pkg/aif-ui/models/cluster/cluster-resource.ts diff --git a/pkg/suse-ai-lifecycle-manager/models/cluster/repository-resource.ts b/pkg/aif-ui/models/cluster/repository-resource.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/models/cluster/repository-resource.ts rename to pkg/aif-ui/models/cluster/repository-resource.ts diff --git a/pkg/suse-ai-lifecycle-manager/package-lock.json b/pkg/aif-ui/package-lock.json similarity index 100% rename from pkg/suse-ai-lifecycle-manager/package-lock.json rename to pkg/aif-ui/package-lock.json diff --git a/pkg/suse-ai-lifecycle-manager/package.json b/pkg/aif-ui/package.json similarity index 93% rename from pkg/suse-ai-lifecycle-manager/package.json rename to pkg/aif-ui/package.json index ba41309..f3fed71 100644 --- a/pkg/suse-ai-lifecycle-manager/package.json +++ b/pkg/aif-ui/package.json @@ -10,7 +10,7 @@ "catalog.cattle.io/ui-extensions-version": ">= 3.0.0 < 4.0.0" } }, - "icon": "https://raw.githubusercontent.com/SUSE/suse-ai-lifecycle-manager/refs/heads/main/pkg/suse-ai-lifecycle-manager/assets/logo.svg", + "icon": "https://raw.githubusercontent.com/SUSE/suse-ai-lifecycle-manager/refs/heads/main/pkg/aif-ui/assets/logo.svg", "scripts": { "typecheck": "vue-tsc --noEmit", "lint": "npx eslint --max-warnings 2000 --ext .js,.ts,.vue .", diff --git a/pkg/suse-ai-lifecycle-manager/pages/AIWorkloads.vue b/pkg/aif-ui/pages/AIWorkloads.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/AIWorkloads.vue rename to pkg/aif-ui/pages/AIWorkloads.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/AppInstances.vue b/pkg/aif-ui/pages/AppInstances.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/AppInstances.vue rename to pkg/aif-ui/pages/AppInstances.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Apps.vue b/pkg/aif-ui/pages/Apps.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Apps.vue rename to pkg/aif-ui/pages/Apps.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/BlueprintCreate.vue b/pkg/aif-ui/pages/BlueprintCreate.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/BlueprintCreate.vue rename to pkg/aif-ui/pages/BlueprintCreate.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/BlueprintInstall.vue b/pkg/aif-ui/pages/BlueprintInstall.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/BlueprintInstall.vue rename to pkg/aif-ui/pages/BlueprintInstall.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Blueprints.vue b/pkg/aif-ui/pages/Blueprints.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Blueprints.vue rename to pkg/aif-ui/pages/Blueprints.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Install.vue b/pkg/aif-ui/pages/Install.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Install.vue rename to pkg/aif-ui/pages/Install.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Manage.vue b/pkg/aif-ui/pages/Manage.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Manage.vue rename to pkg/aif-ui/pages/Manage.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Overview.vue b/pkg/aif-ui/pages/Overview.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Overview.vue rename to pkg/aif-ui/pages/Overview.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/Settings.vue b/pkg/aif-ui/pages/Settings.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/Settings.vue rename to pkg/aif-ui/pages/Settings.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/AppWizard.vue b/pkg/aif-ui/pages/components/AppWizard.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/AppWizard.vue rename to pkg/aif-ui/pages/components/AppWizard.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/BlueprintCreateWizard.vue b/pkg/aif-ui/pages/components/BlueprintCreateWizard.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/BlueprintCreateWizard.vue rename to pkg/aif-ui/pages/components/BlueprintCreateWizard.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/BlueprintInstallWizard.vue b/pkg/aif-ui/pages/components/BlueprintInstallWizard.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/BlueprintInstallWizard.vue rename to pkg/aif-ui/pages/components/BlueprintInstallWizard.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/ClusterResourceTable.vue b/pkg/aif-ui/pages/components/ClusterResourceTable.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/ClusterResourceTable.vue rename to pkg/aif-ui/pages/components/ClusterResourceTable.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/ClusterSelect.vue b/pkg/aif-ui/pages/components/ClusterSelect.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/ClusterSelect.vue rename to pkg/aif-ui/pages/components/ClusterSelect.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/ValuesYaml.vue b/pkg/aif-ui/pages/components/ValuesYaml.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/ValuesYaml.vue rename to pkg/aif-ui/pages/components/ValuesYaml.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BasicInfoStep.vue b/pkg/aif-ui/pages/components/wizard/BasicInfoStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BasicInfoStep.vue rename to pkg/aif-ui/pages/components/wizard/BasicInfoStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintAppSelectorStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintAppSelectorStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintAppSelectorStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintAppSelectorStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintBasicInfoStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintBasicInfoStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintBasicInfoStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintBasicInfoStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintConfigStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintConfigStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintConfigStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintConfigStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintInstallBasicInfoStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintInstallBasicInfoStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintInstallBasicInfoStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintInstallBasicInfoStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintInstallReviewStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintInstallReviewStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintInstallReviewStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintInstallReviewStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintReviewCreateStep.vue b/pkg/aif-ui/pages/components/wizard/BlueprintReviewCreateStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/BlueprintReviewCreateStep.vue rename to pkg/aif-ui/pages/components/wizard/BlueprintReviewCreateStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/InstallProgressModal.vue b/pkg/aif-ui/pages/components/wizard/InstallProgressModal.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/InstallProgressModal.vue rename to pkg/aif-ui/pages/components/wizard/InstallProgressModal.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/ReviewStep.vue b/pkg/aif-ui/pages/components/wizard/ReviewStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/ReviewStep.vue rename to pkg/aif-ui/pages/components/wizard/ReviewStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/TargetStep.vue b/pkg/aif-ui/pages/components/wizard/TargetStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/TargetStep.vue rename to pkg/aif-ui/pages/components/wizard/TargetStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/pages/components/wizard/ValuesStep.vue b/pkg/aif-ui/pages/components/wizard/ValuesStep.vue similarity index 100% rename from pkg/suse-ai-lifecycle-manager/pages/components/wizard/ValuesStep.vue rename to pkg/aif-ui/pages/components/wizard/ValuesStep.vue diff --git a/pkg/suse-ai-lifecycle-manager/product.ts b/pkg/aif-ui/product.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/product.ts rename to pkg/aif-ui/product.ts diff --git a/pkg/suse-ai-lifecycle-manager/routing.ts b/pkg/aif-ui/routing.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/routing.ts rename to pkg/aif-ui/routing.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/app-collection.ts b/pkg/aif-ui/services/app-collection.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/app-collection.ts rename to pkg/aif-ui/services/app-collection.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/app-lifecycle-service.ts b/pkg/aif-ui/services/app-lifecycle-service.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/app-lifecycle-service.ts rename to pkg/aif-ui/services/app-lifecycle-service.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/chart-service.ts b/pkg/aif-ui/services/chart-service.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/chart-service.ts rename to pkg/aif-ui/services/chart-service.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/chart-values.ts b/pkg/aif-ui/services/chart-values.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/chart-values.ts rename to pkg/aif-ui/services/chart-values.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/cluster-resources.ts b/pkg/aif-ui/services/cluster-resources.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/cluster-resources.ts rename to pkg/aif-ui/services/cluster-resources.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/cluster-service.ts b/pkg/aif-ui/services/cluster-service.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/cluster-service.ts rename to pkg/aif-ui/services/cluster-service.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/fleet-bundle.ts b/pkg/aif-ui/services/fleet-bundle.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/fleet-bundle.ts rename to pkg/aif-ui/services/fleet-bundle.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/git-publish.ts b/pkg/aif-ui/services/git-publish.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/git-publish.ts rename to pkg/aif-ui/services/git-publish.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/rancher-apps.ts b/pkg/aif-ui/services/rancher-apps.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/rancher-apps.ts rename to pkg/aif-ui/services/rancher-apps.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/repo-auth.ts b/pkg/aif-ui/services/repo-auth.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/repo-auth.ts rename to pkg/aif-ui/services/repo-auth.ts diff --git a/pkg/suse-ai-lifecycle-manager/services/ui-persist.ts b/pkg/aif-ui/services/ui-persist.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/services/ui-persist.ts rename to pkg/aif-ui/services/ui-persist.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/modules/apps.ts b/pkg/aif-ui/store/modules/apps.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/modules/apps.ts rename to pkg/aif-ui/store/modules/apps.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/modules/clusters.ts b/pkg/aif-ui/store/modules/clusters.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/modules/clusters.ts rename to pkg/aif-ui/store/modules/clusters.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/modules/installations.ts b/pkg/aif-ui/store/modules/installations.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/modules/installations.ts rename to pkg/aif-ui/store/modules/installations.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/modules/repositories.ts b/pkg/aif-ui/store/modules/repositories.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/modules/repositories.ts rename to pkg/aif-ui/store/modules/repositories.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/suseai-common.ts b/pkg/aif-ui/store/suseai-common.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/suseai-common.ts rename to pkg/aif-ui/store/suseai-common.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/types/state-types.ts b/pkg/aif-ui/store/types/state-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/types/state-types.ts rename to pkg/aif-ui/store/types/state-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/store/types/store-types.ts b/pkg/aif-ui/store/types/store-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/store/types/store-types.ts rename to pkg/aif-ui/store/types/store-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/style/brand.css b/pkg/aif-ui/style/brand.css similarity index 100% rename from pkg/suse-ai-lifecycle-manager/style/brand.css rename to pkg/aif-ui/style/brand.css diff --git a/pkg/suse-ai-lifecycle-manager/tsconfig.json b/pkg/aif-ui/tsconfig.json similarity index 100% rename from pkg/suse-ai-lifecycle-manager/tsconfig.json rename to pkg/aif-ui/tsconfig.json diff --git a/pkg/suse-ai-lifecycle-manager/types/action-types.ts b/pkg/aif-ui/types/action-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/action-types.ts rename to pkg/aif-ui/types/action-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/aiworkload-types.ts b/pkg/aif-ui/types/aiworkload-types.ts similarity index 96% rename from pkg/suse-ai-lifecycle-manager/types/aiworkload-types.ts rename to pkg/aif-ui/types/aiworkload-types.ts index c752abb..1d043c0 100644 --- a/pkg/suse-ai-lifecycle-manager/types/aiworkload-types.ts +++ b/pkg/aif-ui/types/aiworkload-types.ts @@ -1,4 +1,4 @@ -// pkg/suse-ai-lifecycle-manager/types/aiworkload-types.ts +// pkg/aif-ui/types/aiworkload-types.ts export type AIWorkloadSourceType = 'App' | 'Blueprint'; export type AIWorkloadDeployStrategy = 'Helm' | 'FleetBundle' | 'GitOps'; export type AIWorkloadPhase = 'Pending' | 'Running' | 'Degraded' | 'Failed'; diff --git a/pkg/suse-ai-lifecycle-manager/types/app-types.ts b/pkg/aif-ui/types/app-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/app-types.ts rename to pkg/aif-ui/types/app-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/blueprint-types.ts b/pkg/aif-ui/types/blueprint-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/blueprint-types.ts rename to pkg/aif-ui/types/blueprint-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/chart-types.ts b/pkg/aif-ui/types/chart-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/chart-types.ts rename to pkg/aif-ui/types/chart-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/cluster-types.ts b/pkg/aif-ui/types/cluster-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/cluster-types.ts rename to pkg/aif-ui/types/cluster-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/installation-types.ts b/pkg/aif-ui/types/installation-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/installation-types.ts rename to pkg/aif-ui/types/installation-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/rancher-types.ts b/pkg/aif-ui/types/rancher-types.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/rancher-types.ts rename to pkg/aif-ui/types/rancher-types.ts diff --git a/pkg/suse-ai-lifecycle-manager/types/shims-components.d.ts b/pkg/aif-ui/types/shims-components.d.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/types/shims-components.d.ts rename to pkg/aif-ui/types/shims-components.d.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/app-status.ts b/pkg/aif-ui/utils/app-status.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/app-status.ts rename to pkg/aif-ui/utils/app-status.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/blueprint-api.ts b/pkg/aif-ui/utils/blueprint-api.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/blueprint-api.ts rename to pkg/aif-ui/utils/blueprint-api.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/chart-resolver.ts b/pkg/aif-ui/utils/chart-resolver.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/chart-resolver.ts rename to pkg/aif-ui/utils/chart-resolver.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/chart-version.ts b/pkg/aif-ui/utils/chart-version.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/chart-version.ts rename to pkg/aif-ui/utils/chart-version.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/cluster-operations.ts b/pkg/aif-ui/utils/cluster-operations.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/cluster-operations.ts rename to pkg/aif-ui/utils/cluster-operations.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/constants.ts b/pkg/aif-ui/utils/constants.ts similarity index 99% rename from pkg/suse-ai-lifecycle-manager/utils/constants.ts rename to pkg/aif-ui/utils/constants.ts index 22891dd..fb0e9aa 100644 --- a/pkg/suse-ai-lifecycle-manager/utils/constants.ts +++ b/pkg/aif-ui/utils/constants.ts @@ -6,7 +6,7 @@ // === Product Information === export const PRODUCT_NAME = 'SUSE AI'; export const PRODUCT_SLUG = 'suseai'; -export const EXTENSION_NAME = 'suse-ai-lifecycle-manager'; +export const EXTENSION_NAME = 'aif-ui'; export const EXTENSION_VERSION = '0.1.0'; // === Store Namespaces === diff --git a/pkg/suse-ai-lifecycle-manager/utils/error-handler.ts b/pkg/aif-ui/utils/error-handler.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/error-handler.ts rename to pkg/aif-ui/utils/error-handler.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/feature-flags.ts b/pkg/aif-ui/utils/feature-flags.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/feature-flags.ts rename to pkg/aif-ui/utils/feature-flags.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/i18n-mixin.ts b/pkg/aif-ui/utils/i18n-mixin.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/i18n-mixin.ts rename to pkg/aif-ui/utils/i18n-mixin.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/logger.ts b/pkg/aif-ui/utils/logger.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/logger.ts rename to pkg/aif-ui/utils/logger.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/operator-api.ts b/pkg/aif-ui/utils/operator-api.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/operator-api.ts rename to pkg/aif-ui/utils/operator-api.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/promise.ts b/pkg/aif-ui/utils/promise.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/promise.ts rename to pkg/aif-ui/utils/promise.ts diff --git a/pkg/suse-ai-lifecycle-manager/utils/validation.ts b/pkg/aif-ui/utils/validation.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/utils/validation.ts rename to pkg/aif-ui/utils/validation.ts diff --git a/pkg/suse-ai-lifecycle-manager/validators/appInstallation.ts b/pkg/aif-ui/validators/appInstallation.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/validators/appInstallation.ts rename to pkg/aif-ui/validators/appInstallation.ts diff --git a/pkg/suse-ai-lifecycle-manager/validators/common.ts b/pkg/aif-ui/validators/common.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/validators/common.ts rename to pkg/aif-ui/validators/common.ts diff --git a/pkg/suse-ai-lifecycle-manager/validators/resourceManagement.ts b/pkg/aif-ui/validators/resourceManagement.ts similarity index 100% rename from pkg/suse-ai-lifecycle-manager/validators/resourceManagement.ts rename to pkg/aif-ui/validators/resourceManagement.ts diff --git a/pkg/suse-ai-lifecycle-manager/vue.config.js b/pkg/aif-ui/vue.config.js similarity index 100% rename from pkg/suse-ai-lifecycle-manager/vue.config.js rename to pkg/aif-ui/vue.config.js diff --git a/pkg/suse-ai-lifecycle-manager/yarn.lock b/pkg/aif-ui/yarn.lock similarity index 100% rename from pkg/suse-ai-lifecycle-manager/yarn.lock rename to pkg/aif-ui/yarn.lock From 1d5c9c01bc82b456bcd469286a08339829374e63 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 18:58:53 -0300 Subject: [PATCH 07/11] fix: update husky hooks to use pkg/aif-ui path --- .husky/commit-msg | 2 +- .husky/pre-commit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/commit-msg b/.husky/commit-msg index 0e28069..a40b9e0 100644 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1 +1 @@ -cd pkg/suse-ai-lifecycle-manager && npx --no -- commitlint --edit $1 \ No newline at end of file +cd pkg/aif-ui && npx --no -- commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit index c8678a6..1bc5d24 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -cd pkg/suse-ai-lifecycle-manager && yarn lint +cd pkg/aif-ui && yarn lint From 82bc28e5f6328631f43ad895b75ae6a127fb87c5 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Tue, 2 Jun 2026 18:59:54 -0300 Subject: [PATCH 08/11] docs: update references from suse-ai-lifecycle-manager to aif-ui --- README.md | 30 +++++++++---------- .../specs/2026-05-18-settings-page-design.md | 4 +-- suse-ai-operator/README.md | 6 ++-- .../samples/installaiextension.yaml | 6 ++-- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 612f1eb..f5e96a7 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,13 @@ SUSE AI Lifecycle Manager is a Rancher UI Extension for managing SUSE AI compone 1. **Clone and install dependencies:** ```bash git clone - cd suse-ai-lifecycle-manager + cd aif-ui yarn install ``` 2. **Build the extension:** ```bash - yarn build-pkg suse-ai-lifecycle-manager + yarn build-pkg aif-ui ``` 3. **Serve during development:** @@ -45,13 +45,13 @@ SUSE AI Lifecycle Manager is a Rancher UI Extension for managing SUSE AI compone Enable debug logging in development: ```bash -NODE_ENV=development yarn build-pkg suse-ai-lifecycle-manager +NODE_ENV=development yarn build-pkg aif-ui ``` ## Building for Production ```bash -yarn build-pkg suse-ai-lifecycle-manager --mode production +yarn build-pkg aif-ui --mode production ``` ## Extension Catalog Container @@ -70,13 +70,13 @@ yarn build-pkg suse-ai-lifecycle-manager --mode production - The catalog container tag is derived from the Git tag: ``` -suse-ai-lifecycle-manager- → ghcr.io/suse/suse-ai-lifecycle-manager: +aif-ui- → ghcr.io/suse/aif-ui: ``` In the examples below, `` refers to a published extension release (e.g. `0.2.0`). Available catalog image versions are published in GitHub Container Registry: -https://github.com/SUSE/suse-ai-lifecycle-manager/pkgs/container/suse-ai-lifecycle-manager +https://github.com/SUSE/aif-ui/pkgs/container/aif-ui ### Container Structure ``` @@ -87,9 +87,9 @@ https://github.com/SUSE/suse-ai-lifecycle-manager/pkgs/container/suse-ai-lifecyc └── plugin/ ├── index.yaml ├── package.json - ├── suse-ai-lifecycle-manager - └── suse-ai-lifecycle-manager-.tgz - └── suse-ai-lifecycle-manager- + ├── aif-ui + └── aif-ui-.tgz + └── aif-ui- ├── files.txt └── plugin/ └── @@ -98,7 +98,7 @@ https://github.com/SUSE/suse-ai-lifecycle-manager/pkgs/container/suse-ai-lifecyc ### Consuming the Catalog in Rancher - Add the catalog source in the Rancher Dashboard: 1. Navigate to Extensions → Manage Extensions Catalog - 2. Import Extension Catalog → Use the Catalog Image Reference: `ghcr.io/suse/suse-ai-lifecycle-manager:` → Press `Load` + 2. Import Extension Catalog → Use the Catalog Image Reference: `ghcr.io/suse/aif-ui:` → Press `Load` 3. From the Extensions page, Go to Manage Repositories. Verify if the SUSE AI Rancher Extension repository has the `Active` state. If not, refresh the connection. 4. Go back to Extensions and install SUSE AI Rancher Extension. 5. Re-load Rancher Dashboard. Reload the browser to ensure the extension is loaded in the UI (ctrl+r or F5 or cmd+r). @@ -122,11 +122,11 @@ https://github.com///tree/gh-pages ├── index.yaml ├── assets/ │ ├── index.yaml -│ └── suse-ai-lifecycle-manager/ -│ ├── suse-ai-lifecycle-manager-.tgz +│ └── aif-ui/ +│ ├── aif-ui-.tgz │ └── ... ├── charts/ -│ └── suse-ai-lifecycle-manager/ +│ └── aif-ui/ │ ├── / │ │ ├── templates/ │ │ │ ├── _helpers.tpl @@ -135,7 +135,7 @@ https://github.com///tree/gh-pages │ │ └── values.yaml │ └── ... └── extensions/ - └── suse-ai-lifecycle-manager/ + └── aif-ui/ ├── / │ ├── plugin/ │ │ └── ... @@ -195,4 +195,4 @@ git commit -m "fix: resolve app installation error handling" 1. **Extension not loading**: Verify URL in developer tools console 2. **Build errors**: Check Node.js version compatibility (requires 20+) 3. **API errors**: Verify cluster permissions and connectivity -4. **Linting errors**: Run `cd pkg/suse-ai-lifecycle-manager && yarn lint` to see details +4. **Linting errors**: Run `cd pkg/aif-ui && yarn lint` to see details diff --git a/docs/superpowers/specs/2026-05-18-settings-page-design.md b/docs/superpowers/specs/2026-05-18-settings-page-design.md index aa09979..1fc15c2 100644 --- a/docs/superpowers/specs/2026-05-18-settings-page-design.md +++ b/docs/superpowers/specs/2026-05-18-settings-page-design.md @@ -13,7 +13,7 @@ Add a working Settings page to the SUSE AI Lifecycle Manager. This page lets pla ``` ┌─────────────────────────────────────────────────────────┐ │ Rancher UI (Vue 3 extension) │ -│ pkg/suse-ai-lifecycle-manager/ │ +│ pkg/aif-ui/ │ │ ├── pages/Settings.vue ← ported from AIF │ │ ├── utils/operator-api.ts ← new: HTTP client │ │ ├── config/types.ts ← add operator coords │ @@ -180,7 +180,7 @@ go func() { go srv.ListenAndServe() ``` -## UI Extension (`pkg/suse-ai-lifecycle-manager/`) +## UI Extension (`pkg/aif-ui/`) ### New files diff --git a/suse-ai-operator/README.md b/suse-ai-operator/README.md index 6c9293a..8fc7455 100644 --- a/suse-ai-operator/README.md +++ b/suse-ai-operator/README.md @@ -48,11 +48,11 @@ metadata: name: suseai spec: helm: - name: suse-ai-lifecycle-manager - url: "oci://ghcr.io/suse/chart/suse-ai-lifecycle-manager" + name: aif-ui + url: "oci://ghcr.io/suse/chart/aif-ui" version: "1.0.0" extension: - name: suse-ai-lifecycle-manager + name: aif-ui version: "1.0.0" ``` Apply this file diff --git a/suse-ai-operator/samples/installaiextension.yaml b/suse-ai-operator/samples/installaiextension.yaml index b92e371..5b4bb75 100644 --- a/suse-ai-operator/samples/installaiextension.yaml +++ b/suse-ai-operator/samples/installaiextension.yaml @@ -4,9 +4,9 @@ metadata: name: suseai spec: helm: - name: suse-ai-lifecycle-manager - url: "oci://ghcr.io/suse/chart/suse-ai-lifecycle-manager" + name: aif-ui + url: "oci://ghcr.io/suse/chart/aif-ui" version: "1.0.0" extension: - name: suse-ai-lifecycle-manager + name: aif-ui version: "1.0.0" \ No newline at end of file From 02d9486112591c68a214a033f2b89b55751b9a8a Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Fri, 5 Jun 2026 10:48:25 -0300 Subject: [PATCH 09/11] fix: address PR review findings for aif-ui chart and pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix Chart.yaml: appVersion 1.1.0 → 0.1.0, correct home/sources URLs - Fix workflow: quote github.ref, align GHCR username to repository_owner - Fix README: correct container registry browse URL - Add values.schema.json: additionalProperties, typed array items - Add values.yaml: resource defaults, initialDelaySeconds for probes - Update chart README to reflect new defaults - Update operator namespace/service constants to aif-operator - Remove obsolete build-extension.yml and release-operator.yml workflows --- .github/workflows/build-extension.yml | 356 -------------------- .github/workflows/release-aif-extension.yml | 4 +- .github/workflows/release-operator.yml | 221 ------------ README.md | 2 +- charts/aif-ui/Chart.yaml | 6 +- charts/aif-ui/README.md | 4 +- charts/aif-ui/values.schema.json | 30 +- charts/aif-ui/values.yaml | 10 +- pkg/aif-ui/utils/constants.ts | 4 +- 9 files changed, 49 insertions(+), 588 deletions(-) delete mode 100644 .github/workflows/build-extension.yml delete mode 100644 .github/workflows/release-operator.yml diff --git a/.github/workflows/build-extension.yml b/.github/workflows/build-extension.yml deleted file mode 100644 index ec2409d..0000000 --- a/.github/workflows/build-extension.yml +++ /dev/null @@ -1,356 +0,0 @@ -name: Build and Publish Extension [Container and Helm Chart - Multi-Arch] - -on: - push: - branches: - - main - paths-ignore: - - 'charts/suse-ai-operator/**' - - 'suse-ai-operator/**' - - '.github/workflows/release-operator.yml' - tags: - - suse-ai-lifecycle-manager-* - -env: - CHART_PATH: charts/suse-ai-lifecycle-manager - CHART_REGISTRY: oci://ghcr.io/suse/chart - IMAGE_NAME: ghcr.io/suse/suse-ai-lifecycle-manager - GH_BRANCH: gh-pages - -jobs: - prepare: - outputs: - VERSION: ${{ steps.tags.outputs.VERSION }} - CHART_VERSION: ${{ steps.tags.outputs.CHART_VERSION }} - PUBLISH: ${{ steps.tags.outputs.PUBLISH }} - METADATA_TAGS: ${{ steps.tags.outputs.METADATA_TAGS }} - NOTES_START_TAG: ${{ steps.tags.outputs.NOTES_START_TAG }} - permissions: - contents: read - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - - - name: Calculate tags - id: tags - shell: bash - run: | - ref=${{ github.ref }} - case "$ref" in - refs/heads/main) - BASE_VERSION=$(jq -r '.version' pkg/suse-ai-lifecycle-manager/package.json) - - git fetch --tags - - LAST_DEV=$(git tag \ - --list "suse-ai-lifecycle-manager-${BASE_VERSION}-dev.*" \ - --sort=-v:refname \ - | head -n 1) - - if [[ -z "$LAST_DEV" ]]; then - DEV_NUM=1 - NOTES_START_TAG=$(git tag --list "suse-ai-lifecycle-manager-*" --sort=-v:refname | grep -v "\-dev" | head -n 1) - else - DEV_NUM="${LAST_DEV##*.}" - DEV_NUM=$((DEV_NUM + 1)) - NOTES_START_TAG="$LAST_DEV" - fi - - VERSION="${BASE_VERSION}-dev.${DEV_NUM}" - CHART_VERSION="$VERSION" - PUBLISH=true - - METADATA_TAGS="$VERSION" - ;; - refs/tags/suse-ai-lifecycle-manager-*) - VERSION="${ref#refs/tags/suse-ai-lifecycle-manager-}" - CHART_VERSION="$VERSION" - NOTES_START_TAG="" - PUBLISH=true - - if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - METADATA_TAGS="$VERSION"$'\n'"latest" - else - METADATA_TAGS="$VERSION" - fi - ;; - *) - VERSION="${{ github.sha }}" - CHART_VERSION="$VERSION" - NOTES_START_TAG="" - PUBLISH=false - - METADATA_TAGS="$VERSION" - ;; - esac - - echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" - echo "PUBLISH=$PUBLISH" >> "$GITHUB_OUTPUT" - echo "CHART_VERSION=$CHART_VERSION" >> "$GITHUB_OUTPUT" - echo "NOTES_START_TAG=$NOTES_START_TAG" >> "$GITHUB_OUTPUT" - - echo "METADATA_TAGS<> $GITHUB_OUTPUT - echo "$METADATA_TAGS" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - build-container: - strategy: - matrix: - arch: - - amd64 - - arm64 - include: - - arch: amd64 - runner: ubuntu-24.04 - - arch: arm64 - runner: ubuntu-24.04-arm - runs-on: ${{ matrix.runner }} - name: Build Container Image - needs: prepare - if: needs.prepare.outputs.PUBLISH == 'true' - permissions: - contents: read - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - - - name: Configure Git - run: | - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - - - name: Login to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup Nodejs with yarn caching - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 - with: - node-version: '20' - cache: yarn - - - name: Enable Corepack - run: corepack enable - - - name: Install dependencies - run: yarn - - - name: Sync package.json versions (dev only) - if: contains(needs.prepare.outputs.VERSION, '-dev.') - run: | - echo "Updating root package.json" - yarn --cwd . version --new-version "${{ needs.prepare.outputs.VERSION }}" --no-git-tag-version - - echo "Updating pkg/suse-ai-lifecycle-manager/package.json" - yarn --cwd pkg/suse-ai-lifecycle-manager version --new-version "${{ needs.prepare.outputs.VERSION }}" --no-git-tag-version - - - name: Parse Extension Name - env: - GH_TOKEN: ${{ github.token }} - run: | - TAG="suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - yarn parse-tag-name $TAG ${{ github.run_id }} "catalog" - - - name: Build image - run: | - TAG="suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - yarn publish-pkgs -c -i '' -r ghcr.io -o 'suse' -t "$TAG" - - - name: Tag and Push Image - env: - VERSION: ${{ needs.prepare.outputs.VERSION }} - run: | - docker tag $IMAGE_NAME:$VERSION $IMAGE_NAME:$VERSION-${{ matrix.arch }} - docker push $IMAGE_NAME:$VERSION-${{ matrix.arch }} - - manifest-container: - name: Create Container Manifest and Helm Chart - needs: [prepare, build-container] - env: - RELEASE_TAG: ${{ needs.prepare.outputs.METADATA_TAGS }} - runs-on: ubuntu-latest - if: needs.prepare.outputs.PUBLISH == 'true' - permissions: - contents: write - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - - - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Create multi-arch manifest - env: - VERSION: "${{ needs.prepare.outputs.VERSION }}" - run: | - while IFS= read -r tag; do - [[ -z "$tag" ]] && continue - - echo "Creating manifest for tag: $tag" - - docker buildx imagetools create \ - -t $IMAGE_NAME:$tag \ - $IMAGE_NAME:$VERSION-amd64 \ - $IMAGE_NAME:$VERSION-arm64 - - done <<< "${RELEASE_TAG}" - - - name: Update Chart.yaml and values.yaml - run: | - yq -i '.version = "${{ needs.prepare.outputs.CHART_VERSION }}"' $CHART_PATH/Chart.yaml - yq -i '.appVersion = "${{ needs.prepare.outputs.VERSION }}"' $CHART_PATH/Chart.yaml - yq -i ' - .annotations."helm.sh/images" = - "- image: ghcr.io/suse/suse-ai-lifecycle-manager:${{ needs.prepare.outputs.VERSION }}\n name: suse-ai-lifecycle-manager" - ' $CHART_PATH/Chart.yaml - yq -i '.image.tag = "${{ needs.prepare.outputs.VERSION }}"' $CHART_PATH/values.yaml - - - name: Sync package.json versions (dev only) - if: contains(needs.prepare.outputs.VERSION, '-dev.') - run: | - echo "Updating root package.json" - yarn --cwd . version --new-version "${{ needs.prepare.outputs.VERSION }}" --no-git-tag-version - - echo "Updating pkg/suse-ai-lifecycle-manager/package.json" - yarn --cwd pkg/suse-ai-lifecycle-manager version --new-version "${{ needs.prepare.outputs.VERSION }}" --no-git-tag-version - - - name: Package Helm Chart - id: package - run: | - chart_package=$(helm package $CHART_PATH --destination . | awk '{print $NF}') - echo "chart_package=$chart_package" >> $GITHUB_OUTPUT - - - name: Publish Helm Chart - run: | - helm push ${{ steps.package.outputs.chart_package }} \ - $CHART_REGISTRY - - - name: Create dev git tag - if: needs.prepare.outputs.PUBLISH == 'true' && github.ref == 'refs/heads/main' - run: | - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - TAG="suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - git checkout -b release/${TAG} - - git add $CHART_PATH/Chart.yaml - git commit -m "chore(release): ${TAG}" - - git tag "$TAG" - git push origin "$TAG" - - - name: Create pre-release and release notes for dev - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - START_TAG: ${{ needs.prepare.outputs.NOTES_START_TAG }} - if: needs.prepare.outputs.PUBLISH == 'true' && github.ref == 'refs/heads/main' - run: | - TAG="suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - - NOTES_ARG="" - if [[ -n "$START_TAG" ]]; then - NOTES_ARG="--notes-start-tag $START_TAG" - fi - - gh release create "${TAG}" \ - --title "${TAG}" \ - --prerelease --fail-on-no-commits \ - --generate-notes $NOTES_ARG - - build-gh: - name: Build Extension for GH branch - needs: prepare - env: - RELEASE_TAG: "suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - runs-on: ubuntu-latest - if: needs.prepare.outputs.PUBLISH == 'true' && !contains(needs.prepare.outputs.VERSION, '-dev.') - permissions: - actions: write - contents: read - steps: - - name: Checkout repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - with: - fetch-depth: 0 - - - name: Configure Git - run: | - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - - - name: Login to GitHub Container Registry - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup Nodejs with yarn caching - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 - with: - node-version: '20' - cache: yarn - - - name: Enable Corepack - run: corepack enable - - - name: Install dependencies - run: yarn - - - name: Parse Extension Name - env: - GH_TOKEN: ${{ github.token }} - run: | - yarn parse-tag-name ${{ env.RELEASE_TAG }} ${{ github.run_id }} "charts" - - - name: Build image - run: | - yarn publish-pkgs -s ${{ github.repository }} -b "${{ env.GH_BRANCH }}" -t ${{ env.RELEASE_TAG }} -f - - - name: Upload a Build Artifact - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 - with: - name: charts - path: tmp - - release-gh: - name: Release Extension for GH branch - needs: [prepare, build-gh] - env: - RELEASE_TAG: "suse-ai-lifecycle-manager-${{ needs.prepare.outputs.VERSION }}" - runs-on: ubuntu-latest - if: needs.prepare.outputs.PUBLISH == 'true' && !contains(needs.prepare.outputs.VERSION, '-dev.') - permissions: - actions: write - contents: write - steps: - - name: Checkout repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - with: - ref: ${{ env.GH_BRANCH }} - - - name: Configure Git - run: | - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - - - name: Download build artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 - with: - name: charts - - - name: Commit build - run: | - git add ./{assets,charts,extensions,index.yaml} - git commit -a -m "CI Build Artifacts" - git push diff --git a/.github/workflows/release-aif-extension.yml b/.github/workflows/release-aif-extension.yml index 9913889..b9ae5a0 100644 --- a/.github/workflows/release-aif-extension.yml +++ b/.github/workflows/release-aif-extension.yml @@ -27,7 +27,7 @@ jobs: id: tags shell: bash run: | - ref=${{ github.ref }} + ref="${{ github.ref }}" case "$ref" in refs/tags/aif-ui-*) VERSION="${ref#refs/tags/aif-ui-}" @@ -85,7 +85,7 @@ jobs: uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 with: registry: ghcr.io - username: ${{ github.actor }} + username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Setup Node.js diff --git a/.github/workflows/release-operator.yml b/.github/workflows/release-operator.yml deleted file mode 100644 index 8cdd173..0000000 --- a/.github/workflows/release-operator.yml +++ /dev/null @@ -1,221 +0,0 @@ -name: Release SUSE AI Operator [Container and Helm Chart] - -on: - push: - branches: - - main - paths: - - 'charts/suse-ai-operator/**' - - 'suse-ai-operator/**' - - '.github/workflows/release-operator.yml' - tags: - - suse-ai-operator-* - -env: - CONTAINER_REGISTRY: ghcr.io/suse/suse-ai-operator - CHART_PATH: charts/suse-ai-operator - CHART_REGISTRY: oci://ghcr.io/suse/chart - VERSION_PATH: suse-ai-operator/VERSION -jobs: - container: - outputs: - VERSION: ${{ steps.tags.outputs.VERSION }} - CHART_VERSION: ${{ steps.tags.outputs.CHART_VERSION }} - PUBLISH: ${{ steps.tags.outputs.PUBLISH }} - METADATA_TAGS: ${{ steps.tags.outputs.METADATA_TAGS }} - NOTES_START_TAG: ${{ steps.tags.outputs.NOTES_START_TAG }} - permissions: - contents: read - packages: write - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - - - name: Calculate tags - id: tags - shell: bash - run: | - ref=${{ github.ref }} - case "$ref" in - refs/heads/main) - BASE_VERSION=$(cat $VERSION_PATH) - - git fetch --tags - - LAST_DEV=$(git tag \ - --list "suse-ai-operator-${BASE_VERSION}-dev.*" \ - --sort=-v:refname \ - | head -n 1) - - if [[ -z "$LAST_DEV" ]]; then - DEV_NUM=1 - NOTES_START_TAG=$(git tag --list "suse-ai-operator-*" --sort=-v:refname | grep -v "\-dev" | head -n 1) - else - DEV_NUM="${LAST_DEV##*.}" - DEV_NUM=$((DEV_NUM + 1)) - NOTES_START_TAG="$LAST_DEV" - fi - - VERSION="${BASE_VERSION}-dev.${DEV_NUM}" - IMAGE_TAGS="$VERSION" - CHART_VERSION="$VERSION" - - { - echo "METADATA_TAGS<> "$GITHUB_OUTPUT" - - PUBLISH=true - ;; - refs/tags/suse-ai-operator-*) - VERSION="${ref#refs/tags/suse-ai-operator-}" - IMAGE_TAGS="$VERSION" - CHART_VERSION="$VERSION" - NOTES_START_TAG="" - - { - echo "METADATA_TAGS<> "$GITHUB_OUTPUT" - - PUBLISH=true - ;; - *) - VERSION="${{ github.sha }}" - IMAGE_TAGS="$VERSION" - CHART_VERSION="$VERSION" - NOTES_START_TAG="" - - { - echo "METADATA_TAGS<> "$GITHUB_OUTPUT" - - PUBLISH=false - ;; - esac - - echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" - echo "IMAGE_TAGS=$IMAGE_TAGS" >> "$GITHUB_OUTPUT" - echo "PUBLISH=$PUBLISH" >> "$GITHUB_OUTPUT" - echo "CHART_VERSION=$CHART_VERSION" >> "$GITHUB_OUTPUT" - echo "NOTES_START_TAG=$NOTES_START_TAG" >> "$GITHUB_OUTPUT" - - - name: Login to GHCR - if: steps.tags.outputs.PUBLISH == 'true' - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up QEMU - if: steps.tags.outputs.PUBLISH == 'true' - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3 - - - name: Setup Docker Buildx - if: steps.tags.outputs.PUBLISH == 'true' - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 - - - name: Get Docker Metadata - id: meta - if: steps.tags.outputs.PUBLISH == 'true' - uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5 - with: - images: ${{ env.CONTAINER_REGISTRY }} - tags: | - ${{ steps.tags.outputs.METADATA_TAGS }} - - - name: Build Docker Container - id: push - if: steps.tags.outputs.PUBLISH == 'true' - uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 - with: - context: ./suse-ai-operator - labels: ${{ steps.meta.outputs.labels }} - tags: ${{ steps.meta.outputs.tags }} - push: true - platforms: linux/arm64,linux/amd64 - - helm: - needs: container - if: needs.container.outputs.PUBLISH == 'true' - permissions: - contents: write - packages: write - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: - fetch-depth: 0 - - - name: Login to GHCR - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Update Chart.yaml - run: | - yq -i '.version = "${{ needs.container.outputs.CHART_VERSION }}"' $CHART_PATH/Chart.yaml - yq -i '.appVersion = "${{ needs.container.outputs.VERSION }}"' $CHART_PATH/Chart.yaml - - - name: Update image annotations - run: | - yq -i ' - .annotations."helm.sh/images" = - "- image: ghcr.io/suse/suse-ai-operator:${{ needs.container.outputs.VERSION }}\n name: suse-ai-operator" - ' $CHART_PATH/Chart.yaml - - - name: Package Helm Chart - id: package - run: | - chart_package=$(helm package $CHART_PATH --destination . | awk '{print $NF}') - echo "chart_package=$chart_package" >> $GITHUB_OUTPUT - - - name: Publish Helm Chart - run: | - helm push ${{ steps.package.outputs.chart_package }} \ - $CHART_REGISTRY - - - name: Create dev git tag - if: needs.container.outputs.PUBLISH == 'true' && github.ref == 'refs/heads/main' - run: | - git config user.name "github-actions" - git config user.email "github-actions@github.com" - - TAG="suse-ai-operator-${{ needs.container.outputs.VERSION }}" - git checkout -b release/${TAG} - - git add $CHART_PATH/Chart.yaml - git commit -m "chore(release): ${TAG}" - - git tag "$TAG" - git push origin "$TAG" - - - name: Create pre-release and release notes for dev - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - START_TAG: ${{ needs.container.outputs.NOTES_START_TAG }} - if: needs.container.outputs.PUBLISH == 'true' && github.ref == 'refs/heads/main' - run: | - TAG="suse-ai-operator-${{ needs.container.outputs.VERSION }}" - - NOTES_ARG="" - if [[ -n "$START_TAG" ]]; then - NOTES_ARG="--notes-start-tag $START_TAG" - fi - - gh release create "${TAG}" \ - --title "${TAG}" \ - --prerelease --fail-on-no-commits \ - --generate-notes $NOTES_ARG diff --git a/README.md b/README.md index f5e96a7..8ed5cab 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ aif-ui- → ghcr.io/suse/aif-ui: In the examples below, `` refers to a published extension release (e.g. `0.2.0`). Available catalog image versions are published in GitHub Container Registry: -https://github.com/SUSE/aif-ui/pkgs/container/aif-ui +https://github.com/SUSE/suse-ai-lifecycle-manager/pkgs/container/aif-ui ### Container Structure ``` diff --git a/charts/aif-ui/Chart.yaml b/charts/aif-ui/Chart.yaml index e2b4599..0db8e80 100644 --- a/charts/aif-ui/Chart.yaml +++ b/charts/aif-ui/Chart.yaml @@ -11,11 +11,11 @@ keywords: - rancher - extension - ai -home: https://github.com/SUSE/aif-ui +home: https://github.com/SUSE/suse-ai-lifecycle-manager icon: https://github.com/SUSE/suse-ai-lifecycle-manager/blob/ai-factory/pkg/aif-ui/assets/logo.svg sources: - - https://github.com/SUSE/aif-ui -appVersion: 1.1.0 + - https://github.com/SUSE/suse-ai-lifecycle-manager +appVersion: 0.1.0 maintainers: - url: https://www.suse.com/ name: SUSE LLC diff --git a/charts/aif-ui/README.md b/charts/aif-ui/README.md index 638b95a..6963ffc 100644 --- a/charts/aif-ui/README.md +++ b/charts/aif-ui/README.md @@ -29,9 +29,11 @@ The chart creates a Deployment and Service that serve the built extension assets | `podLabels` | object | `{}` | Additional pod labels | | `podSecurityContext` | object | See `values.yaml` | Pod-level security context | | `containerSecurityContext` | object | See `values.yaml` | Container-level security context | -| `resources` | object | `{}` | Container resource requests/limits | +| `resources` | object | See `values.yaml` | Container resource requests/limits | | `probes.liveness.enabled` | bool | `true` | Enable liveness probe | +| `probes.liveness.initialDelaySeconds` | int | `10` | Liveness probe initial delay | | `probes.readiness.enabled` | bool | `true` | Enable readiness probe | +| `probes.readiness.initialDelaySeconds` | int | `5` | Readiness probe initial delay | | `nodeSelector` | object | `{}` | Node selector | | `tolerations` | list | `[]` | Tolerations | | `affinity` | object | `{}` | Affinity rules | diff --git a/charts/aif-ui/values.schema.json b/charts/aif-ui/values.schema.json index 3a8a638..0d3c793 100644 --- a/charts/aif-ui/values.schema.json +++ b/charts/aif-ui/values.schema.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", + "additionalProperties": false, "properties": { "replicaCount": { "type": "integer", @@ -16,6 +17,18 @@ }, "imagePullSecrets": { "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "properties": { + "name": { "type": "string" } + }, + "required": ["name"] + } + ] + }, "default": [] } } @@ -45,6 +58,18 @@ }, "imagePullSecrets": { "type": "array", + "items": { + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "properties": { + "name": { "type": "string" } + }, + "required": ["name"] + } + ] + }, "default": [] }, "nameOverride": { @@ -113,7 +138,10 @@ "type": "object" }, "tolerations": { - "type": "array" + "type": "array", + "items": { + "type": "object" + } }, "affinity": { "type": "object" diff --git a/charts/aif-ui/values.yaml b/charts/aif-ui/values.yaml index 6125fc8..37fec76 100644 --- a/charts/aif-ui/values.yaml +++ b/charts/aif-ui/values.yaml @@ -35,7 +35,13 @@ containerSecurityContext: capabilities: drop: ["ALL"] -resources: {} +resources: + limits: + cpu: 250m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi probes: liveness: @@ -43,12 +49,14 @@ probes: httpGet: path: / port: http + initialDelaySeconds: 10 periodSeconds: 10 readiness: enabled: true httpGet: path: / port: http + initialDelaySeconds: 5 periodSeconds: 10 nodeSelector: {} diff --git a/pkg/aif-ui/utils/constants.ts b/pkg/aif-ui/utils/constants.ts index fb0e9aa..d42b770 100644 --- a/pkg/aif-ui/utils/constants.ts +++ b/pkg/aif-ui/utils/constants.ts @@ -343,8 +343,8 @@ export const STORAGE_KEYS = { // These constants build the Rancher proxy URL used by operator-api.ts. // OPERATOR_NAMESPACE must match the Helm release namespace (default: suse-ai-operator). export const MANAGEMENT_CLUSTER = 'local'; -export const OPERATOR_NAMESPACE = 'suse-ai-operator'; -export const OPERATOR_SERVICE = 'suse-ai-operator'; +export const OPERATOR_NAMESPACE = 'aif-operator'; +export const OPERATOR_SERVICE = 'aif-operator'; export const OPERATOR_PORT = 8080; // === Type Exports (for TypeScript) === From b49d02149b676e85a2a169284eeb0914b41db259 Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Fri, 5 Jun 2026 12:01:42 -0300 Subject: [PATCH 10/11] fix: truncate chart label, extract pod labels helper, add resources schema - Truncate helm.sh/chart label to 63 chars per Kubernetes limit - Extract aif-ui.podLabels helper to avoid hardcoded catalog label in deployment template - Add structural limits/requests schema for resources in values.schema.json --- charts/aif-ui/templates/_helpers.tpl | 7 ++++++- charts/aif-ui/templates/deployment.yaml | 3 +-- charts/aif-ui/values.schema.json | 18 +++++++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/charts/aif-ui/templates/_helpers.tpl b/charts/aif-ui/templates/_helpers.tpl index ba6c420..b426263 100644 --- a/charts/aif-ui/templates/_helpers.tpl +++ b/charts/aif-ui/templates/_helpers.tpl @@ -21,7 +21,7 @@ app.kubernetes.io/name: {{ include "aif-ui.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} -helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }} +helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} {{- define "aif-ui.selectorLabels" -}} @@ -29,6 +29,11 @@ app.kubernetes.io/name: {{ include "aif-ui.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} +{{- define "aif-ui.podLabels" -}} +{{ include "aif-ui.selectorLabels" . }} +catalog.cattle.io/ui-extensions-catalog-image: {{ .Chart.Name }} +{{- end }} + {{- define "aif-ui.image" -}} {{- $registry := coalesce .Values.global.imageRegistry .Values.image.registry -}} {{- $tag := .Values.image.tag | default .Chart.AppVersion -}} diff --git a/charts/aif-ui/templates/deployment.yaml b/charts/aif-ui/templates/deployment.yaml index 30b3f49..4ebba42 100644 --- a/charts/aif-ui/templates/deployment.yaml +++ b/charts/aif-ui/templates/deployment.yaml @@ -18,8 +18,7 @@ spec: template: metadata: labels: - {{- include "aif-ui.selectorLabels" . | nindent 8 }} - catalog.cattle.io/ui-extensions-catalog-image: {{ .Chart.Name }} + {{- include "aif-ui.podLabels" . | nindent 8 }} {{- with .Values.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/aif-ui/values.schema.json b/charts/aif-ui/values.schema.json index 0d3c793..a65e621 100644 --- a/charts/aif-ui/values.schema.json +++ b/charts/aif-ui/values.schema.json @@ -109,7 +109,23 @@ "type": "object" }, "resources": { - "type": "object" + "type": "object", + "properties": { + "limits": { + "type": "object", + "properties": { + "cpu": { "type": "string" }, + "memory": { "type": "string" } + } + }, + "requests": { + "type": "object", + "properties": { + "cpu": { "type": "string" }, + "memory": { "type": "string" } + } + } + } }, "probes": { "type": "object", From e35fc6db7e14452dbf037ca444a308a0b8c7a76e Mon Sep 17 00:00:00 2001 From: Leonardo Miranda Amaral Date: Fri, 5 Jun 2026 12:03:09 -0300 Subject: [PATCH 11/11] fix: correct README license reference and clone directory name --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8ed5cab..d2127f8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ SUSE AI Lifecycle Manager is a Rancher UI Extension for managing SUSE AI components across Kubernetes clusters. This extension provides a unified interface for installing, managing, and monitoring AI workloads in Rancher-managed clusters. -> **Note:** While this extension is open source (Apache 2.0), it requires an active [SUSE AI](https://www.suse.com/products/ai/) subscription to access the application catalog. +> **Note:** This extension requires an active [SUSE AI](https://www.suse.com/products/ai/) subscription to access the application catalog. ## Development @@ -17,7 +17,7 @@ SUSE AI Lifecycle Manager is a Rancher UI Extension for managing SUSE AI compone 1. **Clone and install dependencies:** ```bash git clone - cd aif-ui + cd suse-ai-lifecycle-manager yarn install ```