This is an automated email from the ASF dual-hosted git repository.

wankai123 pushed a commit to branch support-HorizonUI
in repository https://gitbox.apache.org/repos/asf/skywalking-showcase.git

commit 91ff581494322c032073f90859b39f5b3b35d6bc
Author: wankai123 <[email protected]>
AuthorDate: Wed May 20 11:36:16 2026 +0800

    Support Horizon UI
---
 .github/workflows/publish-images.yaml              |   4 +
 Makefile.in                                        |  10 +-
 deploy/platform/kubernetes/Chart.yaml              |   4 +-
 deploy/platform/kubernetes/Makefile                |   1 -
 deploy/platform/kubernetes/templates/NOTES.txt     |   4 +-
 .../templates/swck-eventexporter-extras.yaml       | 193 +++++++++++++++++++++
 deploy/platform/kubernetes/values.yaml             |  20 ++-
 services/load-gen/Makefile                         |   9 +-
 8 files changed, 226 insertions(+), 19 deletions(-)

diff --git a/.github/workflows/publish-images.yaml 
b/.github/workflows/publish-images.yaml
index 4acbc0a..d55258c 100644
--- a/.github/workflows/publish-images.yaml
+++ b/.github/workflows/publish-images.yaml
@@ -36,6 +36,10 @@ jobs:
       - uses: actions/checkout@v2
         with:
           submodules: true
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v3
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v3
       - name: Log in to the Container registry
         uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9
         with:
diff --git a/Makefile.in b/Makefile.in
index fd48b54..1dcc0c2 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -33,10 +33,10 @@ ES_IMAGE ?= 
docker.elastic.co/elasticsearch/elasticsearch-oss
 ES_IMAGE_TAG ?= 7.10.2
 
 SW_OAP_IMAGE ?= ghcr.io/apache/skywalking/oap
-SW_OAP_IMAGE_TAG ?= dc77df696afb5d97cca79ec123d0e93f7ae84939
+SW_OAP_IMAGE_TAG ?= 5b481a41a99861249410118e4cfbf591c4508dae
 
-SW_UI_IMAGE ?= ghcr.io/apache/skywalking/ui
-SW_UI_IMAGE_TAG ?= dc77df696afb5d97cca79ec123d0e93f7ae84939
+SW_UI_IMAGE ?= ghcr.io/apache/skywalking-horizon-ui
+SW_UI_IMAGE_TAG ?= 97950a600ceaece1d8056c4084d8551c1010d17d
 
 SW_CLI_IMAGE ?= 
ghcr.io/apache/skywalking-cli/skywalking-cli:bce7faaabbd57ed1f40156af8a8eb6c3eccea4ae
 SW_EVENT_EXPORTER_IMAGE ?= 
ghcr.io/apache/skywalking-kubernetes-event-exporter/skywalking-kubernetes-event-exporter:8a012a3f968cb139f817189afb9b3748841bba22
@@ -51,8 +51,8 @@ SW_SATELLITE_IMAGE_TAG ?= 
v8778e3e8a4ab4962102502ffc9ba7a3c73270609
 
 SW_ROVER_IMAGE ?= 
ghcr.io/apache/skywalking-rover/skywalking-rover:67622c352b98fd32782a3e7afc7d3fbd6d6ec8e3
 
-SWCK_OPERATOR_IMAGE ?= docker.io/apache/skywalking-swck
-SWCK_OPERATOR_IMAGE_TAG ?= v0.9.0
+SWCK_OPERATOR_IMAGE ?= ghcr.io/apache/skywalking-swck/operator
+SWCK_OPERATOR_IMAGE_TAG ?= d299bc05ee230f5f366584054db5b099ca60166f
 
 SW_GRAFANA_PLUGIN_VERSION ?= 0.1.0
 GRAFANA_IMAGE ?= grafana/grafana:12.4.2
diff --git a/deploy/platform/kubernetes/Chart.yaml 
b/deploy/platform/kubernetes/Chart.yaml
index 614080e..9b66083 100644
--- a/deploy/platform/kubernetes/Chart.yaml
+++ b/deploy/platform/kubernetes/Chart.yaml
@@ -24,13 +24,13 @@ sources:
 dependencies:
   - name: skywalking-helm
     alias: skywalking
