[{"id":38897,"web_url":"https://patchwork.libcamera.org/comment/38897/","msgid":"<7a79cc29-1c9b-4d7b-adb4-92375edb57f5@ideasonboard.com>","date":"2026-05-14T10:22:27","subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:\n> Add a build step that deploys the docs to a server. This step\n> only runs on pushes to master and on tag builds. It requires three\n> external variables:\n> \n> DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> DEPLOY_KNOWN_HOSTS: Known hosts containing the destination\n> DEPLOY_DESTINAION: user@host:/ for the rsync push\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> ---\n> \n> Changes in v4:\n> - Collected tag\n> - Added check for $DEPLOY_DESTINATION to prevent deployments in personal\n>    ci setups\n> ---\n>   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++\n>   .gitlab-ci/setup-container.sh       |  2 ++\n>   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-\n>   3 files changed, 53 insertions(+), 1 deletion(-)\n>   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh\n> \n> diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh\n> new file mode 100755\n> index 000000000000..a6936728c4a9\n> --- /dev/null\n> +++ b/.gitlab-ci/deploy-libcamera-docs.sh\n> @@ -0,0 +1,23 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2026 Ideas on Board\n> +#\n> +# Deploy libcamera docs\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +\n> +libcamera_deploy_docs() {\n> +\techo \"Deploying libcamera docs\"\n> +\n> +\trsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> +          --exclude .doctrees \\\n> +          --exclude .buildinfo \\\n> +          --exclude objects.inv \\\n> +          docs/ \\\n> +          \"${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}\"\n> +}\n> +\n> +run libcamera_deploy_docs\n> diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh\n> index c7ca6426c3ab..6c4b439b887b 100755\n> --- a/.gitlab-ci/setup-container.sh\n> +++ b/.gitlab-ci/setup-container.sh\n> @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in\n>   \t\tpython3-sphinxcontrib.doxylink\n>   \t\ttexlive-latex-extra\n>   \t)\n> +\t# Packages required to deploy the documentation\n> +\tPKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )\n>   \t# Tools requires by the lint jobs.\n>   \tPKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )\n>   \t# libclang-rt-dev for the clang ASan runtime.\n> diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> index 278e69079c15..aad411c4e3d8 100644\n> --- a/gitlab-ci.yml\n> +++ b/gitlab-ci.yml\n> @@ -5,6 +5,7 @@ stages:\n>     - build\n>     - lint\n>     - test\n> +  - deploy\n>   \n>   variables:\n>     FDO_UPSTREAM_REPO: 'camera/libcamera'\n> @@ -74,7 +75,7 @@ include:\n>   .libcamera-ci.debian:13:\n>     variables:\n>       FDO_DISTRIBUTION_VERSION: 'trixie'\n> -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'\n> +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'\n>   \n>   .container-debian:\n>     extends:\n> @@ -440,3 +441,29 @@ test-lc-compliance:virtual:\n>     artifacts:\n>       reports:\n>         junit: build/lc-compliance-report.xml\n> +\n> +# ------------------------------------------------------------------------------\n> +# Deploy stage - deploy docs if we are building master or a tag\n> +# ------------------------------------------------------------------------------\n> +\n> +deploy-docs:\n> +  extends:\n> +    - .fdo.distribution-image@debian\n> +    - .libcamera-ci.debian:13\n> +    - .libcamera-ci.scripts\n> +  rules:\n\nJust a small thing:\n\n  - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null\n    when: never\n\nseems clearer to me.\n\n\n> +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION\n> +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/ && $DEPLOY_DESTINATION\n> +  environment: deploy\n> +  stage: deploy\n> +  needs:\n> +    - job: build-docs\n> +  script:\n> +    - |\n> +      mkdir -p ~/.ssh\n> +      chmod 700 ~/.ssh\n> +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> +      eval $(ssh-agent -s)\n> +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 -d | ssh-add -\n> +\n> +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id EF567BDCBC\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 14 May 2026 10:22:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2A4126302B;\n\tThu, 14 May 2026 12:22:34 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3265662FE8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 14 May 2026 12:22:32 +0200 (CEST)","from [192.168.33.26] (185.182.215.166.nat.pool.zt.hu\n\t[185.182.215.166])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5876656D;\n\tThu, 14 May 2026 12:22:22 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"hlcPRFgX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778754142;\n\tbh=2b3R0H3I0AXjFKa+5dDolvm2l+rMnWlL1Q7h18mHXdc=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=hlcPRFgXXMJ11MuJArF6Tkfw+Gu3GuJaL4uHA9+MuWb0ZlJjETOPhUVMP80FhjD+S\n\ta9u2behdZqJCoo10Umzo/McdDZJESDb92x2CMGesNcUO1kS9kx1pVTBrM0b4w8AJC/\n\t6umpsf27+/vag5ESCtRVNJ5vOzetupDPxOImlnrI=","Message-ID":"<7a79cc29-1c9b-4d7b-adb4-92375edb57f5@ideasonboard.com>","Date":"Thu, 14 May 2026 12:22:27 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Cc":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20260514101429.552173-1-stefan.klug@ideasonboard.com>\n\t<20260514101429.552173-3-stefan.klug@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260514101429.552173-3-stefan.klug@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38900,"web_url":"https://patchwork.libcamera.org/comment/38900/","msgid":"<20260514121232.GA3724@killaraus.ideasonboard.com>","date":"2026-05-14T12:12:32","subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Thu, May 14, 2026 at 12:22:27PM +0200, Barnabás Pőcze wrote:\n> 2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:\n> > Add a build step that deploys the docs to a server. This step\n> > only runs on pushes to master and on tag builds. It requires three\n> > external variables:\n> > \n> > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > DEPLOY_KNOWN_HOSTS: Known hosts containing the destination\n> > DEPLOY_DESTINAION: user@host:/ for the rsync push\n> > \n> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > \n> > ---\n> > \n> > Changes in v4:\n> > - Collected tag\n> > - Added check for $DEPLOY_DESTINATION to prevent deployments in personal\n> >    ci setups\n> > ---\n> >   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++\n> >   .gitlab-ci/setup-container.sh       |  2 ++\n> >   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-\n> >   3 files changed, 53 insertions(+), 1 deletion(-)\n> >   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh\n> > \n> > diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh\n> > new file mode 100755\n> > index 000000000000..a6936728c4a9\n> > --- /dev/null\n> > +++ b/.gitlab-ci/deploy-libcamera-docs.sh\n> > @@ -0,0 +1,23 @@\n> > +#!/bin/bash\n> > +\n> > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > +# SPDX-FileCopyrightText: © 2026 Ideas on Board\n> > +#\n> > +# Deploy libcamera docs\n> > +\n> > +set -e\n> > +\n> > +source \"$(dirname \"$0\")/lib.sh\"\n> > +\n> > +libcamera_deploy_docs() {\n> > +\techo \"Deploying libcamera docs\"\n> > +\n> > +\trsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > +          --exclude .doctrees \\\n> > +          --exclude .buildinfo \\\n> > +          --exclude objects.inv \\\n> > +          docs/ \\\n> > +          \"${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}\"\n> > +}\n> > +\n> > +run libcamera_deploy_docs\n> > diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh\n> > index c7ca6426c3ab..6c4b439b887b 100755\n> > --- a/.gitlab-ci/setup-container.sh\n> > +++ b/.gitlab-ci/setup-container.sh\n> > @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in\n> >   \t\tpython3-sphinxcontrib.doxylink\n> >   \t\ttexlive-latex-extra\n> >   \t)\n> > +\t# Packages required to deploy the documentation\n> > +\tPKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )\n> >   \t# Tools requires by the lint jobs.\n> >   \tPKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )\n> >   \t# libclang-rt-dev for the clang ASan runtime.\n> > diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> > index 278e69079c15..aad411c4e3d8 100644\n> > --- a/gitlab-ci.yml\n> > +++ b/gitlab-ci.yml\n> > @@ -5,6 +5,7 @@ stages:\n> >     - build\n> >     - lint\n> >     - test\n> > +  - deploy\n> >   \n> >   variables:\n> >     FDO_UPSTREAM_REPO: 'camera/libcamera'\n> > @@ -74,7 +75,7 @@ include:\n> >   .libcamera-ci.debian:13:\n> >     variables:\n> >       FDO_DISTRIBUTION_VERSION: 'trixie'\n> > -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'\n> > +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'\n> >   \n> >   .container-debian:\n> >     extends:\n> > @@ -440,3 +441,29 @@ test-lc-compliance:virtual:\n> >     artifacts:\n> >       reports:\n> >         junit: build/lc-compliance-report.xml\n> > +\n> > +# ------------------------------------------------------------------------------\n> > +# Deploy stage - deploy docs if we are building master or a tag\n> > +# ------------------------------------------------------------------------------\n> > +\n> > +deploy-docs:\n> > +  extends:\n> > +    - .fdo.distribution-image@debian\n> > +    - .libcamera-ci.debian:13\n> > +    - .libcamera-ci.scripts\n> > +  rules:\n> \n> Just a small thing:\n> \n>   - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null\n>     when: never\n> \n> seems clearer to me.\n\nI also like it better. I'll go with that (after testing).\n\n> > +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION\n> > +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/ && $DEPLOY_DESTINATION\n> > +  environment: deploy\n> > +  stage: deploy\n> > +  needs:\n> > +    - job: build-docs\n> > +  script:\n> > +    - |\n> > +      mkdir -p ~/.ssh\n> > +      chmod 700 ~/.ssh\n> > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> > +      eval $(ssh-agent -s)\n> > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 -d | ssh-add -\n> > +\n> > +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id EC85CBDCBC\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 14 May 2026 12:12:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 30DCB62FE8;\n\tThu, 14 May 2026 14:12:36 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 92CAC62FE1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 14 May 2026 14:12:34 +0200 (CEST)","from killaraus.ideasonboard.com\n\t(2001-14ba-70f3-e800--a06.rev.dnainternet.fi\n\t[IPv6:2001:14ba:70f3:e800::a06])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1A01256D;\n\tThu, 14 May 2026 14:12:25 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Ysj5lTnu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778760745;\n\tbh=1dFfVCjyHqGThhVWoUU9cp/wztfEY8Dj77EYdM+vdmM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Ysj5lTnuLvjeUZq4DMhsVwfEtem0iOilnWT3t1ARMiiRma+QwLs5rpFrvSYb9kSDB\n\t6RFpQUD+Mn9qo4vUf2rDm4s5ysICdCOh5BmmToesmQ11szbmGTNeLTXoKYu9QM9H1H\n\t4OVuHxZApxasPz5s4Nu7ArrQ960sNbGM3DDez3zw=","Date":"Thu, 14 May 2026 15:12:32 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","Message-ID":"<20260514121232.GA3724@killaraus.ideasonboard.com>","References":"<20260514101429.552173-1-stefan.klug@ideasonboard.com>\n\t<20260514101429.552173-3-stefan.klug@ideasonboard.com>\n\t<7a79cc29-1c9b-4d7b-adb4-92375edb57f5@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<7a79cc29-1c9b-4d7b-adb4-92375edb57f5@ideasonboard.com>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38902,"web_url":"https://patchwork.libcamera.org/comment/38902/","msgid":"<177876188538.2119687.2102379094925996862@localhost>","date":"2026-05-14T12:31:25","subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi,\n\nQuoting Laurent Pinchart (2026-05-14 14:12:32)\n> On Thu, May 14, 2026 at 12:22:27PM +0200, Barnabás Pőcze wrote:\n> > 2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:\n> > > Add a build step that deploys the docs to a server. This step\n> > > only runs on pushes to master and on tag builds. It requires three\n> > > external variables:\n> > > \n> > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > > DEPLOY_KNOWN_HOSTS: Known hosts containing the destination\n> > > DEPLOY_DESTINAION: user@host:/ for the rsync push\n> > > \n> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > \n> > > ---\n> > > \n> > > Changes in v4:\n> > > - Collected tag\n> > > - Added check for $DEPLOY_DESTINATION to prevent deployments in personal\n> > >    ci setups\n> > > ---\n> > >   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++\n> > >   .gitlab-ci/setup-container.sh       |  2 ++\n> > >   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-\n> > >   3 files changed, 53 insertions(+), 1 deletion(-)\n> > >   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh\n> > > \n> > > diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh\n> > > new file mode 100755\n> > > index 000000000000..a6936728c4a9\n> > > --- /dev/null\n> > > +++ b/.gitlab-ci/deploy-libcamera-docs.sh\n> > > @@ -0,0 +1,23 @@\n> > > +#!/bin/bash\n> > > +\n> > > +# SPDX-License-Identifier: GPL-2.0-or-later\n> > > +# SPDX-FileCopyrightText: © 2026 Ideas on Board\n> > > +#\n> > > +# Deploy libcamera docs\n> > > +\n> > > +set -e\n> > > +\n> > > +source \"$(dirname \"$0\")/lib.sh\"\n> > > +\n> > > +libcamera_deploy_docs() {\n> > > +   echo \"Deploying libcamera docs\"\n> > > +\n> > > +   rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > > +          --exclude .doctrees \\\n> > > +          --exclude .buildinfo \\\n> > > +          --exclude objects.inv \\\n> > > +          docs/ \\\n> > > +          \"${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}\"\n> > > +}\n> > > +\n> > > +run libcamera_deploy_docs\n> > > diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh\n> > > index c7ca6426c3ab..6c4b439b887b 100755\n> > > --- a/.gitlab-ci/setup-container.sh\n> > > +++ b/.gitlab-ci/setup-container.sh\n> > > @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in\n> > >             python3-sphinxcontrib.doxylink\n> > >             texlive-latex-extra\n> > >     )\n> > > +   # Packages required to deploy the documentation\n> > > +   PKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )\n> > >     # Tools requires by the lint jobs.\n> > >     PKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )\n> > >     # libclang-rt-dev for the clang ASan runtime.\n> > > diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> > > index 278e69079c15..aad411c4e3d8 100644\n> > > --- a/gitlab-ci.yml\n> > > +++ b/gitlab-ci.yml\n> > > @@ -5,6 +5,7 @@ stages:\n> > >     - build\n> > >     - lint\n> > >     - test\n> > > +  - deploy\n> > >   \n> > >   variables:\n> > >     FDO_UPSTREAM_REPO: 'camera/libcamera'\n> > > @@ -74,7 +75,7 @@ include:\n> > >   .libcamera-ci.debian:13:\n> > >     variables:\n> > >       FDO_DISTRIBUTION_VERSION: 'trixie'\n> > > -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'\n> > > +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'\n> > >   \n> > >   .container-debian:\n> > >     extends:\n> > > @@ -440,3 +441,29 @@ test-lc-compliance:virtual:\n> > >     artifacts:\n> > >       reports:\n> > >         junit: build/lc-compliance-report.xml\n> > > +\n> > > +# ------------------------------------------------------------------------------\n> > > +# Deploy stage - deploy docs if we are building master or a tag\n> > > +# ------------------------------------------------------------------------------\n> > > +\n> > > +deploy-docs:\n> > > +  extends:\n> > > +    - .fdo.distribution-image@debian\n> > > +    - .libcamera-ci.debian:13\n> > > +    - .libcamera-ci.scripts\n> > > +  rules:\n> > \n> > Just a small thing:\n> > \n> >   - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null\n> >     when: never\n> > \n> > seems clearer to me.\n> \n> I also like it better. I'll go with that (after testing).\n\nYes, that is better. I was looking for something to not repeat the\nvariable, but didn't see that immediately. So yes, that is what I had\nwanted :-)\n\nBest regards,\nStefan\n\n> \n> > > +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION\n> > > +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/ && $DEPLOY_DESTINATION\n> > > +  environment: deploy\n> > > +  stage: deploy\n> > > +  needs:\n> > > +    - job: build-docs\n> > > +  script:\n> > > +    - |\n> > > +      mkdir -p ~/.ssh\n> > > +      chmod 700 ~/.ssh\n> > > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> > > +      eval $(ssh-agent -s)\n> > > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 -d | ssh-add -\n> > > +\n> > > +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 95A6ABDCBC\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 14 May 2026 12:31:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BB02263020;\n\tThu, 14 May 2026 14:31:29 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7872662FE1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 14 May 2026 14:31:28 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:1c97:ae49:136:40fb])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 2FCF356D;\n\tThu, 14 May 2026 14:31:19 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"EGEOYqPK\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778761879;\n\tbh=nUHxoacS4ZLfdARHTtImU8igK+euduJW+wKoo5EtdnA=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=EGEOYqPKXsuHoIDQri21TwY2QTlM9JRSwPcFfIkK8au5qHZfa8NlnBT/IbW5uQ12n\n\t65sS2J+z1HfkdHdAwNdhP87Kst7MvcRbOYzcRSmJEmd+EFii1oZO4EMq/dvgYNA3zm\n\tEpSRQV2VL/ck5n9ww9AjAS48k86pjTqriG0WJti8=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260514121232.GA3724@killaraus.ideasonboard.com>","References":"<20260514101429.552173-1-stefan.klug@ideasonboard.com>\n\t<20260514101429.552173-3-stefan.klug@ideasonboard.com>\n\t<7a79cc29-1c9b-4d7b-adb4-92375edb57f5@ideasonboard.com>\n\t<20260514121232.GA3724@killaraus.ideasonboard.com>","Subject":"Re: [PATCH v4 2/2] Deploy docs to docs.libcamera.org","From":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>","Date":"Thu, 14 May 2026 14:31:25 +0200","Message-ID":"<177876188538.2119687.2102379094925996862@localhost>","User-Agent":"alot/0.12.dev8+g2c003385c862.d20250602","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]