scaffolding, boilerplate
Authored by
mfwolffe <wolffemf@dukes.jmu.edu>
- SHA
b2a79b68038b27721724297eff2ed6773fca3c1f- Tree
1e77a8e
b2a79b6
b2a79b68038b27721724297eff2ed6773fca3c1f1e77a8e| Status | File | + | - |
|---|---|---|---|
| A |
.github/workflows/ci.yml
|
94 | 0 |
| A |
Cargo.toml
|
66 | 0 |
| A |
Dockerfile
|
53 | 0 |
| A |
src/main.rs
|
0 | 0 |
.github/workflows/ci.ymladded@@ -0,0 +1,94 @@ | ||
| 1 | +name: CI | |
| 2 | + | |
| 3 | +on: | |
| 4 | + push: | |
| 5 | + branches: [ main, develop ] | |
| 6 | + pull_request: | |
| 7 | + branches: [ main, develop ] | |
| 8 | + | |
| 9 | +env: | |
| 10 | + CARGO_TERM_COLOR: always | |
| 11 | + RUST_BACKTRACE: 1 | |
| 12 | + | |
| 13 | +jobs: | |
| 14 | + test: | |
| 15 | + name: Test Suite | |
| 16 | + runs-on: ubuntu-latest | |
| 17 | + strategy: | |
| 18 | + matrix: | |
| 19 | + rust: [stable, beta] | |
| 20 | + | |
| 21 | + steps: | |
| 22 | + - uses: actions/checkout@v4 | |
| 23 | + | |
| 24 | + - name: Install Rust | |
| 25 | + uses: dtolnay/rust-toolchain@master | |
| 26 | + with: | |
| 27 | + toolchain: ${{ matrix.rust }} | |
| 28 | + components: rustfmt, clippy | |
| 29 | + | |
| 30 | + - name: Install system dependencies | |
| 31 | + run: | | |
| 32 | + sudo apt-get update | |
| 33 | + sudo apt-get install -y pkg-config libssl-dev protobuf-compiler | |
| 34 | + | |
| 35 | + - name: Cache cargo registry | |
| 36 | + uses: actions/cache@v3 | |
| 37 | + with: | |
| 38 | + path: ~/.cargo/registry | |
| 39 | + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
| 40 | + | |
| 41 | + - name: Cache cargo index | |
| 42 | + uses: actions/cache@v3 | |
| 43 | + with: | |
| 44 | + path: ~/.cargo/git | |
| 45 | + key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} | |
| 46 | + | |
| 47 | + - name: Cache cargo build | |
| 48 | + uses: actions/cache@v3 | |
| 49 | + with: | |
| 50 | + path: target | |
| 51 | + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} | |
| 52 | + | |
| 53 | + - name: Check formatting | |
| 54 | + run: cargo fmt --all -- --check | |
| 55 | + | |
| 56 | + - name: Run clippy | |
| 57 | + run: cargo clippy --all-targets --all-features -- -D warnings | |
| 58 | + | |
| 59 | + - name: Run tests | |
| 60 | + run: cargo test --verbose | |
| 61 | + | |
| 62 | + - name: Build release | |
| 63 | + run: cargo build --release --verbose | |
| 64 | + | |
| 65 | + security: | |
| 66 | + name: Security Audit | |
| 67 | + runs-on: ubuntu-latest | |
| 68 | + steps: | |
| 69 | + - uses: actions/checkout@v4 | |
| 70 | + - uses: dtolnay/rust-toolchain@stable | |
| 71 | + - name: Security Audit | |
| 72 | + run: | | |
| 73 | + cargo install cargo-audit | |
| 74 | + cargo audit | |
| 75 | + | |
| 76 | + docker: | |
| 77 | + name: Docker Build | |
| 78 | + runs-on: ubuntu-latest | |
| 79 | + needs: test | |
| 80 | + steps: | |
| 81 | + - uses: actions/checkout@v4 | |
| 82 | + | |
| 83 | + - name: Set up Docker Buildx | |
| 84 | + uses: docker/setup-buildx-action@v3 | |
| 85 | + | |
| 86 | + - name: Build Docker image | |
| 87 | + uses: docker/build-push-action@v5 | |
| 88 | + with: | |
| 89 | + context: . | |
| 90 | + file: ./Dockerfile | |
| 91 | + push: false | |
| 92 | + tags: zephyrfs-node:test | |
| 93 | + cache-from: type=gha | |
| 94 | + cache-to: type=gha,mode=max | |
Cargo.tomladded@@ -0,0 +1,66 @@ | ||
| 1 | +[package] | |
| 2 | +name = "zephyrfs-node" | |
| 3 | +version = "0.1.0" | |
| 4 | +edition = "2021" | |
| 5 | +authors = ["espadonne (mfw)"] | |
| 6 | +license = "MIT" | |
| 7 | +description = "Core P2P node implementation for ZephyrFS distributed storage" | |
| 8 | +repository = "https://github.com/ZephyrFS/zephyrfs-node" | |
| 9 | + | |
| 10 | +[dependencies] | |
| 11 | +# LibP2P networking stack | |
| 12 | +libp2p = { version = "0.54", features = [ | |
| 13 | + "tcp", | |
| 14 | + "mdns", | |
| 15 | + "noise", | |
| 16 | + "yamux", | |
| 17 | + "kad", | |
| 18 | + "ping", | |
| 19 | + "identify", | |
| 20 | + "gossipsub", | |
| 21 | + "dcutr" | |
| 22 | +]} | |
| 23 | +tokio = { version = "1.39", features = ["full"] } | |
| 24 | + | |
| 25 | +# Storage and database | |
| 26 | +rocksdb = "0.22" | |
| 27 | +serde = { version = "1.0", features = ["derive"] } | |
| 28 | +serde_yaml = "0.9" | |
| 29 | + | |
| 30 | +# Cryptography and hashing | |
| 31 | +blake3 = "1.5" | |
| 32 | +sha2 = "0.10" | |
| 33 | +rand = "0.8" | |
| 34 | + | |
| 35 | +# Protocol buffers | |
| 36 | +prost = "0.13" | |
| 37 | +prost-types = "0.13" | |
| 38 | +tonic = "0.12" | |
| 39 | + | |
| 40 | +# Logging and tracing | |
| 41 | +tracing = "0.1" | |
| 42 | +tracing-subscriber = { version = "0.3", features = ["env-filter"] } | |
| 43 | + | |
| 44 | +# Error handling | |
| 45 | +anyhow = "1.0" | |
| 46 | +thiserror = "1.0" | |
| 47 | + | |
| 48 | +# Configuration | |
| 49 | +config = "0.14" | |
| 50 | +clap = { version = "4.5", features = ["derive"] } | |
| 51 | + | |
| 52 | +# Async utilities | |
| 53 | +futures = "0.3" | |
| 54 | +async-trait = "0.1" | |
| 55 | + | |
| 56 | +[build-dependencies] | |
| 57 | +tonic-build = "0.12" | |
| 58 | + | |
| 59 | +[[bin]] | |
| 60 | +name = "zephyrfs-node" | |
| 61 | +path = "src/main.rs" | |
| 62 | + | |
| 63 | +[profile.release] | |
| 64 | +codegen-units = 1 | |
| 65 | +lto = true | |
| 66 | +panic = "abort" | |
Dockerfileadded@@ -0,0 +1,53 @@ | ||
| 1 | +# Multi-stage build for ZephyrFS Node | |
| 2 | +FROM rust:1.81-slim as builder | |
| 3 | + | |
| 4 | +# Install system dependencies for building | |
| 5 | +RUN apt-get update && apt-get install -y \ | |
| 6 | + pkg-config \ | |
| 7 | + libssl-dev \ | |
| 8 | + protobuf-compiler \ | |
| 9 | + && rm -rf /var/lib/apt/lists/* | |
| 10 | + | |
| 11 | +WORKDIR /app | |
| 12 | + | |
| 13 | +# Copy Cargo files first for better layer caching | |
| 14 | +COPY Cargo.toml Cargo.lock ./ | |
| 15 | + | |
| 16 | +# Create dummy main.rs to build dependencies | |
| 17 | +RUN mkdir -p src && echo "fn main() {}" > src/main.rs | |
| 18 | +RUN cargo build --release && rm -rf src | |
| 19 | + | |
| 20 | +# Copy actual source code | |
| 21 | +COPY src/ src/ | |
| 22 | + | |
| 23 | +# Build the actual application | |
| 24 | +RUN cargo build --release | |
| 25 | + | |
| 26 | +# Final runtime image | |
| 27 | +FROM debian:bookworm-slim | |
| 28 | + | |
| 29 | +# Install runtime dependencies | |
| 30 | +RUN apt-get update && apt-get install -y \ | |
| 31 | + ca-certificates \ | |
| 32 | + libssl3 \ | |
| 33 | + && rm -rf /var/lib/apt/lists/* | |
| 34 | + | |
| 35 | +# Create non-root user | |
| 36 | +RUN groupadd -r zephyr && useradd -r -g zephyr zephyr | |
| 37 | + | |
| 38 | +# Create data directory | |
| 39 | +RUN mkdir -p /var/lib/zephyrfs && chown zephyr:zephyr /var/lib/zephyrfs | |
| 40 | + | |
| 41 | +# Copy binary from builder stage | |
| 42 | +COPY --from=builder /app/target/release/zephyrfs-node /usr/local/bin/ | |
| 43 | + | |
| 44 | +USER zephyr | |
| 45 | + | |
| 46 | +# Expose P2P and API ports | |
| 47 | +EXPOSE 4001 8080 | |
| 48 | + | |
| 49 | +# Health check | |
| 50 | +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ | |
| 51 | + CMD zephyrfs-node --health-check || exit 1 | |
| 52 | + | |
| 53 | +ENTRYPOINT ["zephyrfs-node"] | |
src/main.rsadded