Skip to content

Commit 19476ee

Browse files
committed
refactor the stuff
1 parent 1da5901 commit 19476ee

File tree

4 files changed

+141
-35
lines changed

4 files changed

+141
-35
lines changed

Diff for: base.mk

+50-24
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,62 @@
1-
BUILD_DIR ?= $(shell pwd)/.build
2-
DOCKER_REGISTRY ?= localhost:5000
3-
4-
makeFileDir := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
5-
IMAGE_TARGETS=$(addprefix images/Dockerfile.,$(ARTIFACTS))
6-
IMAGE_TAG=$(shell $(makeFileDir)/docker_tag.sh)
7-
8-
.PHONY: default verify pre-build pre-image build image run main extra $(IMAGE_TARGETS) lint test cover clean
1+
# public variables that can be changed by projects
2+
BUILD_DIR ?= .build
3+
COVERAGE_DIR ?= $(BUILD_DIR)/coverage
94

5+
# _DEFAULT_BUILD_TARGETS can be modified by sub-makefiles to add additional "default" behaviour
6+
# when you run `make`
7+
_DEFAULT_BUILD_TARGETS = build
108
.DEFAULT_GOAL = default
9+
.PHONY: default
10+
default:
11+
make $(_DEFAULT_BUILD_TARGETS)
1112

12-
default: build image run
13-
13+
.PHONY: verify
1414
verify: lint test cover
1515

16-
$(BUILD_DIR):
16+
$(BUILD_DIR) $(COVERAGE_DIR):
1717
mkdir -p $@
1818

19-
# "order-only" dependency (the `|`) ensures that the build dir exists before running the build step
20-
build: | $(BUILD_DIR)
21-
make pre-build main extra
19+
# We define a buch of internal make targets prefixed with '_'; these all use the double-colon
20+
# syntax to allow us to add new commands to them in other *internal* makefiles. They're not
21+
# intended to be modified or overwritten in project-specific makefiles. Each of these
22+
# are pre-requisites for the "public" targets, which have the same name without the underscore
23+
.PHONY: _setup
24+
_setup::
25+
pre-commit install
2226

23-
image: pre-image $(IMAGE_TARGETS)
27+
.PHONY: _lint
28+
_lint::
29+
pre-commit run --all
2430

