[v4,2/2] Deploy docs to docs.libcamera.org
diff mbox series

Message ID 20260514101429.552173-3-stefan.klug@ideasonboard.com
State New
Headers show
Series
  • Deploy documentation to docs.libcamera.org
Related show

Commit Message

Stefan Klug May 14, 2026, 10:14 a.m. UTC
Add a build step that deploys the docs to a server. This step
only runs on pushes to master and on tag builds. It requires three
external variables:

DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key
DEPLOY_KNOWN_HOSTS: Known hosts containing the destination
DEPLOY_DESTINAION: user@host:/ for the rsync push

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

---

Changes in v4:
- Collected tag
- Added check for $DEPLOY_DESTINATION to prevent deployments in personal
  ci setups
---
 .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++
 .gitlab-ci/setup-container.sh       |  2 ++
 gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-
 3 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh

Comments

Barnabás Pőcze May 14, 2026, 10:22 a.m. UTC | #1
2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:
> Add a build step that deploys the docs to a server. This step
> only runs on pushes to master and on tag builds. It requires three
> external variables:
> 
> DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key
> DEPLOY_KNOWN_HOSTS: Known hosts containing the destination
> DEPLOY_DESTINAION: user@host:/ for the rsync push
> 
> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
> Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
> ---
> 
> Changes in v4:
> - Collected tag
> - Added check for $DEPLOY_DESTINATION to prevent deployments in personal
>    ci setups
> ---
>   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++
>   .gitlab-ci/setup-container.sh       |  2 ++
>   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-
>   3 files changed, 53 insertions(+), 1 deletion(-)
>   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh
> 
> diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh
> new file mode 100755
> index 000000000000..a6936728c4a9
> --- /dev/null
> +++ b/.gitlab-ci/deploy-libcamera-docs.sh
> @@ -0,0 +1,23 @@
> +#!/bin/bash
> +
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: © 2026 Ideas on Board
> +#
> +# Deploy libcamera docs
> +
> +set -e
> +
> +source "$(dirname "$0")/lib.sh"
> +
> +libcamera_deploy_docs() {
> +	echo "Deploying libcamera docs"
> +
> +	rsync -rlz --delete --chmod=Do=rx,Fo=r \
> +          --exclude .doctrees \
> +          --exclude .buildinfo \
> +          --exclude objects.inv \
> +          docs/ \
> +          "${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}"
> +}
> +
> +run libcamera_deploy_docs
> diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
> index c7ca6426c3ab..6c4b439b887b 100755
> --- a/.gitlab-ci/setup-container.sh
> +++ b/.gitlab-ci/setup-container.sh
> @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in
>   		python3-sphinxcontrib.doxylink
>   		texlive-latex-extra
>   	)
> +	# Packages required to deploy the documentation
> +	PKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )
>   	# Tools requires by the lint jobs.
>   	PKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )
>   	# libclang-rt-dev for the clang ASan runtime.
> diff --git a/gitlab-ci.yml b/gitlab-ci.yml
> index 278e69079c15..aad411c4e3d8 100644
> --- a/gitlab-ci.yml
> +++ b/gitlab-ci.yml
> @@ -5,6 +5,7 @@ stages:
>     - build
>     - lint
>     - test
> +  - deploy
>   
>   variables:
>     FDO_UPSTREAM_REPO: 'camera/libcamera'
> @@ -74,7 +75,7 @@ include:
>   .libcamera-ci.debian:13:
>     variables:
>       FDO_DISTRIBUTION_VERSION: 'trixie'
> -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'
> +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'
>   
>   .container-debian:
>     extends:
> @@ -440,3 +441,29 @@ test-lc-compliance:virtual:
>     artifacts:
>       reports:
>         junit: build/lc-compliance-report.xml
> +
> +# ------------------------------------------------------------------------------
> +# Deploy stage - deploy docs if we are building master or a tag
> +# ------------------------------------------------------------------------------
> +
> +deploy-docs:
> +  extends:
> +    - .fdo.distribution-image@debian
> +    - .libcamera-ci.debian:13
> +    - .libcamera-ci.scripts
> +  rules:

Just a small thing:

  - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null
    when: never

seems clearer to me.


