1. 28 Jun, 2021 9 commits
    • Maxim Cournoyer's avatar
      Jenkinsfile: Partial deployment, follow up. · 27be9f50
      Maxim Cournoyer authored
      This is a follow up to commit 4ee93922, which introduced partial
      deployments.
      
      The unstash operation also needs to be handled specially, as it may
      now fail attempting to unstash an item that could not be stashed
      previously.
      
      * Jenkinsfile ('Sign & deploy packages'): Skip target deployment when
      it fails to be unstashed.
      
      Change-Id: I59341e4c3bb007125402f4b28979d0e8e963757d
      27be9f50
    • Maxim Cournoyer's avatar
      guix: manifest: Add libgit2. · a9ae457f
      Maxim Cournoyer authored
      Change-Id: I98725b2669b357fb86dc653cb7d7ead6f34cb355
      a9ae457f
    • Maxim Cournoyer's avatar
      packaging: Normalize debian/rules indentation. · 7be07615
      Maxim Cournoyer authored
      This change normalizes the hanging indent to 2 spaces.
      
      Change-Id: I98bd6919eae547b946af2c59a14cbee96ee50a9d
      7be07615
    • Maxim Cournoyer's avatar
      docker: Allow interrupting packaging jobs with C-c. · 420b205d
      Maxim Cournoyer authored
      Use the recommended exec syntax for the CMD directive in the
      Dockerfiles, which invokes the command directly rather than through an
      intermediate shell.  Also provide the -i option, but conditionally as
      Docker checks if there is a real TTY to connect to, which is not the
      case in Jenkins.
      
      * scripts/make-packaging-target.py (PACKAGE_*_DOCKER_RUN_COMMAND)
      [IS_SHELL_INTERACTIVE]: Conditionally provide the '-i' option.
      (package-*-interactive) <DOCKER_EXTRA_ARGS>: Remove target-specific variable.
      (DOCKER_EXTRA_ARGS): Move/rename variable to ...
      * Makefile (DOCKER_RUN_EXTRA_ARGS): ... here/this.
      (IS_SHELL_INTERACTIVE): New variable.
      
      The rest of this change was automated using the command:
      
        $ git grep -l CMD | xargs sed -i -E 's,CMD (.*)$,CMD ["\1"],g'
      
      Change-Id: I93ba9ad8115541a7c7f02421384ae01a5b0650ad
      420b205d
    • Maxim Cournoyer's avatar
      docker: Only copy the control files in the container. · 6f86ab42
      Maxim Cournoyer authored
      This avoids invalidating the cache when changing the rules file of the
      packages, for example.
      
      Automated via:
      
        $ git ls-files | grep Dockerfile | xargs sed -i 's,packaging/rules/debian-qt/\* /tmp/builddeps/debian/,packaging/rules/debian-qt/control /tmp/builddeps/debian/control,g'
        $ $ git ls-files | grep Dockerfile | xargs sed -i 's,packaging/rules/debian/\* /tmp/builddeps/debian/,packaging/rules/debian/control /tmp/builddeps/debian/control,g'
      
      Change-Id: Ic33d7af4c022ed9de53df245c861a31d2786fc96
      6f86ab42
    • Maxim Cournoyer's avatar
      packaging: Limit the number of parallel jobs when building Qt. · 78c6b88a
      Maxim Cournoyer authored
      Workaround <https://bugreports.qt.io/browse/QTBUG-94800>.
      
      This is to avoid out of memory conditions during the build, which
      requires up to about 2 GiB of memory per parallel process.  There was
      also a problem with how the MAKEFLAGS was passed, which led
      qtwebengine to be built using all the CPU cores even when specifying a
      lesser NO_CPUS value.
      
      * packaging/rules/debian-qt/rules (min, max): New functions.
      (NO_CPUS): Express in terms of max.
      (AVAILABLE_MEMORY, MEMORY_REQUIRED_PER_CORE, COMPUTED_JOB_COUNT)
      (JOB_COUNT, MAX_PARALLEL_BUILDS): New variables.
      (override_dh_auto_build): Override to manually control job count.
      Specify NINJAFLAGS for the Chromium build.
      * packaging/rules/rpm/jami-libqt.spec (min, max, cpu_count)
      (available_memory, computed_job_count, job_count): New macros.
      (%build): Re-indent and use the above 'job_count' variable as
      the number of parallel jobs.
      (%install): Likewise.
      
      Change-Id: I9134c1e63e92104a1da8435670e2919ce692040c
      78c6b88a
    • Maxim Cournoyer's avatar
      build-package-rpm: Cache Qt tarball. · 3725c504
      Maxim Cournoyer authored
      Also make the script more readable by factoring out variables to avoid
      repeating ourselves.
      
      Change-Id: I30e85fb7b0a1207a8eff3a89d8c7ab4f455e0c4a
      3725c504
    • Maxim Cournoyer's avatar
      packaging: Do not install a ring.cx symbolic link. · f236d5f6
      Maxim Cournoyer authored
      Change-Id: Ib5ad6c091560f7fc4ee9734ca283e78c90d9d769
      f236d5f6
    • Maxim Cournoyer's avatar
      packaging: Deploy the Ubuntu debug symbol packages. · c9803565
      Maxim Cournoyer authored
      * scripts/build-package-debian.sh: Revert glob pattern to *deb and add comment.
      * scripts/deploy-packages.sh (package_deb): Rename .ddeb to .deb.
      
      Change-Id: I46bd9855bec451102a5ef5046f9ac52b161559c5
      c9803565
  2. 25 Jun, 2021 8 commits
    • Maxim Cournoyer's avatar
      packaging: Add OpenSUSE Leap 15.3. · 766ac63e
      Maxim Cournoyer authored
      Change-Id: I5cbc06d5f7b245bf49578914819a8154c9d2cd6e
      766ac63e
    • Maxim Cournoyer's avatar
      packaging: Streamline jami-all.postinst script. · 8d3e1a4e
      Maxim Cournoyer authored
      * packaging/rules/rpm/jami-all.postinst (is_distribution_supported):
      Make version agnostic.
      (has_rpm, is_opensuse): New procedures.
      (CAN_ADD_REPO_SOURCE, JAMI_REPO, ENDTAG): Delete variable.
      (jami_repo_name, jami_repo_base_url): New variables.
      
      Change-Id: I01ee72da39a1a8377ec70ae9dc3ef218d0837633
      8d3e1a4e
    • Maxim Cournoyer's avatar
      Jenkinsfile: Allow partial deployments. · 4ee93922
      Maxim Cournoyer authored
      When a packaging target fails to build, deploy the successful builds
      to the repository anyway.
      
      * Jenkinsfile (BUILD_OWN_QT): Remove parameter.  The Qt builds are now
      implicitly made as part of the regular packaging targets.
      (Build packages): Wrap make invocation in a catchError so that the
      stage appears as failed while the build is marked as a success, which
      allows the 'Sign & deploy packages' stage to run despite packaging
      errors.
      
      Change-Id: I5785d154f5e1963aa824576f7f0f62043446456a
      4ee93922
    • Maxim Cournoyer's avatar
      Jenkinsfile: Specify the Gerrit triggers configuration as code. · 06b6cb35
      Maxim Cournoyer authored
      * Jenkinsfile (properties): New definition.
      
      GitLab: jami-packaging#98
      Change-Id: I3406f20027cafe8ab6a5743860b470d92e8455cb
      06b6cb35
    • Maxim Cournoyer's avatar
      Jenkinsfile: Add a deploy stage. · 27755242
      Maxim Cournoyer authored
      * Jenkinsfile (Deploy packages): New stage.
      
      GitLab: jami-packaging#98
      Change-Id: I36a555312e0569549316370878244c3267f8149a
      27755242
    • Maxim Cournoyer's avatar
      Jenkinsfile: Add the ability to opt out of updating submodules. · 94f976b8
      Maxim Cournoyer authored
      * Jenkinsfile (submodules): New variable.
      [parameters]{WITH_MANUAL_SUBMODULES}: New parameter.
      (Fetch submodules): Adapt the message to the parameter's value.  Add
      the '--remote' option to 'git submodule' unless WITH_MANUAL_SUBMODULES
      is true.
      
      GitLab: jami-packaging#98
      Change-Id: Ie5f0521bed16303e751e8e19174f18a90bccefcc
      94f976b8
    • Maxim Cournoyer's avatar
      Jenkinsfile: Allow specifying packaging targets. · 854d54ba
      Maxim Cournoyer authored
      The default is to build all the packaging targets (minus the *_qt
      and *_arm ones).  Add a PACKAGING_TARGETS parameter that allows
      specifying which targets to build.
      
      * Jenkinsfile: (PACKAGING_TARGETS): New parameter.
      ('Build packages'): Use it unless it's the empty string.
      
      GitLab: jami-packaging#98
      Change-Id: Idf1b4460a0edac7cbe6a82b9db1d204af78de801
      854d54ba
    • Maxim Cournoyer's avatar
      packaging: Adjust jami-daemon.spec to use libexec. · 7138430e
      Maxim Cournoyer authored
      This follows commit 2afa99fd1 in the daemon.
      
      * build.py (run_run) <dring>: Adjust file name.
      * packaging/rules/rpm/jami-daemon.spec (%install): Likewise.  Hard
      code the jamid binary location as /usr/libexec/dring, to not argue
      with OpenSUSE Leap's %{_libexecdir}.
      
      Change-Id: Iea6bf3cc6c4dce853f0b7c92861dfee7b8a07bbe
      7138430e
  3. 09 Jun, 2021 1 commit
  4. 08 Jun, 2021 1 commit
    • Amin Bandali's avatar
      packaging: simplify build of libqt-jami deb packages · 027bd5e2
      Amin Bandali authored
      Since the introduction of libqt-jami deb packages, they were built
      using quite an ugly hack on the Jenkins side.  This patch reworks all
      of that so that libqt-jami is built for each distro version if it was
      not already previously built, or if a force rebuild is specified.
      
      Change-Id: Ib74b747628a007cd0d61b068e0ff9ed80006b93d
      027bd5e2
  5. 04 Jun, 2021 2 commits
    • Adrien Béraud's avatar
      remove obsolete repo · 8b900aa8
      Adrien Béraud authored
      Change-Id: Icf5de11a027f9a66b7edbd108be69f9b5d4838bf
      8b900aa8
    • Amin Bandali's avatar
      packaging: fix snap build · a392a4af
      Amin Bandali authored
      Support for package repositories is no longer experimental, and the
      --enable-experimental-package-repositories flag has been removed as of
      Snapcraft 4.8.
      
      Change-Id: Ie095aaef7806a13ba765941bed480a25f8cae552
      a392a4af
  6. 03 Jun, 2021 1 commit
  7. 02 Jun, 2021 2 commits
  8. 01 Jun, 2021 1 commit
  9. 27 May, 2021 2 commits
    • Maxim Cournoyer's avatar
      scripts: Fix typo in deploy-packages.sh. · 671185fc
      Maxim Cournoyer authored
      * scripts/deploy-packages.sh <SSH_IDENTIY_FILE>: Replace with
      SSH_IDENTITY_FILE.
      
      Change-Id: Ibbdc21710b902f0a5e963c645dfbc5f62dff1be6
      671185fc
    • Maxim Cournoyer's avatar
      docker: Resolve partial update problem in Tumbleweed image. · 8ea2be74
      Maxim Cournoyer authored
      This resolves the following error:
      
        ImportError: /usr/lib64/libgobject-2.0.so.0: undefined symbol:
        g_memdup2
      
      * docker/Dockerfile_opensuse-tumbleweed: Do not update and install
      stuff in various steps.
      * docker/Dockerfile_opensuse-leap_15.2: Likewise.
      
      Change-Id: I286576cddd5226cf40fd1bec997be36b2142e355
      8ea2be74
  10. 25 May, 2021 13 commits
    • Maxim Cournoyer's avatar
      build.py: Add support for Guix. · e55531c9
      Maxim Cournoyer authored
      This enables building Jami in a development setting on any GNU/Linux
      distribution, provided Guix is installed.  It supports building both
      the Qt and the GNOME clients.  It uses ffmpeg and pjproject from the
      contribs.
      
      Change-Id: I1bf0c9f3f9c08361b9016fe04581902ec27f2312
      e55531c9
    • Maxim Cournoyer's avatar
      build.py: Build with verbosity. · f47e94cb
      Maxim Cournoyer authored
      Seeing which commands are executed during the build is useful to debug
      when something goes wrong.
      
      Change-Id: I2acec49b519c9070fbfa2d18d14e2b459c9bc76f
      f47e94cb
    • Maxim Cournoyer's avatar
      scripts: Reduce code duplication for the install.sh script. · 2a0cb09a
      Maxim Cournoyer authored
      The CMake flags list is now built dynamically, allowing to share the
      common flags between the clients and the conditional branches.  Quote
      more arguments as reported by 'shellcheck'.
      
      Change-Id: I0cd845ec733fb8389c4cd9bd74455ba86a602fee
      2a0cb09a
    • Maxim Cournoyer's avatar
      build.py: Do not rebuild the daemon every time. · e098ac56
      Maxim Cournoyer authored
      Running autogen.sh invalidates the build artifacts, causing them to be
      rebuilt every time the 'install' action is invoked, which is wasteful.
      Only invoke autogen.sh when the configure script is missing.
      
      Change-Id: Ib92b3d14e9f44f465f467ee0948fe3fceb5d3bea
      e098ac56
    • Maxim Cournoyer's avatar
      build.py: Add a clean action. · 6b364a9f
      Maxim Cournoyer authored
      Change-Id: Iba8aac10fa36e4404b07beab9dfe9ed3d8c5c1a2
      6b364a9f
    • Maxim Cournoyer's avatar
      build.py: Build contribs with multiple cores and with debug symbols. · 2f250c14
      Maxim Cournoyer authored
      This hastens the build when using the ./build.py script.  The
      debug symbols are now also kept for the built contribs when the
      --debug option is provided along --install.
      
      Change-Id: Ia5a68456213e8984f5ac8f050131356b324d9777
      2f250c14
    • Maxim Cournoyer's avatar
      scripts: Do not hard-code /bin/bash. · 1551a85e
      Maxim Cournoyer authored
      Instead, use Bash from PATH.  This approach works more reliably on
      distributions not strictly adhering to the File Hierarchy
      Standard (FHS) such as Guix System or NixOS.
      
      Change-Id: Ic7b168d0f4d73f3a1cb1085e9a84600a25d153c5
      1551a85e
    • Maxim Cournoyer's avatar
      build.py: Streamline the gdb invocation. · d0342d2e
      Maxim Cournoyer authored
      There is no gdb.gdb init file in the repo, never was.
      
      Change-Id: Ia1020ff037b5c6f36143cf63816027b0878f5b78
      d0342d2e
    • Maxim Cournoyer's avatar
      build.py: Allow skipping the operating system check. · f69e9fa2
      Maxim Cournoyer authored
      While it's not possible to automatically check and configure the
      dependencies for unknown/unsupported distributions, build.py
      still provides a convenient experience to checkout the sources and
      install Jami locally.  In this mode of operation, the user is expected
      to configure their environment by their own means.
      
      * build.py: Rename Ring to Jami in the document string.  Remove
      unused 'signal' import.
      (choose_distribution): Do not crash when the '/etc/os-release' does
      not exist; return 'Unknown' instead.
      (validate_args): Allow disabling the distribution check when the user
      provides 'no-check' as the value of the --distribution argument, or
      defines the JAMI_BUILD_NO_CHECK environment variable.  Update the
      help documentation.
      * scripts/install.sh (priv_install): Document the arguments.
      
      Change-Id: I41ba2da05771feb6e3f9bc7c087206596063ba81
      f69e9fa2
    • Maxim Cournoyer's avatar
      ci: Spread builds across multiple nodes. · 566bd6e8
      Maxim Cournoyer authored
      When a .tarball-version file containing the version string is present,
      it is taken for granted that the source tarball is present.  This
      allows to lift the requirement on a Git checkout to use the source
      tarball.  This makes it easy and cheap to sync this tarball and
      accompanying .tarball-version file across different Jenkins agents to
      distribute the packaging jobs, bring the total build time from about 1
      h 40 to 40 minutes.
      
      * Makefile (TARBALL_VERSION): New variable.  When defined, do not do
      not invoke Git to derive the version string, simply use it.
      [RELEASE_TARBALL_FILENAME]: Do not compute prerequisites when
      TARBALL_VERSION is defined; assume the tarball is present.
      * .gitignore: Ignore .tarball-version.
      * Jenkinsfile: (Generate release tarball): Generate a .tarball-version
      file, and stash it along the release tarball.  Explicit this should
      run on a 'guix' agent.
      (Build packages): Forward to any 'linux-builder' agent, clean the
      workspace, unstash and extract the tarball and build.
      
      GitLab: jami-packaging#98
      Change-Id: I13088b75c9ccd5166662a84b7c5f8d4e8b7b65da
      566bd6e8
    • Maxim Cournoyer's avatar
      Jenkinsfile: Add parameters to allow skipping Qt, ARM packages. · f79926bd
      Maxim Cournoyer authored
      * Jenkinsfile [parameters]: New directive.
      (Build packages): Skip building custom Qt or ARM packages depending on
      the parameter values.
      
      GitLab: jami-packaging#98
      Change-Id: Ic68af873483ac92319061baf5f14ef7323a27a26
      f79926bd
    • Maxim Cournoyer's avatar
      packaging: debian: Do not alter the source tarball. · 9d5387f0
      Maxim Cournoyer authored
      AFAICT, this was made to clear some supposedly non-redistributable
      files in the sources according to Debian policy.  If there's some
      cleanup to do, we should do so at the level of the common source
      tarball, not in a Debian-specific way.
      
      * packaging/rules/debian/rules (override_dh_auto_configure): Remove
      code repacking tarballs.
      (override_dh_clean, get-orig-source): Remove.
      * packaging/rules/debian/copyright (Files-Excluded): Remove.  Also
      streamline the listing of copyrights to the files part of our tree,
      not in bundled libraries.  Debian-specific requirements can stay in
      the Debian-maintained corresponding packages.
      * scripts/build-package-debian.sh: Streamline, making the release
      tarball the sole input of the process.  Do not build source packages,
      for simplicity (dpkg-source doesn't like our source tarball as-is).
      
      Change-Id: I78a482ab3362e9bba8ffdc0ab60324f94715bfb8
      9d5387f0
    • Maxim Cournoyer's avatar
      build: Improvements to the generation of the release tarballs. · 6e0a3002
      Maxim Cournoyer authored
      The phony tarball-producing targets will now always clear the
      tarballs.manifest file before generating a new release tarball,
      ensuring it doesn't contain stale information.
      
      A new 'portable-release-tarball' target is also added to offer an easy
      to use target that was previously implemented ad-hoc in the CI.  Move
      this logic here as a portable release tarball is useful for packagers
      wanting to test locally with the various supported platforms.  The
      Jenkinsfile now makes use of it.
      
      * Makefile (daemon/contrib/native/Makefile): New target.
      (tarballs.manifest): Add the above target as a prerequisite and remove
      invocation to bootstrap script.  Invoke make with --no-print-directory
      to prevent entering/leaving directory messages from appearing in the
      output (it's supposed to be on when using --silent, but when the make
      invocation is nested, it doesn't seem to be the case).
      (release-tarball): Also clear the tarballs.manifest when invoked.
      (purge-release-tarballs, portable-release-tarball): New targets.
      * guix/minimal-manifest.scm: New file.
      * Jenkinsfile ('Generate release tarball): Use it to spawn the
      container used to build the release tarball.  Also expose /usr/bin/env
      in the container.  Use the new 'portable-release-tarball' target to
      simplify things.  Fix the shebang line; it needs to be the first line
      of the script.
      
      GitLab: jami-packaging#98
      Change-Id: I3b55e25933108ae9930bc9fcc867f9fa51d796f2
      6e0a3002