Skip to content

Commit 4b23ffe

Browse files
authored
Merge branch 'main' into marko/docs_rewrite
2 parents 8f39e00 + a64c35b commit 4b23ffe

File tree

91 files changed

+5268
-1818
lines changed

Some content is hidden

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

91 files changed

+5268
-1818
lines changed

.github/workflows/docker-tests.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,22 @@ jobs:
4949
env:
5050
EVM_IMAGE_REPO: ghcr.io/${{ github.repository_owner }}/ev-node-evm
5151
EVM_NODE_IMAGE_TAG: ${{ inputs.image-tag }}
52+
53+
test-docker-compat:
54+
name: Docker Compatibility E2E Tests
55+
permissions:
56+
contents: read
57+
runs-on: ubuntu-latest
58+
steps:
59+
- uses: actions/checkout@v6
60+
- name: set up go
61+
uses: actions/setup-go@v6
62+
with:
63+
go-version-file: ./test/docker-e2e/go.mod
64+
- name: Run Docker Compat E2E Tests
65+
run: make test-docker-compat
66+
env:
67+
SEQUENCER_EVM_IMAGE_REPO: ghcr.io/${{ github.repository_owner }}/ev-node-evm
68+
SEQUENCER_EVM_IMAGE_TAG: main # TODO: set this to the last released tag
69+
FULLNODE_EVM_IMAGE_REPO: ghcr.io/${{ github.repository_owner }}/ev-node-evm
70+
FULLNODE_EVM_IMAGE_TAG: ${{ inputs.image-tag }}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Release
1+
name: Apps release
22
on:
33
push:
44
tags:
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
name: Github Release
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
tag:
6+
description: "Release tag (e.g., v1.2.3)"
7+
required: true
8+
type: string
9+
10+
permissions:
11+
contents: write
12+
id-token: write
13+
14+
jobs:
15+
create-draft-release:
16+
name: Create Draft Release
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Validate semver tag
20+
run: |
21+
TAG="${{ github.event.inputs.tag }}"
22+
23+
# Check if tag matches semver pattern (v followed by MAJOR.MINOR.PATCH with optional pre-release and build metadata)
24+
# Supports: v1.2.3, v1.2.3-rc.4, v1.2.3-beta.1, v1.2.3-alpha.1+build.123
25+
if ! echo "$TAG" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$'; then
26+
echo "::error::Invalid tag format: $TAG"
27+
echo "::error::Tag must be in semver format: v<MAJOR>.<MINOR>.<PATCH>[-PRERELEASE][+BUILD]"
28+
echo "::error::Examples: v1.2.3, v1.2.3-rc.4, v1.2.3-beta.1, v1.2.3-alpha.1+build.123"
29+
exit 1
30+
fi
31+
32+
echo "::notice::Tag validation passed: $TAG"
33+
34+
- name: Checkout code
35+
uses: actions/checkout@v6
36+
with:
37+
fetch-depth: 0
38+
39+
- name: Extract version from tag
40+
id: extract-version
41+
run: |
42+
TAG="${{ github.event.inputs.tag }}"
43+
VERSION="${TAG#v}"
44+
echo "tag=$TAG" >> $GITHUB_OUTPUT
45+
echo "version=$VERSION" >> $GITHUB_OUTPUT
46+
echo "::notice::Tag: $TAG"
47+
echo "::notice::Version: $VERSION"
48+
49+
- name: Find previous tag
50+
id: prev-tag
51+
run: |
52+
TAG="${{ steps.extract-version.outputs.tag }}"
53+
PREV_TAG=$(git tag -l "v*.*.*" --sort=-version:refname | grep -v "^${TAG}$" | head -n1)
54+
55+
if [ -z "$PREV_TAG" ]; then
56+
echo "::notice::No previous tag found, using initial commit"
57+
PREV_TAG=$(git rev-list --max-parents=0 HEAD)
58+
fi
59+
60+
echo "prev-tag=$PREV_TAG" >> $GITHUB_OUTPUT
61+
echo "::notice::Previous tag: $PREV_TAG"
62+
63+
- name: Get list of Docker images
64+
id: get-images
65+
run: |
66+
# Find all apps with Dockerfiles
67+
IMAGES=""
68+
for app_dir in apps/*/; do
69+
if [ -f "${app_dir}Dockerfile" ]; then
70+
APP_NAME=$(basename "$app_dir")
71+
IMAGE_NAME="ev-node-${APP_NAME}"
72+
IMAGES="${IMAGES}ghcr.io/${{ github.repository_owner }}/${IMAGE_NAME}:${{ steps.extract-version.outputs.tag }}\n"
73+
fi
74+
done
75+
76+
# Remove trailing newline
77+
IMAGES=$(echo -e "$IMAGES" | sed '/^$/d')
78+
79+
# Escape for GitHub Actions output
80+
IMAGES="${IMAGES//'%'/'%25'}"
81+
IMAGES="${IMAGES//$'\n'/'%0A'}"
82+
IMAGES="${IMAGES//$'\r'/'%0D'}"
83+
84+
echo "images=$IMAGES" >> $GITHUB_OUTPUT
85+
echo "::notice::Found Docker images"
86+
87+
- name: Generate changelog prompt
88+
id: changelog-prompt
89+
run: |
90+
PREV_TAG="${{ steps.prev-tag.outputs.prev-tag }}"
91+
TAG="${{ steps.extract-version.outputs.tag }}"
92+
VERSION="${{ steps.extract-version.outputs.version }}"
93+
94+
cat > claude-prompt.txt << 'EOF_PROMPT'
95+
Read the file CHANGELOG.md and find the section for version $VERSION (tag $TAG).
96+
97+
Generate professional release notes for GitHub based on the changes listed for this specific version.
98+
99+
Create release notes with the following structure:
100+
101+
ev-node VERSION
102+
103+
⚠️ This is a draft release. Please verify its content before publishing
104+
105+
[Brief summary paragraph about this release - what type of release it is (feature/bugfix/maintenance), upgrade recommendations]
106+
107+
**Tested upgrade paths**
108+
- [List version upgrade paths that were tested, or state "TBD - to be tested before publishing"]
109+
110+
## ⚠️ Breaking Changes
111+
112+
[If there are breaking changes, list each one with clear operational steps. If no breaking changes, state "None"]
113+
114+
### [Breaking Change Title]
115+
**What changed:** [Clear description of what was changed/added/removed]
116+
117+
**Action required:**
118+
1. [Step-by-step instructions on what operators need to do]
119+
2. [Include configuration changes, file modifications, etc.]
120+
3. [Provide examples where helpful]
121+
122+
**Reference:** [PR number if available]
123+
124+
---
125+
126+
## Full Changelog
127+
128+
For a complete list of all changes including new features, improvements, and bug fixes, see [CHANGELOG.md](https://github.com/${{ github.repository }}/blob/$TAG/CHANGELOG.md#$VERSION).
129+
130+
**Images**
131+
EOF_PROMPT
132+
133+
# Replace placeholders with actual values
134+
sed -i "s/\$VERSION/${VERSION}/g" claude-prompt.txt
135+
sed -i "s/\$TAG/${TAG}/g" claude-prompt.txt
136+
137+
# Add the images list
138+
echo "${{ steps.get-images.outputs.images }}" | while IFS= read -r image; do
139+
echo "- $image" >> claude-prompt.txt
140+
done
141+
142+
cat >> claude-prompt.txt << 'EOF_PROMPT'
143+
144+
Guidelines:
145+
- Replace VERSION with the actual version number
146+
- Replace YYYY-MM-DD with the actual release date
147+
- ONLY include BREAKING changes in the "Breaking Changes" section
148+
- For each breaking change, provide clear operational steps that operators must follow
149+
- Include specific configuration file changes, command modifications, or migration steps
150+
- Use numbered lists for action steps to make them easy to follow
151+
- Do NOT duplicate the full changelog content - just reference CHANGELOG.md
152+
- If there are no breaking changes, clearly state "None" in that section
153+
- Use clear, professional language focused on operational impact
154+
- Include PR numbers for breaking changes when available
155+
- Format as clean markdown
156+
157+
Output the release notes as your response.
158+
EOF_PROMPT
159+
160+
{
161+
echo 'prompt<<EOF_CLAUDE_PROMPT'
162+
cat claude-prompt.txt
163+
echo EOF_CLAUDE_PROMPT
164+
} >> $GITHUB_OUTPUT
165+
166+
- name: Generate release notes with Claude
167+
id: claude-release
168+
uses: anthropics/claude-code-action@v1
169+
with:
170+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
171+
prompt: ${{ steps.changelog-prompt.outputs.prompt }}
172+
trusted_bots: "*"
173+
allowed_tools: "Read(CHANGELOG.md)"
174+
claude_args: |
175+
--json-schema '{"type":"object","properties":{"release_notes":{"type":"string"},"release_date":{"type":"string","description":"Release date in YYYY-MM-DD format"}},"required":["release_notes","release_date"]}'
176+
177+
- name: Create Draft GitHub Release
178+
id: create-release
179+
uses: softprops/action-gh-release@v2
180+
with:
181+
draft: true
182+
name: ${{ steps.extract-version.outputs.tag }} (${{ fromJSON(steps.claude-release.outputs.structured_output).release_date }})
183+
tag_name: ${{ steps.extract-version.outputs.tag }}
184+
body: ${{ fromJSON(steps.claude-release.outputs.structured_output).release_notes }}
185+
env:
186+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
187+
188+
- name: Output release URL
189+
run: |
190+
RELEASE_URL="https://github.com/${{ github.repository }}/releases/tag/${{ steps.extract-version.outputs.tag }}"
191+
echo "::notice::Draft release created: $RELEASE_URL"

.mockery.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ packages:
6161
dir: ./block/internal/syncing
6262
pkgname: syncing
6363
filename: syncer_mock.go
64+
6465
github.com/evstack/ev-node/block/internal/common:
6566
interfaces:
6667
Broadcaster:

CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
## [Unreleased]
1111

12+
## v1.0.0-rc.3
13+
14+
### Added
15+
16+
- Add DA Hints for P2P transactions. This allows a catching up node to be on sync with both DA and P2P. ([#2891](https://github.com/evstack/ev-node/pull/2891))
17+
18+
### Changes
19+
20+
- Improve `cache.NumPendingData` to not return empty data. Automatically bumps `LastSubmittedHeight` to reflect that. ([#3046](https://github.com/evstack/ev-node/pull/3046))
21+
- **BREAKING** Make pending events cache and tx cache fully ephemeral. Those will be re-fetched on restart. DA Inclusion cache persists until cleared up after DA inclusion has been processed. Persist accross restart using store metadata. ([#3047](https://github.com/evstack/ev-node/pull/3047))
22+
- Replace LRU cache by standard mem cache with manual eviction in `store_adapter`. When P2P blocks were fetched too fast, they would be evicted before being executed [#3051](https://github.com/evstack/ev-node/pull/3051)
23+
- Fix replay logic leading to app hashes by verifying against the wrong block [#3053](https://github.com/evstack/ev-node/pull/3053).
24+
25+
## v1.0.0-rc.2
26+
1227
### Changes
1328

1429
- Improve cache handling when there is a significant backlog of pending headers and data. ([#3030](https://github.com/evstack/ev-node/pull/3030))
1530
- Decrease MaxBytesSize to `5MB` to increase compatibility with public nodes. ([#3030](https://github.com/evstack/ev-node/pull/3030))
1631
- Proper counting of `DASubmitterPendingBlobs` metrics. [#3038](https://github.com/evstack/ev-node/pull/3038)
17-
- Replace `go-header` store by `ev-node` store. This avoid duplication of all blocks in `go-header` and `ev-node` store. Thanks to the cached store from #3030, this should improve p2p performance as well.
32+
- Replace `go-header` store by `ev-node` store. This avoid duplication of all blocks in `go-header` and `ev-node` store. Thanks to the cached store from #3030, this should improve p2p performance as well. [#3036](https://github.com/evstack/ev-node/pull/3036)
1833

1934
## v1.0.0-rc.1
2035

2136
### Added
2237

38+
- Added OpenTelemetry tracing support with OTLP export for distributed tracing across ev-node components including block production, syncing, DA submission/retrieval, sequencer, store operations, and RPC layer. Configurable via `instrumentation.tracing`, `instrumentation.tracing_endpoint`, `instrumentation.tracing_service_name`, and `instrumentation.tracing_sample_rate` settings. ([#2956](https://github.com/evstack/ev-node/issues/2956))
2339
- **BREAKING:** Implement forced inclusion and batch sequencing ([#2797](https://github.com/evstack/ev-node/pull/2797))
2440
**This change requires adding a `da_epoch_forced_inclusion` field to the node's `genesis.json` file.** The recommended value is `100`.
2541
Full support for this feature will be available in a future release.

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)