diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..899c24f --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,25 @@ +FROM node:20-slim + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + python3 \ + python3-pip \ + make \ + curl \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Install DuckDB +RUN curl -L https://github.com/duckdb/duckdb/releases/download/v0.10.0/duckdb_cli-linux-amd64.zip -o duckdb.zip \ + && apt-get update && apt-get install -y unzip \ + && unzip duckdb.zip -d /usr/local/bin \ + && rm duckdb.zip + +# Set working directory +WORKDIR /app + +# Install Python dependencies +RUN pip3 install duckdb ruff --break-system-packages + +# Default command +CMD ["/bin/bash"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4fb6456 --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +.PHONY: install dev lint shell task-list task-add task-done task-update + +# Installation +install: + cd client && npm install + cd server && npm install + pip install duckdb ruff + +# Development +dev: + docker compose up --build + +# Linting +lint: + cd client && npm run lint || true + ruff check tasks/ + +# Docker Shell +shell: + docker compose run --rm dev-shell + +# Task Tracker Integration +PYTHON=python3 +TASK_CLI=tasks/cli.py + +task-list: + $(PYTHON) $(TASK_CLI) list + +task-add: + $(PYTHON) $(TASK_CLI) add "$(title)" + +task-done: + $(PYTHON) $(TASK_CLI) done $(id) + +task-update: + $(PYTHON) $(TASK_CLI) update $(id) $(status) + +task-delete: + $(PYTHON) $(TASK_CLI) delete $(id) + +task-filter: + $(PYTHON) $(TASK_CLI) list --status $(status) diff --git a/client/.eslintrc.cjs b/client/.eslintrc.cjs new file mode 100644 index 0000000..83aadc8 --- /dev/null +++ b/client/.eslintrc.cjs @@ -0,0 +1,21 @@ +module.exports = { + env: { + browser: true, + es2021: true, + node: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:vue/vue3-recommended', + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + plugins: [ + 'vue', + ], + rules: { + 'vue/multi-word-component-names': 'off', + }, +}; diff --git a/client/package.json b/client/package.json index e350bb9..51f7dda 100644 --- a/client/package.json +++ b/client/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "lint": "eslint . --ext .js, .vue --fix" }, "dependencies": { "@solana/web3.js": "^1.98.4", @@ -21,8 +22,10 @@ "devDependencies": { "@vitejs/plugin-vue": "^6.0.1", "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.21.1", "postcss": "^8.4.33", "tailwindcss": "^3.4.17", "vite": "^7.2.4" } -} +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index ba2d783..e1a2ce8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,3 +16,12 @@ services: - "8080:80" depends_on: - server + + dev-shell: + build: + context: . + dockerfile: Dockerfile.dev + volumes: + - .:/app + environment: + - NODE_ENV=development diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..49e3f87 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,7 @@ +[tool.ruff] +line-length = 120 +target-version = "py310" + +[tool.ruff.lint] +select = ["E", "F", "I"] +ignore = []