[{"id":38741,"web_url":"https://patchwork.libcamera.org/comment/38741/","msgid":"<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>","date":"2026-05-06T16:28:20","subject":"Re: [PATCH v1 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":"Hi\n\n2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> Add a build step that deploys the docs to docs.libcamera.org. This step\n> only runs on pushes to master and on tag builds. It requires two\n> external variables:\n> \n> DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> ---\n>   .gitlab-ci/setup-container.sh |  2 ++\n>   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n>   2 files changed, 36 insertions(+), 1 deletion(-)\n> \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 468f5769eb87..9bbceae38a27 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> @@ -437,3 +438,35 @@ 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> +    - if: $CI_COMMIT_BRANCH == \"master\"\n\n   - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\n?\n\n\n> +    - if: $CI_COMMIT_TAG\n\n   - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n\nor something similar (possibly accepting some kind of suffix)?\n\n\n> +  environment: deploy\n> +  stage: deploy\n\nI think `deploy` could (should?) be added to the top-level `stages` list\nfor the sake of completeness.\n\n\n> +  needs:\n> +    - job: build-docs\n> +  script:\n> +    - |\n> +      mkdir -p ~/.ssh\n> +      chmod 700 ~/.ssh\n> +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> +      chmod 600 ~/.ssh/id_ed25519\n> +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> +\n> +    - |\n> +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> +          --exclude .doctrees \\\n> +          --exclude .buildinfo \\\n> +          --exclude objects.inv \\\n> +          build/docs/ \\\n> +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n\nI like to hide the user and the host name in separate protected ci variables,\nbut I guess it does not matter that much in the end.\n\nHave you considered using `$CI_COMMIT_REF_SLUG` ?\n\n\nRegards,\nBarnabás Pőcze","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 8153BBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 May 2026 16:28:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 942F163025;\n\tWed,  6 May 2026 18:28:25 +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 334B76271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 May 2026 18:28:24 +0200 (CEST)","from [192.168.33.81] (185.221.140.217.nat.pool.zt.hu\n\t[185.221.140.217])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7425E63D;\n\tWed,  6 May 2026 18:28:20 +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=\"hi6TqfHL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778084900;\n\tbh=o05sdhtGUBxAq7bOWz+xtay3go3bWh5kXaPyrmtmFdA=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=hi6TqfHLoqQHFv1NGXXSvgMDxT2KM1BYKPK6z9JPrKIicP6eMUoFCz9SHCpB09WwA\n\tvuzlemlFzLPXhMLfW/ysEkdfZmiCXvMi5NvotHiAGac6r/ID5pmXqNfTwMZXpw7PB9\n\trSdRm33XvNb1uKPzWpGRwR3LUc9jpT8RJeyiDv9Y=","Message-ID":"<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>","Date":"Wed, 6 May 2026 18:28:20 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-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":"<20260506155442.1566744-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":38743,"web_url":"https://patchwork.libcamera.org/comment/38743/","msgid":"<20260506181512.GU1598374@killaraus.ideasonboard.com>","date":"2026-05-06T18:15:12","subject":"Re: [PATCH v1 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 Wed, May 06, 2026 at 06:28:20PM +0200, Barnabás Pőcze wrote:\n> 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > only runs on pushes to master and on tag builds. It requires two\n> > external variables:\n> > \n> > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > \n> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > ---\n> >   .gitlab-ci/setup-container.sh |  2 ++\n> >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > \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 468f5769eb87..9bbceae38a27 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> > @@ -437,3 +438,35 @@ 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> > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> \n>    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> \n> ?\n> \n> > +    - if: $CI_COMMIT_TAG\n\nShould we keep this one disabled until we reach v1.0 ?\n\n>    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n> \n> or something similar (possibly accepting some kind of suffix)?\n> \n> > +  environment: deploy\n> > +  stage: deploy\n> \n> I think `deploy` could (should?) be added to the top-level `stages` list\n> for the sake of completeness.\n\nAll good comments.\n\n> > +  needs:\n> > +    - job: build-docs\n> > +  script:\n> > +    - |\n> > +      mkdir -p ~/.ssh\n> > +      chmod 700 ~/.ssh\n> > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> > +      chmod 600 ~/.ssh/id_ed25519\n> > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n\nI wonder if there's a particular reason to depart from\nhttps://docs.gitlab.com/ci/jobs/ssh_keys/#ssh-keys-when-using-the-docker-executor,\nwhich uses a file variable, and ssh-agent to avoid having to copy the\nprivate key to ~/.ssh/.\n\n> > +\n> > +    - |\n> > +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > +          --exclude .doctrees \\\n> > +          --exclude .buildinfo \\\n> > +          --exclude objects.inv \\\n> > +          build/docs/ \\\n> > +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n\nCould all of this be moved to a script ?\n\n> I like to hide the user and the host name in separate protected ci variables,\n> but I guess it does not matter that much in the end.\n\nPossibly still a good practice though.\n\n> Have you considered using `$CI_COMMIT_REF_SLUG` ?","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 3BD31BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 May 2026 18:15:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2DBFD6301E;\n\tWed,  6 May 2026 20:15:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 329EF6271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 May 2026 20:15:14 +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 7E0AB63D;\n\tWed,  6 May 2026 20:15:10 +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=\"fRE9ox+1\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778091310;\n\tbh=8GQ7Yf6taRSWRTsD23zgS/0Vm/bHqBy2lXGSGuKMCqk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=fRE9ox+17VAPsamesLmmduP/J2WcvnaLdsHowBHu1oglzdi1Ki9FehTxvNrpTXGw7\n\tU4Aa4QCs5u8KbCS4V9m1adL3ufd7gblYYr5YkIUlqMQMBA5qhV4gilsBP1gVodZtuH\n\t+NC8KEcC3TUf77iSTTwbuNOkeE13duVRmSJJkC48=","Date":"Wed, 6 May 2026 21:15:12 +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 v1 2/2] Deploy docs to docs.libcamera.org","Message-ID":"<20260506181512.GU1598374@killaraus.ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<735636c9-feb4-4c5b-bcf1-354d73a87113@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":38744,"web_url":"https://patchwork.libcamera.org/comment/38744/","msgid":"<177809480335.45302.5605812546475430856@ping.linuxembedded.co.uk>","date":"2026-05-06T19:13:23","subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2026-05-06 19:15:12)\n> On Wed, May 06, 2026 at 06:28:20PM +0200, Barnabás Pőcze wrote:\n> > 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > > only runs on pushes to master and on tag builds. It requires two\n> > > external variables:\n> > > \n> > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > > \n> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > ---\n> > >   .gitlab-ci/setup-container.sh |  2 ++\n> > >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> > >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > > \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 468f5769eb87..9bbceae38a27 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> > > @@ -437,3 +438,35 @@ 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> > > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> > \n> >    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> > \n> > ?\n> > \n> > > +    - if: $CI_COMMIT_TAG\n> \n> Should we keep this one disabled until we reach v1.0 ?\n\nNot unless you have a date in mind for 1.0 :-)\n\nI think we already have different versions in use in different\ndistributions, and working towards keeping versioned documentation on\nthe website will seamlessly support those existing releases.\n\n--\nKieran","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 E094BBDCB5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  6 May 2026 19:13:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 11F9862FE8;\n\tWed,  6 May 2026 21:13: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 A7D1F6271A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 May 2026 21:13:26 +0200 (CEST)","from monstersaurus.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EA45CDA;\n\tWed,  6 May 2026 21:13: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=\"gCfAkyZf\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778094803;\n\tbh=mH4DK9EA45O24+yiNl+ZostOItuX5GrwE/4+ktuGruY=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=gCfAkyZfZFmkxNPOcPnvFaJ3cvMrseKlD3IznNBbN5fju7sc73n1v6MHuCDKEyYkY\n\tDerfP+ezph8con1gIzawphX1j1xTPVq0vu6OguIsgPukw+hynixIRClawR63u+cMxu\n\tPXXhxrZOg+k6dZtH32kx6rax4bVvPsEvFXjJkNlY=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260506181512.GU1598374@killaraus.ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>\n\t<20260506181512.GU1598374@killaraus.ideasonboard.com>","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-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":"Wed, 06 May 2026 20:13:23 +0100","Message-ID":"<177809480335.45302.5605812546475430856@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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":38752,"web_url":"https://patchwork.libcamera.org/comment/38752/","msgid":"<177813860377.1893808.13829411510799393034@localhost>","date":"2026-05-07T07:23:23","subject":"Re: [PATCH v1 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 Barnabás,\n\nThank you for the review.\n\nQuoting Barnabás Pőcze (2026-05-06 18:28:20)\n> Hi\n> \n> 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > only runs on pushes to master and on tag builds. It requires two\n> > external variables:\n> > \n> > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > \n> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > ---\n> >   .gitlab-ci/setup-container.sh |  2 ++\n> >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > \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 468f5769eb87..9bbceae38a27 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> > @@ -437,3 +438,35 @@ 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> > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> \n>    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\nYes, I don't mind doing that.\n\n> \n> ?\n> \n> \n> > +    - if: $CI_COMMIT_TAG\n> \n>    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n> \n> or something similar (possibly accepting some kind of suffix)?\n\nI'm wondering what we gain by that? Do you want to guard against upcoming\ntags where we don't want documentation for? The next person reading this\nwould need to spend additional brain cycles decoding the regexp, then\nwondering what it was meant for, then checking the tags to see what the\nreason might have been, then realizing that it matches all tags in the\nrepo... On the other hand it might make the intent clearer. I don't have\na strong preference.\n\n> \n> \n> > +  environment: deploy\n> > +  stage: deploy\n> \n> I think `deploy` could (should?) be added to the top-level `stages` list\n> for the sake of completeness.\n\ndeploy is added to the stages list at the beginning of this patch. Do\nyou mean somewhere else?\n\n> \n> \n> > +  needs:\n> > +    - job: build-docs\n> > +  script:\n> > +    - |\n> > +      mkdir -p ~/.ssh\n> > +      chmod 700 ~/.ssh\n> > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> > +      chmod 600 ~/.ssh/id_ed25519\n> > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> > +\n> > +    - |\n> > +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > +          --exclude .doctrees \\\n> > +          --exclude .buildinfo \\\n> > +          --exclude objects.inv \\\n> > +          build/docs/ \\\n> > +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n> \n> I like to hide the user and the host name in separate protected ci variables,\n> but I guess it does not matter that much in the end.\n\nI think the less variables we require, the better. Is user & host\nreally that sensitive?\n\n> \n> Have you considered using `$CI_COMMIT_REF_SLUG` ?\n\nThat is a great hint. I wasn't aware of that one.\n\nThanks,\nStefan\n\n> \n> \n> Regards,\n> Barnabás Pőcze","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 56AE8BDCB5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 07:23:29 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4F50262FD3;\n\tThu,  7 May 2026 09:23:28 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 92DC362FB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 09:23:26 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:b16a:5ed9:4ada:a95a])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 8C1925B2;\n\tThu,  7 May 2026 09:23: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=\"UIapuhNZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778138602;\n\tbh=Oe8Bzi+vvrI+TyBhiHAQSpr59fYn0vF+BUoR5HOgozQ=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=UIapuhNZyIu8+ibG6gY1BCmOg5MR31G2NOyZlKQylGtacATjX3IpDdVouMzqz/FE9\n\tkJ35IvhJ2Kij1i4WxvCXeCOg6esXtGtN9OBqAxAug8FnqZ5pONBcK2bUX8+Td2/2f9\n\tN5fYSkkPE0mp2f8igxe+loLxmNHhcnk3qMknpy14=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 07 May 2026 09:23:23 +0200","Message-ID":"<177813860377.1893808.13829411510799393034@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>"}},{"id":38753,"web_url":"https://patchwork.libcamera.org/comment/38753/","msgid":"<3c0b27de-49f6-47a0-90ec-3e5650d3c4fb@ideasonboard.com>","date":"2026-05-07T07:32:54","subject":"Re: [PATCH v1 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. 07. 9:23 keltezéssel, Stefan Klug írta:\n> Hi Barnabás,\n> \n> Thank you for the review.\n> \n> Quoting Barnabás Pőcze (2026-05-06 18:28:20)\n>> Hi\n>>\n>> 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n>>> Add a build step that deploys the docs to docs.libcamera.org. This step\n>>> only runs on pushes to master and on tag builds. It requires two\n>>> external variables:\n>>>\n>>> DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n>>> DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n>>>\n>>> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n>>> ---\n>>>    .gitlab-ci/setup-container.sh |  2 ++\n>>>    gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n>>>    2 files changed, 36 insertions(+), 1 deletion(-)\n>>>\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 468f5769eb87..9bbceae38a27 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>>> @@ -437,3 +438,35 @@ 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>>> +    - if: $CI_COMMIT_BRANCH == \"master\"\n>>\n>>     - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> \n> Yes, I don't mind doing that.\n> \n>>\n>> ?\n>>\n>>\n>>> +    - if: $CI_COMMIT_TAG\n>>\n>>     - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n>>\n>> or something similar (possibly accepting some kind of suffix)?\n> \n> I'm wondering what we gain by that? Do you want to guard against upcoming\n> tags where we don't want documentation for? The next person reading this\n> would need to spend additional brain cycles decoding the regexp, then\n> wondering what it was meant for, then checking the tags to see what the\n> reason might have been, then realizing that it matches all tags in the\n> repo... On the other hand it might make the intent clearer. I don't have\n> a strong preference.\n\nConstraining the documentation to \"version tags\" seems like a reasonable\nthing to me. But yes, you're right that there are no tags not matching\nthat pattern, so it is technically unnecessary.\n\n\n> \n>>\n>>\n>>> +  environment: deploy\n>>> +  stage: deploy\n>>\n>> I think `deploy` could (should?) be added to the top-level `stages` list\n>> for the sake of completeness.\n> \n> deploy is added to the stages list at the beginning of this patch. Do\n> you mean somewhere else?\n\nIt seems I am just blind.\n\n\n> \n>>\n>>\n>>> +  needs:\n>>> +    - job: build-docs\n>>> +  script:\n>>> +    - |\n>>> +      mkdir -p ~/.ssh\n>>> +      chmod 700 ~/.ssh\n>>> +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n>>> +      chmod 600 ~/.ssh/id_ed25519\n>>> +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n>>> +\n>>> +    - |\n>>> +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n>>> +          --exclude .doctrees \\\n>>> +          --exclude .buildinfo \\\n>>> +          --exclude objects.inv \\\n>>> +          build/docs/ \\\n>>> +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n>>\n>> I like to hide the user and the host name in separate protected ci variables,\n>> but I guess it does not matter that much in the end.\n> \n> I think the less variables we require, the better. Is user & host\n> really that sensitive?\n\nI guess it's probably fine to have them public, but not sure if I'm\nmissing something. But in any case, it's already on the mailing list.\n\n\n> \n>>\n>> Have you considered using `$CI_COMMIT_REF_SLUG` ?\n> \n> That is a great hint. I wasn't aware of that one.\n\nAhh, it's not as great as I thought because it replaces `.` as well. :(\nLet's just ignore I have ever suggested this.\n\n\n> \n> Thanks,\n> Stefan\n> \n>>\n>>\n>> Regards,\n>> Barnabás Pőcze","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 2E20BBE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 07:33:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A6AAC63020;\n\tThu,  7 May 2026 09:32:59 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D9D3A62FD3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 09:32:57 +0200 (CEST)","from [192.168.33.83] (185.221.140.217.nat.pool.zt.hu\n\t[185.221.140.217])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BB34F5B2;\n\tThu,  7 May 2026 09:32:53 +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=\"KcXaOW92\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778139173;\n\tbh=VOK5ey4Oe79IQJdLmo3uAsBnOlcAJLWOeBhMBYwjsH8=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=KcXaOW92JRA1FkjhkqFn+jf6nuklZwWAzpuJIyUdBjF7Uh2TzMzVkdDSegpAdNvtH\n\ta2M3hHcW+SuLwYcB8VqmSpADVIa/c4tnD/b9RH8fiC4eygTZkk/DzyJdQ7auvBuq81\n\tV7S6Yf1I436v2KOXPnzzYPht36DDd7ryaCK+LKv4=","Message-ID":"<3c0b27de-49f6-47a0-90ec-3e5650d3c4fb@ideasonboard.com>","Date":"Thu, 7 May 2026 09:32:54 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>\n\t<177813860377.1893808.13829411510799393034@localhost>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<177813860377.1893808.13829411510799393034@localhost>","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":38754,"web_url":"https://patchwork.libcamera.org/comment/38754/","msgid":"<177813938089.1893808.3811140401818423400@localhost>","date":"2026-05-07T07:36:20","subject":"Re: [PATCH v1 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 Laurent,\n\nThank you for the review.\n\nQuoting Laurent Pinchart (2026-05-06 20:15:12)\n> On Wed, May 06, 2026 at 06:28:20PM +0200, Barnabás Pőcze wrote:\n> > 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > > only runs on pushes to master and on tag builds. It requires two\n> > > external variables:\n> > > \n> > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > > \n> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > ---\n> > >   .gitlab-ci/setup-container.sh |  2 ++\n> > >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> > >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > > \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 468f5769eb87..9bbceae38a27 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> > > @@ -437,3 +438,35 @@ 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> > > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> > \n> >    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> > \n> > ?\n> > \n> > > +    - if: $CI_COMMIT_TAG\n> \n> Should we keep this one disabled until we reach v1.0 ?\n> \n> >    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n> > \n> > or something similar (possibly accepting some kind of suffix)?\n> > \n> > > +  environment: deploy\n> > > +  stage: deploy\n> > \n> > I think `deploy` could (should?) be added to the top-level `stages` list\n> > for the sake of completeness.\n> \n> All good comments.\n> \n> > > +  needs:\n> > > +    - job: build-docs\n> > > +  script:\n> > > +    - |\n> > > +      mkdir -p ~/.ssh\n> > > +      chmod 700 ~/.ssh\n> > > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> > > +      chmod 600 ~/.ssh/id_ed25519\n> > > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> \n> I wonder if there's a particular reason to depart from\n> https://docs.gitlab.com/ci/jobs/ssh_keys/#ssh-keys-when-using-the-docker-executor,\n> which uses a file variable, and ssh-agent to avoid having to copy the\n> private key to ~/.ssh/.\n\nI don't really like that solution. It spills secrets somewhere on the\nsystem, requires running ssh-agent thereby adding additional complexity\nand you still need to create ~/.ssh/ for the known_hosts file. Having\nthe secret in a env variable is also directly portable to forgejo where\nfile secrets are not supported.\n\nTo me this solution is easier/quicker to grasp.\n\n> \n> > > +\n> > > +    - |\n> > > +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > > +          --exclude .doctrees \\\n> > > +          --exclude .buildinfo \\\n> > > +          --exclude objects.inv \\\n> > > +          build/docs/ \\\n> > > +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n> \n> Could all of this be moved to a script ?\n\nI can do that, I don't see much gain though.\n\nBest regards,\nStefan\n\n> \n> > I like to hide the user and the host name in separate protected ci variables,\n> > but I guess it does not matter that much in the end.\n> \n> Possibly still a good practice though.\n> \n> > Have you considered using `$CI_COMMIT_REF_SLUG` ?\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 4D524BDCB5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 07:36:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1CC9F6302A;\n\tThu,  7 May 2026 09:36:25 +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 C8E166301A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 09:36:23 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:b16a:5ed9:4ada:a95a])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id AFB2A5B2;\n\tThu,  7 May 2026 09:36: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=\"RvJkEdyg\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778139379;\n\tbh=/6mg1/P+MkwhbISRY5HZN4if2YtFZT77BzKJaMzcBxA=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=RvJkEdygxQ5O83xMjNs7pZrcyI00Vlgj5SQIOAHJPR2P1hd+/jcW3M118HE2Izppx\n\tUyy81BeVA0K+wc8AA3/od2o8NvfUBYdGUksxmyjw8LCj/HIqirSgCHv7TMOemyMbkr\n\tG1pJrdxNsnc3ruQQ9XZ/go1Q5MxJGtWByWGNNQ70=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260506181512.GU1598374@killaraus.ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>\n\t<20260506181512.GU1598374@killaraus.ideasonboard.com>","Subject":"Re: [PATCH v1 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, 07 May 2026 09:36:20 +0200","Message-ID":"<177813938089.1893808.3811140401818423400@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>"}},{"id":38756,"web_url":"https://patchwork.libcamera.org/comment/38756/","msgid":"<20260507075125.GE1778786@killaraus.ideasonboard.com>","date":"2026-05-07T07:51:25","subject":"Re: [PATCH v1 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 07, 2026 at 09:23:23AM +0200, Stefan Klug wrote:\n> Quoting Barnabás Pőcze (2026-05-06 18:28:20)\n> > 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > > only runs on pushes to master and on tag builds. It requires two\n> > > external variables:\n> > > \n> > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > > \n> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > ---\n> > >   .gitlab-ci/setup-container.sh |  2 ++\n> > >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> > >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > > \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 468f5769eb87..9bbceae38a27 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> > > @@ -437,3 +438,35 @@ 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> > > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> > \n> >    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> \n> Yes, I don't mind doing that.\n> \n> > \n> > ?\n> > \n> > \n> > > +    - if: $CI_COMMIT_TAG\n> > \n> >    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n> > \n> > or something similar (possibly accepting some kind of suffix)?\n> \n> I'm wondering what we gain by that? Do you want to guard against upcoming\n> tags where we don't want documentation for? The next person reading this\n> would need to spend additional brain cycles decoding the regexp, then\n> wondering what it was meant for, then checking the tags to see what the\n> reason might have been, then realizing that it matches all tags in the\n> repo... On the other hand it might make the intent clearer. I don't have\n> a strong preference.\n\nIf your concern is that it's not immediately clear, a comment above the\nline will help.\n\n> > > +  environment: deploy\n> > > +  stage: deploy\n> > \n> > I think `deploy` could (should?) be added to the top-level `stages` list\n> > for the sake of completeness.\n> \n> deploy is added to the stages list at the beginning of this patch. Do\n> you mean somewhere else?\n> \n> > > +  needs:\n> > > +    - job: build-docs\n> > > +  script:\n> > > +    - |\n> > > +      mkdir -p ~/.ssh\n> > > +      chmod 700 ~/.ssh\n> > > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> > > +      chmod 600 ~/.ssh/id_ed25519\n> > > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> > > +\n> > > +    - |\n> > > +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > > +          --exclude .doctrees \\\n> > > +          --exclude .buildinfo \\\n> > > +          --exclude objects.inv \\\n> > > +          build/docs/ \\\n> > > +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n> > \n> > I like to hide the user and the host name in separate protected ci variables,\n> > but I guess it does not matter that much in the end.\n> \n> I think the less variables we require, the better. Is user & host\n> really that sensitive?\n> \n> > Have you considered using `$CI_COMMIT_REF_SLUG` ?\n> \n> That is a great hint. I wasn't aware of that one.","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 42F16BDCB5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 07:51:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E6EAA63020;\n\tThu,  7 May 2026 09:51:28 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E089C62FD3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 09:51:27 +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 A40B35B2;\n\tThu,  7 May 2026 09:51:23 +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=\"ezIrgMlh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778140283;\n\tbh=xzKtaJgT1zioFnpC1/2LlUBUiLvrTs7BWVSe8NvVfbg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ezIrgMlhpKCWGDAFQz0fd/51sk1uy52AMrnERtpQLJiIDffT8GkR6OBr2mP8oiWEv\n\tKccxX+/PkYZpQ0/qDQ5IZSyedUK8hfaD/xI/ane9VfGJD0ISMq6gL2USp62cKfpbAS\n\tQnPUQwi9Xu+jpQ1o07RITUBTzOhKSDlHL3Cn238U=","Date":"Thu, 7 May 2026 10:51:25 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","Message-ID":"<20260507075125.GE1778786@killaraus.ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>\n\t<177813860377.1893808.13829411510799393034@localhost>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<177813860377.1893808.13829411510799393034@localhost>","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":38759,"web_url":"https://patchwork.libcamera.org/comment/38759/","msgid":"<20260507080552.GF1778786@killaraus.ideasonboard.com>","date":"2026-05-07T08:05:52","subject":"Re: [PATCH v1 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 07, 2026 at 09:36:20AM +0200, Stefan Klug wrote:\n> Quoting Laurent Pinchart (2026-05-06 20:15:12)\n> > On Wed, May 06, 2026 at 06:28:20PM +0200, Barnabás Pőcze wrote:\n> > > 2026. 05. 06. 17:54 keltezéssel, Stefan Klug írta:\n> > > > Add a build step that deploys the docs to docs.libcamera.org. This step\n> > > > only runs on pushes to master and on tag builds. It requires two\n> > > > external variables:\n> > > > \n> > > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key\n> > > > DEPLOY_KNOWN_HOSTS: Known hosts containing docs.libcamera.org\n> > > > \n> > > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> > > > ---\n> > > >   .gitlab-ci/setup-container.sh |  2 ++\n> > > >   gitlab-ci.yml                 | 35 ++++++++++++++++++++++++++++++++++-\n> > > >   2 files changed, 36 insertions(+), 1 deletion(-)\n> > > > \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 468f5769eb87..9bbceae38a27 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> > > > @@ -437,3 +438,35 @@ 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> > > > +    - if: $CI_COMMIT_BRANCH == \"master\"\n> > > \n> > >    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n> > > \n> > > ?\n> > > \n> > > > +    - if: $CI_COMMIT_TAG\n> > \n> > Should we keep this one disabled until we reach v1.0 ?\n> > \n> > >    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\\.)*[0-9]+$/\n> > > \n> > > or something similar (possibly accepting some kind of suffix)?\n> > > \n> > > > +  environment: deploy\n> > > > +  stage: deploy\n> > > \n> > > I think `deploy` could (should?) be added to the top-level `stages` list\n> > > for the sake of completeness.\n> > \n> > All good comments.\n> > \n> > > > +  needs:\n> > > > +    - job: build-docs\n> > > > +  script:\n> > > > +    - |\n> > > > +      mkdir -p ~/.ssh\n> > > > +      chmod 700 ~/.ssh\n> > > > +      echo \"${DEPLOY_SSH_KEY_BASE64}\" | base64 --decode > ~/.ssh/id_ed25519\n> > > > +      chmod 600 ~/.ssh/id_ed25519\n> > > > +      echo \"${DEPLOY_KNOWN_HOSTS}\" > ~/.ssh/known_hosts\n> > \n> > I wonder if there's a particular reason to depart from\n> > https://docs.gitlab.com/ci/jobs/ssh_keys/#ssh-keys-when-using-the-docker-executor,\n> > which uses a file variable, and ssh-agent to avoid having to copy the\n> > private key to ~/.ssh/.\n> \n> I don't really like that solution. It spills secrets somewhere on the\n> system,\n\nAs far as I understand, because the mechanism was designed for that\npurpose, the runner will ensure that the location remains secure. I\ndon't know what guarantees we have for ~/.ssh/ on shared runners.\n\n> requires running ssh-agent thereby adding additional complexity\n> and you still need to create ~/.ssh/ for the known_hosts file.\n\nTrue, but known_hosts isn't security-sensitive (from the point of view\nof being leaked).\n\n> Having\n> the secret in a env variable is also directly portable to forgejo where\n> file secrets are not supported.\n\nTrue, but I'm not sure that's relevant. gitlab-ci.yml isn't portable to\nforgejo :-)\n\n> To me this solution is easier/quicker to grasp.\n\nThe fact that a file variable is recommended by gitlab makes me\nconcerned that a home-grown solution may be less secure. Note how using\nregular variables, documented by gitlab as an alternative ([1]), also\nuses ssh-agent:\n\n- echo \"$SSH_PRIVATE_KEY\" | tr -d '\\r' | DISPLAY=None SSH_ASKPASS=~/.ssh/tmp ssh-add -\n\nI however don't know if that's on purpose for specific reasons, or was\njust done that way.\n\n[1] https://gitlab.com/gitlab-examples/ssh-private-key/-/blob/main/.gitlab-ci.yml?ref_type=heads\n\n> > > > +\n> > > > +    - |\n> > > > +      rsync -rlz --delete --chmod=Do=rx,Fo=r \\\n> > > > +          --exclude .doctrees \\\n> > > > +          --exclude .buildinfo \\\n> > > > +          --exclude objects.inv \\\n> > > > +          build/docs/ \\\n> > > > +          deploy@docs.libcamera.org:/$CI_COMMIT_REF_NAME\n> > \n> > Could all of this be moved to a script ?\n> \n> I can do that, I don't see much gain though.\n> \n> > > I like to hide the user and the host name in separate protected ci variables,\n> > > but I guess it does not matter that much in the end.\n> > \n> > Possibly still a good practice though.\n> > \n> > > Have you considered using `$CI_COMMIT_REF_SLUG` ?","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 A64E2BDCB5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  7 May 2026 08:05:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 665FB63024;\n\tThu,  7 May 2026 10:05:56 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9AA3D62FD3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  7 May 2026 10:05:54 +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 689AB454;\n\tThu,  7 May 2026 10:05:50 +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=\"S1ar7wBd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778141150;\n\tbh=36bFQnHSUd9aCINUwg6ZJKM+A51I56ILXPD6jM5C820=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=S1ar7wBdJWeGRlVZlfqAs5lWGFB+W3XkbACyiSdoD961T71tyJIkhv/bxQwLmmT6D\n\tD0h3tt78kReuhWicuFPWQW9QuhxrreMoS6TOwDvjGeGxF5BpPH61psYLKeuwnveKiR\n\t69wnfAwjb+OxqWIygb/m5Jxin75XcZ3UkL4jWcjY=","Date":"Thu, 7 May 2026 11:05:52 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Subject":"Re: [PATCH v1 2/2] Deploy docs to docs.libcamera.org","Message-ID":"<20260507080552.GF1778786@killaraus.ideasonboard.com>","References":"<20260506155442.1566744-1-stefan.klug@ideasonboard.com>\n\t<20260506155442.1566744-3-stefan.klug@ideasonboard.com>\n\t<735636c9-feb4-4c5b-bcf1-354d73a87113@ideasonboard.com>\n\t<20260506181512.GU1598374@killaraus.ideasonboard.com>\n\t<177813938089.1893808.3811140401818423400@localhost>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<177813938089.1893808.3811140401818423400@localhost>","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>"}}]