-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
135 lines (116 loc) · 4.82 KB
/
Copy pathMakefile
File metadata and controls
135 lines (116 loc) · 4.82 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
.PHONY: install build test clean publish e2e lint package install-local javadoc check check-version-sync examples-build example help
# Docker configuration
# Build/lint/javadoc/deploy run on JDK 25 (checkstyle 10 requires Java 11+).
DOCKER_IMAGE := maven:3.9-eclipse-temurin-25
# Tests run on JDK 8 so the suite exercises the SDK in the actual merchant runtime.
TEST_IMAGE := maven:3.9-eclipse-temurin-8
WORKDIR := /app
EXAMPLE ?= QuickstartExample
# Run Maven via Docker (image is the argument). Mount cwd + Maven cache for faster builds.
docker_mvn = docker run --rm -v "$(shell pwd)":/app -v "$(HOME)/.m2":/root/.m2 -w $(WORKDIR) $(1) mvn
# JDK 25 for build/lint/javadoc/deploy; JDK 8 for tests (the merchant runtime).
MVN := $(call docker_mvn,$(DOCKER_IMAGE))
TEST_MVN := $(call docker_mvn,$(TEST_IMAGE))
# Default target
all: build
# Install dependencies
install:
$(MVN) dependency:resolve
# Build the project
build:
$(MVN) clean package -DskipTests
# Run unit tests (on a Java 8 JVM — merchant runtime)
test:
$(TEST_MVN) test
# Run end-to-end tests (requires environment variables)
e2e:
docker run --rm \
-v "$(shell pwd)":/app \
-v "$(HOME)/.m2":/root/.m2 \
-w $(WORKDIR) \
-e ENV=$(ENV) \
-e MERCHANT_CLIENT_ID=$(MERCHANT_CLIENT_ID) \
-e MERCHANT_CLIENT_SECRET=$(MERCHANT_CLIENT_SECRET) \
-e CUSTOMER=$(CUSTOMER) \
-e CHARGE_FULL_REFUND=$(CHARGE_FULL_REFUND) \
-e CHARGE_PARTIAL_REFUND=$(CHARGE_PARTIAL_REFUND) \
-e PARTIAL_REFUND_AMOUNT=$(PARTIAL_REFUND_AMOUNT) \
$(TEST_IMAGE) \
mvn test -Dtest=*E2ETest
# Clean build artifacts
clean:
$(MVN) clean
# Run linting/checkstyle
lint:
$(MVN) checkstyle:check
# Package for release (includes sources and javadoc)
package:
$(MVN) clean package
# Deploy to Maven Central (requires GPG setup and credentials)
publish:
$(MVN) clean deploy -P release
# Install to local Maven repository
install-local:
$(MVN) clean install -DskipTests
# Generate Javadoc
javadoc:
$(MVN) javadoc:javadoc
# Verify README versions match pom.xml
check-version-sync:
@bash scripts/check-version-sync.sh
# Run all checks before committing
check: lint test check-version-sync
# Compile Java examples under examples/ into target/examples
examples-build:
docker run --rm \
-v "$(shell pwd)":/app \
-v "$(HOME)/.m2":/root/.m2 \
-w $(WORKDIR) \
$(DOCKER_IMAGE) \
sh -lc 'mvn -q -DskipTests package && \
mvn -q -DincludeScope=runtime -Dmdep.outputFile=target/classpath.txt dependency:build-classpath && \
javac -cp "target/classes:$$(cat target/classpath.txt)" examples/*.java -d target/examples'
# Run one example class, defaulting to QuickstartExample.
# Usage: make example EXAMPLE=PaymentOnSessionExample
example: examples-build
docker run --rm \
-v "$(shell pwd)":/app \
-v "$(HOME)/.m2":/root/.m2 \
-w $(WORKDIR) \
-e ENV=$(ENV) \
-e MERCHANT_CLIENT_ID=$(MERCHANT_CLIENT_ID) \
-e MERCHANT_CLIENT_SECRET=$(MERCHANT_CLIENT_SECRET) \
-e CUSTOMER=$(CUSTOMER) \
-e CHARGE=$(CHARGE) \
-e AMOUNT=$(AMOUNT) \
-e CHARGE_FULL_REFUND=$(CHARGE_FULL_REFUND) \
-e CHARGE_PARTIAL_REFUND=$(CHARGE_PARTIAL_REFUND) \
-e PARTIAL_REFUND_AMOUNT=$(PARTIAL_REFUND_AMOUNT) \
-e EMAIL=$(EMAIL) \
$(DOCKER_IMAGE) \
sh -lc 'java -cp "target/examples:target/classes:$$(cat target/classpath.txt)" $(EXAMPLE)'
# Display help
help:
@echo "Available targets:"
@echo " install - Download dependencies"
@echo " build - Build the project (skip tests)"
@echo " test - Run unit tests"
@echo " e2e - Run end-to-end tests (requires MERCHANT_CLIENT_ID and MERCHANT_CLIENT_SECRET, optional ENV)"
@echo " clean - Clean build artifacts"
@echo " lint - Run checkstyle"
@echo " package - Package JAR with sources and javadoc"
@echo " publish - Deploy to Maven Central"
@echo " install-local - Install to local Maven repository"
@echo " javadoc - Generate Javadoc"
@echo " check - Run lint and tests"
@echo " examples-build - Compile all examples in examples/"
@echo " example - Run one example (EXAMPLE=QuickstartExample by default)"
@echo ""
@echo "Example usage:"
@echo " make example EXAMPLE=QuickstartExample ENV=develop MERCHANT_CLIENT_ID=*** MERCHANT_CLIENT_SECRET=*** EMAIL=you@example.com"
@echo " make example EXAMPLE=PaymentOnSessionAddChargeExample ENV=develop MERCHANT_CLIENT_ID=*** MERCHANT_CLIENT_SECRET=*** CUSTOMER=cus-***"
@echo " make example EXAMPLE=RefundExample ENV=develop MERCHANT_CLIENT_ID=*** MERCHANT_CLIENT_SECRET=*** CHARGE=trx-***"
@echo " make example EXAMPLE=RefundExample ENV=develop MERCHANT_CLIENT_ID=*** MERCHANT_CLIENT_SECRET=*** CHARGE=trx-*** AMOUNT=50"
@echo " make example EXAMPLE=RefundPartialExample ENV=develop MERCHANT_CLIENT_ID=*** MERCHANT_CLIENT_SECRET=*** CHARGE_PARTIAL_REFUND=trx-*** PARTIAL_REFUND_AMOUNT=50"
@echo ""
@echo "All commands run via Docker using $(DOCKER_IMAGE)"