> +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION
> +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\.)*[0-9]+$/ && $DEPLOY_DESTINATION
> +  environment: deploy
> +  stage: deploy
> +  needs:
> +    - job: build-docs
> +  script:
> +    - |
> +      mkdir -p ~/.ssh
> +      chmod 700 ~/.ssh
> +      echo "${DEPLOY_KNOWN_HOSTS}" > ~/.ssh/known_hosts
> +      eval $(ssh-agent -s)
> +      echo "${DEPLOY_SSH_KEY_BASE64}" | base64 -d | ssh-add -
> +
> +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh
Laurent Pinchart May 14, 2026, 12:12 p.m. UTC | #2
On Thu, May 14, 2026 at 12:22:27PM +0200, Barnabás Pőcze wrote:
> 2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:
> > Add a build step that deploys the docs to a server. This step
> > only runs on pushes to master and on tag builds. It requires three
> > external variables:
> > 
> > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key
> > DEPLOY_KNOWN_HOSTS: Known hosts containing the destination
> > DEPLOY_DESTINAION: user@host:/ for the rsync push
> > 
> > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
> > Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > 
> > ---
> > 
> > Changes in v4:
> > - Collected tag
> > - Added check for $DEPLOY_DESTINATION to prevent deployments in personal
> >    ci setups
> > ---
> >   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++
> >   .gitlab-ci/setup-container.sh       |  2 ++
> >   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-
> >   3 files changed, 53 insertions(+), 1 deletion(-)
> >   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh
> > 
> > diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh
> > new file mode 100755
> > index 000000000000..a6936728c4a9
> > --- /dev/null
> > +++ b/.gitlab-ci/deploy-libcamera-docs.sh
> > @@ -0,0 +1,23 @@
> > +#!/bin/bash
> > +
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +# SPDX-FileCopyrightText: © 2026 Ideas on Board
> > +#
> > +# Deploy libcamera docs
> > +
> > +set -e
> > +
> > +source "$(dirname "$0")/lib.sh"
> > +
> > +libcamera_deploy_docs() {
> > +	echo "Deploying libcamera docs"
> > +
> > +	rsync -rlz --delete --chmod=Do=rx,Fo=r \
> > +          --exclude .doctrees \
> > +          --exclude .buildinfo \
> > +          --exclude objects.inv \
> > +          docs/ \
> > +          "${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}"
> > +}
> > +
> > +run libcamera_deploy_docs
> > diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
> > index c7ca6426c3ab..6c4b439b887b 100755
> > --- a/.gitlab-ci/setup-container.sh
> > +++ b/.gitlab-ci/setup-container.sh
> > @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in
> >   		python3-sphinxcontrib.doxylink
> >   		texlive-latex-extra
> >   	)
> > +	# Packages required to deploy the documentation
> > +	PKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )
> >   	# Tools requires by the lint jobs.
> >   	PKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )
> >   	# libclang-rt-dev for the clang ASan runtime.
> > diff --git a/gitlab-ci.yml b/gitlab-ci.yml
> > index 278e69079c15..aad411c4e3d8 100644
> > --- a/gitlab-ci.yml
> > +++ b/gitlab-ci.yml
> > @@ -5,6 +5,7 @@ stages:
> >     - build
> >     - lint
> >     - test
> > +  - deploy
> >   
> >   variables:
> >     FDO_UPSTREAM_REPO: 'camera/libcamera'
> > @@ -74,7 +75,7 @@ include:
> >   .libcamera-ci.debian:13:
> >     variables:
> >       FDO_DISTRIBUTION_VERSION: 'trixie'
> > -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'
> > +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'
> >   
> >   .container-debian:
> >     extends:
> > @@ -440,3 +441,29 @@ test-lc-compliance:virtual:
> >     artifacts:
> >       reports:
> >         junit: build/lc-compliance-report.xml
> > +
> > +# ------------------------------------------------------------------------------
> > +# Deploy stage - deploy docs if we are building master or a tag
> > +# ------------------------------------------------------------------------------
> > +
> > +deploy-docs:
> > +  extends:
> > +    - .fdo.distribution-image@debian
> > +    - .libcamera-ci.debian:13
> > +    - .libcamera-ci.scripts
> > +  rules:
> 
> Just a small thing:
> 
>   - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null
>     when: never
> 
> seems clearer to me.

I also like it better. I'll go with that (after testing).

> > +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION
> > +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\.)*[0-9]+$/ && $DEPLOY_DESTINATION
> > +  environment: deploy
> > +  stage: deploy
> > +  needs:
> > +    - job: build-docs
> > +  script:
> > +    - |
> > +      mkdir -p ~/.ssh
> > +      chmod 700 ~/.ssh
> > +      echo "${DEPLOY_KNOWN_HOSTS}" > ~/.ssh/known_hosts
> > +      eval $(ssh-agent -s)
> > +      echo "${DEPLOY_SSH_KEY_BASE64}" | base64 -d | ssh-add -
> > +
> > +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh
Stefan Klug May 14, 2026, 12:31 p.m. UTC | #3
Hi,

