mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-08-14 22:53:00 +02:00
.github
api
build
cmd
configs
docs
init
internal
pkg
tools
web
.gitignore
.goreleaser.yaml
LICENSE
Makefile
README.md
ReleaseNotes.md
go.mod
go.sum
gqlgen.yml
startDemo.sh
tools.go
166 lines
6.0 KiB
Makefile
166 lines
6.0 KiB
Makefile
TARGET = ./cc-backend
|
|
VAR = ./var
|
|
CFG = config.json .env
|
|
FRONTEND = ./web/frontend
|
|
VERSION = 1.0.0
|
|
GIT_HASH := $(shell git rev-parse --short HEAD || echo 'development')
|
|
CURRENT_TIME = $(shell date +"%Y-%m-%d:T%H:%M:%S")
|
|
LD_FLAGS = '-s -X main.date=${CURRENT_TIME} -X main.version=${VERSION} -X main.commit=${GIT_HASH}'
|
|
|
|
EXECUTABLES = go npm
|
|
K := $(foreach exec,$(EXECUTABLES),\
|
|
$(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH")))
|
|
|
|
SVELTE_COMPONENTS = status \
|
|
analysis \
|
|
node \
|
|
systems \
|
|
job \
|
|
list \
|
|
user \
|
|
jobs \
|
|
header
|
|
|
|
SVELTE_TARGETS = $(addprefix $(FRONTEND)/public/build/,$(addsuffix .js, $(SVELTE_COMPONENTS)))
|
|
SVELTE_SRC = $(wildcard $(FRONTEND)/src/*.svelte) \
|
|
$(wildcard $(FRONTEND)/src/*.js) \
|
|
$(wildcard $(FRONTEND)/src/filters/*.svelte) \
|
|
$(wildcard $(FRONTEND)/src/plots/*.svelte) \
|
|
$(wildcard $(FRONTEND)/src/joblist/*.svelte)
|
|
|
|
.PHONY: clean test tags frontend $(TARGET)
|
|
|
|
.NOTPARALLEL:
|
|
|
|
$(TARGET): $(VAR) $(CFG) $(SVELTE_TARGETS)
|
|
$(info ===> BUILD cc-backend)
|
|
@go build -ldflags=${LD_FLAGS} ./cmd/cc-backend
|
|
|
|
frontend:
|
|
$(info ===> BUILD frontend)
|
|
cd web/frontend && npm install && npm run build
|
|
|
|
clean:
|
|
$(info ===> CLEAN)
|
|
@go clean
|
|
@rm -f $(TARGET)
|
|
|
|
distclean:
|
|
@$(MAKE) clean
|
|
$(info ===> DISTCLEAN)
|
|
@rm -rf $(FRONTEND)/node_modules
|
|
@rm -rf $(VAR)
|
|
|
|
test:
|
|
$(info ===> TESTING)
|
|
@go clean -testcache
|
|
@go build ./...
|
|
@go vet ./...
|
|
@go test ./...
|
|
|
|
tags:
|
|
$(info ===> TAGS)
|
|
@ctags -R
|
|
|
|
$(VAR):
|
|
@mkdir $(VAR)
|
|
|
|
config.json:
|
|
$(info ===> Initialize config.json file)
|
|
@cp configs/config.json config.json
|
|
|
|
.env:
|
|
$(info ===> Initialize .env file)
|
|
@cp configs/env-template.txt .env
|
|
|
|
$(SVELTE_TARGETS): $(SVELTE_SRC)
|
|
$(info ===> BUILD frontend)
|
|
cd web/frontend && npm install && npm run build
|
|
|
|
install: $(TARGET)
|
|
@WORKSPACE=$(PREFIX)
|
|
@if [ -z "$${WORKSPACE}" ]; then exit 1; fi
|
|
@mkdir --parents --verbose $${WORKSPACE}/usr/$(BINDIR)
|
|
@install -Dpm 755 $(TARGET) $${WORKSPACE}/usr/$(BINDIR)/$(TARGET)
|
|
@install -Dpm 600 configs/config.json $${WORKSPACE}/etc/$(TARGET)/$(TARGET).json
|
|
|
|
.ONESHELL:
|
|
.PHONY: RPM
|
|
RPM: build/package/cc-backend.spec
|
|
@WORKSPACE="$${PWD}"
|
|
@SPECFILE="$${WORKSPACE}/build/package/cc-backend.spec"
|
|
# Setup RPM build tree
|
|
@eval $$(rpm --eval "ARCH='%{_arch}' RPMDIR='%{_rpmdir}' SOURCEDIR='%{_sourcedir}' SPECDIR='%{_specdir}' SRPMDIR='%{_srcrpmdir}' BUILDDIR='%{_builddir}'")
|
|
@mkdir --parents --verbose "$${RPMDIR}" "$${SOURCEDIR}" "$${SPECDIR}" "$${SRPMDIR}" "$${BUILDDIR}"
|
|
# Create source tarball
|
|
@COMMITISH="HEAD"
|
|
@VERS=$$(git describe --tags $${COMMITISH})
|
|
@VERS=$${VERS#v}
|
|
@VERS=$$(echo $$VERS | sed -e s+'-'+'_'+g)
|
|
@if [ "$${VERS}" = "" ]; then VERS="$(VERSION)"; fi
|
|
@eval $$(rpmspec --query --queryformat "NAME='%{name}' VERSION='%{version}' RELEASE='%{release}' NVR='%{NVR}' NVRA='%{NVRA}'" --define="VERS $${VERS}" "$${SPECFILE}")
|
|
@PREFIX="$${NAME}-$${VERSION}"
|
|
@FORMAT="tar.gz"
|
|
@SRCFILE="$${SOURCEDIR}/$${PREFIX}.$${FORMAT}"
|
|
@git archive --verbose --format "$${FORMAT}" --prefix="$${PREFIX}/" --output="$${SRCFILE}" $${COMMITISH}
|
|
# Build RPM and SRPM
|
|
@rpmbuild -ba --define="VERS $${VERS}" --rmsource --clean "$${SPECFILE}"
|
|
# Report RPMs and SRPMs when in GitHub Workflow
|
|
@if [ "$${GITHUB_ACTIONS}" = true ]; then
|
|
@ RPMFILE="$${RPMDIR}/$${ARCH}/$${NVRA}.rpm"
|
|
@ SRPMFILE="$${SRPMDIR}/$${NVR}.src.rpm"
|
|
@ echo "RPM: $${RPMFILE}"
|
|
@ echo "SRPM: $${SRPMFILE}"
|
|
@ echo "::set-output name=SRPM::$${SRPMFILE}"
|
|
@ echo "::set-output name=RPM::$${RPMFILE}"
|
|
@fi
|
|
|
|
.ONESHELL:
|
|
.PHONY: DEB
|
|
DEB: build/package/cc-backend.deb.control
|
|
@BASEDIR=$${PWD}
|
|
@WORKSPACE=$${PWD}/.dpkgbuild
|
|
@DEBIANDIR=$${WORKSPACE}/debian
|
|
@DEBIANBINDIR=$${WORKSPACE}/DEBIAN
|
|
@mkdir --parents --verbose $$WORKSPACE $$DEBIANBINDIR
|
|
#@mkdir --parents --verbose $$DEBIANDIR
|
|
@CONTROLFILE="$${BASEDIR}/build/package/cc-backend.deb.control"
|
|
@COMMITISH="HEAD"
|
|
@VERS=$$(git describe --tags --abbrev=0 $${COMMITISH})
|
|
@VERS=$${VERS#v}
|
|
@VERS=$$(echo $$VERS | sed -e s+'-'+'_'+g)
|
|
@if [ "$${VERS}" = "" ]; then VERS="$(VERSION)"; fi
|
|
@ARCH=$$(uname -m)
|
|
@ARCH=$$(echo $$ARCH | sed -e s+'_'+'-'+g)
|
|
@if [ "$${ARCH}" = "x86-64" ]; then ARCH=amd64; fi
|
|
@PREFIX="$${NAME}-$${VERSION}_$${ARCH}"
|
|
@SIZE_BYTES=$$(du -bcs --exclude=.dpkgbuild "$${WORKSPACE}"/ | awk '{print $$1}' | head -1 | sed -e 's/^0\+//')
|
|
@SIZE="$$(awk -v size="$$SIZE_BYTES" 'BEGIN {print (size/1024)+1}' | awk '{print int($$0)}')"
|
|
#@sed -e s+"{VERSION}"+"$$VERS"+g -e s+"{INSTALLED_SIZE}"+"$$SIZE"+g -e s+"{ARCH}"+"$$ARCH"+g $$CONTROLFILE > $${DEBIANDIR}/control
|
|
@sed -e s+"{VERSION}"+"$$VERS"+g -e s+"{INSTALLED_SIZE}"+"$$SIZE"+g -e s+"{ARCH}"+"$$ARCH"+g $$CONTROLFILE > $${DEBIANBINDIR}/control
|
|
@mkdir --parents --verbose "$${WORKSPACE}"/$(VAR)
|
|
@touch "$${WORKSPACE}"/$(VAR)/job.db
|
|
@cd web/frontend && yarn install && yarn build && cd -
|
|
@go build -ldflags=${LD_FLAGS} ./cmd/cc-backend
|
|
@mkdir --parents --verbose $${WORKSPACE}/usr/$(BINDIR)
|
|
@cp $(TARGET) $${WORKSPACE}/usr/$(BINDIR)/$(TARGET)
|
|
@chmod 0755 $${WORKSPACE}/usr/$(BINDIR)/$(TARGET)
|
|
@mkdir --parents --verbose $${WORKSPACE}/etc/$(TARGET)
|
|
@cp configs/config.json $${WORKSPACE}/etc/$(TARGET)/$(TARGET).json
|
|
@chmod 0600 $${WORKSPACE}/etc/$(TARGET)/$(TARGET).json
|
|
@mkdir --parents --verbose $${WORKSPACE}/usr/lib/systemd/system
|
|
@cp build/package/$(TARGET).service $${WORKSPACE}/usr/lib/systemd/system/$(TARGET).service
|
|
@chmod 0644 $${WORKSPACE}/usr/lib/systemd/system/$(TARGET).service
|
|
@mkdir --parents --verbose $${WORKSPACE}/etc/default
|
|
@cp build/package/$(TARGET).config $${WORKSPACE}/etc/default/$(TARGET)
|
|
@chmod 0600 $${WORKSPACE}/etc/default/$(TARGET)
|
|
@mkdir --parents --verbose $${WORKSPACE}/usr/lib/sysusers.d
|
|
@cp build/package/$(TARGET).sysusers $${WORKSPACE}/usr/lib/sysusers.d/$(TARGET).conf
|
|
@chmod 0644 $${WORKSPACE}/usr/lib/sysusers.d/$(TARGET).conf
|
|
@DEB_FILE="cc-metric-store_$${VERS}_$${ARCH}.deb"
|
|
@dpkg-deb -b $${WORKSPACE} "$$DEB_FILE"
|
|
@rm -r "$${WORKSPACE}"
|
|
@if [ "$${GITHUB_ACTIONS}" = "true" ]; then
|
|
@ echo "::set-output name=DEB::$${DEB_FILE}"
|
|
@fi
|