diff --git a/.gitignore b/.gitignore index f4a63d6d8e22c714a03563eb4b9be823fdff3d59..335796a1d8df5b30987a9f87b47c27b62634a4c0 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,10 @@ src/app/constant/JamiResources.qml # macOS .DS_Store + +# packaging +.tarball-version +tarballs.manifest +jami-*.tar.gz +extras/packaging/gnu-linux/packages/ +.docker-image-* diff --git a/extras/packaging/gnu-linux/Jenkinsfile b/extras/packaging/gnu-linux/Jenkinsfile index 08c8ac99e79e22f1c782a4efea1db77089645ab7..7b7cf19421a4b9a87d8e19b894608546767a7b8a 100644 --- a/extras/packaging/gnu-linux/Jenkinsfile +++ b/extras/packaging/gnu-linux/Jenkinsfile @@ -140,8 +140,8 @@ make -f extras/packaging/gnu-linux/Makefile portable-release-tarball .tarball-ve sshagent(credentials: [JENKINS_SSH_KEY, DL_SSH_KEY]) { echo "Publishing to git repository..." script { - def wantedTag = sh ( - script: "echo ${params.CHANNEL}/\$(date +\"%Y%m%d\")", + def wantedTag = "${params.CHANNEL}/" + sh ( + script: "./extras/packaging/gnu-linux/scripts/release-version.sh ${params.CHANNEL}", returnStdout: true ).trim() sh """ diff --git a/extras/packaging/gnu-linux/Makefile b/extras/packaging/gnu-linux/Makefile index f3adcbbd16d43941d1fb68e714b82a6e429d2773..520c47c7ee26e9df3b4249cae91e0e8a3aa5c2f2 100644 --- a/extras/packaging/gnu-linux/Makefile +++ b/extras/packaging/gnu-linux/Makefile @@ -27,17 +27,17 @@ export TARBALLS ?= /var/cache/jami TARBALL_VERSION := $(shell cat $(CURDIR)/.tarball-version 2> /dev/null) ifeq ($(TARBALL_VERSION),) -LAST_COMMIT_DATE := $(shell git log -1 --format=%cd --date=format:'%Y%m%d.%H%M') -COMMIT_ID := $(shell git rev-parse --short HEAD) -RELEASE_VERSION := $(LAST_COMMIT_DATE).$(COMMIT_ID) +RELEASE_VERSION := $(shell ./extras/packaging/gnu-linux/scripts/release-version.sh) else $(warning Using version from the .tarball-version file: $(TARBALL_VERSION)) RELEASE_VERSION := $(TARBALL_VERSION) endif -RELEASE_TARBALL_FILENAME := jami_$(RELEASE_VERSION).tar.gz +RELEASE_DIRNAME := jami-$(RELEASE_VERSION) +RELEASE_TARBALL_FILENAME := $(RELEASE_DIRNAME).tar.gz # Export for consumption in child processes. export RELEASE_VERSION +export RELEASE_DIRNAME export RELEASE_TARBALL_FILENAME # Debian versions @@ -78,7 +78,7 @@ TAR_REPRODUCIBILITY_OPTIONS = \ echo $(RELEASE_VERSION) > $@ purge-release-tarballs: - rm -f jami_*.tar.* tarballs.manifest + rm -f jami-*.tar.* tarballs.manifest release-tarball: rm -f "$(RELEASE_TARBALL_FILENAME)" tarballs.manifest @@ -123,27 +123,27 @@ ifeq ($(TARBALL_VERSION),) $(RELEASE_TARBALL_FILENAME): tarballs.manifest # Prepare the sources of the top repository and relevant submodules. rm -f "$@" - mkdir $(TMPDIR)/client-qt - git archive HEAD | tar xf - -C $(TMPDIR)/client-qt + mkdir $(TMPDIR)/$(RELEASE_DIRNAME) + git archive HEAD | tar xf - -C $(TMPDIR)/$(RELEASE_DIRNAME) for m in \ ./daemon \ . \ ./3rdparty/SortFilterProxyModel; do \ (cd "$$m" && git archive --prefix "$$m/" HEAD \ - | tar xf - -C $(TMPDIR)/client-qt); \ + | tar xf - -C $(TMPDIR)/$(RELEASE_DIRNAME)); \ done # Create the base archive. - tar -cf $(TMPDIR)/client-qt.tar $(TMPDIR)/client-qt \ - --transform 's,.*/client-qt,client-qt,' \ + tar -cf $(TMPDIR)/$(RELEASE_DIRNAME).tar $(TMPDIR)/$(RELEASE_DIRNAME) \ + --transform "s,.*/$(RELEASE_DIRNAME),$(RELEASE_DIRNAME)," \ $(TAR_REPRODUCIBILITY_OPTIONS) # Append the cached tarballs listed in the manifest. - tar --append --file $(TMPDIR)/client-qt.tar \ + tar --append --file $(TMPDIR)/$(RELEASE_DIRNAME).tar \ --files-from $< \ - --transform 's,^.*/,client-qt/daemon/contrib/tarballs/,' \ - $(TAR_REPRODUCIBILITY_OPTIONS) + --transform "s,^.*/,$(RELEASE_DIRNAME)/daemon/contrib/tarballs/," \ + $(TAR_REPRODUCIBILITY_OPTIONS) # Compress the tarball and move it into place. - gzip --no-name $(TMPDIR)/client-qt.tar - mv $(TMPDIR)/client-qt.tar.gz "$@" + gzip --no-name $(TMPDIR)/$(RELEASE_DIRNAME).tar + mv $(TMPDIR)/$(RELEASE_DIRNAME).tar.gz "$@" rm -rf $(TMPDIR) else # If TARBALL_VERSION is defined, assume it's already been generated, @@ -189,6 +189,7 @@ $(1)-docker-image-file := .docker-image-$$($(1)-docker-image-name) $(1)-docker-run-command := docker run \ --rm --privileged --security-opt apparmor=docker-default \ -e RELEASE_VERSION="$(RELEASE_VERSION)" \ + -e RELEASE_DIRNAME="$(RELEASE_DIRNAME)" \ -e RELEASE_TARBALL_FILENAME="$(RELEASE_TARBALL_FILENAME)" \ -e DEBIAN_VERSION="$(DEBIAN_VERSION)" \ -e DEBIAN_QT_VERSION="$(DEBIAN_QT_VERSION)" \ @@ -296,8 +297,7 @@ env: clean: rm -rf env rm -rf docs/build - rm -f jami_*.tar.gz + rm -f jami-*.tar.gz rm -rf extras/packaging/gnu-linux/packages - rm -f Makefile.packaging.distro_targets rm -f .docker-image-* - rm -rf client-qt/daemon/contrib/tarballs/* + rm -rf daemon/contrib/tarballs/* diff --git a/extras/packaging/gnu-linux/rules/rpm/jami-daemon.spec b/extras/packaging/gnu-linux/rules/rpm/jami-daemon.spec index 7c268e28882f38119e01e298461a6ca25adf4f63..de587dd4854869a4f52ab32ef0140ca33bd7f07d 100644 --- a/extras/packaging/gnu-linux/rules/rpm/jami-daemon.spec +++ b/extras/packaging/gnu-linux/rules/rpm/jami-daemon.spec @@ -10,7 +10,7 @@ Group: Applications/Internet License: GPLv3+ Vendor: Savoir-faire Linux URL: https://jami.net/ -Source: jami_%{version}.tar.gz +Source: jami-%{version}.tar.gz Requires: jami-daemon = %{version} # Build dependencies @@ -59,14 +59,14 @@ universal communication which respects the freedoms and privacy of its users. %prep -%setup -n client-qt +%setup -n jami-%{version} %build CFLAGS="${CFLAGS} -fno-lto" CXXFLAGS="${CXXFLAGS} -fno-lto" # Configure the Jami bundled libraries (ffmpeg & pjproject). mkdir -p daemon/contrib/native -cd %{_builddir}/client-qt/daemon/contrib/native && \ +cd %{_builddir}/jami-%{version}/daemon/contrib/native && \ ../bootstrap \ --no-checksums \ --disable-ogg \ @@ -83,19 +83,19 @@ cd %{_builddir}/client-qt/daemon/contrib/native && \ make %{_smp_mflags} V=1 && \ make %{_smp_mflags} V=1 .ffmpeg # Configure the daemon. -cd %{_builddir}/client-qt/daemon && \ +cd %{_builddir}/jami-%{version}/daemon && \ ./autogen.sh && \ ./configure \ --prefix=%{_prefix} \ --libdir=%{_libdir} # Build the daemon. -make -C %{_builddir}/client-qt/daemon %{_smp_mflags} V=1 -pod2man %{_builddir}/client-qt/daemon/man/jamid.pod \ - > %{_builddir}/client-qt/daemon/jamid.1 +make -C %{_builddir}/jami-%{version}/daemon %{_smp_mflags} V=1 +pod2man %{_builddir}/jami-%{version}/daemon/man/jamid.pod \ + > %{_builddir}/jami-%{version}/daemon/jamid.1 %install DESTDIR=%{buildroot} make -C daemon install -cp %{_builddir}/client-qt/daemon/jamid.1 \ +cp %{_builddir}/jami-%{version}/daemon/jamid.1 \ %{buildroot}/%{_mandir}/man1/jamid.1 rm -rfv %{buildroot}/%{_libdir}/*.a rm -rfv %{buildroot}/%{_libdir}/*.la diff --git a/extras/packaging/gnu-linux/rules/rpm/jami-libclient.spec b/extras/packaging/gnu-linux/rules/rpm/jami-libclient.spec index 003e311611c6f87f674480ba5118a16ae675c5a6..e64cf1220d72d9e09d1be3d3f2d2d8b9e84938eb 100644 --- a/extras/packaging/gnu-linux/rules/rpm/jami-libclient.spec +++ b/extras/packaging/gnu-linux/rules/rpm/jami-libclient.spec @@ -15,7 +15,7 @@ Group: Applications/Internet License: GPLv3+ Vendor: Savoir-faire Linux URL: https://jami.net/ -Source: jami_%{version}.tar.gz +Source: jami-%{version}.tar.gz %description This is a transitional package. Jami libclient has been merged into diff --git a/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec b/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec index 5e2e3d1eaa4366c24e7378b2b7ba0626bc94843b..72e4472d01a901a33397f6dc129d3e4757c02780 100644 --- a/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec +++ b/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec @@ -25,7 +25,7 @@ Group: Applications/Internet License: GPLv3+ Vendor: Savoir-faire Linux URL: https://jami.net/ -Source: jami-qtlib_%{version}.tar.xz +Source: jami-libqt-%{version}.tar.xz Patch0: 0001-qtbug-101201-fatal-error-getcurrenkeyboard.patch %global gst 0.10 diff --git a/extras/packaging/gnu-linux/rules/rpm/jami-qt.spec b/extras/packaging/gnu-linux/rules/rpm/jami-qt.spec index 5cc25e896063251c09d783f8ffeeb3a96044361c..7e7cb955c7bffff8572ed1deb9904df6352fc0a5 100644 --- a/extras/packaging/gnu-linux/rules/rpm/jami-qt.spec +++ b/extras/packaging/gnu-linux/rules/rpm/jami-qt.spec @@ -15,7 +15,7 @@ Group: Applications/Internet License: GPLv3+ Vendor: Savoir-faire Linux URL: https://jami.net/ -Source: jami_%{version}.tar.gz +Source: jami-%{version}.tar.gz Requires: jami %description diff --git a/extras/packaging/gnu-linux/rules/rpm/jami.spec b/extras/packaging/gnu-linux/rules/rpm/jami.spec index 6ae92b70de61a253facb9a5bfc6d1a14c754e631..41792814b96e1f61a7287a72cf7d0374ff40768b 100644 --- a/extras/packaging/gnu-linux/rules/rpm/jami.spec +++ b/extras/packaging/gnu-linux/rules/rpm/jami.spec @@ -10,7 +10,7 @@ Group: Applications/Internet License: GPLv3+ Vendor: Savoir-faire Linux URL: https://jami.net/ -Source: jami_%{version}.tar.gz +Source: jami-%{version}.tar.gz Requires: jami-daemon = %{version} Requires: jami-libqt Provides: jami-qt = %{version} @@ -36,12 +36,12 @@ software for universal communication which respects freedoms and privacy of its users. %prep -%setup -n client-qt +%setup -n jami-%{version} %build # Configure and build bundled ffmpeg (for libavutil/avframe). -mkdir -p %{_builddir}/client-qt/daemon/contrib/native -cd %{_builddir}/client-qt/daemon/contrib/native && \ +mkdir -p %{_builddir}/jami-%{version}/daemon/contrib/native +cd %{_builddir}/jami-%{version}/daemon/contrib/native && \ ../bootstrap \ --no-checksums \ --disable-ogg \ @@ -57,19 +57,19 @@ cd %{_builddir}/client-qt/daemon/contrib/native && \ make fetch && \ make %{_smp_mflags} V=1 .ffmpeg # Qt-related variables -cd %{_builddir}/client-qt && \ +cd %{_builddir}/jami-%{version} && \ mkdir build && cd build && \ cmake -DENABLE_LIBWRAP=true \ - -DLIBJAMI_BUILD_DIR=%{_builddir}/client-qt/daemon/src \ + -DLIBJAMI_BUILD_DIR=%{_builddir}/jami-%{version}/daemon/src \ -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DCMAKE_INSTALL_LIBDIR=%{_libdir} \ -DWITH_DAEMON_SUBMODULE=true \ -DCMAKE_BUILD_TYPE=Release \ .. -make -C %{_builddir}/client-qt/build %{_smp_mflags} V=1 +make -C %{_builddir}/jami-%{version}/build %{_smp_mflags} V=1 %install -DESTDIR=%{buildroot} make -C %{_builddir}/client-qt/build install +DESTDIR=%{buildroot} make -C %{_builddir}/jami-%{version}/build install %files %defattr(-,root,root,-) @@ -81,4 +81,4 @@ DESTDIR=%{buildroot} make -C %{_builddir}/client-qt/build install %{_datadir}/pixmaps/jami.xpm %{_datadir}/metainfo/jami.appdata.xml %{_datadir}/jami/translations/* -%doc %{_mandir}/man1/jami* \ No newline at end of file +%doc %{_mandir}/man1/jami* diff --git a/extras/packaging/gnu-linux/scripts/build-package-rpm.sh b/extras/packaging/gnu-linux/scripts/build-package-rpm.sh index 694e3617e8c21bd4fda8e313091be9721a06a42c..8689b35012c26f2eab239356b87a478472315cdf 100755 --- a/extras/packaging/gnu-linux/scripts/build-package-rpm.sh +++ b/extras/packaging/gnu-linux/scripts/build-package-rpm.sh @@ -26,7 +26,7 @@ set -e # Import the spec file. mkdir -p /opt/client-qt cd /opt/client-qt -tar xf "/src/$RELEASE_TARBALL_FILENAME" client-qt/extras/packaging/gnu-linux/rules/rpm \ +tar xf "/src/$RELEASE_TARBALL_FILENAME" --wildcards 'jami-*/extras/packaging/gnu-linux/rules/rpm' \ --strip-components=5 && mv rpm/* . && rmdir rpm rm jami-libqt.spec @@ -74,7 +74,7 @@ if [ ! -f "${RPM_PATH}" ]; then mkdir /opt/qt-jami-build cd /opt/qt-jami-build tar xf "/src/$RELEASE_TARBALL_FILENAME" \ - client-qt/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec \ + --wildcards 'jami-*/extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec' \ --strip-components=6 # Fetch and cache the tarball, if not already available. @@ -93,7 +93,7 @@ if [ ! -f "${RPM_PATH}" ]; then ) 8>"${CACHED_QT_TARBALL}.lock" fi - cp "$CACHED_QT_TARBALL" "/root/rpmbuild/SOURCES/jami-qtlib_$QT_MAJOR_MINOR_PATCH.tar.xz" + cp "$CACHED_QT_TARBALL" "/root/rpmbuild/SOURCES/jami-libqt-$QT_MAJOR_MINOR_PATCH.tar.xz" sed -i "s/RELEASE_VERSION/$QT_MAJOR_MINOR_PATCH/g" jami-libqt.spec rpmdev-bumpspec --comment="Automatic nightly release" \ --userstring="Jenkins <jami@lists.savoirfairelinux.net>" jami-libqt.spec diff --git a/extras/packaging/gnu-linux/scripts/build-package-snap.sh b/extras/packaging/gnu-linux/scripts/build-package-snap.sh index 4215b79012f922b7f589af5cd9d9b5d4ccb246d5..30f452486e9d73aa92389c7ed26f860216b3a759 100755 --- a/extras/packaging/gnu-linux/scripts/build-package-snap.sh +++ b/extras/packaging/gnu-linux/scripts/build-package-snap.sh @@ -24,7 +24,7 @@ set -e tar xf "/src/$RELEASE_TARBALL_FILENAME" -C /opt -cd /opt/client-qt/ +cd /opt/jami-*/ cp -r extras/packaging/gnu-linux/rules/snap/common . cp -r extras/packaging/gnu-linux/rules/snap/${SNAP_PKG_NAME}/snapcraft.yaml . diff --git a/extras/packaging/gnu-linux/scripts/release-version.sh b/extras/packaging/gnu-linux/scripts/release-version.sh new file mode 100755 index 0000000000000000000000000000000000000000..3d1e0b3b597c4eaa4a9c3955761d5e820e13c94c --- /dev/null +++ b/extras/packaging/gnu-linux/scripts/release-version.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Copyright (C) 2023 Savoir-faire Linux Inc. +# +# Author: Amin Bandali <amin.bandali@savoirfairelinux.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# This script is used in the packaging containers to build a snap +# package on an ubuntu base distro. + +if [ $# -gt 1 ]; then + echo "Usage: $0 {stable,beta,nightly}" + exit 1 +fi + +# default to stable if no release type given +release_type=${1:-stable} + +last_commit_date=$(git log -1 --format=%cd --date=format:'%Y%m%d') +same_day_releases=$(git tag -l "${release_type}/${last_commit_date}*" | wc -l) +release_counter=${same_day_releases:-0} +release_version=${last_commit_date}.${release_counter} +printf "${release_version}" diff --git a/extras/packaging/gnu-linux/tarballs.manifest b/extras/packaging/gnu-linux/tarballs.manifest deleted file mode 100644 index b3e813177c003c2a5cd71b3e0240f786618b85f8..0000000000000000000000000000000000000000 --- a/extras/packaging/gnu-linux/tarballs.manifest +++ /dev/null @@ -1,16 +0,0 @@ -/home/amarok/Projects/jami/daemon/contrib/tarballs/asio-asio-1-22-1.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/ffmpeg-n5.0.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/ffnvcodec-n11.1.5.1.tar.xz -/home/amarok/Projects/jami/daemon/contrib/tarballs/fmt-9.1.0.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/gmp-6.2.1.tar.bz2 -/home/amarok/Projects/jami/daemon/contrib/tarballs/http-parser-2.9.4.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/libarchive-3.6.0.tar.xz -/home/amarok/Projects/jami/daemon/contrib/tarballs/libgit2-v1.1.0.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/libnatpmp-20150609.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/opendht-af7d88b057fa4c84ab9096c6a1932bd5d34634ef.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/pjproject-513a3f14c44b2c2652f9219ec20dea64b236b713.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/restinio-bbaa034dbcc7555ce67df0f8a1475591a7441733.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/secp256k1-0b7024185045a49a1a6a4c5615bf31c94f63d9c4.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/pupnp-release-1.14.13.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/libvpx-v1.12.0.tar.gz -/home/amarok/Projects/jami/daemon/contrib/tarballs/webrtc-audio-processing-v0.3.1.tar.gz