Skip to content
This repository was archived by the owner on Jul 6, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 49 additions & 85 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,27 @@ else
endif

rpmversion := $(versionnumber)-$(release)
java_adapter_version:=1.0.0-1

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

jarfile := cypher-shell.jar
rpm-java8file := cypher-shell-java8-$(rpmversion).noarch.rpm
rpm-java11file := cypher-shell-java11-$(rpmversion).noarch.rpm
rpm-openjava11file := cypher-shell-openjava11-$(rpmversion).noarch.rpm
rpmfile := cypher-shell-$(rpmversion).noarch.rpm
debfile := cypher-shell_$(debversion)_all.deb
java_adapter_files := neo4j-java-adapter-jre-11-$(java_adapter_version).noarch.rpm \
neo4j-java-adapter-jre-11-headless-$(java_adapter_version).noarch.rpm

outputs := cypher-shell cypher-shell.bat $(jarfile)
artifacts:=$(patsubst %,cypher-shell/build/install/cypher-shell/%,${outputs})
rpm-java8_artifacts:=$(patsubst %,out/rpm-java8/BUILD/%,${artifacts})
rpm-java11_artifacts:=$(patsubst %,out/rpm-java11/BUILD/%,${artifacts})
rpm-openjava11_artifacts:=$(patsubst %,out/rpm-openjava11/BUILD/%,${artifacts})
rpm_artifacts:=$(patsubst %,out/rpm/BUILD/%,${artifacts})
deb_artifacts:=$(patsubst %,out/debian/cypher-shell-$(debversion)/%,${artifacts})
java_adapter_artifacts:=$(patsubst %, out/%, ${java_adapter_files})
deb_files:=$(wildcard packaging/debian/*)
deb_targets:=$(patsubst packaging/debian/%,out/debian/cypher-shell-$(debversion)/debian/%,${deb_files})

DOCKERUUIDRPM := $(shell uuidgen)
DOCKERUUIDRPM := $(shell uuidgen)
YUMREPO_VOLUMEID := $(shell uuidgen)
YUMREPO_IMAGEID := repomaker/$(shell uuidgen | head -c 5)

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

.PHONY: rpm
rpm: rpm-java8 rpm-java11 rpm-openjava11

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

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

out/rpm-java8/BUILD/%: %
out/neo4j-java-adapter-%.rpm: out/rpm/RPMS/noarch/neo4j-java-adapter-%.rpm
mkdir -p $(dir $@)
cp $< $@

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

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

tmp/rpm-java8-test/Dockerfile: packaging/test/rpm/Dockerfile
mkdir -p $(dir $@)
RPMFILE=$(rpm-java8file) envsubst '$${RPMFILE}' < $< > $@

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
rpmbuild --define "_topdir $(CURDIR)/out/rpm-java8" -bb --clean $<
.PHONY: java-adapter-test
java-adapter-test: tmp/java-adapter-test/tests/java-11-openjdk \
tmp/java-adapter-test/tests/java-11-openjdk-headless \
tmp/java-adapter-test/tests/java-1.8.0-openjdk \
tmp/java-adapter-test/tests/java-1.8.0-openjdk-headless

.PHONY: rpm-java8
rpm-java8: out/$(rpm-java8file) ## Build the RPM package

.PHONY: rpm-java8-test
rpm-java8-test: tmp/rpm-java8-test/$(rpm-java8file) tmp/rpm-java8-test/Dockerfile ## Test the RPM java 8 package (requires Docker)
cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version
tmp/java-adapter-test/tests/%: $(java_adapter_artifacts) \
out/$(rpmfile) \
packaging/test/java-adapter/tempneo4j.repo \
packaging/test/java-adapter/Dockerfile \
packaging/test/java-adapter/entrypoint.sh
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much nicer!

mkdir -p $@
cp $^ $@/
TEST_JAVA=$* envsubst '$${TEST_JAVA}' < packaging/test/java-adapter/Dockerfile > $@/Dockerfile
cd $@ && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM)


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

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

out/rpm-openjava11/BUILD/%: %
out/rpm/BUILD/%: %
mkdir -p $(dir $@)
cp $< $@

out/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm
out/%.rpm: out/rpm/RPMS/noarch/%.rpm
mkdir -p $(dir $@)
cp $< $@

tmp/rpm-openjava11-test/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm
tmp/rpm-test/%.rpm: out/rpm/RPMS/noarch/%.rpm
mkdir -p $(dir $@)
cp $< $@

tmp/rpm-openjava11-test/Dockerfile: packaging/test/rpm/Dockerfile
tmp/rpm-test/Dockerfile: packaging/test/rpm/Dockerfile
mkdir -p $(dir $@)
RPMFILE=$(rpm11file) envsubst '$${RPMFILE}' < $< > $@

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
rpmbuild --define "_topdir $(CURDIR)/out/rpm-openjava11" -bb --clean $<

.PHONY: rpm-openjava11
rpm-openjava11: out/$(rpm-openjava11file) ## Build the RPM package
RPMFILE=$(rpmfile) envsubst '$${RPMFILE}' < $< > $@

.PHONY: rpm-openjava11-test
rpm-openjava11-test: tmp/rpm-openjava11-test/$(rpm-openjava11file) tmp/rpm-openjava11-test/Dockerfile ## Test the RPM java 11 (Oracle) package (requires Docker)
cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version

# ======================= RPM java 11 variant (Oracle) =======================
# We unfortunately need to provide two cypher shell rpm packages because
# Oracle and OpenJDK java 11 distros provide incompatible package names:
# a) OpenJDK provides jre-11/java-11
# b) Oracle provides jre/java/jdk
out/rpm/RPMS/noarch/$(rpmfile): out/rpm/SPECS/cypher-shell.spec $(rpm_artifacts) out/rpm/BUILD/Makefile out/rpm/BUILD/cypher-shell.1.md
rpmbuild --define "_topdir $(CURDIR)/out/rpm" -bb --clean $<

out/rpm-java11/SPECS/cypher-shell.spec: packaging/rpm-java11/cypher-shell.spec
mkdir -p $(dir $@)
VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@

out/rpm-java11/BUILD/%: %
mkdir -p $(dir $@)
cp $< $@

out/%.rpm: out/rpm-java11/RPMS/noarch/%.rpm
mkdir -p $(dir $@)
cp $< $@

tmp/rpm-java11-test/%.rpm: out/rpm-java11/RPMS/noarch/%.rpm
mkdir -p $(dir $@)
cp $< $@

tmp/rpm-java11-test/Dockerfile: packaging/test/rpm/Dockerfile
mkdir -p $(dir $@)
RPMFILE=$(rpm11file) envsubst '$${RPMFILE}' < $< > $@

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
rpmbuild --define "_topdir $(CURDIR)/out/rpm-java11" -bb --clean $<

.PHONY: rpm-java11
rpm-java11: out/$(rpm-java11file) ## Build the RPM package
.PHONY: rpm
rpm: out/$(rpmfile) ## Build the RPM package

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




# ======================= DEBIAN =======================


Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ available in your local package manager.
Then just do

```
make debian rpm8 rpm11
make debian rpm
```

To test the packages you need to have Docker installed:

```
make debian-test rpm8-test rpm11-test
make debian-test rpm-test
```

To get the versions correct when building packages you can override
Expand Down
18 changes: 18 additions & 0 deletions packaging/rpm-java-adapter/neo4j-java-adapter-jre-11-headless.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Name: neo4j-java-adapter-jre-11-headless
Version: 1.0.0
Release: 1%{?dist}
Summary: Meta package so that Neo4j can be compatible with java 8 and java 11 in both openjdk and oracle
License: GPLv3

Provides: jre-headless = 11
Requires: jre-11-headless
BuildArch: noarch

%description
Meta package so that Neo4j can be compatible with java 8 and java 11 in both OpenJDK and Oracle.
Contains no source.

%prep
%build
%install
%files
18 changes: 18 additions & 0 deletions packaging/rpm-java-adapter/neo4j-java-adapter-jre-11.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Name: neo4j-java-adapter-jre-11
Version: 1.0.0
Release: 1%{?dist}
Summary: Meta package so that Neo4j can be compatible with java 8 and java 11 in both openjdk and oracle
License: GPLv3

Provides: jre = 11, java = 11, jre-headless = 11
Requires: jre-11
BuildArch: noarch

%description
Meta package so that Neo4j can be compatible with java 8 and java 11 in both OpenJDK and Oracle.
Contains no source.

%prep
%build
%install
%files
39 changes: 0 additions & 39 deletions packaging/rpm-java11/cypher-shell.spec

This file was deleted.

39 changes: 0 additions & 39 deletions packaging/rpm-openjava11/cypher-shell.spec

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Name: cypher-shell-java8
Name: cypher-shell
Provides: cypher-shell
Version: ${VERSION}
Release: ${RELEASE}%{?dist}
Expand All @@ -8,8 +8,7 @@ License: GPLv3
URL: https://github.com/neo4j/cypher-shell
Source0: https://github.com/neo4j/cypher-shell/archive/%{version}.tar.gz

Conflicts: cypher-shell-java11
Obsoletes: cypher-shell <= 1.1.8
#Conflicts:
Requires: which, jre-headless >= 1.8
BuildArch: noarch
Prefix: /usr
Expand Down
12 changes: 12 additions & 0 deletions packaging/test/java-adapter/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM centos:7

VOLUME /repo

COPY *.rpm /repo/
COPY tempneo4j.repo /tmp/
COPY entrypoint.sh /tmp/

RUN yum --assumeyes install ${TEST_JAVA} createrepo bc && \
mv /tmp/tempneo4j.repo /etc/yum.repos.d/

ENTRYPOINT [ "/tmp/entrypoint.sh", "${TEST_JAVA}" ]
14 changes: 14 additions & 0 deletions packaging/test/java-adapter/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

javaTested=$1
javaRegex="openjdk"
createrepo /repo

if [ $(yum --assumeno install cypher-shell | grep -c "${javaRegex}" | bc) != "0" ]; then
echo "Attempt to install java dependency "${javaTested} " FAILED. Here is the install output:"
yum --assumeno install cypher-shell
exit 1
else
echo "cypher-shell did not appear to download another java as a dependency when ${javaTested} is pre-installed. Success!"
exit 0
fi
5 changes: 5 additions & 0 deletions packaging/test/java-adapter/tempneo4j.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[tempneo4j]
name=temp neo4j repo
baseurl=file:///repo
enabled=1
gpgcheck=0