From 065c629ba882bba865ef8e94675316cd994ca526 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 9 Aug 2025 17:08:54 +0200 Subject: [PATCH] feat: dev hot reload setup --- .air.toml | 52 +++++++++++++++++++++++++++++++++++++ .gitignore | 1 + Dockerfile.dev | 12 +++++++++ README.md | 4 ++- docker-compose.yml | 6 ++++- internal/driver/activate.go | 1 - internal/driver/create.go | 3 +++ internal/driver/mount.go | 3 +++ internal/driver/path.go | 3 +++ internal/driver/remove.go | 3 +++ internal/driver/unmount.go | 3 +++ 11 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 .air.toml create mode 100644 Dockerfile.dev diff --git a/.air.toml b/.air.toml new file mode 100644 index 0000000..1b2c0fe --- /dev/null +++ b/.air.toml @@ -0,0 +1,52 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "out" + +[build] + args_bin = [] + bin = "./out/main" + cmd = "go build -o ./out/main ." + delay = 1000 + exclude_dir = ["assets", "out", "vendor", "testdata"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html"] + include_file = [] + kill_delay = "0s" + log = "build-errors.log" + poll = false + poll_interval = 0 + post_cmd = [] + pre_cmd = [] + rerun = false + rerun_delay = 500 + send_interrupt = false + stop_on_error = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + silent = false + time = false + +[misc] + clean_on_exit = false + +[proxy] + app_port = 0 + enabled = false + proxy_port = 0 + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/.gitignore b/.gitignore index 8f0d79d..a072fb2 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ go.work.sum # .idea/ # .vscode/ ironmount +out/ diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..588f5d9 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,12 @@ +FROM golang:1.24-alpine3.21 AS builder + +WORKDIR /ironmount + +RUN go install github.com/air-verse/air@latest +COPY go.mod ./ + +RUN go mod download + +COPY . . + +CMD ["air", "-c", ".air.toml"] diff --git a/README.md b/README.md index 19eb654..caea8a6 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# ironmount \ No newline at end of file +# ironmount + +mutagen sync create ~/Developer/ironmount nicolas@192.168.2.220:/home/nicolas/ironmount diff --git a/docker-compose.yml b/docker-compose.yml index 9821232..cdf2d96 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,13 @@ services: ironmount: build: context: . - dockerfile: Dockerfile + dockerfile: Dockerfile.dev container_name: ironmount restart: unless-stopped volumes: + - ./:/ironmount + - /run/docker/plugins:/run/docker/plugins - /tmp/ironmount:/tmp/ironmount + environment: + - GO_ENV=development diff --git a/internal/driver/activate.go b/internal/driver/activate.go index 1d6e587..dfbe76e 100644 --- a/internal/driver/activate.go +++ b/internal/driver/activate.go @@ -7,7 +7,6 @@ import ( ) func Activate(w http.ResponseWriter, r *http.Request) { - // Log the activation request log.Printf("Received activation request: %s", r.URL.Path) resp := map[string]any{ diff --git a/internal/driver/create.go b/internal/driver/create.go index 53007f2..a25ed25 100644 --- a/internal/driver/create.go +++ b/internal/driver/create.go @@ -3,12 +3,15 @@ package driver import ( "encoding/json" "ironmount/internal/constants" + "log" "net/http" "os" "path/filepath" ) func Create(w http.ResponseWriter, r *http.Request) { + log.Printf("Received create request: %s", r.URL.Path) + var req struct { Name string } diff --git a/internal/driver/mount.go b/internal/driver/mount.go index de772f6..760d2ec 100644 --- a/internal/driver/mount.go +++ b/internal/driver/mount.go @@ -2,10 +2,13 @@ package driver import ( "encoding/json" + "log" "net/http" ) func Mount(w http.ResponseWriter, r *http.Request) { + log.Printf("Received mount request: %s", r.URL.Path) + var req MountRequest err := json.NewDecoder(r.Body).Decode(&req) diff --git a/internal/driver/path.go b/internal/driver/path.go index 90e6c35..8b48540 100644 --- a/internal/driver/path.go +++ b/internal/driver/path.go @@ -2,10 +2,13 @@ package driver import ( "encoding/json" + "log" "net/http" ) func Path(w http.ResponseWriter, r *http.Request) { + log.Printf("Received path request: %s", r.URL.Path) + var req PathRequest _ = json.NewDecoder(r.Body).Decode(&req) diff --git a/internal/driver/remove.go b/internal/driver/remove.go index 4cfbffd..86da487 100644 --- a/internal/driver/remove.go +++ b/internal/driver/remove.go @@ -2,10 +2,13 @@ package driver import ( "encoding/json" + "log" "net/http" ) func Remove(w http.ResponseWriter, r *http.Request) { + log.Printf("Received remove request: %s", r.URL.Path) + var req RemoveRequest _ = json.NewDecoder(r.Body).Decode(&req) diff --git a/internal/driver/unmount.go b/internal/driver/unmount.go index 0eb029f..07c3071 100644 --- a/internal/driver/unmount.go +++ b/internal/driver/unmount.go @@ -2,9 +2,12 @@ package driver import ( "encoding/json" + "log" "net/http" ) func Unmount(w http.ResponseWriter, r *http.Request) { + log.Printf("Received unmount request: %s", r.URL.Path) + _ = json.NewEncoder(w).Encode(map[string]string{"Err": ""}) }