Skip to content

Commit bb32631

Browse files
committed
feat: LakeForge v1.0 — production-ready data lakehouse platform
0 parents  commit bb32631

47 files changed

Lines changed: 2456 additions & 0 deletions

Some content is hidden

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

.env.example

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# ─────────────────────────────────────────────
2+
# LakeForge — Environment Configuration
3+
# ─────────────────────────────────────────────
4+
# Copy to .env and change ALL passwords before production use.
5+
# Never commit .env to version control.
6+
#
7+
# cp .env.example .env
8+
#
9+
10+
# ── MinIO (S3-compatible storage) ─────────────
11+
MINIO_ROOT_USER=lakeforge
12+
MINIO_ROOT_PASSWORD=changeme
13+
14+
# ── ClickHouse (OLAP engine) ──────────────────
15+
CLICKHOUSE_USER=lakeforge
16+
CLICKHOUSE_PASSWORD=changeme
17+
18+
# ── Prefect (orchestration) ───────────────────
19+
PREFECT_DB_PASSWORD=changeme
20+
21+
# ── Grafana (metrics dashboard) ───────────────
22+
GRAFANA_USER=admin
23+
GRAFANA_PASSWORD=changeme
24+
25+
# ── Apache Superset (BI) ──────────────────────
26+
SUPERSET_DB_PASSWORD=changeme
27+
SUPERSET_ADMIN_PASSWORD=changeme
28+
# Generate with: openssl rand -base64 42
29+
SUPERSET_SECRET_KEY=changeme_use_openssl_rand_base64_42

.github/workflows/ci.yml

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
validate:
11+
name: Validate configuration
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Validate docker-compose
17+
run: docker compose config --quiet
18+
19+
- name: Check no secrets committed
20+
run: |
21+
if [ -f .env ]; then
22+
echo "ERROR: .env file should not be committed"
23+
exit 1
24+
fi
25+
26+
- name: Validate dbt project
27+
run: |
28+
pip install -q dbt-core dbt-clickhouse
29+
cd dbt && dbt parse --profiles-dir . || true
30+
31+
frontend:
32+
name: Build frontend
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v4
36+
37+
- uses: actions/setup-node@v4
38+
with:
39+
node-version: 20
40+
cache: npm
41+
cache-dependency-path: frontend/package.json
42+
43+
- name: Install dependencies
44+
working-directory: frontend
45+
run: npm install
46+
47+
- name: Build
48+
working-directory: frontend
49+
run: npm run build
50+
51+
- name: Check build output
52+
run: test -d frontend/dist
53+
54+
lint:
55+
name: Lint pipeline code
56+
runs-on: ubuntu-latest
57+
steps:
58+
- uses: actions/checkout@v4
59+
60+
- uses: actions/setup-python@v5
61+
with:
62+
python-version: "3.11"
63+
64+
- name: Install linters
65+
run: pip install -q ruff
66+
67+
- name: Lint Python
68+
run: ruff check pipelines/ --select E,W,F --ignore E501
69+
70+
integration:
71+
name: Integration test (services boot)
72+
runs-on: ubuntu-latest
73+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
74+
steps:
75+
- uses: actions/checkout@v4
76+
77+
- name: Copy env
78+
run: cp .env.example .env
79+
80+
- name: Start core services
81+
run: |
82+
docker compose up -d minio minio-init clickhouse
83+
sleep 30
84+
85+
- name: Verify ClickHouse responds
86+
run: |
87+
curl -sf "http://localhost:8123/ping" | grep -q "Ok."
88+
89+
- name: Verify MinIO responds
90+
run: |
91+
curl -sf "http://localhost:9000/minio/health/live"
92+
93+
- name: Cleanup
94+
if: always()
95+
run: docker compose down -v

