Releases: apache/skywalking-graalvm-distro
v0.3.0
0.3.0
Upstream Sync
- Sync SkyWalking submodule to upstream v10.4.0 release tag.
- Add
gen-ai-analyzermodule: GenAI provider/model metrics from virtual-gen-ai.oal. - Add Envoy AI Gateway MAL/LAL rules and config.
- Add TraceQL config properties:
lookback,zipkinTracesListResultTags,skywalkingTracesListResultTags.
GraalVM Native Image Compatibility
- Add
library-server-for-graalvm: replaceDynamicSslContextto useSslProvider.JDKinstead ofSslProvider.OPENSSL, enabling gRPC TLS in native images withoutnetty_tcnative.
Documentation
- Document TLS/SSL limitation: native image lacks
netty_tcnative, recommend service mesh for mTLS.
E2E Tests
- Add SSL e2e test case (gRPC TLS with JDK SSL provider in native image).
- Add mTLS e2e test case (mutual TLS with client certificates).
- Add RabbitMQ, RocketMQ, ActiveMQ, Pulsar, Kafka, Redis, MongoDB, Flink monitoring e2e test cases (OTEL metrics collection).
- Add AWS DynamoDB, S3, EKS, API Gateway e2e test cases (mock sender metrics).
- Add Auth e2e test case (token-based agent-to-OAP authentication).
- Add OTLP Traces e2e test case (OpenTelemetry trace ingestion via Zipkin API).
- Add Virtual MQ e2e test case (Kafka-instrumented virtual MQ layer metrics).
- Add Kafka Exporter e2e test case (trace and log export to Kafka).
- Add Virtual GenAI e2e test case (GenAI provider/model metrics via Spring AI + Java agent).
- Add Envoy AI Gateway e2e test case (ENVOY_AI_GATEWAY layer metrics/logs via OTLP).
- Add TraceQL SkyWalking e2e test case (Tempo API with SkyWalking native trace datasource).
- Add Envoy AI Gateway MAL comparison tests (34 tests for gateway-service and gateway-instance rules).
- Add Self-Observability e2e test case (OAP Prometheus telemetry via OTEL collector).
- Add MQE e2e test case (Metrics Query Engine expression evaluation with baseline).
v0.2.1
Changes
0.2.1
Build
- Fix
version.propertiesgeneration for source tarball builds: move antruncopy-version-propertiesto a Maven profile that only activates when.gitexists, so pre-generatedversion.propertiesfromrelease.shis used in source tarball builds.
Release Tooling
- Rewrite
release/pre-release.shto create a release branch (release/v<version>) instead of committing directly to main. - Add
changes/changes.mdverification torelease/pre-release.sh(requires release notes section before proceeding).
v0.2.0
Changes
0.2.0
Highlights
Upgrade to the latest Apache SkyWalking OAP server, with documentation restructure and CI/CD improvements.
Upstream Sync
- Sync SkyWalking submodule to upstream commit
64a1795d8a.
Documentation
- Add user-facing docs: Quick Start, Supported Features, FAQ.
- Move internal build-time docs to
docs/internals/. - Update
docs/README.mdwith "For Users" / "For Contributors" sections and official doc site link. - Add Docker Hub README (
docker/DOCKERHUB_README.md). - Add release guide (
docs/release-guide.md). - Update root
README.mdwith project intro, quick start, and image registry table. - Add "Building from Apache Source Tarball" section to
docs/compiling.md.
CI/CD
- Push Docker images to Docker Hub (release only) in addition to GHCR.
- Docker Hub only receives
latestand version tags — no commit SHA tags. - Add
.asf.yamlbranch protection. - PR-only
cancel-in-progressto avoid cancelling release builds.
Release Tooling
release/release.sh: auto-create SVNgraalvm-distrodirectory if it doesn't exist.release/release.sh: fix SHA-512 checksum files to contain only hash + filename (no local paths).release/release.sh: re-upload darwin SHA-512 to GitHub Release after GPG signing.release/release.sh: link vote email tocompiling.mdinstead ofquick-start.md.release/full-release.sh: end-to-end release script.- Generate vote email template with GPG signer info and submodule commit IDs.
New Module
- Add TraceQL module (Tempo-compatible trace query API) with Zipkin and SkyWalking datasource support.
Build
- Fix source tarball build: set
failonerror=falsefor version generation;release.shpre-generatesversion.propertiesin the source tarball.
Testing
- Replacement class staleness detector: add auto-discovery coverage check for untracked same-FQCN replacements in
oap-libs-for-graalvm/.
E2E Tests
- Add PromQL e2e test case (Prometheus-compatible query API).
- Add LogQL e2e test case (Loki-compatible log query API).
- Add TraceQL e2e test case (Tempo-compatible trace query API with Zipkin datasource).
- Update BanyanDB to
e1ba421(fixes ZipkinminDurationtrace query). - Bump Istio to 1.28.0.
- Add Baseline e2e test case.
Build
- Fix Armeria handler scan to detect inherited
@Get/@Pathannotations (precompiler).
Benchmark
- Local boot test: cold/warm startup time and idle memory comparison (JVM vs GraalVM).
- Kubernetes resource usage test: CPU and memory under sustained ~12 RPS traffic on Kind + Istio + Bookinfo.
- CPM validation: verify entry service call rate matches expected traffic.
CI/CD
- Unified CI/release workflow: push to main, tag push, PR, and manual
workflow_dispatchwith optional commit SHA and version. - Dual Docker registry: push to both GHCR and Docker Hub (Docker Hub on release only).
- Multi-arch Docker manifest:
linux/amd64andlinux/arm64via push-by-digest andimagetools create. - GitHub Release page: auto-upload tarballs with SHA-512 checksums and changelog from
changes/. - 12 E2E test cases on CI (non-release builds).
v0.1.1
Changes
0.1.0
Highlights
Apache SkyWalking GraalVM Distro is a GraalVM native image distribution of the Apache SkyWalking OAP server.
It compiles the full-featured OAP server into a single native binary (~200MB), delivering instant startup
and reduced memory footprint compared to the standard JVM distribution.
This is the initial release, built on top of Apache SkyWalking OAP server.
Build-Time Compilation
- Build-time OAL engine: pre-compile ~1285 metrics/builder/dispatcher classes via Javassist at Maven compile time.
- Build-time MAL compiler: pre-compile ~1250 MAL expressions from 71 YAML rule files into
MalExpressionclasses. - Build-time LAL compiler: pre-compile ~10 LAL scripts from 8 YAML files into
LalExpressionclasses. - Build-time Hierarchy compiler: pre-compile ~4 hierarchy matching rules into
BiFunctionclasses. - Build-time MeterSystem: pre-generate ~1188 meter function subclasses via Javassist.
- Auto-generate
reflect-config.jsonby scanning HTTP handlers, GraphQL resolvers/types, config POJOs, and DSL manifests.
GraalVM Native Image Compatibility
- Replace Groovy runtime with pure Java: MAL DSL, LAL DSL, and Hierarchy rules all use ANTLR4 + Javassist v2 engines.
- Replace Guava
ClassPath.from()classpath scanning with build-time manifests for annotations, dispatchers, and source receivers. - Replace
Field.setAccessible()reflection in config loading with Lombok@Setter-based property copying. - Replace
ServiceLoaderSPI discovery with direct provider wiring inModuleDefine. - Lazy
HttpClientinitialization inHttpAlarmCallback(static final field breaks native image). - Direct JDK 25 virtual thread API calls instead of reflection in
VirtualThreads.
Same-FQCN Replacement Classes
OALEngineLoaderService— load OAL classes from manifests.AnnotationScan— read annotation manifests instead of classpath scan.SourceReceiverImpl— read dispatcher manifests instead of classpath scan.MeterSystem— load pre-generated MeterFunction classes from manifest.CoreModuleConfig— added@Setterat class level.HierarchyDefinitionService/HierarchyService— Java-backed closures instead of GroovyShell.HttpAlarmCallback— lazy HttpClient initialization.- MAL
DSL/FilterExpression— load pre-compiled expressions from per-file manifests. - LAL
DSL— load pre-compiled expressions from manifest. ModuleDefine— direct provider wiring without ServiceLoader.VirtualThreads— direct JDK 25 API calls.YamlConfigLoaderUtils— Lombok setters instead of reflection.- Config-only
@Setteradditions:AnalyzerModuleConfig,LogAnalyzerModuleConfig,EnvoyMetricReceiverConfig,OtelMetricReceiverConfig,EBPFReceiverModuleConfig,AWSFirehoseReceiverModuleConfig,CiliumFetcherConfig,StatusQueryConfig,HealthCheckerConfig. - Config loaders:
Rules,LALConfigs,MeterConfigs— load from JSON manifests instead of filesystem YAML.
Distribution and Packaging
- JVM distribution: repackaged OAP server with all replacement classes via
maven-shade-plugin. - Native distribution: single binary (~200MB) with config files, LICENSE, NOTICE, and third-party licenses.
- Docker image:
ghcr.io/apache/skywalking-graalvm-distrobased ondebian:bookworm-slim. - Multi-arch Docker images:
linux/amd64andlinux/arm64. - macOS native binary: build locally via
make native-imageon macOS.
Testing
- 73 MAL comparison tests: dual-path verification (fresh v2 compilation vs pre-compiled classes).
- LAL pre-compilation tests: verify all 8 LAL YAML files load from manifest.
- Hierarchy comparison tests: verify pre-compiled rules match fresh compilation.
- Replacement class staleness detector: SHA-256 tracking of upstream source files.
- YAML staleness detector: SHA-256 tracking of ~49 YAML rule files.
E2E Tests
- Baseline test: BanyanDB storage with alarm webhook verification.
- Simple Java agent test: trace collection with native OAP.
- Istio ALS test: Envoy access log service integration.
- Event, menu, alarm, log, meter, trace-profiling, telegraf, zabbix, and zipkin test cases.
Release Tooling
release/pre-release.sh: bump Maven version from SNAPSHOT to release, tag, and bump to next SNAPSHOT.release/release.sh: create source tarball, build macOS native binary locally, download Linux binaries from GitHub Release, GPG sign all artifacts.
Benchmark
- Local boot test: cold/warm startup time and idle memory comparison (JVM vs GraalVM).
- Kubernetes resource usage test: CPU and memory under sustained ~12 RPS traffic on Kind + Istio + Bookinfo.
- CPM validation: verify entry service call rate matches expected traffic.
CI/CD
- Unified CI/release workflow: push to main, tag push, PR, and manual
workflow_dispatchwith optional commit SHA and version. - Dual Docker registry: push to both GHCR and Docker Hub (Docker Hub on release only).
- Multi-arch Docker manifest:
linux/amd64andlinux/arm64via push-by-digest andimagetools create. - GitHub Release page: auto-upload tarballs with SHA-512 checksums and changelog from
changes/. - 12 E2E test cases on CI (non-release builds).
v0.1.0
Changes
0.1.0
Highlights
Apache SkyWalking GraalVM Distro is a GraalVM native image distribution of the Apache SkyWalking OAP server.
It compiles the full-featured OAP server into a single native binary (~200MB), delivering instant startup
and reduced memory footprint compared to the standard JVM distribution.
This is the initial release, built on top of Apache SkyWalking OAP server.
Build-Time Compilation
- Build-time OAL engine: pre-compile ~1285 metrics/builder/dispatcher classes via Javassist at Maven compile time.
- Build-time MAL compiler: pre-compile ~1250 MAL expressions from 71 YAML rule files into
MalExpressionclasses. - Build-time LAL compiler: pre-compile ~10 LAL scripts from 8 YAML files into
LalExpressionclasses. - Build-time Hierarchy compiler: pre-compile ~4 hierarchy matching rules into
BiFunctionclasses. - Build-time MeterSystem: pre-generate ~1188 meter function subclasses via Javassist.
- Auto-generate
reflect-config.jsonby scanning HTTP handlers, GraphQL resolvers/types, config POJOs, and DSL manifests.
GraalVM Native Image Compatibility
- Replace Groovy runtime with pure Java: MAL DSL, LAL DSL, and Hierarchy rules all use ANTLR4 + Javassist v2 engines.
- Replace Guava
ClassPath.from()classpath scanning with build-time manifests for annotations, dispatchers, and source receivers. - Replace
Field.setAccessible()reflection in config loading with Lombok@Setter-based property copying. - Replace
ServiceLoaderSPI discovery with direct provider wiring inModuleDefine. - Lazy
HttpClientinitialization inHttpAlarmCallback(static final field breaks native image). - Direct JDK 25 virtual thread API calls instead of reflection in
VirtualThreads.
Same-FQCN Replacement Classes
OALEngineLoaderService— load OAL classes from manifests.AnnotationScan— read annotation manifests instead of classpath scan.SourceReceiverImpl— read dispatcher manifests instead of classpath scan.MeterSystem— load pre-generated MeterFunction classes from manifest.CoreModuleConfig— added@Setterat class level.HierarchyDefinitionService/HierarchyService— Java-backed closures instead of GroovyShell.HttpAlarmCallback— lazy HttpClient initialization.- MAL
DSL/FilterExpression— load pre-compiled expressions from per-file manifests. - LAL
DSL— load pre-compiled expressions from manifest. ModuleDefine— direct provider wiring without ServiceLoader.VirtualThreads— direct JDK 25 API calls.YamlConfigLoaderUtils— Lombok setters instead of reflection.- Config-only
@Setteradditions:AnalyzerModuleConfig,LogAnalyzerModuleConfig,EnvoyMetricReceiverConfig,OtelMetricReceiverConfig,EBPFReceiverModuleConfig,AWSFirehoseReceiverModuleConfig,CiliumFetcherConfig,StatusQueryConfig,HealthCheckerConfig. - Config loaders:
Rules,LALConfigs,MeterConfigs— load from JSON manifests instead of filesystem YAML.
Distribution and Packaging
- JVM distribution: repackaged OAP server with all replacement classes via
maven-shade-plugin. - Native distribution: single binary (~200MB) with config files, LICENSE, NOTICE, and third-party licenses.
- Docker image:
ghcr.io/apache/skywalking-graalvm-distrobased ondebian:bookworm-slim. - Multi-arch Docker images:
linux/amd64andlinux/arm64. - macOS native binary: build locally via
make native-imageon macOS.
Testing
- 73 MAL comparison tests: dual-path verification (fresh v2 compilation vs pre-compiled classes).
- LAL pre-compilation tests: verify all 8 LAL YAML files load from manifest.
- Hierarchy comparison tests: verify pre-compiled rules match fresh compilation.
- Replacement class staleness detector: SHA-256 tracking of upstream source files.
- YAML staleness detector: SHA-256 tracking of ~49 YAML rule files.
E2E Tests
- Baseline test: BanyanDB storage with alarm webhook verification.
- Simple Java agent test: trace collection with native OAP.
- Istio ALS test: Envoy access log service integration.
- Event, menu, alarm, log, meter, trace-profiling, telegraf, zabbix, and zipkin test cases.
Release Tooling
release/pre-release.sh: bump Maven version from SNAPSHOT to release, tag, and bump to next SNAPSHOT.release/release.sh: create source tarball, build macOS native binary locally, download Linux binaries from GitHub Release, GPG sign all artifacts.
Benchmark
- Local boot test: cold/warm startup time and idle memory comparison (JVM vs GraalVM).
- Kubernetes resource usage test: CPU and memory under sustained ~12 RPS traffic on Kind + Istio + Bookinfo.
- CPM validation: verify entry service call rate matches expected traffic.
CI/CD
- Unified CI/release workflow: push to main, tag push, PR, and manual
workflow_dispatchwith optional commit SHA and version. - Dual Docker registry: push to both GHCR and Docker Hub (Docker Hub on release only).
- Multi-arch Docker manifest:
linux/amd64andlinux/arm64via push-by-digest andimagetools create. - GitHub Release page: auto-upload tarballs with SHA-512 checksums and changelog from
changes/. - 12 E2E test cases on CI (non-release builds).
v0.1.0-rc1
Changes
0.1.0
Highlights
Apache SkyWalking GraalVM Distro is a GraalVM native image distribution of the Apache SkyWalking OAP server.
It compiles the full-featured OAP server into a single native binary (~200MB), delivering instant startup
and reduced memory footprint compared to the standard JVM distribution.
This is the initial release, built on top of Apache SkyWalking OAP server.
Build-Time Compilation
- Build-time OAL engine: pre-compile ~1285 metrics/builder/dispatcher classes via Javassist at Maven compile time.
- Build-time MAL compiler: pre-compile ~1250 MAL expressions from 71 YAML rule files into
MalExpressionclasses. - Build-time LAL compiler: pre-compile ~10 LAL scripts from 8 YAML files into
LalExpressionclasses. - Build-time Hierarchy compiler: pre-compile ~4 hierarchy matching rules into
BiFunctionclasses. - Build-time MeterSystem: pre-generate ~1188 meter function subclasses via Javassist.
- Auto-generate
reflect-config.jsonby scanning HTTP handlers, GraphQL resolvers/types, config POJOs, and DSL manifests.
GraalVM Native Image Compatibility
- Replace Groovy runtime with pure Java: MAL DSL, LAL DSL, and Hierarchy rules all use ANTLR4 + Javassist v2 engines.
- Replace Guava
ClassPath.from()classpath scanning with build-time manifests for annotations, dispatchers, and source receivers. - Replace
Field.setAccessible()reflection in config loading with Lombok@Setter-based property copying. - Replace
ServiceLoaderSPI discovery with direct provider wiring inModuleDefine. - Lazy
HttpClientinitialization inHttpAlarmCallback(static final field breaks native image). - Direct JDK 25 virtual thread API calls instead of reflection in
VirtualThreads.
Same-FQCN Replacement Classes
OALEngineLoaderService— load OAL classes from manifests.AnnotationScan— read annotation manifests instead of classpath scan.SourceReceiverImpl— read dispatcher manifests instead of classpath scan.MeterSystem— load pre-generated MeterFunction classes from manifest.CoreModuleConfig— added@Setterat class level.HierarchyDefinitionService/HierarchyService— Java-backed closures instead of GroovyShell.HttpAlarmCallback— lazy HttpClient initialization.- MAL
DSL/FilterExpression— load pre-compiled expressions from per-file manifests. - LAL
DSL— load pre-compiled expressions from manifest. ModuleDefine— direct provider wiring without ServiceLoader.VirtualThreads— direct JDK 25 API calls.YamlConfigLoaderUtils— Lombok setters instead of reflection.- Config-only
@Setteradditions:AnalyzerModuleConfig,LogAnalyzerModuleConfig,EnvoyMetricReceiverConfig,OtelMetricReceiverConfig,EBPFReceiverModuleConfig,AWSFirehoseReceiverModuleConfig,CiliumFetcherConfig,StatusQueryConfig,HealthCheckerConfig. - Config loaders:
Rules,LALConfigs,MeterConfigs— load from JSON manifests instead of filesystem YAML.
Distribution and Packaging
- JVM distribution: repackaged OAP server with all replacement classes via
maven-shade-plugin. - Native distribution: single binary (~200MB) with config files, LICENSE, NOTICE, and third-party licenses.
- Docker image:
ghcr.io/apache/skywalking-graalvm-distrobased ondebian:bookworm-slim. - Multi-arch Docker images:
linux/amd64andlinux/arm64. - macOS native binary: build locally via
make native-imageon macOS.
Testing
- 73 MAL comparison tests: dual-path verification (fresh v2 compilation vs pre-compiled classes).
- LAL pre-compilation tests: verify all 8 LAL YAML files load from manifest.
- Hierarchy comparison tests: verify pre-compiled rules match fresh compilation.
- Replacement class staleness detector: SHA-256 tracking of upstream source files.
- YAML staleness detector: SHA-256 tracking of ~49 YAML rule files.
E2E Tests
- Baseline test: BanyanDB storage with alarm webhook verification.
- Simple Java agent test: trace collection with native OAP.
- Istio ALS test: Envoy access log service integration.
- Event, menu, alarm, log, meter, trace-profiling, telegraf, zabbix, and zipkin test cases.
CI/CD
- GitHub Actions CI: build, test, license check, and E2E tests.
- Release workflow: manual trigger with commit SHA, multi-arch Linux + macOS builds, Docker manifest with version and commit tags, GitHub Release page with checksums.