mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-23 17:28:23 +00:00
## Overview This PR consolidates and optimizes the Docker build system, reducing redundancy and improving CI/CD performance. The changes eliminate duplicate Dockerfiles, introduce a flexible build template, and optimize release builds to reuse CI artifacts. ## Changes Summary ### 🐳 Docker Images Restructured **Before:** 5 Dockerfiles with significant overlap **After:** 4 focused images + 1 utility #### Final Structure: 1. **`operator/Dockerfile`** ✨ Updated - **Standard operator image** for CI and release builds - Minimal node image (accepts pre-built binaries) - GHCR: `ghcr.io/datahaven-xyz/datahaven/datahaven` (CI) - DockerHub: `datahavenxyz/datahaven` (releases) 2. **`docker/datahaven-build.Dockerfile`** (moved from `operator/Dockerfile`) - Full source-to-binary build for manual releases - DockerHub: `datahavenxyz/datahaven:{label}` - Supports custom RUSTFLAGS and fast-runtime feature - Only used for manual workflow_dispatch builds 3. **`docker/datahaven-production.Dockerfile`** (kept) - Binary builder for CPU-specific releases - Used by build-prod-binary workflow template - Supports custom target-cpu flags 4. **`docker/datahaven-dev.Dockerfile`** ✨ NEW (local dev only) - **FOR LOCAL DEVELOPMENT/TROUBLESHOOTING ONLY** - Includes debug tools: gdb, strace, vim, sudo - Extra dependencies: librocksdb-dev, curl - RUST_BACKTRACE enabled by default - **DO NOT USE for CI or production builds** 5. **`test/docker/crossbuild-mac-libpq.dockerfile`** (kept) - Utility for macOS → Linux cross-compilation #### Removed (Redundant): - ❌ `docker/datahaven.Dockerfile` → replaced by operator/Dockerfile - ❌ `test/docker/datahaven-node-local.dockerfile` → replaced by datahaven-dev.Dockerfile --- ### 🔄 Workflow Improvements #### Enhanced `publish-docker` Template - Supports both GHCR and DockerHub registries - Flexible inputs: dockerfile, context, build-args, cache scope - Auto-generates OCI-compliant labels - Reduces code duplication (~70 lines → ~15 per workflow) #### Refactored CI Pipeline - **`docker-build-ci`**: Builds `operator/Dockerfile` → GHCR for CI/E2E testing - **`docker-build-release`**: Builds `operator/Dockerfile` → DockerHub (main branch only) - Both CI and release workflows now use the same minimal operator image - Release builds **reuse CI binaries** instead of rebuilding from source #### Optimized Release Workflow The `task-docker-release` workflow now has dual modes: **Mode 1: `workflow_call` (CI - main pushes)** - ✅ Reuses binary from CI's build-operator task - ✅ Uses lightweight `operator/Dockerfile` - ✅ Tags: `latest`, `sha-{short}` - ⚡ **Fast**: ~5 minutes (vs ~30 min previously) **Mode 2: `workflow_dispatch` (Manual)** - ✅ Full source build with `datahaven-build.Dockerfile` - ✅ Custom branch and label selection - ✅ Optional fast-runtime feature - ✅ Tags: `PROD-{label}` or user-defined --- ### 🔧 Additional Optimizations - Copy libpq5 from builder stage instead of reinstalling (smaller, faster) - Remove redundant protobuf-compiler package (use protoc v21.12 directly) - Standardize user UID to 1000 across all runtime images - Consistent OCI labeling and metadata --------- Co-authored-by: Claude <noreply@anthropic.com>
85 lines
No EOL
3.9 KiB
JSON
85 lines
No EOL
3.9 KiB
JSON
{
|
|
"name": "@datahaven/e2e-test",
|
|
"module": "index.ts",
|
|
"type": "module",
|
|
"private": true,
|
|
"scripts": {
|
|
"cli": "bun run cli/index.ts",
|
|
"fmt": "biome check .",
|
|
"fmt:fix": "biome check --write .",
|
|
"build:docker:operator": "docker build --no-cache --platform linux/amd64 -t datahavenxyz/datahaven:local -f ../docker/datahaven-dev.Dockerfile ../.",
|
|
"generate:wagmi": "wagmi generate",
|
|
"generate:snowbridge-cfgs": "bun -e \"import {generateSnowbridgeConfigs} from './scripts/gen-snowbridge-cfgs.ts'; await generateSnowbridgeConfigs()\"",
|
|
"generate:types": "(cd ../operator && cargo build --release) && bun x papi add --wasm \"../operator/target/release/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.wasm\" datahaven",
|
|
"generate:types:fast": "(cd ../operator && cargo build --release --features fast-runtime) && bun x papi add --wasm \"../operator/target/release/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.wasm\" datahaven",
|
|
"start:e2e:verified": "bun cli launch --verified --blockscout --deploy-contracts --setup-validators --update-validator-set --fund-validators",
|
|
"start:e2e:verified:relayers": "bun cli launch --verified --blockscout --deploy-contracts --setup-validators --update-validator-set --fund-validators --relayer --datahaven",
|
|
"start:e2e:local": "LOG_LEVEL=debug bun start:e2e:ci --bd",
|
|
"start:e2e:ci": "bun cli launch --datahaven --no-build-datahaven --launch-kurtosis --deploy-contracts --fund-validators --setup-validators --update-validator-set --set-parameters --relayer --clean-network --slot-time 2",
|
|
"start:e2e:minrelayer": "bun cli launch --relayer --deploy-contracts --no-setup-validators --no-update-validator-set --no-fund-validators --datahaven",
|
|
"stop:docker:datahaven": "docker rm -f $(docker ps -aq --filter name='^datahaven-') 2>/dev/null || true; docker network rm datahaven-net || true",
|
|
"stop:docker:relayer": "docker rm -f $(docker ps -aq --filter name='^snowbridge-') 2>/dev/null || true",
|
|
"stop:e2e": "bun cli stop --all",
|
|
"stop:dh": "bun cli stop --datahaven --no-enclave --no-relayer ",
|
|
"stop:sb": "bun cli stop --relayer --no-datahaven --no-enclave",
|
|
"stop:eth": "bun cli stop --enclave --no-datahaven --no-relayer",
|
|
"stop:engine": "bun cli stop --kurtosisEngine --no-datahaven --no-relayer --no-enclave",
|
|
"test:e2e": "bun test ./suites --timeout 900000",
|
|
"compile:contracts": "bun x tsx scripts/compile-contracts.ts compile",
|
|
"test:e2e:parallel": "bun scripts/test-parallel.ts",
|
|
"moonwall:test": "moonwall test dev_datahaven",
|
|
"moonwall:run": "moonwall run dev_datahaven",
|
|
"typecheck": "tsc --noEmit",
|
|
"tsgo": "tsgo tsc --noEmit --pretty --skipLibCheck",
|
|
"postinstall": "papi"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bun": "latest",
|
|
"@types/yargs": "^17.0.33",
|
|
"@typescript/native-preview": "^7.0.0-dev.20250618.1"
|
|
},
|
|
"peerDependencies": {
|
|
"typescript": "^5.8.3"
|
|
},
|
|
"dependencies": {
|
|
"@biomejs/biome": "^2.0.0",
|
|
"@commander-js/extra-typings": "^13.1.0",
|
|
"@dotenvx/dotenvx": "^1.44.2",
|
|
"@inquirer/prompts": "^7.5.3",
|
|
"@moonwall/cli": "^5.15.0",
|
|
"@moonwall/util": "^5.15.0",
|
|
"@noble/curves": "^1.9.2",
|
|
"@noble/hashes": "^1.8.0",
|
|
"@polkadot-api/descriptors": "file:.papi/descriptors",
|
|
"@types/dockerode": "^3.3.41",
|
|
"@types/node": "^22.15.32",
|
|
"@wagmi/cli": "^2.3.1",
|
|
"@wagmi/core": "^2.17.3",
|
|
"chalk": "^5.4.1",
|
|
"commander": "^13.1.0",
|
|
"dockerode": "^4.0.7",
|
|
"dotenv": "^16.5.0",
|
|
"octokit": "^4.1.4",
|
|
"ora": "^8.2.0",
|
|
"pino": "^9.7.0",
|
|
"pino-pretty": "^13.0.0",
|
|
"polkadot-api": "^1.15.1",
|
|
"solc": "^0.8.30",
|
|
"tiny-invariant": "^1.3.3",
|
|
"viem": "^2.31.3",
|
|
"wagmi": "^2.15.6",
|
|
"yaml": "^2.8.0",
|
|
"yargs": "^18.0.0",
|
|
"zod": "^3.25.67"
|
|
},
|
|
"trustedDependencies": [
|
|
"@biomejs/biome",
|
|
"bufferutil",
|
|
"cpu-features",
|
|
"esbuild",
|
|
"keccak",
|
|
"protobufjs",
|
|
"ssh2",
|
|
"utf-8-validate"
|
|
]
|
|
} |