-    version: 0.0.0-bacca5ae7da89f41ce31f4b446ce1309b4ccc985
+    version: 0.0.0-da0e267f877b9b8e5f7728ae4ea7dc7723a2a073
     repository: oci://ghcr.io/apache/skywalking-helm
 
     # @feature: java-agent-injector; the java agent injector is a component of 
the swck operator, so we need to deploy the swck operator firstly
   - name: skywalking-helm-swck-operator
     alias: swck
-    version: 0.0.0-158f116af32e8824ec897c0c6d3022136e7481bb
+    version: 0.0.0-da0e267f877b9b8e5f7728ae4ea7dc7723a2a073
     repository: oci://ghcr.io/apache/skywalking-helm
     condition: features.javaAgentInjector.enabled
 
diff --git a/deploy/platform/kubernetes/Makefile 
b/deploy/platform/kubernetes/Makefile
index 18238e4..8772b63 100644
--- a/deploy/platform/kubernetes/Makefile
+++ b/deploy/platform/kubernetes/Makefile
@@ -44,7 +44,6 @@ HELM_OPTIONS := $(HELM_OPTIONS) --set-json 
'skywalking.banyandb.storage.data.per
 HELM_OPTIONS := $(HELM_OPTIONS) --set-json 
'skywalking.banyandb.storage.data.persistentVolumeClaims[6]={"mountTargets":["stream","measure","property","trace"],"nodeRole":"cold","claimName":"cold-data","size":"500Gi","accessModes":["ReadWriteOnce"]$(PVC_STORAGE_CLASS_FIELD),"volumeMode":"Filesystem"}'
 HELM_OPTIONS := $(HELM_OPTIONS) --set 
skywalking.oap.image.repository=$(SW_OAP_IMAGE) --set 
skywalking.oap.image.tag=$(SW_OAP_IMAGE_TAG)
 HELM_OPTIONS := $(HELM_OPTIONS) --set 
skywalking.ui.image.repository=$(SW_UI_IMAGE) --set 
skywalking.ui.image.tag=$(SW_UI_IMAGE_TAG)
-HELM_OPTIONS := $(HELM_OPTIONS) --set 
skywalking.ui.env.SW_ZIPKIN_ADDRESS=http://$(RELEASE)-oap.$(NAMESPACE).svc:9412
 HELM_OPTIONS := $(HELM_OPTIONS) --set 
skywalking.satellite.image.repository=$(SW_SATELLITE_IMAGE) --set 
skywalking.satellite.image.tag=$(SW_SATELLITE_IMAGE_TAG)
 HELM_OPTIONS := $(HELM_OPTIONS) --set 
swck.image.repository=$(SWCK_OPERATOR_IMAGE) --set 
swck.image.tag=$(SWCK_OPERATOR_IMAGE_TAG)
 HELM_OPTIONS := $(HELM_OPTIONS) --set sampleServices.hub=$(HUB) --set 
sampleServices.tag=$(TAG) --set 
sampleServices.namespace=$(SAMPLE_SERVICES_NAMESPACE)
diff --git a/deploy/platform/kubernetes/templates/NOTES.txt 
b/deploy/platform/kubernetes/templates/NOTES.txt
index 8b35be5..9aadcc8 100644
--- a/deploy/platform/kubernetes/templates/NOTES.txt
+++ b/deploy/platform/kubernetes/templates/NOTES.txt
@@ -40,8 +40,8 @@ Get the UI URL by running these commands:
   export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ 
include "skywalking.ui.fullname" . }} -o 
jsonpath='{.status.loadBalancer.ingress[0].ip}')
   echo http://$SERVICE_IP:{{ .Values.skywalking.ui.service.externalPort }}
 {{- else if contains "ClusterIP" .Values.skywalking.ui.service.type }}
