Skip to content

Conversation

skewballfox
Copy link
Contributor

I'm not sure the below applies to this PR since it's a just exposing an extra option for read the docs

Please ensure your pull request adheres to the following guidelines:

  • For first time contributors, read Submitting a pull request
  • All code is covered by unit and/or runtime tests where feasible.
  • All commits contain a well written commit description including a title,
    description and a Fixes: #XXX line if the commit addresses a particular
    GitHub issue.
  • If your commit description contains a Fixes: <commit-id> tag, then
    please add the commit author[s] as reviewer[s] to this issue.
  • All commits are signed off. See the section Developer’s Certificate of Origin
  • Provide a title or release-note blurb suitable for the release notes.
  • Are you a user of Cilium? Please add yourself to the Users doc
  • Thanks for contributing!

Fixes: #issue-number

<!-- Enter the release note text here if needed or remove this section! -->

So degenerates like me can read on a remarkable

Signed-off-by: Joshua Ferguson <joshua.ferguson.273@gmail.com>
@skewballfox skewballfox requested a review from a team as a code owner July 2, 2025 15:07
@skewballfox skewballfox requested a review from qmonnet July 2, 2025 15:07
@github-actions github-actions bot added the kind/community-contribution This was a contribution made by a community member. label Jul 2, 2025
Copy link
Member

@qmonnet qmonnet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we might have got PDFs and/or epubs generated at some point in the past, but I don't remember for sure. @joestringer do you remember? Maybe I'm just getting confused with the epub/latex targets from the docs' Makefile.

@skewballfox How do the options work, where do you download the PDF and epub from once they are generated? And do you know whether there's a way to get a preview these formats before we merge the PR?

@joestringer
Copy link
Member

@qmonnet one of our earliest docs contributors had something like that working at one point, but I'm not at all familiar with it. Personally I only build and consume the HTML version.

@qmonnet qmonnet added the need-more-info More information is required to further debug or fix the issue. label Jul 4, 2025
@maintainer-s-little-helper maintainer-s-little-helper bot added the dont-merge/needs-release-note-label The author needs to describe the release impact of these changes. label Jul 4, 2025
@qmonnet qmonnet added the release-note/misc This PR makes changes that have no direct user impact. label Jul 4, 2025
@maintainer-s-little-helper maintainer-s-little-helper bot removed the dont-merge/needs-release-note-label The author needs to describe the release impact of these changes. label Jul 4, 2025
@qmonnet qmonnet added dont-merge/needs-release-note-label The author needs to describe the release impact of these changes. and removed need-more-info More information is required to further debug or fix the issue. labels Jul 4, 2025
@maintainer-s-little-helper maintainer-s-little-helper bot removed dont-merge/needs-release-note-label The author needs to describe the release impact of these changes. labels Jul 4, 2025
@qmonnet
Copy link
Member

qmonnet commented Jul 4, 2025

As for where the generated documents are available, https://docs.readthedocs.com/platform/stable/downloadable-documentation.html#accessing-offline-formats says:

When you are browsing a documentation project, they can also be accessed directly from the Flyout menu.

Regarding the previews, I don't think we get any, given that we build previews with Netlify and not readthedocs.