25-
$(IMAGE_TARGETS):
26-
PROJECT_NAME=$(subst images/Dockerfile.,,$@) && \
27-
IMAGE_NAME=$(DOCKER_REGISTRY)/$$PROJECT_NAME:$(IMAGE_TAG) && \
28-
docker build $(BUILD_DIR) -f $@ -t $$IMAGE_NAME && \
29-
docker push $$IMAGE_NAME && \
30-
printf "$$IMAGE_NAME" > $(BUILD_DIR)/$${PROJECT_NAME}-image
31+
.PHONY: _test
32+
_test:: | $(COVERAGE_DIR)
33+
rm -rf $(COVERAGE_DIR)/*
3134

32-
setup::
33-
pre-commit install
35+
.PHONY: _cover
36+
_cover::
37+
38+
.PHONY: _build
39+
_build:: | $(BUILD_DIR)
3440

35-
clean::
41+
.PHONY: _clean
42+
_clean::
3643
rm -rf $(BUILD_DIR)
44+
45+
# Public targets defined below
46+
.PHONY: setup
47+
setup: _setup
48+
49+
.PHONY: lint
50+
lint: _lint
51+
52+
.PHONY: test
53+
test: _test
54+
55+
.PHONY: cover
56+
cover: _cover
57+
58+
.PHONY: build
59+
build: _build
60+
61+
.PHONY: clean
62+
clean: _clean

Diff for: image.mk

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
DOCKER_REGISTRY ?= localhost:5000
2+
3+
makeFileDir := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
4+
IMAGE_DEPS=
5+
IMAGE_TARGETS=$(addprefix images/Dockerfile.,$(ARTIFACTS))
6+
IMAGE_TAG=$(shell $(makeFileDir)/docker_tag.sh)
7+
_DEFAULT_BUILD_TARGETS += image
8+
9+
.PHONY: _image
10+
_image::
11+
make $(IMAGE_DEPS)
12+
13+
.PHONY: $(IMAGE_TARGETS)
14+
$(IMAGE_TARGETS):
15+
PROJECT_NAME=$(subst images/Dockerfile.,,$@) && \
16+
IMAGE_NAME=$(DOCKER_REGISTRY)/$$PROJECT_NAME:$(IMAGE_TAG) && \
17+
docker build $(BUILD_DIR) -f $@ -t $$IMAGE_NAME && \
18+
docker push $$IMAGE_NAME && \
19+
printf "$$IMAGE_NAME" > $(BUILD_DIR)/$${PROJECT_NAME}-image
20+
21+
.PHONY: image
22+
image: _image $(IMAGE_TARGETS)

Diff for: k8s.mk

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1+
K8S_INPUT_DIR ?= k8s
12
K8S_MANIFESTS_DIR ?= $(BUILD_DIR)/manifests
23
KUSTOMIZE_DIR ?= kustomize
34

4-
.PHONY: pre-k8s k8s kustomize
5+
APP_VERSION=$(shell tomlq -r .workspace.package.version Cargo.toml)
6+
_DEFAULT_BUILD_TARGETS += run
57

68
$(K8S_MANIFESTS_DIR):
79
mkdir -p $@
810

9-
pre-k8s:: | $(K8S_MANIFESTS_DIR)
10-
if [ -f "k8s/pyproject.toml" ]; then cd k8s && poetry install; fi
11+
.PHONY: _k8s
12+
_k8s:: | $(K8S_MANIFESTS_DIR)
13+
if [ -f "$(K8S_INPUT_DIR)/pyproject.toml" ]; then cd $(K8S_INPUT_DIR) && poetry install; fi
14+
make $(K8S_DEPS)
1115

12-
k8s: pre-k8s
13-
cp -r k8s/raw $(K8S_MANIFESTS_DIR) || true
14-
if [ -f "k8s/pyproject.toml" ]; then \
15-
cd k8s && JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 CDK8S_OUTDIR=$(K8S_MANIFESTS_DIR) BUILD_DIR=$(BUILD_DIR) poetry run ./main.py; \
16+
.PHONY: k8s
17+
k8s: _k8s
18+
cp -r $(K8S_INPUT_DIR)/raw $(K8S_MANIFESTS_DIR) || true
19+
if [ -f "$(K8S_INPUT_DIR)/pyproject.toml" ]; then \
20+
cd $(K8S_INPUT_DIR) && JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 CDK8S_OUTDIR=../$(K8S_MANIFESTS_DIR) BUILD_DIR=../$(BUILD_DIR) poetry run ./main.py; \
1621
fi
1722

18-
kustomize: pre-k8s
19-
cd k8s && rm -rf $(KUSTOMIZE_DIR)/* && mkdir -p $(KUSTOMIZE_DIR) && cp raw/* $(KUSTOMIZE_DIR)/.|| true
20-
cd k8s && JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 CDK8S_OUTDIR=$(KUSTOMIZE_DIR) BUILD_DIR=$(KUSTOMIZE_DIR) APP_VERSION=$(APP_VERSION) poetry run ./main.py --kustomize
23+
.PHONY: kustomize
24+
kustomize: _k8s
25+
cd $(K8S_INPUT_DIR) && rm -rf $(KUSTOMIZE_DIR)/* && mkdir -p $(KUSTOMIZE_DIR) && cp raw/* $(KUSTOMIZE_DIR)/. || true
26+
cd $(K8S_INPUT_DIR) && JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 CDK8S_OUTDIR=$(KUSTOMIZE_DIR) BUILD_DIR=$(KUSTOMIZE_DIR) APP_VERSION=$(APP_VERSION) poetry run ./main.py --kustomize
2127

22-
run: k8s
28+
.PHONY: run
29+
run: $(K8S_INPUT_DIR)
2330
kubectl apply -f $(K8S_MANIFESTS_DIR)/raw || true
2431
kubectl apply -f $(K8S_MANIFESTS_DIR)

Diff for: rust.mk

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
CARGO ?= cargo
2+
COVERAGE_IGNORES='../*' '/*' '*/tests/*' '*_test.rs' '$(BUILD_DIR)/*'
3+
CARGO_TEST_PREFIX=RUSTFLAGS='-Cinstrument-coverage' LLVM_PROFILE_FILE='$(COVERAGE_DIR)/cargo-test-%p-%m.profraw'
4+
5+
ifdef IN_CI
6+
RUST_COVER_TYPE ?= lcov
7+
else
8+
RUST_COVER_TYPE=markdown
9+
endif
10+
11+
RUST_COVER_FILE=$(COVERAGE_DIR)/rust-coverage.$(RUST_COVER_TYPE)
12+
13+
.PHONY: _version
14+
_version:
15+
cargo version
16+
17+
_build:: _version
18+
19+
_test:: _version
20+
21+
test: unit itest
22+
23+
.PHONY: unit
24+
unit:
25+
@$(CARGO_TEST_PREFIX) $(CARGO) test --profile test-cover $(CARGO_TEST) -- --skip itest
26+
27+
.PHONY: itest
28+
itest:
29+
@$(CARGO_TEST_PREFIX) $(CARGO) test itest --profile test-cover -- --nocapture --test-threads=1
30+
31+
build:
32+
$(CARGO) build
33+
34+
_cover::
35+
grcov . --binary-path $(BUILD_DIR)/test-cover/deps -s . -t $(RUST_COVER_TYPE) -o $(RUST_COVER_FILE) --branch \
36+
$(addprefix --ignore ,$(COVERAGE_IGNORES)) \
37+
--excl-line '#\[derive' \
38+
--excl-start '#\[cfg\((test|feature = "testutils")'
39+
@if [ "$(RUST_COVER_TYPE)" = "markdown" ]; then cat $(RUST_COVER_FILE); fi
40+
41+
.PHONY: release
42+
release: NEW_APP_VERSION=$(subst v,,$(shell git cliff --bumped-version))
43+
release:
44+
cargo set-version $(NEW_APP_VERSION)
45+
git cliff -u --tag $(NEW_APP_VERSION) --prepend CHANGELOG.md
46+
git commit -a -m "release: version v$(NEW_APP_VERSION)" && \
47+
git tag v$(NEW_APP_VERSION)
48+
49+
.PHONY: publish
50+
publish:
51+
cargo ws publish --publish-as-is

0 commit comments

Comments
 (0)