From 9657aaa52329cf7da6b9b21a7391a57d74680157 Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Sun, 21 Jun 2026 19:46:34 -0700 Subject: [PATCH] chore: docker compose, mise.toml, updated toolchain - Dockerfile: updated to serve mode with web/ embed, expose 8080 - docker-compose.yml: new, maps :8080 and output volume - Makefile: added serve, akaiutil, electron-* targets - mise.toml: new, go 1.26 + node 22, all build/run tasks - .gitignore: exclude built akaiutil binary --- .gitignore | 1 + Dockerfile | 8 ++++++-- Makefile | 41 ++++++++++++++++++++++++++++++++++++++++- docker-compose.yml | 9 +++++++++ mise.toml | 19 +++++++++++++++++++ 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 docker-compose.yml create mode 100644 mise.toml diff --git a/.gitignore b/.gitignore index 6e872b8..3aadeeb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ akaiutil-4.6.7/ # Build artifacts *.o *.obj +third_party/akaiutil/akaiutil # Data *.iso diff --git a/Dockerfile b/Dockerfile index 524bc90..09b2d77 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,8 @@ RUN make FROM golang:1.26-alpine AS fetch-builder WORKDIR /src -COPY go.mod main.go /src/ +COPY go.mod main.go serve.go /src/ +COPY web/ /src/web/ RUN CGO_ENABLED=0 go build -o /fetch . # Stage 3: Runtime image @@ -24,10 +25,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ && rm -rf /var/lib/apt/lists/* +RUN mkdir -p /data/output/isos /data/output/wavs + COPY --from=akaiutil-builder /src/akaiutil/akaiutil /usr/local/bin/ COPY --from=fetch-builder /fetch /usr/local/bin/fetch COPY scripts/extract_wavs.sh /usr/local/bin/ WORKDIR /data +EXPOSE 8080 ENTRYPOINT ["fetch"] -CMD ["--help"] +CMD ["serve", "-p", "8080"] diff --git a/Makefile b/Makefile index 32e3bfd..2d5b0e4 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,60 @@ BIN := fetch IMAGE := akai-fetch REMOTE := dhg.lol +ELECTRON_DIR := electron build: CGO_ENABLED=0 go build -buildvcs=false -o $(BIN) . +akaiutil: + $(MAKE) -C third_party/akaiutil + +all: build akaiutil + docker: docker build -t $(IMAGE) . docker-run: docker run --rm -v "$(PWD)/output:/data" $(IMAGE) $(ARGS) +docker-up: + docker compose up --build + +docker-down: + docker compose down + +serve: build + ./$(BIN) serve + +# ─── Electron targets ────────────────────────────────────── + +electron-deps: + cd $(ELECTRON_DIR) && npm install + +electron-dev: build + cd $(ELECTRON_DIR) && npx electron . + +electron-build: build akaiutil + cd $(ELECTRON_DIR) && npx electron-builder --dir + +electron-build-mac: build akaiutil + cd $(ELECTRON_DIR) && npx electron-builder --mac --dir + +electron-build-linux: build akaiutil + cd $(ELECTRON_DIR) && npx electron-builder --linux --dir + +# ─── Server / remote ─────────────────────────────────────── + install: build scp $(BIN) $(REMOTE):/tmp/$(BIN) && \ ssh $(REMOTE) "sudo mv /tmp/$(BIN) /DATA/Downloads/akai/$(BIN) && sudo chmod +x /DATA/Downloads/akai/$(BIN)" clean: rm -f $(BIN) + rm -rf $(ELECTRON_DIR)/dist + rm -rf $(ELECTRON_DIR)/node_modules + $(MAKE) -C third_party/akaiutil clean -.PHONY: build docker docker-run install clean +.PHONY: build akaiutil all docker docker-run docker-up docker-down serve \ + electron-deps electron-dev electron-build electron-build-mac electron-build-linux \ + install clean diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e357416 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +services: + akai-utils: + build: . + ports: + - "8080:8080" + volumes: + - ./output:/data/output + environment: + - AKAIUTIL=/usr/local/bin/akaiutil diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..038ef3b --- /dev/null +++ b/mise.toml @@ -0,0 +1,19 @@ +[tools] +go = "1.26" +node = "22" + +[env] +CGO_ENABLED = "0" + +[tasks] +build = "go build -buildvcs=false -o fetch ." +akaiutil = "make -C third_party/akaiutil" +all = { run = "go build -buildvcs=false -o fetch . && make -C third_party/akaiutil" } +serve = { run = "go build -buildvcs=false -o fetch . && ./fetch serve" } +lint = "go vet ./..." +electron-deps = "cd electron && npm install" +electron-dev = { run = "go build -buildvcs=false -o fetch . && cd electron && npx electron ." } +electron-build = { run = "go build -buildvcs=false -o fetch . && make -C third_party/akaiutil && cd electron && npx electron-builder --dir" } +electron-build-mac = { run = "go build -buildvcs=false -o fetch . && make -C third_party/akaiutil && cd electron && npx electron-builder --mac --dir" } +docker-up = "docker compose up --build" +docker-build = "docker build -t akai-fetch ."