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
119 changes: 104 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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}'

Expand Down Expand Up @@ -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
Copy link
Member

Choose a reason for hiding this comment

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

There's now no longer a make target for rpm, so you can't do make rpm any more.

add a line somewhere:
rpm: rpm8 rpm11

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}' < $< > $@
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 rpm
Copy link
Member

Choose a reason for hiding this comment

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

again, let's keep the rpm target

make debian rpm8 rpm11
```

To test the packages you need to have Docker installed:

```
make debian-test rpm-test
Copy link
Member

Choose a reason for hiding this comment

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

and rpm-test

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

To get the versions correct when building packages you can override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Name: cypher-shell
Name: cypher-shell-java11
Provides: cypher-shell
Version: ${VERSION}
Release: ${RELEASE}%{?dist}
Expand All @@ -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
Copy link
Member

Choose a reason for hiding this comment

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

Add an Obsoletes here too?

BuildArch: noarch
Prefix: /usr

Expand Down
40 changes: 40 additions & 0 deletions packaging/rpm-java8/cypher-shell.spec
Original file line number Diff line number Diff line change
@@ -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
39 changes: 39 additions & 0 deletions packaging/rpm-openjava11/cypher-shell.spec
Original file line number Diff line number Diff line change
@@ -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