Quoting Laurent Pinchart (2026-05-14 14:12:32)
> On Thu, May 14, 2026 at 12:22:27PM +0200, Barnabás Pőcze wrote:
> > 2026. 05. 14. 12:14 keltezéssel, Stefan Klug írta:
> > > Add a build step that deploys the docs to a server. This step
> > > only runs on pushes to master and on tag builds. It requires three
> > > external variables:
> > > 
> > > DEPLOY_SSH_KEY_BASE64: base64 encoded private deploy key
> > > DEPLOY_KNOWN_HOSTS: Known hosts containing the destination
> > > DEPLOY_DESTINAION: user@host:/ for the rsync push
> > > 
> > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
> > > Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > 
> > > ---
> > > 
> > > Changes in v4:
> > > - Collected tag
> > > - Added check for $DEPLOY_DESTINATION to prevent deployments in personal
> > >    ci setups
> > > ---
> > >   .gitlab-ci/deploy-libcamera-docs.sh | 23 +++++++++++++++++++++++
> > >   .gitlab-ci/setup-container.sh       |  2 ++
> > >   gitlab-ci.yml                       | 29 ++++++++++++++++++++++++++++-
> > >   3 files changed, 53 insertions(+), 1 deletion(-)
> > >   create mode 100755 .gitlab-ci/deploy-libcamera-docs.sh
> > > 
> > > diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh
> > > new file mode 100755
> > > index 000000000000..a6936728c4a9
> > > --- /dev/null
> > > +++ b/.gitlab-ci/deploy-libcamera-docs.sh
> > > @@ -0,0 +1,23 @@
> > > +#!/bin/bash
> > > +
> > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > +# SPDX-FileCopyrightText: © 2026 Ideas on Board
> > > +#
> > > +# Deploy libcamera docs
> > > +
> > > +set -e
> > > +
> > > +source "$(dirname "$0")/lib.sh"
> > > +
> > > +libcamera_deploy_docs() {
> > > +   echo "Deploying libcamera docs"
> > > +
> > > +   rsync -rlz --delete --chmod=Do=rx,Fo=r \
> > > +          --exclude .doctrees \
> > > +          --exclude .buildinfo \
> > > +          --exclude objects.inv \
> > > +          docs/ \
> > > +          "${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}"
> > > +}
> > > +
> > > +run libcamera_deploy_docs
> > > diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
> > > index c7ca6426c3ab..6c4b439b887b 100755
> > > --- a/.gitlab-ci/setup-container.sh
> > > +++ b/.gitlab-ci/setup-container.sh
> > > @@ -132,6 +132,8 @@ case $FDO_DISTRIBUTION_VERSION in
> > >             python3-sphinxcontrib.doxylink
> > >             texlive-latex-extra
> > >     )
> > > +   # Packages required to deploy the documentation
> > > +   PKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )
> > >     # Tools requires by the lint jobs.
> > >     PKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )
> > >     # libclang-rt-dev for the clang ASan runtime.
> > > diff --git a/gitlab-ci.yml b/gitlab-ci.yml
> > > index 278e69079c15..aad411c4e3d8 100644
> > > --- a/gitlab-ci.yml
> > > +++ b/gitlab-ci.yml
> > > @@ -5,6 +5,7 @@ stages:
> > >     - build
> > >     - lint
> > >     - test
> > > +  - deploy
> > >   
> > >   variables:
> > >     FDO_UPSTREAM_REPO: 'camera/libcamera'
> > > @@ -74,7 +75,7 @@ include:
> > >   .libcamera-ci.debian:13:
> > >     variables:
> > >       FDO_DISTRIBUTION_VERSION: 'trixie'
> > > -    FDO_DISTRIBUTION_TAG: '2026-04-24.0'
> > > +    FDO_DISTRIBUTION_TAG: '2026-05-06.0'
> > >   
> > >   .container-debian:
> > >     extends:
> > > @@ -440,3 +441,29 @@ test-lc-compliance:virtual:
> > >     artifacts:
> > >       reports:
> > >         junit: build/lc-compliance-report.xml
> > > +
> > > +# ------------------------------------------------------------------------------
> > > +# Deploy stage - deploy docs if we are building master or a tag
> > > +# ------------------------------------------------------------------------------
> > > +
> > > +deploy-docs:
> > > +  extends:
> > > +    - .fdo.distribution-image@debian
> > > +    - .libcamera-ci.debian:13
> > > +    - .libcamera-ci.scripts
> > > +  rules:
> > 
> > Just a small thing:
> > 
> >   - if: !$DEPLOY_DESTINATION # or $DEPLOY_DESTINATION == null
> >     when: never
> > 
> > seems clearer to me.
> 
> I also like it better. I'll go with that (after testing).

