diff --git a/Makefile b/Makefile index 9b8b4ff5..5a2d7df5 100644 --- a/Makefile +++ b/Makefile @@ -27,16 +27,22 @@ rpmversion := $(versionnumber)-$(release) GRADLE = ./gradlew -PbuildVersion=$(buildversion) jarfile := cypher-shell.jar -rpmfile := cypher-shell-$(rpmversion).noarch.rpm +rpm-java8file := cypher-shell-java8-$(rpmversion).noarch.rpm +rpm-java11file := cypher-shell-java11-$(rpmversion).noarch.rpm +rpm-openjava11file := cypher-shell-openjava11-$(rpmversion).noarch.rpm debfile := cypher-shell_$(debversion)_all.deb outputs := cypher-shell cypher-shell.bat $(jarfile) artifacts:=$(patsubst %,cypher-shell/build/install/cypher-shell/%,${outputs}) -rpm_artifacts:=$(patsubst %,out/rpm/BUILD/%,${artifacts}) +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}) deb_artifacts:=$(patsubst %,out/debian/cypher-shell-$(debversion)/%,${artifacts}) deb_files:=$(wildcard packaging/debian/*) deb_targets:=$(patsubst packaging/debian/%,out/debian/cypher-shell-$(debversion)/debian/%,${deb_files}) +DOCKERUUIDRPM := $(shell uuidgen) + 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}' @@ -122,37 +128,120 @@ out/cypher-shell.zip: tmp/cypher-shell.zip mkdir -p out cp $< $@ -out/rpm/SPECS/cypher-shell.spec: packaging/rpm/cypher-shell.spec +.PHONY: rpm +rpm: rpm-java8 rpm-java11 rpm-openjava11 + +# ======================= RPM java 8 ======================= + +out/rpm-java8/SPECS/cypher-shell.spec: packaging/rpm-java8/cypher-shell.spec mkdir -p $(dir $@) VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@ -out/rpm/BUILD/%: % +out/rpm-java8/BUILD/%: % mkdir -p $(dir $@) cp $< $@ -out/%.rpm: out/rpm/RPMS/noarch/%.rpm +out/%.rpm: out/rpm-java8/RPMS/noarch/%.rpm mkdir -p $(dir $@) cp $< $@ -tmp/rpm-test/%.rpm: out/rpm/RPMS/noarch/%.rpm +tmp/rpm-java8-test/%.rpm: out/rpm-java8/RPMS/noarch/%.rpm mkdir -p $(dir $@) cp $< $@ -tmp/rpm-test/Dockerfile: packaging/test/rpm/Dockerfile +tmp/rpm-java8-test/Dockerfile: packaging/test/rpm/Dockerfile mkdir -p $(dir $@) - RPMFILE=$(rpmfile) envsubst '$${RPMFILE}' < $< > $@ + RPMFILE=$(rpm-java8file) envsubst '$${RPMFILE}' < $< > $@ -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-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: rpm -rpm: out/$(rpmfile) ## Build the RPM package +.PHONY: rpm-java8 +rpm-java8: out/$(rpm-java8file) ## Build the RPM package -DOCKERUUIDRPM := $(shell uuidgen) -.PHONY: rpm-test -rpm-test: tmp/rpm-test/$(rpmfile) tmp/rpm-test/Dockerfile ## Test the RPM package (requires Docker) +.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 + +# ======================= 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 + +out/rpm-openjava11/SPECS/cypher-shell.spec: packaging/rpm-openjava11/cypher-shell.spec + mkdir -p $(dir $@) + VERSION=$(versionnumber) RELEASE=$(release) envsubst '$${VERSION} $${RELEASE}' < $< > $@ + +out/rpm-openjava11/BUILD/%: % + mkdir -p $(dir $@) + cp $< $@ + +out/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm + mkdir -p $(dir $@) + cp $< $@ + +tmp/rpm-openjava11-test/%.rpm: out/rpm-openjava11/RPMS/noarch/%.rpm + mkdir -p $(dir $@) + cp $< $@ + +tmp/rpm-openjava11-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 + +.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-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-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) + cd $(dir $<) && docker build . -t $(DOCKERUUIDRPM) && docker run --rm $(DOCKERUUIDRPM) --version + + + + +# ======================= DEBIAN ======================= + + out/debian/cypher-shell-$(debversion)/debian/changelog: packaging/debian/changelog mkdir -p $(dir $@) VERSION=$(debversion) DISTRIBUTION=$(distribution) DATE="$(shell date -R)" envsubst '$${VERSION} $${DISTRIBUTION} $${DATE}' < $< > $@ diff --git a/README.md b/README.md index d71b3133..db9c08e2 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,13 @@ available in your local package manager. Then just do ``` -make debian rpm +make debian rpm8 rpm11 ``` To test the packages you need to have Docker installed: ``` -make debian-test rpm-test +make debian-test rpm8-test rpm11-test ``` To get the versions correct when building packages you can override diff --git a/packaging/rpm/cypher-shell.spec b/packaging/rpm-java11/cypher-shell.spec similarity index 88% rename from packaging/rpm/cypher-shell.spec rename to packaging/rpm-java11/cypher-shell.spec index b2828b21..731129c5 100644 --- a/packaging/rpm/cypher-shell.spec +++ b/packaging/rpm-java11/cypher-shell.spec @@ -1,4 +1,4 @@ -Name: cypher-shell +Name: cypher-shell-java11 Provides: cypher-shell Version: ${VERSION} Release: ${RELEASE}%{?dist} @@ -8,7 +8,8 @@ License: GPLv3 URL: https://github.com/neo4j/cypher-shell Source0: https://github.com/neo4j/cypher-shell/archive/%{version}.tar.gz -Requires: which, (jre-headless >= 1.8 or jre >= 11) +Conflicts: cypher-shell-java8, cypher-shell-openjava11 +Requires: which, jre >= 11 BuildArch: noarch Prefix: /usr diff --git a/packaging/rpm-java8/cypher-shell.spec b/packaging/rpm-java8/cypher-shell.spec new file mode 100644 index 00000000..9b3b20d2 --- /dev/null +++ b/packaging/rpm-java8/cypher-shell.spec @@ -0,0 +1,40 @@ +Name: cypher-shell-java8 +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-java11 +Obsoletes: cypher-shell <= 1.1.8 +Requires: which, jre-headless >= 1.8 +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 new file mode 100644 index 00000000..4f6ac4bb --- /dev/null +++ b/packaging/rpm-openjava11/cypher-shell.spec @@ -0,0 +1,39 @@ +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