saltyim is the Go library and reference client and broker implementation for Salty IM it contains a command-line client (cli), a terminal user interface (tui), builtin server/broker and a Mobile / Desktop App PWA (progressive web app)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
3.4 KiB

.PHONY: help deps dev build install image release test clean clean-all
export CGO_ENABLED=0
VERSION=$(shell git describe --abbrev=0 --tags 2>/dev/null || echo "0.0.0")
COMMIT=$(shell git rev-parse --short HEAD || echo "HEAD")
BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
ifeq ($(BRANCH), master)
IMAGE := prologic/saltyim
TAG := latest
IMAGE := prologic/saltyim
TAG := dev
all: help
.PHONY: help
help: ## Show this help message
@echo " - secure, easy, self-hosted messaging"
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[$$()% a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
preflight: ## Run preflight checks to ensure you have the right build tools
deps: ## Install any dependencies required
@$(GOCMD) install
@$(GOCMD) install
@/bin/sh -c 'cd certs && minica --domains ",*"'
certs: certs/minica-key.pem certs/minica.pem certs/ certs/
dev : DEBUG=1
dev : certs pwa ## Build debug version of salty-chat (CLI and TUI) and saltyd (Broker and PWA)
@CGO_ENABLED=1 $(GOCMD) build ./cmd/salty-chat/...
@CGO_ENABLED=1 $(GOCMD) build -tags "embed" ./cmd/saltyd/...
@./saltyd -D -b :https --tls \
--tls-key ./certs/ \
--tls-cert ./certs/
cli: ## Build the salty-chat command-line client and tui
@$(GOCMD) build -tags "netgo static_build" -installsuffix netgo \
-ldflags "-w \
-X $(shell go list).Version=$(VERSION) \
-X $(shell go list).Commit=$(COMMIT)" \
server: generate pwa ## Build the saltyd server and broker (also includes the PWA)
@$(GOCMD) build -tags "embed netgo static_build" -installsuffix netgo \
-ldflags "-w \
-X $(shell go list).Version=$(VERSION) \
-X $(shell go list).Commit=$(COMMIT)" \
build: cli server ## Build the cli and the server
generate: ## Genereate any code required by the build
@if [ x"$(DEBUG)" = x"1" ]; then \
echo 'Running in debug mode...'; \
PWA_SRCS = $(shell ls *.go) ./internal/server.go $(shell find ./internal/pwa -type f)
internal/web/app.wasm: $(PWA_SRCS)
@GOARCH=wasm GOOS=js $(GOCMD) build -o ./internal/web/app.wasm ./internal/pwa/
pwa: internal/web/app.wasm
install: build ## Install salty-chat (cli) and saltyd (server) to $DESTDIR
@install -D -m 755 salty-chat $(DESTDIR)/salty-chat
@install -D -m 755 saltyd $(DESTDIR)/saltyd
ifeq ($(PUBLISH), 1)
image: generate ## Build the Docker image
@docker build --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" -t $(IMAGE):$(TAG) .
@docker push $(IMAGE):$(TAG)
image: generate
@docker build --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" -t $(IMAGE):$(TAG) .
release: generate ## Release a new version to Gitea
fmt: ## Format sources fiels
@$(GOCMD) fmt ./...
test: ## Run test suite
@CGO_ENABLED=1 $(GOCMD) test -v -cover -race ./...
coverage: ## Get test coverage report
@CGO_ENABLED=1 $(GOCMD) test -v -cover -race -cover -coverprofile=coverage.out ./...
@$(GOCMD) tool cover -html=coverage.out
clean: ## Remove untracked files
@git clean -f -d -x -e certs
clean-all: ## Remove untracked and Git ignores files
@git clean -f -d -X