new file mode 100755
@@ -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
@@ -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.
@@ -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:
@@ -438,3 +439,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
+ - if: $CI_COMMIT_TAG =~ /^v([0-9]+\.)*[0-9]+$/
+ 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
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> --- Changes in v2: - Moved deployment into script - Improved build rules - Pipe ssh key into ssh agent instead of creating a file --- .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