Skip to content
Snippets Groups Projects
Commit 43c2197e authored by Amin Bandali's avatar Amin Bandali Committed by Sébastien Blin
Browse files

packaging: Update release tarball name and version scheme.

* extras/packaging/gnu-linux/scripts/release-version.sh: Add script
for deriving (reproducibly) a release version.  The format will follow
a 'YYYYMMDD.X' scheme, where 'YYYYMMDD' is the date of the last commit
on the current branch, and 'X' the number of releases tagged that day,
starting from zero.  Example: the first stable release with a newest
commit date of 2023-01-02 would have a version of '20230102.0', the
subsequent one '20230102.1', and so on.  This is derived by counting
the number of git tags with the prefix 'TYPE/YYYYMMDD', where 'TYPE'
is the release type: either 'stable', 'beta', or 'nightly'.
* extras/packaging/gnu-linux/Jenkinsfile: Call the above new script to
derive the release version to use for tagging.
* extras/packaging/gnu-linux/Makefile: Switch from the previous
'jami_YYYYMMDD.hhmm.COMMIT.tar.gz' tarball filename format to
'jami-YYYYMMDD.X.tar.gz'.  The new format is shorter, omits the
unnecessary and confusing commit id, and uses dash instead of
underscore.  Also, it contains everything in a top-level directory
with the same name as the tarball (without the .tar.gz extensions),
so that 'jami-YYYYMMDD.X.tar.gz' nicely extracts to 'jami-YYYYMMDD.X'.
With these changes, our release tarballs will follow more closely the
related instructions from the GNU maintainers manual:
https://www.gnu.org/prep/maintain/html_node/Distribution-tar-Files.html
Lastly, this change inadvertently 'fixes' a recent issue where the
'extras/ci/client-qt-gnulinux' subdirectory and its contents would be
moved to top-level in the tarball due to one of the tarball transforms
matching the 'client-qt' in the directory's name, replacing the
'extras/ci/client-qt' prefix with 'client-qt', thereby resulting in
'client-qt-gnulinux' being moved to the tarball's top-level.
* .gitignore: Ignore several packaging-related directories and files.
* extras/packaging/gnu-linux/rules/rpm/jami-daemon.spec:
* extras/packaging/gnu-linux/rules/rpm/jami-libclient.spec:
* extras/packaging/gnu-linux/rules/rpm/jami-qt.spec:
* extras/packaging/gnu-linux/rules/rpm/jami.spec: Update the expected
release tarball filename pattern in the 'Source' field.  Also replace
references to previous top-level directory name 'client-qt' with the
new one 'jami-%{version}' where needed.
* extras/packaging/gnu-linux/rules/rpm/jami-libqt.spec: Update the
'Source' field to follow new tarball name consistent with the main
Jami release tarball.
* extras/packaging/gnu-linux/scripts/build-package-rpm.sh: Update the
tarball top-level directory pattern for the new format, now passing
the --wildcards option to GNU Tar.  Also use a name for the jami-libqt
source tarball that is more consistent with the main Jami release
tarball.
* extras/packaging/gnu-linux/scripts/build-package-snap.sh: Update the
top-level directory pattern for the new format.
* extras/packaging/gnu-linux/tarballs.manifest: Drop file accidentally
checked into git.

Change-Id: I2695f560c0bc5e61fb99dc0244f8fbb8e7026a62
parent a791ab5a
No related branches found
No related tags found
No related merge requests found
Showing
with 86 additions and 60 deletions
......@@ -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-*
......@@ -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 """
......
......@@ -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/*
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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*
......@@ -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
......
......@@ -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 .
......
#!/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}"
/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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment