diff --git a/Makefile b/Makefile index 5a2d7df5..47082e1a 100644 --- a/Makefile +++ b/Makefile @@ -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}' @@ -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 + 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 ======================= diff --git a/README.md b/README.md index db9c08e2..d71b3133 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11-headless.spec b/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11-headless.spec new file mode 100644 index 00000000..df11656e --- /dev/null +++ b/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11-headless.spec @@ -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 \ No newline at end of file diff --git a/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11.spec b/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11.spec new file mode 100644 index 00000000..64840e65 --- /dev/null +++ b/packaging/rpm-java-adapter/neo4j-java-adapter-jre-11.spec @@ -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 \ No newline at end of file diff --git a/packaging/rpm-java11/cypher-shell.spec b/packaging/rpm-java11/cypher-shell.spec deleted file mode 100644 index 731129c5..00000000 --- a/packaging/rpm-java11/cypher-shell.spec +++ /dev/null @@ -1,39 +0,0 @@ -Name: cypher-shell-java11 -Provides: cypher-shell -Version: ${VERSION} -Release: ${RELEASE}%{?dist} -Summary: Command line shell for Neo4j - -License: GPLv3 -URL: https://github.com/neo4j/cypher-shell -Source0: https://github.com/neo4j/cypher-shell/archive/%{version}.tar.gz - -Conflicts: cypher-shell-java8, cypher-shell-openjava11 -Requires: which, jre >= 11 -BuildArch: noarch -Prefix: /usr - -%description -A command line shell where you can execute Cypher against an instance -of Neo4j. - -%prep -# This macro will unpack the tarball into the appropriate build directory -# Expects tarball to unpack into a directory called {name}-{version} -#%setup -q -%build -#make clean build - -%install -rm -rf ${RPM_BUILD_ROOT} -# Calls make with correct DESTDIR -%make_install prefix=/usr - -%clean -rm -rf ${RPM_BUILD_ROOT} - -%files -%defattr(-,root,root) -%{_bindir}/cypher-shell -%{_datadir}/cypher-shell -%doc %{_mandir}/man1/cypher-shell.1.gz diff --git a/packaging/rpm-openjava11/cypher-shell.spec b/packaging/rpm-openjava11/cypher-shell.spec deleted file mode 100644 index 4f6ac4bb..00000000 --- a/packaging/rpm-openjava11/cypher-shell.spec +++ /dev/null @@ -1,39 +0,0 @@ -Name: cypher-shell-openjava11 -Provides: cypher-shell -Version: ${VERSION} -Release: ${RELEASE}%{?dist} -Summary: Command line shell for Neo4j - -License: GPLv3 -URL: https://github.com/neo4j/cypher-shell -Source0: https://github.com/neo4j/cypher-shell/archive/%{version}.tar.gz - -Conflicts: cypher-shell-java8, cypher-shell-java11 -Requires: which, jre-11-headless >= 11 -BuildArch: noarch -Prefix: /usr - -%description -A command line shell where you can execute Cypher against an instance -of Neo4j. - -%prep -# This macro will unpack the tarball into the appropriate build directory -# Expects tarball to unpack into a directory called {name}-{version} -#%setup -q -%build -#make clean build - -%install -rm -rf ${RPM_BUILD_ROOT} -# Calls make with correct DESTDIR -%make_install prefix=/usr - -%clean -rm -rf ${RPM_BUILD_ROOT} - -%files -%defattr(-,root,root) -%{_bindir}/cypher-shell -%{_datadir}/cypher-shell -%doc %{_mandir}/man1/cypher-shell.1.gz diff --git a/packaging/rpm-java8/cypher-shell.spec b/packaging/rpm/cypher-shell.spec similarity index 90% rename from packaging/rpm-java8/cypher-shell.spec rename to packaging/rpm/cypher-shell.spec index 9b3b20d2..e186af6f 100644 --- a/packaging/rpm-java8/cypher-shell.spec +++ b/packaging/rpm/cypher-shell.spec @@ -1,4 +1,4 @@ -Name: cypher-shell-java8 +Name: cypher-shell Provides: cypher-shell Version: ${VERSION} Release: ${RELEASE}%{?dist} @@ -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 diff --git a/packaging/test/java-adapter/Dockerfile b/packaging/test/java-adapter/Dockerfile new file mode 100644 index 00000000..187e449b --- /dev/null +++ b/packaging/test/java-adapter/Dockerfile @@ -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}" ] diff --git a/packaging/test/java-adapter/entrypoint.sh b/packaging/test/java-adapter/entrypoint.sh new file mode 100755 index 00000000..2cfe94c5 --- /dev/null +++ b/packaging/test/java-adapter/entrypoint.sh @@ -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 diff --git a/packaging/test/java-adapter/tempneo4j.repo b/packaging/test/java-adapter/tempneo4j.repo new file mode 100644 index 00000000..f9273ec9 --- /dev/null +++ b/packaging/test/java-adapter/tempneo4j.repo @@ -0,0 +1,5 @@ +[tempneo4j] +name=temp neo4j repo +baseurl=file:///repo +enabled=1 +gpgcheck=0 \ No newline at end of file