Skip to content
This repository was archived by the owner on Jul 6, 2023. It is now read-only.

Commit abd2396

Browse files
authored
Merge pull request #145 from jennyowen/java-repackage
Java repackage
2 parents 3d79d5b + f436400 commit abd2396

File tree

10 files changed

+120
-168
lines changed

10 files changed

+120
-168
lines changed

Makefile

Lines changed: 49 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,27 @@ else
2323
endif
2424

2525
rpmversion := $(versionnumber)-$(release)
26+
java_adapter_version:=1.0.0-1
2627

2728
GRADLE = ./gradlew -PbuildVersion=$(buildversion)
2829

2930
jarfile := cypher-shell.jar
30-
rpm-java8file := cypher-shell-java8-$(rpmversion).noarch.rpm
31-
rpm-java11file := cypher-shell-java11-$(rpmversion).noarch.rpm
32-
rpm-openjava11file := cypher-shell-openjava11-$(rpmversion).noarch.rpm
31+
rpmfile := cypher-shell-$(rpmversion).noarch.rpm
3332
debfile := cypher-shell_$(debversion)_all.deb
33+
java_adapter_files := neo4j-java-adapter-jre-11-$(java_adapter_version).noarch.rpm \
34+
neo4j-java-adapter-jre-11-headless-$(java_adapter_version).noarch.rpm
3435

