-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
155 lines (131 loc) · 4.94 KB
/
Copy pathMakefile
File metadata and controls
155 lines (131 loc) · 4.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# Copyright © 2018 Bloombox, LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
## Bloombox: Java API Client
#
BUILDMODE ?= gradle
TESTS ?= yes
RELEASE_VERSION ?= 1.8
CLIENT_VERSION ?= 1.8-SNAPSHOT
SERVICE_ARGS ?= -Dbloombox.shop.version=$(SHOP_VERSION) -Dbloombox.telemetry.version=$(TELEMETRY_VERSION)
SCHEMA ?= schema/
RELEASE_ARGS ?= -DperformRelease=true
RELEASE_GOALS ?= release:prepare release:perform
EMBEDDED_SCHEMA ?= yes
CURRENT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
GRADLE_VERSION ?= 4.8.1
ifeq ($(BUILDMODE),maven)
TARGET ?= target/
TARGET_JAR ?= $(TARGET)java-client-$(CLIENT_VERSION).jar
DEFAULT_GOALS = clean package install
endif
ifeq ($(BUILDMODE),gradle)
TARGET ?= build/
TARGET_JAR ?= $(TARGET)java-client-$(CLIENT_VERSION).jar
DEFAULT_GOALS = clean build
endif
GOALS ?= $(DEFAULT_GOALS)
all: build
EXTRA_FLAGS ?=
ifeq ($(TESTS),no)
EXTRA_FLAGS += -DskipTests
endif
ifeq ($(EMBEDDED_SCHEMA),yes)
POMFILE ?= pom.xml
else
POMFILE ?= pom-embedded.xml
endif
build: $(TARGET_JAR)
clean:
@echo "Cleaning Java client artifacts..."
@rm -fr $(TARGET)
ifeq ($(EMBEDDED_SCHEMA),yes)
ifeq ($(BUILDMODE),maven)
$(TARGET_JAR):
@echo "Building Java Client for Bloombox (Maven)..."
@mvn -f $(POMFILE) $(GOALS) -Dproject.version=$(CLIENT_VERSION) -Dbloombox.snapshot $(SERVICE_ARGS) $(EXTRA_FLAGS)
endif
ifeq ($(BUILDMODE),gradle)
$(TARGET_JAR):
@echo "Building Java Client for Bloombox (Gradle)..."
@./gradlew $(GOALS) -Dproject.version=$(CLIENT_VERSION) -Dbloombox.snapshot $(SERVICE_ARGS) $(EXTRA_FLAGS)
endif
else
ifeq ($(BUILDMODE),maven)
$(TARGET_JAR):
@echo "Cleaning embedded schema..."
@rm -frv src/main/java/io
@echo "Building Java client for Bloombox (Maven)..."
@mvn -f $(POMFILE) $(GOALS) -Dproject.version=$(CLIENT_VERSION) -Dbloombox.snapshot $(SERVICE_ARGS) $(EXTRA_FLAGS)
endif
ifeq ($(BUILDMODE),gradle)
$(TARGET_JAR):
@echo "Cleaning embedded schema..."
@rm -frv src/main/java/io
@echo "Building Java client for Bloombox (Gradle)..."
@gradle $(GOALS) -Dproject.version=$(CLIENT_VERSION) -Dbloombox.snapshot $(SERVICE_ARGS) $(EXTRA_FLAGS)
endif
endif
docs:
@echo "Building docs and publishing site..."
@mvn dokka:dokka javadoc:javadoc
@mvn site:site
@cd target/site && git init && git add . && git commit -m "Update docs" && git checkout -b gh-pages && git remote add origin git@github.com:bloombox/java.git && git push origin gh-pages --force && rm -fr .git
@echo "Docs published."
ifeq ($(BUILDMODE),maven)
release:
@echo "Building release for Bloombox Java Client 'v$(RELEASE_VERSION)'..."
@mvn -f $(POMFILE) clean package install site:site $(RELEASE_GOALS) -Dproject.version=$(RELEASE_VERSION) -Dbloombox.release $(SERVICE_ARGS) $(RELEASE_ARGS)
@mvn site:site
@cd target/site && git init && git add . && git commit -m "Update docs" && git checkout -b gh-pages && git remote add origin git@github.com:bloombox/java.git && git push origin gh-pages --force && rm -fr .git
@echo "Docs published."
else
release:
@echo "Releases not supported via any tool other than Maven. Please run with BUILDMODE=maven."
endif
$(SCHEMA):
@echo "Syncing schema..."
@git submodule update --init --remote schema
sync-schema: $(SCHEMA)
@echo "Updating schema..."
@git submodule update --init --remote schema
@echo "Building schema..."
@$(MAKE) -C schema SERVICES=yes TABLES=no LANGUAGES=java PROTO_FLAGS=--grpc-java_out=languages/java
@echo "Copying schemas..."
@mkdir -p src/main/java/
@rm -fr src/main/java/*
@cp -fr schema/languages/java/ src/main/java/
embedded:
@echo "Building embedded library..."
@mv pom.xml pom-standard.xml
@mv pom-embedded.xml pom.xml
@mv build.gradle build-standard.gradle
@mv build-embedded.gradle build.gradle
@mvn clean package && echo "Cutting new branch..." && git branch -D embedded && git checkout -b embedded && echo "Removing schema..." && rm -fr src/main/java/* && echo "Schema is not included with embedded library." > src/main/README.md && git add . && git commit -m "Embedded: $(CLIENT_VERSION)" && git push origin embedded --force && git checkout $(CURRENT_BRANCH)
ifeq ($(BUILDMODE),maven)
build-ci:
@echo "Building from CI (Maven)..."
@mvn -f pom.xml install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip -B -V
run-ci:
@echo "Running tests from CI (Maven)..."
@mvn -f pom.xml test jacoco:report -B
else
build-ci:
@echo "Building from CI (Gradle)..."
@./gradlew wrapper --gradle-version=$(GRADLE_VERSION) --distribution-type=bin
@./gradlew build
run-ci:
@echo "Running tests from CI (Gradle)..."
@./gradlew test
endif