-  echo "Visit http://127.0.0.1:8080 to use your application"
-  kubectl port-forward svc/{{ printf "%s-ui" .Release.Name }} 8080:{{ 
.Values.skywalking.ui.service.externalPort }} --namespace {{ .Release.Namespace 
}}
+  echo "Visit http://127.0.0.1:8081 to use your application"
+  kubectl port-forward svc/{{ printf "%s-ui" .Release.Name }} 8081:{{ 
.Values.skywalking.ui.service.externalPort }} --namespace {{ .Release.Namespace 
}}
 {{- end }}
 
 {{- if .Values.skywalking.elasticsearch.enabled }}
diff --git 
a/deploy/platform/kubernetes/templates/swck-eventexporter-extras.yaml 
b/deploy/platform/kubernetes/templates/swck-eventexporter-extras.yaml
new file mode 100644
index 0000000..043f59d
--- /dev/null
+++ b/deploy/platform/kubernetes/templates/swck-eventexporter-extras.yaml
@@ -0,0 +1,193 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+# Workaround for a gap in apache/skywalking-helm: the chart at the version
+# pinned in Chart.yaml does not ship the EventExporter CRD or RBAC, but the
+# pinned swck-operator image (Makefile.in: SWCK_OPERATOR_IMAGE_TAG) registers
+# an EventExporterReconciler unconditionally. Without these, the operator
+# fails cache sync and crashlooops, which takes its mutating webhook down
+# and blocks pod creation in sample-services.
+#
+# Remove this file once apache/skywalking-helm ships EventExporter natively.
+{{- if .Values.features.javaAgentInjector.enabled }}
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.19.0
+  name: eventexporters.operator.skywalking.apache.org
+spec:
+  group: operator.skywalking.apache.org
+  names:
+    kind: EventExporter
+    listKind: EventExporterList
+    plural: eventexporters
+    singular: eventexporter
+  scope: Namespaced
+  versions:
+  - additionalPrinterColumns:
+    - description: The version
+      jsonPath: .spec.version
+      name: Version
+      priority: 1
+      type: string
+    - jsonPath: .spec.image
+      name: Image
+      priority: 1
+      type: string
+    - description: The number of expected instances
+      jsonPath: .spec.instances
+      name: Instances
+      type: string
+    name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        description: EventExporter is the Schema for the eventexporters API
+        properties:
+          apiVersion:
+            description: |-
+              APIVersion defines the versioned schema of this representation 
of an object.
+              Servers should convert recognized schemas to the latest internal 
value, and
+              may reject unrecognized values.
+              More info: 
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+            type: string
+          kind:
+            description: |-
+              Kind is a string value representing the REST resource this 
object represents.
+              Servers may infer this from the endpoint the client submits 
requests to.
+              Cannot be updated.
+              In CamelCase.
+              More info: 
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: EventExporterSpec defines the desired state of 
EventExporter
+            properties:
+              config:
+                description: Config of filters and exporters
+                type: string
+              image:
+                description: Image is the event exporter Docker image to 
deploy.
+                type: string
+              replicas:
+                description: Replicas is the number of event exporter pods
+                format: int32
+                type: integer
+              version:
+                description: Version of EventExporter.
+                type: string
+            required:
+            - replicas
+            - version
+            type: object
+          status:
+            description: EventExporterStatus defines the observed state of 
EventExporter
+            properties:
+              availableReplicas:
+                description: Total number of available pods targeted by this 
deployment.
+                format: int32
+                type: integer
+              conditions:
+                description: Represents the latest available observations of 
the underlying
+                  deployment's current state.
+                items:
+                  description: DeploymentCondition describes the state of a 
deployment
+                    at a certain point.
+                  properties:
+                    lastTransitionTime:
+                      description: Last time the condition transitioned from 
one status
+                        to another.
+                      format: date-time
+                      type: string
+                    lastUpdateTime:
+                      description: The last time this condition was updated.
+                      format: date-time
+                      type: string
+                    message:
+                      description: A human readable message indicating details 
about
+                        the transition.
+                      type: string
+                    reason:
+                      description: The reason for the condition's last 
transition.
+                      type: string
+                    status:
+                      description: Status of the condition, one of True, 
False, Unknown.
+                      type: string
+                    type:
+                      description: Type of deployment condition.
+                      type: string
+                  required:
+                  - status
+                  - type
+                  type: object
+                type: array
+              configMapName:
+                description: Name of the configMap.
+                type: string
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  name: {{ .Values.swck.fullnameOverride }}-eventexporter-extras
+rules:
+- apiGroups:
+  - operator.skywalking.apache.org
+  resources:
+  - eventexporters
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - operator.skywalking.apache.org
+  resources:
+  - eventexporters/finalizers
+  verbs:
+  - update
+- apiGroups:
+  - operator.skywalking.apache.org
+  resources:
+  - eventexporters/status
+  verbs:
+  - get
+  - patch
+  - update
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: {{ .Values.swck.fullnameOverride }}-eventexporter-extras
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: {{ .Values.swck.fullnameOverride }}-eventexporter-extras
+subjects:
+- kind: ServiceAccount
+  name: {{ .Values.swck.fullnameOverride }}-controller-manager
+  namespace: {{ .Release.Namespace }}
+{{- end }}
\ No newline at end of file
diff --git a/deploy/platform/kubernetes/values.yaml 
b/deploy/platform/kubernetes/values.yaml
index 1ad0e25..b2e5f56 100644
--- a/deploy/platform/kubernetes/values.yaml
+++ b/deploy/platform/kubernetes/values.yaml
@@ -34,9 +34,6 @@ skywalking:
       zipkin-query: 9412
       metrics: 1234
     env:
-      SW_ADMIN_SERVER: default
-      SW_DSL_DEBUGGING: default
-      SW_RECEIVER_RUNTIME_RULE: default
       SW_HEALTH_CHECKER: default
       SW_OTEL_RECEIVER: default # @feature: so11y;,mysql;kubernetes-monitor 
enable OpenTelemetry receiver to receive OpenTelemetry metrics
       # @feature: vm; enable vm rules to analyze VM metrics
@@ -157,8 +154,21 @@ skywalking:
       repository: ~
       tag: ~
       pullPolicy: IfNotPresent
-    env:
-      SW_ZIPKIN_ADDRESS: ""
+    # Minimal default so `make deploy.kubernetes` works for local dev — the
+    # upstream Horizon UI BFF refuses to start without at least one user.
+    # The hosted demo environment overrides this via demo-env-installer's
+    # demo-values.yaml; rotate before exposing outside trusted networks.
+    config:
+      auth:
+        backend: local
+        local:
+          users:
+            - username: admin            # password: admin
+              passwordHash: 
"$argon2id$v=19$m=65536,t=3,p=4$eemqy1r72oSXR58y8VpRqw$Bn/dULrmJTHEi3263KfgWDEwQmUsqNLi3xwyv/DekHM"
+              roles: [admin]
+            - username: skywalking       # password: skywalking
+              passwordHash: 
"$argon2id$v=19$m=65536,t=3,p=4$Zqj8HhQDqm8d5c2MipHYZw$BsaCnu4bdd4uadIldx3wwYLsdo47Thxb7Lv1MXpWG2Q"
+              roles: [ viewer, maintainer ]
   banyandb:
     enabled: false
     image:
diff --git a/services/load-gen/Makefile b/services/load-gen/Makefile
index 03eab0f..0128e8e 100644
--- a/services/load-gen/Makefile
+++ b/services/load-gen/Makefile
@@ -23,12 +23,13 @@ build:
 
 .PHONY: docker docker.build docker.push
 
+# Multi-arch because chromium-base aborts under x86_64 QEMU on ARM hosts (SSE3 
check vs /proc/cpuinfo).
+LOAD_GEN_PLATFORMS ?= linux/amd64,linux/arm64
+
 docker: docker.build
 
 docker.build:
        docker build . -t $(HUB)/load-gen:$(TAG) -t 
$(HUB)/load-gen:$(TAG)-agentless
 
-docker.push: docker.build
-       docker push $(HUB)/load-gen:$(TAG)
-       docker tag $(HUB)/load-gen:$(TAG) $(HUB)/load-gen:$(TAG)-agentless
-       docker push $(HUB)/load-gen:$(TAG)-agentless
+docker.push:
+       docker buildx build --platform $(LOAD_GEN_PLATFORMS) --push . -t 
$(HUB)/load-gen:$(TAG) -t $(HUB)/load-gen:$(TAG)-agentless

Reply via email to