set shell := ["bash", "-uc"] ui_npm := 'npm --prefix ui' web_npm := 'npm --prefix web' shokku_image := 'texm/shokku:latest' dokku_image := 'dokku/dokku:0.30.2' dokku_container_name := 'shokku-dokku-dev' # for linux can this just be /var/lib/dokku ? dokku_data_mount_dir := '/tmp/colima/var/lib/dokku' dokku_ssh_host := '127.0.0.1' dokku_ssh_port := '3022' db_path := 'test.db' host_keyfile := ".test_keyfile" container_keyfile := '/home/dokku/.ssh/authorized_keys' reflex_script := " # Run dev server -s -r '\\.go$' -R '^ui/' -R '^\\.git$' -- just dev-backend # Run ui dev server # Exclude everything since vite will hot reload -s -R '^.*' -- just dev-ui" _default: @just --list ### # Public recipes ### # clean up resources from the backend and docker @clean: _clean-backend _clean-docker # setup dependencies, bootstrap backend, create dokku container @setup: clean _install-dependencies _setup-dokku _setup-backend # run the development environment (ui and backend) @dev: -echo -n '{{reflex_script}}' | reflex -d 'fancy' -c '-' @dev-backend: _touch-cmd-dist _setup-dokku just _run-with-env go run ./cmd/shokku @dev-ui: -{{ui_npm}} run dev # build a static /cmd/shokku binary @build: {{ui_npm}} run build mv ./ui/dist ./cmd/shokku # GOOS=linux GOARCH=amd64 go build -o shokku ./cmd/shokku -go build -o shokku ./cmd/shokku -rm -r ./cmd/shokku/dist @format: go fmt ./... {{ui_npm}} run prettier # run the website development server @dev-web: {{web_npm}} install {{web_npm}} run dev # build the docker image and tag as latest build-docker: docker build -t "{{shokku_image}}" . # run the docker image 'texm/shokku:latest' with environment vars set run-docker: @docker run -d \ -e DOKKU_SSH_HOST='{{dokku_ssh_host}}' \ -e DOKKU_SSH_PORT='{{dokku_ssh_port}}' \ -e DB_PATH='{{db_path}}' \ {{shokku_image}} ### # Private helper recipes ### ## dependencies @_install-dependencies: go install github.com/cespare/reflex@latest {{ui_npm}} install > /dev/null go mod tidy ## ## helpers @_touch-cmd-dist: mkdir -p ./cmd/shokku/dist && touch ./cmd/shokku/dist/bleh @_run-with-env +CMD: DOKKU_SSH_HOST='{{dokku_ssh_host}}' \ DOKKU_SSH_PORT='{{dokku_ssh_port}}' \ DB_PATH='{{db_path}}' \ DEBUG_MODE=true \ {{CMD}} ## ## builds & cleaning @_clean-backend: go clean -rm -r ./cmd/shokku/dist &> /dev/null -rm {{db_path}} &> /dev/null -rm {{host_keyfile}} &> /dev/null @_clean-docker: -docker rm -f {{dokku_container_name}} &> /dev/null -sudo rm -r {{dokku_data_mount_dir}} &> /dev/null ## ## Setup @_setup-backend: _touch-cmd-dist just _run-with-env go run ./cmd/shokku bootstrap > {{host_keyfile}} just _add-dokku-ssh-key; _setup-dokku: #!/bin/bash if [[ -z $(docker ps -a | grep '{{dokku_container_name}}') ]]; then just _run-dokku-container; just _install-dokku-plugins; elif [[ `docker container inspect -f '{{{{.State.Running}}' '{{dokku_container_name}}'` == 'false' ]]; then docker start {{dokku_container_name}}; fi @_run-dokku-container: docker run -d \ --env DOKKU_HOSTNAME=dokku.me \ --env DOKKU_HOST_ROOT={{dokku_data_mount_dir}}/home/dokku \ --env DOKKU_LIB_HOST_ROOT={{dokku_data_mount_dir}}/var/lib/dokku \ --name {{dokku_container_name}} \ --publish {{dokku_ssh_port}}:22 \ --volume {{dokku_data_mount_dir}}:/mnt/dokku \ --volume /var/run/docker.sock:/var/run/docker.sock \ {{dokku_image}} > /dev/null if [[ "{{ os() }}" == 'macos' ]]; then \ docker exec shokku-dokku-dev bash -c \ 'groupmod -g 99 systemd-timesync && groupmod -g 101 docker'; fi @_install-dokku-plugins: echo "installing dokku plugins" for plugin in redis postgres mongo mysql letsencrypt; do \ echo "installing $plugin"; \ docker exec {{dokku_container_name}} bash -c \ "dokku plugin:install https://github.com/dokku/dokku-$plugin.git" > /dev/null; \ done # to fix plugins: https://github.com/dokku/dokku/issues/5004 # -docker exec {{dokku_container_name}} bash -c "rm -r /mnt/dokku/services" 2&> /dev/null # -docker exec {{dokku_container_name}} bash -c "mv /var/lib/dokku/services /mnt/dokku/" # -docker exec {{dokku_container_name}} bash -c "ln -s /mnt/dokku/services/ /var/lib/dokku/services" @_add-dokku-ssh-key: docker exec {{dokku_container_name}} bash -c \ 'cd /home/ \ && rm -f {{container_keyfile}} \ && touch {{container_keyfile}} \ && chown dokku:dokku {{container_keyfile}}' docker exec {{dokku_container_name}} bash -c \ "echo '$(cat {{host_keyfile}})' | dokku ssh-keys:add admin" > /dev/null ##