3536
outputs := cypher-shell cypher-shell.bat $(jarfile)
3637
artifacts:=$(patsubst %,cypher-shell/build/install/cypher-shell/%,${outputs})
37-
rpm-java8_artifacts:=$(patsubst %,out/rpm-java8/BUILD/%,${artifacts})
38-
rpm-java11_artifacts:=$(patsubst %,out/rpm-java11/BUILD/%,${artifacts})
39-
rpm-openjava11_artifacts:=$(patsubst %,out/rpm-openjava11/BUILD/%,${artifacts})
38+
rpm_artifacts:=$(patsubst %,out/rpm/BUILD/%,${artifacts})
4039
deb_artifacts:=$(patsubst %,out/debian/cypher-shell-$(debversion)/%,${artifacts})
40+
java_adapter_artifacts:=$(patsubst %, out/%, ${java_adapter_files})
4141
deb_files:=$(wildcard packaging/debian/*)
4242
deb_targets:=$(patsubst packaging/debian/%,out/debian/cypher-shell-$(debversion)/debian/%,${deb_files})
4343

44-
DOCKERUUIDRPM := $(shell uuidgen)
44+
DOCKERUUIDRPM := $(shell uuidgen)
45+
YUMREPO_VOLUMEID := $(shell uuidgen)
46+
YUMREPO_IMAGEID := repomaker/$(shell uuidgen | head -c 5)
4547

4648
help: ## Print this help text
4749
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
@@ -128,117 +130,79 @@ out/cypher-shell.zip: tmp/cypher-shell.zip
128130
mkdir -p out
129131
cp $< $@
130132

131-
.PHONY: rpm
132-
rpm: rpm-java8 rpm-java11 rpm-openjava11
133-
134-
# ======================= RPM java 8 =======================
133+
# ======================= RPM JAVA-ADAPTER =======================
134+
## Build the java adapter package for java 11 compatibility
135+
## oracle and openjdk java 11 don't provide the same java package names any more,
136+
## and rpm might not be advanced enough to support boolean dependencies.
137+
## To fix that, we have a few empty java packages that provide various standard java package names.
138+
## This page is helpful for understanding this make code:
139+
## https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
135140

136-
out/rpm-java8/SPECS/cypher-shell.spec: packaging/rpm-java8/cypher-shell.spec
137-
mkdir -p $(dir $@)
138-
VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@
141+
.PHONY: java-adapter
142+
java-adapter: $(java_adapter_artifacts)
139143

140-
out/rpm-java8/BUILD/%: %
144+
out/neo4j-java-adapter-%.rpm: out/rpm/RPMS/noarch/neo4j-java-adapter-%.rpm
141145
mkdir -p $(dir $@)
142146
cp $< $@
143147

144-
out/%.rpm: out/rpm-java8/RPMS/noarch/%.rpm
145-
mkdir -p $(dir $@)
146-
cp $< $@
148+
out/rpm/RPMS/noarch/neo4j-java-adapter-%-$(java_adapter_version).noarch.rpm: out/rpm/SPECS/neo4j-java-adapter-%.spec
149+
rpmbuild --define "_topdir $(CURDIR)/out/rpm" -bb --clean $<
147150

148-
tmp/rpm-java8-test/%.rpm: out/rpm-java8/RPMS/noarch/%.rpm
151+
out/rpm/SPECS/neo4j-java-adapter-%.spec: packaging/rpm-java-adapter/neo4j-java-adapter-%.spec
149152
mkdir -p $(dir $@)
150153
cp $< $@
151154

152-
tmp/rpm-java8-test/Dockerfile: packaging/test/rpm/Dockerfile
153-
mkdir -p $(dir $@)
154-
RPMFILE=$(rpm-java8file) envsubst '$${RPMFILE}' < $< > $@
155-
156-
out/rpm-java8/RPMS/noarch/$(rpm-java8file): out/rpm-java8/SPECS/cypher-shell.spec $(rpm-java8_artifacts) out/rpm-java8/BUILD/Makefile out/rpm-java8/BUILD/cypher-shell.1.md
157-
rpmbuild --define "_topdir $(CURDIR)/out/rpm-java8" -bb --clean $<
155+
.PHONY: java-adapter-test
156+
java-adapter-test: tmp/java-adapter-test/tests/java-11-openjdk \
157+
tmp/java-adapter-test/tests/java-11-openjdk-headless \
158+
tmp/java-adapter-test/tests/java-1.8.0-openjdk \
159+
tmp/java-adapter-test/tests/java-1.8.0-openjdk-headless
158160

159-
.PHONY: rpm-java8
160-
rpm-java8: out/$(rpm-java8file) ## Build the RPM package
161-
162-
.PHONY: rpm-java8-test
163-
rpm-java8-test: tmp/rpm-java8-test/$(rpm-java8file) tmp/rpm-java8-test/Dockerfile ## Test the RPM java 8 package (requires Docker)
164-
cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version
161+
tmp/java-adapter-test/tests/%: $(java_adapter_artifacts) \
162+
out/$(rpmfile) \
163+
packaging/test/java-adapter/tempneo4j.repo \
164+
packaging/test/java-adapter/Dockerfile \
165+
packaging/test/java-adapter/entrypoint.sh
166+
mkdir -p $@
167+
cp $^ $@/
168+
TEST_JAVA=$* envsubst '$${TEST_JAVA}' < packaging/test/java-adapter/Dockerfile > $@/Dockerfile
169+
cd $@ && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM)
165170

166171

167-
# ======================= RPM open java 11 variant (OpenJDK) =======================
168-
# We unfortunately need to provide two cypher shell rpm packages because
169-
# Oracle and OpenJDK java 11 distros provide incompatible package names:
170-
# a) OpenJDK provides jre-11/java-11
171-
# b) Oracle provides jre/java/jdk
172+
# ======================= RPM CYPHER-SHELL =======================
172173

173-
out/rpm-openjava11/SPECS/cypher-shell.spec: packaging/rpm-openjava11/cypher-shell.spec
174+
out/rpm/SPECS/cypher-shell.spec: packaging/rpm/cypher-shell.spec
174175
mkdir -p $(dir $@)
175176
VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@
176177

177-
out/rpm-openjava11/BUILD/%: %
178+
out/rpm/BUILD/%: %
178179
mkdir -p $(dir $@)
179180
cp $< $@
180181

181-
out/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm
182+
out/%.rpm: out/rpm/RPMS/noarch/%.rpm
182183
mkdir -p $(dir $@)
183184
cp $< $@
184185

185-
tmp/rpm-openjava11-test/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm
186+
tmp/rpm-test/%.rpm: out/rpm/RPMS/noarch/%.rpm
186187
mkdir -p $(dir $@)
187188
cp $< $@
188189

189-
tmp/rpm-openjava11-test/Dockerfile: packaging/test/rpm/Dockerfile
190+
tmp/rpm-test/Dockerfile: packaging/test/rpm/Dockerfile
190191
mkdir -p $(dir $@)
191-
RPMFILE=$(rpm11file) envsubst '$${RPMFILE}' < $< > $@
192-
193-
out/rpm-openjava11/RPMS/noarch/$(rpm-openjava11file): out/rpm-openjava11/SPECS/cypher-shell.spec $(rpm-openjava11_artifacts) out/rpm-openjava11/BUILD/Makefile out/rpm-openjava11/BUILD/cypher-shell.1.md
194-
rpmbuild --define "_topdir $(CURDIR)/out/rpm-openjava11" -bb --clean $<
195-
196-
.PHONY: rpm-openjava11
197-
rpm-openjava11: out/$(rpm-openjava11file) ## Build the RPM package
192+
RPMFILE=$(rpmfile) envsubst '$${RPMFILE}' < $< > $@
198193

199-
.PHONY: rpm-openjava11-test
200-
rpm-openjava11-test: tmp/rpm-openjava11-test/$(rpm-openjava11file) tmp/rpm-openjava11-test/Dockerfile ## Test the RPM java 11 (Oracle) package (requires Docker)
201-
cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version
202-
203-
# ======================= RPM java 11 variant (Oracle) =======================
204-
# We unfortunately need to provide two cypher shell rpm packages because
205-
# Oracle and OpenJDK java 11 distros provide incompatible package names:
206-
# a) OpenJDK provides jre-11/java-11
207-
# b) Oracle provides jre/java/jdk
194+
out/rpm/RPMS/noarch/$(rpmfile): out/rpm/SPECS/cypher-shell.spec $(rpm_artifacts) out/rpm/BUILD/Makefile out/rpm/BUILD/cypher-shell.1.md
195+
rpmbuild --define "_topdir $(CURDIR)/out/rpm" -bb --clean $<
208196

209-
out/rpm-java11/SPECS/cypher-shell.spec: packaging/rpm-java11/cypher-shell.spec
210-
mkdir -p $(dir $@)
211-
VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@
212-
213-
out/rpm-java11/BUILD/%: %
214-
mkdir -p $(dir $@)
215-
cp $< $@
216-
217-
out/%.rpm: out/rpm-java11/RPMS/noarch/%.rpm
218-
mkdir -p $(dir $@)
219-
cp $< $@
220-
221-
tmp/rpm-java11-test/%.rpm: out/rpm-java11/RPMS/noarch/%.rpm
222-
mkdir -p $(dir $@)
223-
cp $< $@
224-
225-
tmp/rpm-java11-test/Dockerfile: packaging/test/rpm/Dockerfile
226-
mkdir -p $(dir $@)
227-
RPMFILE=$(rpm11file) envsubst '$${RPMFILE}' < $< > $@
228-
229-
out/rpm-java11/RPMS/noarch/$(rpm-java11file): out/rpm-java11/SPECS/cypher-shell.spec $(rpm-java11_artifacts) out/rpm-java11/BUILD/Makefile out/rpm-java11/BUILD/cypher-shell.1.md
230-
rpmbuild --define "_topdir $(CURDIR)/out/rpm-java11" -bb --clean $<
231-
232-
.PHONY: rpm-java11
233-
rpm-java11: out/$(rpm-java11file) ## Build the RPM package
197+
.PHONY: rpm
198+
rpm: out/$(rpmfile) ## Build the RPM package
234199

235-
.PHONY: rpm-java11-test
236-
rpm-java11-test: tmp/rpm-java11-test/$(rpm-java11file) tmp/rpm-java11-test/Dockerfile ## Test the RPM java 11 (Oracle) package (requires Docker)
200+
.PHONY: rpm-test
201+
rpm-test: tmp/rpm-test/$(rpmfile) tmp/rpm-test/Dockerfile ## Test the RPM package (requires Docker)
237202
cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version
238203

239204

240205

241-
242206
# ======================= DEBIAN =======================
243207

244208

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ available in your local package manager.
3434
Then just do
3535

3636
```
37-
make debian rpm8 rpm11
37+
make debian rpm
3838
```
3939

4040
To test the packages you need to have Docker installed:
4141

4242
```
43-
make debian-test rpm8-test rpm11-test
43+
make debian-test rpm-test
4444
```
4545

4646
To get the versions correct when building packages you can override
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Name: neo4j-java-adapter-jre-11-headless
2+
Version: 1.0.0
3+
Release: 1%{?dist}
4+
Summary: Meta package so that Neo4j can be compatible with java 8 and java 11 in both openjdk and oracle
5+
License: GPLv3
6+
7+
Provides: jre-headless = 11
8+
Requires: jre-11-headless
9+
BuildArch: noarch
10+
11+
%description
12+
Meta package so that Neo4j can be compatible with java 8 and java 11 in both OpenJDK and Oracle.
13+
Contains no source.
14+
15+
%prep
16+
%build
17+
%install
18+
%files
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Name: neo4j-java-adapter-jre-11
2+
Version: 1.0.0
3+
Release: 1%{?dist}
4+
Summary: Meta package so that Neo4j can be compatible with java 8 and java 11 in both openjdk and oracle
5+
License: GPLv3
6+
7+
Provides: jre = 11, java = 11, jre-headless = 11
8+
Requires: jre-11
9+
BuildArch: noarch
10+
11+
%description
12+
Meta package so that Neo4j can be compatible with java 8 and java 11 in both OpenJDK and Oracle.
13+
Contains no source.
14+
15+
%prep
16+
%build
17+
%install
18+
%files

packaging/rpm-java11/cypher-shell.spec

Lines changed: 0 additions & 39 deletions
This file was deleted.

packaging/rpm-openjava11/cypher-shell.spec

Lines changed: 0 additions & 39 deletions
This file was deleted.

packaging/rpm-java8/cypher-shell.spec renamed to packaging/rpm/cypher-shell.spec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Name: cypher-shell-java8
1+
Name: cypher-shell
22
Provides: cypher-shell
33
Version: ${VERSION}
44
Release: ${RELEASE}%{?dist}
@@ -8,8 +8,7 @@ License: GPLv3
88
URL: https://github.com/neo4j/cypher-shell
99
Source0: https://github.com/neo4j/cypher-shell/archive/%{version}.tar.gz
1010

11-
Conflicts: cypher-shell-java11
12-
Obsoletes: cypher-shell <= 1.1.8
11+
#Conflicts:
1312
Requires: which, jre-headless >= 1.8
1413
BuildArch: noarch
1514
Prefix: /usr
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
FROM centos:7
2+
3+
VOLUME /repo
4+
5+
COPY *.rpm /repo/
6+
COPY tempneo4j.repo /tmp/
7+
COPY entrypoint.sh /tmp/
8+
9+
RUN yum --assumeyes install ${TEST_JAVA} createrepo bc && \
10+
mv /tmp/tempneo4j.repo /etc/yum.repos.d/
11+
12+
ENTRYPOINT [ "/tmp/entrypoint.sh", "${TEST_JAVA}" ]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env bash
2+
3+
javaTested=$1
4+
javaRegex="openjdk"
5+
createrepo /repo
6+
7+
if [ $(yum --assumeno install cypher-shell | grep -c "${javaRegex}" | bc) != "0" ]; then
8+
echo "Attempt to install java dependency "${javaTested} " FAILED. Here is the install output:"
9+
yum --assumeno install cypher-shell
10+
exit 1
11+
else
12+
echo "cypher-shell did not appear to download another java as a dependency when ${javaTested} is pre-installed. Success!"
13+
exit 0
14+
fi
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[tempneo4j]
2+
name=temp neo4j repo
3+
baseurl=file:///repo
4+
enabled=1
5+
gpgcheck=0

0 commit comments

Comments
 (0)