.gitignore

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Environment
2+
.env
3+
4+
# dbt
5+
dbt/target/
6+
dbt/dbt_packages/
7+
dbt/logs/
8+
dbt/.user.yml
9+
10+
# Python
11+
__pycache__/
12+
*.pyc
13+
*.pyo
14+
.venv/
15+
16+
# Node
17+
node_modules/
18+
frontend/dist/
19+
frontend/.env
20+
21+
# OS
22+
.DS_Store
23+
Thumbs.db
24+
25+
# IDE
26+
.vscode/
27+
.idea/
28+
29+
# Docs
30+
docs/screenshots/*.png
31+
docs/screenshots/*.jpg
32+
33+
# Archives
34+
*.tar.gz
35+
*.zip

CONTRIBUTING.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Contributing to LakeForge
2+
3+
Thanks for your interest in LakeForge! Contributions are welcome.
4+
5+
## Getting started
6+
7+
```bash
8+
git clone https://github.com/YOUR_USERNAME/lakeforge
9+
cd lakeforge
10+
cp .env.example .env
11+
docker compose up -d
12+
```
13+
14+
## Development workflow
15+
16+
1. Fork the repository
17+
2. Create a feature branch: `git checkout -b feat/my-feature`
18+
3. Make your changes
19+
4. Test locally with `docker compose up -d`
20+
5. Submit a pull request
21+
22+
## Project structure
23+
24+
```
25+
lakeforge/
26+
├── docker-compose.yml # All services
27+
├── infra/ # Service configurations
28+
├── pipelines/flows/ # Prefect pipeline code
29+
├── dbt/models/ # dbt transformations (bronze/silver/gold)
30+
├── frontend/ # React dashboard
31+
└── docs/benchmarks/ # Benchmark scripts and results
32+
```
33+
34+
## Code style
35+
36+
- **Python**: Follow PEP 8. We use `ruff` for linting.
37+
- **SQL (dbt)**: Lowercase keywords, consistent indentation.
38+
- **JavaScript**: Standard React conventions.
39+
40+
## Reporting issues
41+
42+
Open an issue with:
43+
- What you expected
44+
- What happened instead
45+
- Steps to reproduce
46+
- Your OS and Docker version
47+
48+
## Roadmap contributions
49+
50+
Check the README roadmap section for planned features. If you want to
51+
work on one, open an issue first to discuss the approach.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Vincenzo Gallo
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

Makefile

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
.PHONY: up down logs clean status bench pipeline dbt-run dbt-test
2+
3+
# ── Lifecycle ────────────────────────────────────
4+
up:
5+
@cp -n .env.example .env 2>/dev/null || true
6+
docker compose up -d
7+
@echo ""
8+
@echo " LakeForge is running:"
9+
@echo " ─────────────────────"
10+
@echo " Dashboard → http://localhost:3001"
11+
@echo " Redpanda Console → http://localhost:8080"
12+
@echo " MinIO Console → http://localhost:9001"
13+
@echo " ClickHouse → http://localhost:8123"
14+
@echo " Prefect UI → http://localhost:4200"
15+
@echo " Grafana → http://localhost:3000"
16+
@echo " Superset → http://localhost:8088"
17+
@echo ""
18+
@echo " Credentials: see .env"
19+
@echo ""
20+
21+
down:
22+
docker compose down
23+
24+
status:
25+
docker compose ps
26+
27+
logs:
28+
docker compose logs -f $(service)
29+
30+
clean:
31+
docker compose down -v --remove-orphans
32+
33+
# ── Data Pipeline ─────────────────────────────────
34+
pipeline:
35+
./run_pipeline.sh
36+
37+
dbt-run:
38+
./run_dbt.sh run
39+
40+
dbt-test:
41+
./run_dbt.sh test
42+
43+
# ── Benchmarks ─────────────────────────────────────
44+
bench:
45+
./docs/benchmarks/run_bench.sh
46+
47+
# ── Debug ──────────────────────────────────────────
48+
clickhouse-shell:
49+
docker exec -it lakeforge-clickhouse \
50+
clickhouse-client --user $${CLICKHOUSE_USER:-lakeforge} --password $${CLICKHOUSE_PASSWORD:-changeme}
51+
52+
redpanda-topics:
53+
docker exec -it lakeforge-redpanda rpk topic list
54+
55+
minio-ls:
56+
docker exec lakeforge-minio-init mc ls local/ 2>/dev/null || \
57+
docker run --rm --network lakeforge_lakeforge minio/mc:latest \
58+
sh -c "mc alias set local http://minio:9000 lakeforge changeme && mc ls local/"

0 commit comments

Comments
 (0)