Yes, that is better. I was looking for something to not repeat the
variable, but didn't see that immediately. So yes, that is what I had
wanted :-)

Best regards,
Stefan

> 
> > > +    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION
> > > +    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\.)*[0-9]+$/ && $DEPLOY_DESTINATION
> > > +  environment: deploy
> > > +  stage: deploy
> > > +  needs:
> > > +    - job: build-docs
> > > +  script:
> > > +    - |
> > > +      mkdir -p ~/.ssh
> > > +      chmod 700 ~/.ssh
> > > +      echo "${DEPLOY_KNOWN_HOSTS}" > ~/.ssh/known_hosts
> > > +      eval $(ssh-agent -s)
> > > +      echo "${DEPLOY_SSH_KEY_BASE64}" | base64 -d | ssh-add -
> > > +
> > > +    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh
> 
> -- 
> Regards,
> 
> Laurent Pinchart

Patch
diff mbox series

diff --git a/.gitlab-ci/deploy-libcamera-docs.sh b/.gitlab-ci/deploy-libcamera-docs.sh
new file mode 100755
index 000000000000..a6936728c4a9
--- /dev/null
+++ b/.gitlab-ci/deploy-libcamera-docs.sh
@@ -0,0 +1,23 @@ 
+#!/bin/bash
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# SPDX-FileCopyrightText: © 2026 Ideas on Board
+#
+# Deploy libcamera docs
+
+set -e
+
+source "$(dirname "$0")/lib.sh"
+
+libcamera_deploy_docs() {
+	echo "Deploying libcamera docs"
+
+	rsync -rlz --delete --chmod=Do=rx,Fo=r \
+          --exclude .doctrees \
+          --exclude .buildinfo \
+          --exclude objects.inv \
+          docs/ \
+          "${DEPLOY_DESTINATION}${CI_COMMIT_REF_NAME}"
+}
+
+run libcamera_deploy_docs
diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh
index c7ca6426c3ab..6c4b439b887b 100755
--- a/.gitlab-ci/setup-container.sh
+++ b/.gitlab-ci/setup-container.sh
@@ -132,6 +132,8 @@  case $FDO_DISTRIBUTION_VERSION in
 		python3-sphinxcontrib.doxylink
 		texlive-latex-extra
 	)
+	# Packages required to deploy the documentation
+	PKGS_LIBCAMERA_RUNTIME+=( openssh-client rsync )
 	# Tools requires by the lint jobs.
 	PKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )
 	# libclang-rt-dev for the clang ASan runtime.
diff --git a/gitlab-ci.yml b/gitlab-ci.yml
index 278e69079c15..aad411c4e3d8 100644
--- a/gitlab-ci.yml
+++ b/gitlab-ci.yml
@@ -5,6 +5,7 @@  stages:
   - build
   - lint
   - test
+  - deploy
 
 variables:
   FDO_UPSTREAM_REPO: 'camera/libcamera'
@@ -74,7 +75,7 @@  include:
 .libcamera-ci.debian:13:
   variables:
     FDO_DISTRIBUTION_VERSION: 'trixie'
-    FDO_DISTRIBUTION_TAG: '2026-04-24.0'
+    FDO_DISTRIBUTION_TAG: '2026-05-06.0'
 
 .container-debian:
   extends:
@@ -440,3 +441,29 @@  test-lc-compliance:virtual:
   artifacts:
     reports:
       junit: build/lc-compliance-report.xml
+
+# ------------------------------------------------------------------------------
+# Deploy stage - deploy docs if we are building master or a tag
+# ------------------------------------------------------------------------------
+
+deploy-docs:
+  extends:
+    - .fdo.distribution-image@debian
+    - .libcamera-ci.debian:13
+    - .libcamera-ci.scripts
+  rules:
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEPLOY_DESTINATION
+    - if: $CI_COMMIT_TAG =~ /^v([0-9]+\.)*[0-9]+$/ && $DEPLOY_DESTINATION
+  environment: deploy
+  stage: deploy
+  needs:
+    - job: build-docs
+  script:
+    - |
+      mkdir -p ~/.ssh
+      chmod 700 ~/.ssh
+      echo "${DEPLOY_KNOWN_HOSTS}" > ~/.ssh/known_hosts
+      eval $(ssh-agent -s)
+      echo "${DEPLOY_SSH_KEY_BASE64}" | base64 -d | ssh-add -
+
+    - $CI_PROJECT_DIR/.gitlab-ci/deploy-libcamera-docs.sh