I'm also using exclusively the HTML version (or directly the RST at time), but I don't have any objection to the change. My main concern is what happens if PDF/ePub generation break, I wouldn't like it to prevent the deployment of the HTML version. I'm OK to merge if we keep an eye on the builds - @joestringer, I don't have credentials anymore to access the project on readthedocs so I'm counting on you 😇 (do you know whether it's possible to add more people to the RTD project, by the way?)

Copy link
Member

@qmonnet qmonnet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related doc is https://docs.readthedocs.com/platform/stable/config-file/v2.html#formats

It confirms that the formats to list are those to build in addition to HTML, so the PR looks good.

Thanks!

@qmonnet
Copy link
Member

qmonnet commented Jul 4, 2025

/test

@qmonnet qmonnet enabled auto-merge July 4, 2025 09:32
@qmonnet qmonnet added this pull request to the merge queue Jul 4, 2025
Merged via the queue into cilium:main with commit 01c4393 Jul 4, 2025
71 checks passed
@maintainer-s-little-helper maintainer-s-little-helper bot added the ready-to-merge This PR has passed all tests and received consensus from code owners to merge. label Jul 4, 2025
@joestringer
Copy link
Member

The RTD build failed:

python -m sphinx -T -b latex -d _build/doctrees -D language=en . $READTHEDOCS_OUTPUT/pdf  
Running Sphinx v7.[1](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--1).2
/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx_tabs/__init__.py:3: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as [2](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--2)025-11-30. Refrain from using this package or pin to Setuptools<81.
  __import__("pkg_resources").declare_namespace(__name__)
Initializing Spelling Checker 8.0.0
making output directory... done
loading pickled environment... done
myst v2.0.0: MdParserConfig(commonmark_only=False, gfm_only=False, enable_extensions=set(), disable_syntax=[], all_links_external=False, url_schemes=('http', 'https', 'mailto', 'ftp'), ref_domains=None, fence_as_directive=set(), number_code_blocks=[], title_to_header=False, heading_anchors=0, heading_slug_func=None, html_meta={}, footnote_transition=True, words_per_minute=200, substitutions={}, linkify_fuzzy_links=True, dmath_allow_labels=True, dmath_allow_space=True, dmath_allow_digits=True, dmath_double_inline=False, update_mathjax=True, mathjax_classes='tex2jax_process|mathjax_process|math|output_area', enable_checkboxes=False, suppress_warnings=[], highlight_code_blocks=True)
building [mo]: targets for 0 po files that are out of date
writing output... 
building [latex]: all documents
updating environment: 0 added, 0 changed, 0 removed
reading sources... 
looking for now-outdated files... none found
copying TeX support files... copying TeX support files...
done
processing Cilium.tex... index overview/intro overview/component-overview gettingstarted/k8s-install-default gettingstarted/demo gettingstarted/terminology gettingstarted/gettinghelp installation/taints installation/k8s-install-helm installation/k8s-install-migration installation/k8s-toc installation/k8s-install-external-etcd installation/k8s-install-openshift-okd installation/k8s-install-broadcom-vmware-esxi-nsx installation/k[3](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--3)s installation/k0s installation/kind installation/cni-chaining installation/cni-chaining-aws-cni installation/cni-chaining-azure-cni installation/cni-chaining-calico installation/cni-chaining-generic-veth installation/cni-chaining-portmap installation/cni-chaining-weave installation/external-toc installation/k8s-install-aks installation/k8s-install-kops installation/k8s-install-kubespray installation/k8s-install-kubeadm installation/k8s-install-rancher-existing-nodes installation/k8s-install-rke installation/rancher-desktop network/concepts/index network/concepts/routing network/concepts/ipam/index network/concepts/ipam/cluster-pool network/concepts/ipam/kubernetes network/concepts/ipam/multi-pool network/concepts/ipam/azure network/concepts/ipam/azure-delegated-ipam network/concepts/ipam/eni network/concepts/ipam/gke network/concepts/ipam/crd network/concepts/ipam/deep_dive network/concepts/masquerading network/concepts/fragmentation network/kubernetes/index network/kubernetes/intro network/kubernetes/concepts network/kubernetes/requirements network/kubernetes/configuration network/kubernetes/policy network/kubernetes/kubeproxy-free network/kubernetes/ciliumcidrgroup network/kubernetes/ciliumendpoint network/kubernetes/ciliumendpointslice network/kubernetes/compatibility network/kubernetes/troubleshooting network/kubernetes/bandwidth-manager network/kubernetes/kata network/kubernetes/ipam network/kubernetes/ipam-crd network/kubernetes/ipam-cluster-pool network/kubernetes/ipam-multi-pool network/kubernetes/local-redirect-policy network/kubernetes/identity-management-mode network/bgp-toc network/bgp-control-plane/bgp-control-plane network/bgp-control-plane/bgp-control-plane-v2 network/bgp-control-plane/bgp-control-plane-v1 network/bgp-control-plane/bgp-control-plane-troubleshooting network/bgp-control-plane/bgp-control-plane-operation network/lb-ipam network/kube-router network/bird network/ebpf/index network/ebpf/intro network/ebpf/lifeofapacket network/ebpf/maps network/ebpf/iptables network/clustermesh/index network/clustermesh/intro network/clustermesh/clustermesh network/clustermesh/services network/clustermesh/mcsapi network/clustermesh/policy network/clustermesh/affinity network/clustermesh/aks-clustermesh-prep network/clustermesh/eks-clustermesh-prep network/clustermesh/gke-clustermesh-prep network/egress-gateway-toc network/egress-gateway/egress-gateway network/egress-gateway/egress-gateway-troubleshooting network/servicemesh/index network/servicemesh/ingress network/servicemesh/http network/servicemesh/ingress-and-network-policy network/servicemesh/path-types network/servicemesh/grpc network/servicemesh/tls-termination network/servicemesh/tls-default-certificate network/servicemesh/gateway-api/gateway-api network/servicemesh/gateway-api/http network/servicemesh/gateway-api/https network/servicemesh/gateway-api/splitting network/servicemesh/gateway-api/header network/servicemesh/gateway-api/parameterized-gatewayclass network/servicemesh/gateway-api/gamma network/servicemesh/ingress-to-gateway/ingress-to-gateway network/servicemesh/ingress-to-gateway/http-migration network/servicemesh/ingress-to-gateway/tls-migration network/servicemesh/istio network/servicemesh/mutual-authentication/mutual-authentication network/servicemesh/mutual-authentication/mutual-authentication-example network/servicemesh/l7-traffic-management network/servicemesh/envoy-custom-listener network/servicemesh/envoy-traffic-management network/servicemesh/envoy-circuit-breaker network/servicemesh/envoy-load-balancing network/servicemesh/envoy-traffic-shifting network/vtep network/l2-announcements network/node-ipam network/pod-mac-address network/multicast security/index security/http security/dns security/tls-visibility security/kafka security/grpc security/elasticsearch security/aws security/policy-creation security/host-firewall security/restrict-pod-access security/network/index security/network/intro security/network/identity security/network/policyenforcement security/network/proxy/index security/network/proxy/envoy security/network/encryption security/network/encryption-ipsec security/network/encryption-wireguard security/policy/index security/policy/intro security/policy/language security/policy/kubernetes security/policy/lifecycle security/policy/troubleshooting security/policy/caveats security/threat-model observability/hubble/index observability/hubble/setup observability/hubble/hubble-cli observability/hubble/hubble-ui observability/hubble/configuration/export observability/hubble/configuration/tls observability/grafana observability/metrics observability/visibility operations/system_requirements operations/upgrade configuration/index configuration/api-rate-limiting configuration/api-restrictions configuration/per-node-config configuration/sctp configuration/vlan-802.1q configuration/argocd-issues configuration/verify-image-signatures configuration/sbom operations/performance/index operations/performance/tuning operations/performance/benchmark operations/performance/scalability/index operations/performance/scalability/identity-relevant-labels operations/performance/scalability/report operations/troubleshooting community/governance community/community community/roadmap contributing/development/index contributing/development/contributing_guide contributing/development/reviewers_committers/index contributing/development/reviewers_committers/review_process contributing/development/reviewers_committers/review_docs contributing/development/reviewers_committers/review_vendor contributing/development/reviewers_committers/duties contributing/development/dev_setup contributing/development/images contributing/development/codeoverview contributing/development/datapath_config contributing/development/hive contributing/development/statedb contributing/development/debugging contributing/development/hubble contributing/development/introducing_new_crds contributing/development/bgp_cplane contributing/development/renovate contributing/release/index contributing/release/organization contributing/release/backports contributing/testing/index contributing/testing/ci contributing/testing/e2e contributing/testing/e2e_legacy contributing/testing/scalability contributing/testing/unit contributing/testing/bpf contributing/docs/index contributing/docs/docsstructure contributing/docs/docsstyle contributing/docs/docstest contributing/docs/docsframework api grpcapi _api/v1/flow/README _api/v1/observer/README _api/v1/peer/README _api/v1/recorder/README _api/v1/relay/README sdpapi _api/v1/standalone-dns-proxy/README internals/index internals/hubble internals/cilium_operator internals/hooks internals/security-identities cheatsheet cmdref/index cmdref/index_cilium_cli cmdref/cilium cmdref/cilium_bgp cmdref/cilium_bgp_peers cmdref/cilium_bgp_routes cmdref/cilium_clustermesh cmdref/cilium_clustermesh_connect cmdref/cilium_clustermesh_disable cmdref/cilium_clustermesh_disconnect cmdref/cilium_clustermesh_enable cmdref/cilium_clustermesh_inspect-policy-default-local-cluster cmdref/cilium_clustermesh_status cmdref/cilium_completion cmdref/cilium_completion_bash cmdref/cilium_completion_fish cmdref/cilium_completion_powershell cmdref/cilium_completion_zsh cmdref/cilium_config cmdref/cilium_config_delete cmdref/cilium_config_set cmdref/cilium_config_view cmdref/cilium_connectivity cmdref/cilium_connectivity_perf cmdref/cilium_connectivity_test cmdref/cilium_context cmdref/cilium_encryption cmdref/cilium_encryption_create-key cmdref/cilium_encryption_key-status cmdref/cilium_encryption_rotate-key cmdref/cilium_encryption_status cmdref/cilium_features cmdref/cilium_features_status cmdref/cilium_features_summary cmdref/cilium_hubble cmdref/cilium_hubble_disable cmdref/cilium_hubble_enable cmdref/cilium_hubble_port-forward cmdref/cilium_hubble_ui cmdref/cilium_install cmdref/cilium_multicast cmdref/cilium_multicast_add cmdref/cilium_multicast_delete cmdref/cilium_multicast_list cmdref/cilium_multicast_list_group cmdref/cilium_multicast_list_subscriber cmdref/cilium_status cmdref/cilium_sysdump cmdref/cilium_uninstall cmdref/cilium_upgrade cmdref/cilium_version cmdref/index_cilium-agent cmdref/cilium-agent cmdref/cilium-agent_completion cmdref/cilium-agent_completion_bash cmdref/cilium-agent_completion_fish cmdref/cilium-agent_completion_powershell cmdref/cilium-agent_completion_zsh cmdref/cilium-agent_hive cmdref/cilium-agent_hive_dot-graph cmdref/cilium-agent_shell cmdref/index_cilium-bugtool cmdref/cilium-bugtool cmdref/cilium-bugtool_completion cmdref/cilium-bugtool_completion_bash cmdref/cilium-bugtool_completion_fish cmdref/cilium-bugtool_completion_powershell cmdref/cilium-bugtool_completion_zsh cmdref/index_cilium-dbg cmdref/cilium-dbg cmdref/cilium-dbg_bgp cmdref/cilium-dbg_bgp_peers cmdref/cilium-dbg_bgp_route-policies cmdref/cilium-dbg_bgp_routes cmdref/cilium-dbg_bpf cmdref/cilium-dbg_bpf_auth cmdref/cilium-dbg_bpf_auth_flush cmdref/cilium-dbg_bpf_auth_list cmdref/cilium-dbg_bpf_bandwidth cmdref/cilium-dbg_bpf_bandwidth_list cmdref/cilium-dbg_bpf_config cmdref/cilium-dbg_bpf_config_list cmdref/cilium-dbg_bpf_ct cmdref/cilium-dbg_bpf_ct_flush cmdref/cilium-dbg_bpf_ct_list cmdref/cilium-dbg_bpf_egress cmdref/cilium-dbg_bpf_egress_list cmdref/cilium-dbg_bpf_endpoint cmdref/cilium-dbg_bpf_endpoint_delete cmdref/cilium-dbg_bpf_endpoint_list cmdref/cilium-dbg_bpf_frag cmdref/cilium-dbg_bpf_frag_list cmdref/cilium-dbg_bpf_fs cmdref/cilium-dbg_bpf_fs_show cmdref/cilium-dbg_bpf_ipcache cmdref/cilium-dbg_bpf_ipcache_delete cmdref/cilium-dbg_bpf_ipcache_get cmdref/cilium-dbg_bpf_ipcache_list cmdref/cilium-dbg_bpf_ipcache_match cmdref/cilium-dbg_bpf_ipcache_update cmdref/cilium-dbg_bpf_ipmasq cmdref/cilium-dbg_bpf_ipmasq_list cmdref/cilium-dbg_bpf_lb cmdref/cilium-dbg_bpf_lb_list cmdref/cilium-dbg_bpf_lb_maglev cmdref/cilium-dbg_bpf_lb_maglev_list cmdref/cilium-dbg_bpf_metrics cmdref/cilium-dbg_bpf_metrics_list cmdref/cilium-dbg_bpf_multicast cmdref/cilium-dbg_bpf_multicast_group cmdref/cilium-dbg_bpf_multicast_group_add cmdref/cilium-dbg_bpf_multicast_group_delete cmdref/cilium-dbg_bpf_multicast_group_list cmdref/cilium-dbg_bpf_multicast_subscriber cmdref/cilium-dbg_bpf_multicast_subscriber_add cmdref/cilium-dbg_bpf_multicast_subscriber_delete cmdref/cilium-dbg_bpf_multicast_subscriber_list cmdref/cilium-dbg_bpf_nat cmdref/cilium-dbg_bpf_nat_flush cmdref/cilium-dbg_bpf_nat_list cmdref/cilium-dbg_bpf_nat_retries cmdref/cilium-dbg_bpf_nat_retries_flush cmdref/cilium-dbg_bpf_nat_retries_list cmdref/cilium-dbg_bpf_nodeid cmdref/cilium-dbg_bpf_nodeid_list cmdref/cilium-dbg_bpf_policy cmdref/cilium-dbg_bpf_policy_add cmdref/cilium-dbg_bpf_policy_delete cmdref/cilium-dbg_bpf_policy_get cmdref/cilium-dbg_bpf_policy_list cmdref/cilium-dbg_bpf_recorder cmdref/cilium-dbg_bpf_recorder_list cmdref/cilium-dbg_bpf_sha cmdref/cilium-dbg_bpf_sha_get cmdref/cilium-dbg_bpf_sha_list cmdref/cilium-dbg_bpf_socknat cmdref/cilium-dbg_bpf_socknat_list cmdref/cilium-dbg_bpf_srv6 cmdref/cilium-dbg_bpf_srv6_policy cmdref/cilium-dbg_bpf_srv6_sid cmdref/cilium-dbg_bpf_srv6_vrf cmdref/cilium-dbg_bpf_vtep cmdref/cilium-dbg_bpf_vtep_delete cmdref/cilium-dbg_bpf_vtep_list cmdref/cilium-dbg_bpf_vtep_update cmdref/cilium-dbg_build-config cmdref/cilium-dbg_cgroups cmdref/cilium-dbg_cgroups_list cmdref/cilium-dbg_completion cmdref/cilium-dbg_config cmdref/cilium-dbg_config_get cmdref/cilium-dbg_debuginfo cmdref/cilium-dbg_encrypt cmdref/cilium-dbg_encrypt_flush cmdref/cilium-dbg_encrypt_status cmdref/cilium-dbg_endpoint cmdref/cilium-dbg_endpoint_config cmdref/cilium-dbg_endpoint_disconnect cmdref/cilium-dbg_endpoint_get cmdref/cilium-dbg_endpoint_health cmdref/cilium-dbg_endpoint_labels cmdref/cilium-dbg_endpoint_list cmdref/cilium-dbg_endpoint_log cmdref/cilium-dbg_envoy cmdref/cilium-dbg_envoy_admin cmdref/cilium-dbg_envoy_admin_certs cmdref/cilium-dbg_envoy_admin_clusters cmdref/cilium-dbg_envoy_admin_config cmdref/cilium-dbg_envoy_admin_listeners cmdref/cilium-dbg_envoy_admin_logging cmdref/cilium-dbg_envoy_admin_logging_list cmdref/cilium-dbg_envoy_admin_logging_set cmdref/cilium-dbg_envoy_admin_logging_set_global cmdref/cilium-dbg_envoy_admin_logging_set_loggers cmdref/cilium-dbg_envoy_admin_metrics cmdref/cilium-dbg_envoy_admin_serverinfo cmdref/cilium-dbg_fqdn cmdref/cilium-dbg_fqdn_cache cmdref/cilium-dbg_fqdn_cache_clean cmdref/cilium-dbg_fqdn_cache_list cmdref/cilium-dbg_fqdn_names cmdref/cilium-dbg_identity cmdref/cilium-dbg_identity_get cmdref/cilium-dbg_identity_list cmdref/cilium-dbg_ip cmdref/cilium-dbg_ip_get cmdref/cilium-dbg_ip_list cmdref/cilium-dbg_kvstore cmdref/cilium-dbg_kvstore_delete cmdref/cilium-dbg_kvstore_get cmdref/cilium-dbg_kvstore_set cmdref/cilium-dbg_loadinfo cmdref/cilium-dbg_lrp cmdref/cilium-dbg_lrp_list cmdref/cilium-dbg_map cmdref/cilium-dbg_map_events cmdref/cilium-dbg_map_get cmdref/cilium-dbg_map_list cmdref/cilium-dbg_metrics cmdref/cilium-dbg_metrics_list cmdref/cilium-dbg_monitor cmdref/cilium-dbg_node cmdref/cilium-dbg_node_list cmdref/cilium-dbg_nodeid cmdref/cilium-dbg_nodeid_list cmdref/cilium-dbg_policy cmdref/cilium-dbg_policy_delete cmdref/cilium-dbg_policy_get cmdref/cilium-dbg_policy_import cmdref/cilium-dbg_policy_selectors cmdref/cilium-dbg_policy_validate cmdref/cilium-dbg_policy_wait cmdref/cilium-dbg_post-uninstall-cleanup cmdref/cilium-dbg_prefilter cmdref/cilium-dbg_prefilter_delete cmdref/cilium-dbg_prefilter_list cmdref/cilium-dbg_prefilter_update cmdref/cilium-dbg_preflight cmdref/cilium-dbg_preflight_fqdn-poller cmdref/cilium-dbg_preflight_migrate-identity cmdref/cilium-dbg_preflight_validate-cnp cmdref/cilium-dbg_recorder cmdref/cilium-dbg_recorder_delete cmdref/cilium-dbg_recorder_get cmdref/cilium-dbg_recorder_list cmdref/cilium-dbg_recorder_update cmdref/cilium-dbg_service cmdref/cilium-dbg_service_list cmdref/cilium-dbg_shell cmdref/cilium-dbg_statedb cmdref/cilium-dbg_statedb_dump cmdref/cilium-dbg_status cmdref/cilium-dbg_sysdump cmdref/cilium-dbg_troubleshoot cmdref/cilium-dbg_troubleshoot_clustermesh cmdref/cilium-dbg_troubleshoot_kvstore cmdref/cilium-dbg_version cmdref/index_cilium-health cmdref/cilium-health cmdref/cilium-health_completion cmdref/cilium-health_completion_bash cmdref/cilium-health_completion_fish cmdref/cilium-health_completion_powershell cmdref/cilium-health_completion_zsh cmdref/cilium-health_get cmdref/cilium-health_ping cmdref/cilium-health_status cmdref/index_cilium-operator cmdref/cilium-operator-alibabacloud cmdref/cilium-operator-alibabacloud_completion cmdref/cilium-operator-alibabacloud_completion_bash cmdref/cilium-operator-alibabacloud_completion_fish cmdref/cilium-operator-alibabacloud_completion_powershell cmdref/cilium-operator-alibabacloud_completion_zsh cmdref/cilium-operator-alibabacloud_hive cmdref/cilium-operator-alibabacloud_hive_dot-graph cmdref/cilium-operator-alibabacloud_metrics cmdref/cilium-operator-alibabacloud_metrics_list cmdref/cilium-operator-alibabacloud_shell cmdref/cilium-operator-alibabacloud_status cmdref/cilium-operator-alibabacloud_status_clustermesh cmdref/cilium-operator-alibabacloud_troubleshoot cmdref/cilium-operator-alibabacloud_troubleshoot_clustermesh cmdref/cilium-operator-alibabacloud_troubleshoot_kvstore cmdref/cilium-operator-aws cmdref/cilium-operator-aws_completion cmdref/cilium-operator-aws_completion_bash cmdref/cilium-operator-aws_completion_fish cmdref/cilium-operator-aws_completion_powershell cmdref/cilium-operator-aws_completion_zsh cmdref/cilium-operator-aws_hive cmdref/cilium-operator-aws_hive_dot-graph cmdref/cilium-operator-aws_metrics cmdref/cilium-operator-aws_metrics_list cmdref/cilium-operator-aws_shell cmdref/cilium-operator-aws_status cmdref/cilium-operator-aws_status_clustermesh cmdref/cilium-operator-aws_troubleshoot cmdref/cilium-operator-aws_troubleshoot_clustermesh cmdref/cilium-operator-aws_troubleshoot_kvstore cmdref/cilium-operator-azure cmdref/cilium-operator-azure_completion cmdref/cilium-operator-azure_completion_bash cmdref/cilium-operator-azure_completion_fish cmdref/cilium-operator-azure_completion_powershell cmdref/cilium-operator-azure_completion_zsh cmdref/cilium-operator-azure_hive cmdref/cilium-operator-azure_hive_dot-graph cmdref/cilium-operator-azure_metrics cmdref/cilium-operator-azure_metrics_list cmdref/cilium-operator-azure_shell cmdref/cilium-operator-azure_status cmdref/cilium-operator-azure_status_clustermesh cmdref/cilium-operator-azure_troubleshoot cmdref/cilium-operator-azure_troubleshoot_clustermesh cmdref/cilium-operator-azure_troubleshoot_kvstore cmdref/cilium-operator-generic cmdref/cilium-operator-generic_completion cmdref/cilium-operator-generic_completion_bash cmdref/cilium-operator-generic_completion_fish cmdref/cilium-operator-generic_completion_powershell cmdref/cilium-operator-generic_completion_zsh cmdref/cilium-operator-generic_hive cmdref/cilium-operator-generic_hive_dot-graph cmdref/cilium-operator-generic_metrics cmdref/cilium-operator-generic_metrics_list cmdref/cilium-operator-generic_shell cmdref/cilium-operator-generic_status cmdref/cilium-operator-generic_status_clustermesh cmdref/cilium-operator-generic_troubleshoot cmdref/cilium-operator-generic_troubleshoot_clustermesh cmdref/cilium-operator-generic_troubleshoot_kvstore cmdref/cilium-operator cmdref/cilium-operator_completion cmdref/cilium-operator_completion_bash cmdref/cilium-operator_completion_fish cmdref/cilium-operator_completion_powershell cmdref/cilium-operator_completion_zsh cmdref/cilium-operator_hive cmdref/cilium-operator_hive_dot-graph cmdref/cilium-operator_metrics cmdref/cilium-operator_metrics_list cmdref/cilium-operator_shell cmdref/cilium-operator_status cmdref/cilium-operator_status_clustermesh cmdref/cilium-operator_troubleshoot cmdref/cilium-operator_troubleshoot_clustermesh cmdref/cilium-operator_troubleshoot_kvstore cmdref/index_clustermesh-apiserver cmdref/clustermesh-apiserver cmdref/clustermesh-apiserver_clustermesh cmdref/clustermesh-apiserver_clustermesh-dbg cmdref/clustermesh-apiserver_clustermesh-dbg_troubleshoot cmdref/clustermesh-apiserver_clustermesh_hive cmdref/clustermesh-apiserver_clustermesh_hive_dot-graph cmdref/clustermesh-apiserver_completion cmdref/clustermesh-apiserver_completion_bash cmdref/clustermesh-apiserver_completion_fish cmdref/clustermesh-apiserver_completion_powershell cmdref/clustermesh-apiserver_completion_zsh cmdref/clustermesh-apiserver_etcdinit cmdref/clustermesh-apiserver_kvstoremesh cmdref/clustermesh-apiserver_kvstoremesh-dbg cmdref/clustermesh-apiserver_kvstoremesh-dbg_status cmdref/clustermesh-apiserver_kvstoremesh-dbg_troubleshoot cmdref/clustermesh-apiserver_kvstoremesh_hive cmdref/clustermesh-apiserver_kvstoremesh_hive_dot-graph cmdref/clustermesh-apiserver_shell cmdref/clustermesh-apiserver_version cmdref/kvstore helm-reference kvstore further_reading glossary reference-guides/bpf/index reference-guides/bpf/architecture reference-guides/bpf/toolchain reference-guides/bpf/debug_and_test reference-guides/bpf/progtypes reference-guides/bpf/resources reference-guides/xfrm/index 
resolving references...
failed
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/ext/imgconverter.py", line 61, in convert
    subprocess.run(args, capture_output=True, check=True)
  File "/home/docs/.asdf/installs/python/3.11.12/lib/python3.11/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['convert', '/home/docs/checkouts/readthedocs.org/user_builds/cilium/checkouts/latest/Documentation/network/ebpf/_static/kubernetes_iptables.svg[0]', '/home/docs/checkouts/readthedocs.org/user_builds/cilium/checkouts/latest/Documentation/_build/doctrees/images/kubernetes_iptables.png']' returned non-zero exit status 1.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/cmd/build.py", line 290, in build_main
    app.build(args.force_all, args.filenames)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/application.py", line 351, in build
    self.builder.build_update()
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 287, in build_update
    self.build(['__all__'], to_build)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 360, in build
    self.write(docnames, list(updated_docnames), method)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/builders/latex/__init__.py", line 29[4](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--4), in write
    doctree = self.assemble_doctree(
              ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/builders/latex/__init__.py", line 360, in assemble_doctree
    self.env.resolve_references(largetree, indexfile, self)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/environment/__init__.py", line 6[5](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--5)8, in resolve_references
    self.apply_post_transforms(doctree, fromdocname)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/environment/__init__.py", line [6](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--6)70, in apply_post_transforms
    transformer.apply_transforms()
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/transforms/__init__.py", line 80, in apply_transforms
    super().apply_transforms()
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/docutils/transforms/__init__.py", line 1[7](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--7)1, in apply_transforms
    transform.apply(**kwargs)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/transforms/post_transforms/images.py", line 30, in apply
    self.handle(node)
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/transforms/post_transforms/images.py", line 249, in handle
    if self.convert(abs_srcpath, destpath):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/docs/checkouts/readthedocs.org/user_builds/cilium/envs/latest/lib/python3.11/site-packages/sphinx/ext/imgconverter.py", line 69, in convert
    raise ExtensionError(__('convert exited with error:\n'
sphinx.errors.ExtensionError: convert exited with error:
[stderr]
b"convert-im6.q16: non-conforming drawing primitive definition `text-align' @ error/draw.c/RenderMVGContent/4404.\n"
[stdout]
b''
Extension error:
convert exited with error:
[stderr]
b"convert-im6.q[16](https://app.readthedocs.org/projects/cilium/builds/28743417/#277234112--16): non-conforming drawing primitive definition `text-align' @ error/draw.c/RenderMVGContent/4404.\n"
[stdout]
b''

@skewballfox
Copy link
Contributor Author

I'll try to look into the error message sometime tonight or this morning.

@qmonnet
Copy link
Member

qmonnet commented Jul 15, 2025

Joe, could you check whether the HTML is still published in this case? Or does the failure to build the PDF halt the deployment?

Another question: As far as I remember we don't get notifications when publishing, do we? (The reason I'm asking is that if a failure for PDF/ePub breaks the HTML build and we don't get notified, I'm not sure it's worth it supporting PDF/ePub builds at the risk of silently breaking docs updates. No issue if the HTML version is pushed anyway, though.)

@qmonnet
Copy link
Member

qmonnet commented Jul 15, 2025

Oh I'm just seeing your message on Slack, and the revert now. That answers my question, thanks for taking care of this!

@joestringer
Copy link
Member

@qmonnet I'm pretty sure it disrupts the deployment even for HTML:
image

There's probably a way to notify on failures, and yes I think that would be beneficial to set up one way or another. I noticed this time because I was preparing a release candidate which necessitates reconfiguring RTD. Typically I think @cilium/maintainers do this about once a month so there shouldn't be an extended period where we miss a breakage. The repercussion would just be that new updates to the docs won't be published since the last failure - not the worst, but also not ideal.

@skewballfox
Copy link
Contributor Author

skewballfox commented Jul 15, 2025

I didn't realize this would break your CI pipeline. My apologies.

when I run this locally it seems to work without failure, maybe I have something installed locally that is a extra system dependency?

cd Documentation
# install uv if it's not on your system
# curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.11 .venv; and uv pip install pip setuptools; and uv pip install sphinx; and uv pip install -r requirements.txt
uv run python -m sphinx -T -b dirhtml -d _build/doctrees -D language=en . .output/html
uv run python -m sphinx -T -b latex -d _build/doctrees -D language=en . .output/pdf

EDIT:
the tail end of the output

writing... done
copying images... [ 25%] https://raw.githubusercontent.com/kata-containers/documentation/refs/heads/mastecopying images... [ 87%] https://i1.wp.com/user-images.githubusercontent.com/3477155/52671177-5d0e0100-2ecopying images... [100%] images/xfrm_policies_data_structure.png
rediraffe: Redirect generation skipped for unsupported builders. Supported builders: html, dirhtml, readthedocs, readthedocsdirhtml.
build succeeded, 2 warnings.

The LaTeX files are in .output/pdf.

@joestringer
Copy link
Member

No worries about the CI pipeline breakage, it was an easy fix. Unfortunately it just meant that we had to revert this PR. I agree it's probably just some dependency that's not encoded in Documentation/requirements.txt. I would have thought that venv would have been enough to simulate the RTD environment for testing, but evidently not since that's what you've tried above. Python version seems very close to the RTD version as well, so I don't think that's a factor.

@qmonnet
Copy link
Member

qmonnet commented Jul 16, 2025

Claude says:

This error occurs when Sphinx is trying to convert an SVG image to PNG for PDF output, but ImageMagick (the convert command) is failing due to an issue with the SVG content. The specific error non-conforming drawing primitive definition 'text-align' suggests that the SVG file contains CSS properties that ImageMagick doesn't recognize or handle properly.

Here are several solutions to fix this issue:

[...]

Solution 2: Fix the SVG File

The SVG file at Documentation/network/ebpf/_static/kubernetes_iptables.svg contains CSS properties that ImageMagick can't handle. You can:

  1. Open the SVG file in a text editor
  2. Remove or replace problematic CSS properties like text-align
  3. Convert text-align to SVG-compatible attributes like text-anchor

(Other suggestions include using Inkscape as a SVG processor as part of the workflow, looking at ImageMagick policy configuration (unlikely the cause here), using alternative image formats, or skipping image conversion altogether. None of these seem very convenient here.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/community-contribution This was a contribution made by a community member. ready-to-merge This PR has passed all tests and received consensus from code owners to merge. release-note/misc This PR makes changes that have no direct user impact.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants