Skip to content
This repository was archived by the owner on Feb 4, 2026. It is now read-only.

Commit 9cec54f

Browse files
authored
Merge pull request #22 from siy/release-0.6.4
Release 0.6.4
2 parents 667e3e5 + 37039bc commit 9cec54f

File tree

61 files changed

+3927
-48
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+3927
-48
lines changed

.github/workflows/ci.yml

Lines changed: 108 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ name: CI
22

33
on:
44
push:
5-
branches: [ main, feature/*, release/* , release-* ]
5+
branches: [ main, feature/*, release/*, release-* ]
66
pull_request:
77
branches: [ main ]
88
workflow_dispatch:
99

1010
jobs:
1111
build-and-test:
1212
runs-on: ubuntu-latest
13-
#runs-on: self-hosted
1413

1514
steps:
1615
- name: Checkout code
@@ -41,4 +40,110 @@ jobs:
4140
path: |
4241
**/target/surefire-reports/*.xml
4342
**/target/failsafe-reports/*.xml
44-
retention-days: 7
43+
retention-days: 7
44+
45+
e2e-tests:
46+
runs-on: ubuntu-latest
47+
needs: build-and-test
48+
if: github.ref == 'refs/heads/main' || contains(github.event.head_commit.message, '[e2e]')
49+
50+
steps:
51+
- name: Checkout code
52+
uses: actions/checkout@v4
53+
54+
- name: Set up Java 25
55+
uses: actions/setup-java@v4
56+
with:
57+
java-version: '25-ea'
58+
distribution: 'zulu'
59+
cache: 'maven'
60+
61+
- name: Configure Maven for GitHub Packages
62+
run: |
63+
mkdir -p ~/.m2
64+
echo "<settings><servers><server><id>github</id><username>\${env.GITHUB_ACTOR}</username><password>\${env.GITHUB_TOKEN}</password></server></servers></settings>" > ~/.m2/settings.xml
65+
66+
- name: Build artifacts
67+
run: mvn --no-transfer-progress --batch-mode package -DskipTests
68+
env:
69+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
70+
71+
- name: Run E2E tests
72+
run: mvn --no-transfer-progress --batch-mode verify -pl e2e-tests -DskipE2ETests=false
73+
env:
74+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
75+
76+
- name: Upload E2E test results
77+
uses: actions/upload-artifact@v4
78+
if: always()
79+
with:
80+
name: e2e-test-results
81+
path: e2e-tests/target/failsafe-reports/*.xml
82+
retention-days: 7
83+
84+
docker-build:
85+
runs-on: ubuntu-latest
86+
needs: build-and-test
87+
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release')
88+
permissions:
89+
contents: read
90+
packages: write
91+
92+
steps:
93+
- name: Checkout code
94+
uses: actions/checkout@v4
95+
96+
- name: Set up Java 25
97+
uses: actions/setup-java@v4
98+
with:
99+
java-version: '25-ea'
100+
distribution: 'zulu'
101+
cache: 'maven'
102+
103+
- name: Configure Maven for GitHub Packages
104+
run: |
105+
mkdir -p ~/.m2
106+
echo "<settings><servers><server><id>github</id><username>\${env.GITHUB_ACTOR}</username><password>\${env.GITHUB_TOKEN}</password></server></servers></settings>" > ~/.m2/settings.xml
107+
108+
- name: Build JARs
109+
run: mvn --no-transfer-progress --batch-mode package -DskipTests
110+
env:
111+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
112+
113+
- name: Set up Docker Buildx
114+
uses: docker/setup-buildx-action@v3
115+
116+
- name: Login to GitHub Container Registry
117+
uses: docker/login-action@v3
118+
with:
119+
registry: ghcr.io
120+
username: ${{ github.actor }}
121+
password: ${{ secrets.GITHUB_TOKEN }}
122+
123+
- name: Extract version
124+
id: version
125+
run: echo "VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT
126+
127+
- name: Build and push Aether Node
128+
uses: docker/build-push-action@v6
129+
with:
130+
context: .
131+
file: docker/aether-node/Dockerfile
132+
push: true
133+
tags: |
134+
ghcr.io/${{ github.repository_owner }}/aether-node:${{ steps.version.outputs.VERSION }}
135+
ghcr.io/${{ github.repository_owner }}/aether-node:latest
136+
cache-from: type=gha
137+
cache-to: type=gha,mode=max
138+
139+
- name: Build and push Aether Forge
140+
uses: docker/build-push-action@v6
141+
with:
142+
context: .
143+
file: docker/aether-forge/Dockerfile
144+
push: true
145+
tags: |
146+
ghcr.io/${{ github.repository_owner }}/aether-forge:${{ steps.version.outputs.VERSION }}
147+
ghcr.io/${{ github.repository_owner }}/aether-forge:latest
148+
cache-from: type=gha
149+
cache-to: type=gha,mode=max

CHANGELOG.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,53 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.6.4] - 2026-01-01
9+
10+
### Added
11+
- **Docker container infrastructure** - Separate Dockerfiles for aether-node and aether-forge with Alpine base
12+
- **docker-compose.yml** - 3-node cluster configuration with health checks and optional Forge profile
13+
- **E2E testing module** - Testcontainers-based E2E tests for cluster formation, deployment, and chaos scenarios
14+
- **AetherNodeContainer** - Testcontainer wrapper with API helpers for E2E tests
15+
- **AetherCluster** - Multi-node cluster helper for managing N-node clusters in tests
16+
- **CI workflow enhancements** - E2E tests job (main or `[e2e]` tag) and Docker build/push to ghcr.io
17+
- **Rolling update system** - Two-stage deployment model (deploy then route) for zero-downtime updates
18+
- `ArtifactBase` - Version-agnostic artifact identifier for rolling updates
19+
- `RollingUpdateState` - State machine with 10 states (PENDING → COMPLETED/ROLLED_BACK/FAILED)
20+
- `VersionRouting` - Ratio-based traffic routing between versions (e.g., 1:3 = 25% new)
21+
- `HealthThresholds` - Configurable error rate and latency thresholds for auto-progression
22+
- `CleanupPolicy` - IMMEDIATE, GRACE_PERIOD (5min), or MANUAL cleanup of old versions
23+
- `RollingUpdateManager` - Interface for start/adjust/approve/complete/rollback operations
24+
- **Weighted endpoint routing** - `EndpointRegistry.selectEndpointWithRouting()` with weighted round-robin
25+
- **Rolling update API endpoints** - REST API for rolling update management
26+
- `POST /rolling-update/start` - Start new rolling update
27+
- `GET /rolling-updates` - List active updates
28+
- `GET /rolling-update/{id}` - Get update status
29+
- `POST /rolling-update/{id}/routing` - Adjust traffic ratio
30+
- `POST /rolling-update/{id}/approve` - Manual approval
31+
- `POST /rolling-update/{id}/complete` - Complete update
32+
- `POST /rolling-update/{id}/rollback` - Rollback to old version
33+
- `GET /rolling-update/{id}/health` - Version health metrics
34+
- **Rolling update CLI commands** - `aether update` command group
35+
- `update start <artifact> <version>` - Start rolling update with health thresholds
36+
- `update status <id>` - Get update status
37+
- `update list` - List active updates
38+
- `update routing <id> -r <ratio>` - Adjust traffic routing
39+
- `update approve/complete/rollback <id>` - Update lifecycle operations
40+
- `update health <id>` - View version health metrics
41+
- **KV schema extensions** - `VersionRoutingKey`, `RollingUpdateKey`, `VersionRoutingValue`, `RollingUpdateValue`
42+
- **Observability metrics** - Micrometer integration with Prometheus endpoint
43+
- `GET /metrics/prometheus` - Prometheus-format metrics scrape endpoint
44+
- `ObservabilityRegistry` - Central registry for metrics with JVM/process metrics
45+
- `AetherMetrics` - Pre-configured metrics for slice invocations, consensus, deployments
46+
- JVM metrics - memory, GC, threads, classloaders via Micrometer binders
47+
48+
### Changed
49+
- **pragmatica-lite 0.9.3** - Updated with consensus observability support
50+
51+
### Fixed
52+
- **RabiaNode protocol message routing** - Added routes for RabiaProtocolMessage types (Propose, Vote, Decision, SyncRequest/Response, NewBatch) to RabiaEngine
53+
- **TestCluster QuorumStateNotification** - Added missing route for QuorumStateNotification to RabiaEngine in test infrastructure
54+
855
## [0.6.3] - 2026-01-01
956

1057
### Added

CLAUDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Project Overview
44

5-
**Pragmatica Aether Distributed Runtime** (v0.6.3) is an AI-driven distributed runtime environment for Java that enables predictive scaling,
5+
**Pragmatica Aether Distributed Runtime** (v0.6.4) is an AI-driven distributed runtime environment for Java that enables predictive scaling,
66
intelligent orchestration, and seamless multi-cloud deployment without requiring changes to business logic.
77

88
**See [docs/vision-and-goals.md](docs/vision-and-goals.md) for complete vision and design principles.**
@@ -95,7 +95,7 @@ Maven-style coordinates for slices:
9595

9696
```java
9797
// Format: groupId:artifactId:version[-qualifier]
98-
Artifact.artifact("org.pragmatica-lite.aether:example-slice:0.6.3")
98+
Artifact.artifact("org.pragmatica-lite.aether:example-slice:0.6.4")
9999
```
100100

101101
**Components**:

cli/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.pragmatica-lite.aether</groupId>
99
<artifactId>aether</artifactId>
10-
<version>0.6.3</version>
10+
<version>0.6.4</version>
1111
</parent>
1212

1313
<artifactId>cli</artifactId>

0 commit comments

Comments
 (0)