From 2e29fc74ccaa4f12c5492ecb86927a92eff394aa Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 13:24:27 -0600 Subject: [PATCH 1/6] Link checks --- .github/workflows/ci.yml | 9 ++++++++ .github/workflows/link_check.yml | 37 ++++++++++++++++++++++++++++++++ .github/workflows/tests.yml | 2 -- .lycheeignore | 15 +++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/link_check.yml create mode 100644 .lycheeignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aed32d85..79053dda 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,9 @@ jobs: - scripts/generate-docs.sh - .github/workflows/ci.yml - .github/workflows/generate-docs.yml + - .github/workflows/link_check.yml - .github/workflows/publish-docs.yml + - .lycheeignore cpp_checks: - src/** - include/** @@ -119,6 +121,12 @@ jobs: if: ${{ needs.changes.outputs.docs == 'true' || github.event_name == 'workflow_dispatch' }} uses: ./.github/workflows/generate-docs.yml + link-check: + name: Link Check + needs: changes + if: ${{ needs.changes.outputs.docs == 'true' || github.event_name == 'workflow_dispatch' }} + uses: ./.github/workflows/link_check.yml + # Only runs on a client-sdk-rust submodule bump. Runs in parallel and is not a # dependency of builds/tests, so developer iteration against an unreleased # Rust commit still gets full build feedback in CI. @@ -141,6 +149,7 @@ jobs: - license-check - cpp-checks - generate-docs + - link-check - rust-release-check if: always() steps: diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml new file mode 100644 index 00000000..74e3f399 --- /dev/null +++ b/.github/workflows/link_check.yml @@ -0,0 +1,37 @@ +name: Link Check + +# Validates docs.livekit.io and other URLs referenced in public headers and +# hand-written documentation. Modeled on livekit/client-sdk-esp32 link_check.yml. +on: + workflow_call: {} + workflow_dispatch: {} + +jobs: + check-links: + name: Link Check + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + + - name: Restore lychee cache + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: .lycheecache + key: cache-lychee-${{ github.sha }} + restore-keys: cache-lychee- + + - name: Run lychee + uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 + with: + args: >- + --verbose + --no-progress + --cache + --max-cache-age 1d + include/livekit + docs + README.md + fail: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f4c29b4e..e2ad1c24 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -193,7 +193,6 @@ jobs: shell: bash run: | build-release/bin/livekit_unit_tests \ - --gtest_repeat=100 \ --gtest_brief=1 \ --gtest_output=xml:build-release/unit-test-results.xml @@ -203,7 +202,6 @@ jobs: shell: pwsh run: | build-release\bin\livekit_unit_tests.exe ` - --gtest_repeat=100 ` --gtest_brief=1 ` --gtest_output="xml:build-release\unit-test-results.xml" diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 00000000..f6efacf9 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,15 @@ +# Build artifacts and vendored trees are not documentation sources. +build*/ +build-*/ +local-install/ +client-sdk-rust/ +cpp-example-collection/ + +# Generated Doxygen output (source inputs are checked instead). +docs/doxygen/html/ + +# Local/dev-only URLs. +http://localhost:* +https://localhost:* +ws://localhost:* +wss://localhost:* From 891c7f0947d587a000293a7ab5765b9e1599b2ea Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 13:27:41 -0600 Subject: [PATCH 2/6] Every PR --- .github/workflows/ci.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 79053dda..03c26c49 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,9 +69,7 @@ jobs: - scripts/generate-docs.sh - .github/workflows/ci.yml - .github/workflows/generate-docs.yml - - .github/workflows/link_check.yml - .github/workflows/publish-docs.yml - - .lycheeignore cpp_checks: - src/** - include/** @@ -109,6 +107,12 @@ jobs: name: License Check uses: ./.github/workflows/license_check.yml + # link-check is cheap (seconds) and should run on every PR so @see URLs in + # public headers and docs do not rot. + link-check: + name: Link Check + uses: ./.github/workflows/link_check.yml + cpp-checks: name: C++ Checks needs: changes @@ -121,12 +125,6 @@ jobs: if: ${{ needs.changes.outputs.docs == 'true' || github.event_name == 'workflow_dispatch' }} uses: ./.github/workflows/generate-docs.yml - link-check: - name: Link Check - needs: changes - if: ${{ needs.changes.outputs.docs == 'true' || github.event_name == 'workflow_dispatch' }} - uses: ./.github/workflows/link_check.yml - # Only runs on a client-sdk-rust submodule bump. Runs in parallel and is not a # dependency of builds/tests, so developer iteration against an unreleased # Rust commit still gets full build feedback in CI. From da5b5e6e3731f7fa241ea61d28fa1f504fdb1e68 Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 13:33:35 -0600 Subject: [PATCH 3/6] Maybe fix --- .github/workflows/link_check.yml | 5 +++-- .gitignore | 1 + .lycheeignore | 14 ++++++++++++++ README.md | 4 ++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 74e3f399..16054f26 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -31,7 +31,8 @@ jobs: --no-progress --cache --max-cache-age 1d - include/livekit - docs + --root-dir . + 'include/livekit/**/*.h' + 'docs/**/*.md' README.md fail: true diff --git a/.gitignore b/.gitignore index c7fabe11..19fb124b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .cache/ +.lycheecache CMakeFiles/ CMakeCache.txt .DS_Store diff --git a/.lycheeignore b/.lycheeignore index f6efacf9..0c2202ce 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -8,8 +8,22 @@ cpp-example-collection/ # Generated Doxygen output (source inputs are checked instead). docs/doxygen/html/ +# Doxygen theme templates use $relpath^$variable placeholders, not real URLs. +docs/doxygen/ + # Local/dev-only URLs. http://localhost:* https://localhost:* ws://localhost:* wss://localhost:* + +# Apache license header URLs in copyright blocks (not user-facing doc links). +http://www.apache.org/licenses/LICENSE-2.0 +https://www.apache.org/licenses/LICENSE-2.0 + +# Ecosystem footer links that reject automated checks (403/405) but work in browsers. +https://docs.livekit.io/mcp +https://livekit.io/join-slack +https://livekit.com/join-slack +https://join.slack.com/* +https://livekit-users.slack.com/* diff --git a/README.md b/README.md index d9fd9d71..6efc00e9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - - + + The LiveKit icon, the name of the repository and some sample code in the background. From 03a89c4b7f13f9b2a5876f53bde09a3bbfe19dff Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 14:16:25 -0600 Subject: [PATCH 4/6] cleanup lycheeignore --- .lycheeignore | 17 ----------------- docs/logging.md | 2 +- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/.lycheeignore b/.lycheeignore index 0c2202ce..26012769 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -1,26 +1,9 @@ -# Build artifacts and vendored trees are not documentation sources. -build*/ -build-*/ -local-install/ -client-sdk-rust/ -cpp-example-collection/ - -# Generated Doxygen output (source inputs are checked instead). -docs/doxygen/html/ - -# Doxygen theme templates use $relpath^$variable placeholders, not real URLs. -docs/doxygen/ - # Local/dev-only URLs. http://localhost:* https://localhost:* ws://localhost:* wss://localhost:* -# Apache license header URLs in copyright blocks (not user-facing doc links). -http://www.apache.org/licenses/LICENSE-2.0 -https://www.apache.org/licenses/LICENSE-2.0 - # Ecosystem footer links that reject automated checks (403/405) but work in browsers. https://docs.livekit.io/mcp https://livekit.io/join-slack diff --git a/docs/logging.md b/docs/logging.md index 1889479c..c1dab988 100644 --- a/docs/logging.md +++ b/docs/logging.md @@ -67,7 +67,7 @@ livekit::setLogCallback( livekit::setLogCallback(nullptr); ``` -See the [`logging_levels/custom_sinks.cpp`](https://github.com/livekit-examples/cpp-example-collection/blob/main/logging_levels/custom_sinks.cpp) +See the [`logging_levels/custom_sinks`](https://github.com/livekit-examples/cpp-example-collection/tree/main/logging_levels/custom_sinks) example for three copy-paste-ready patterns: a **file logger**, **JSON structured lines**, and a **ROS2 bridge** that maps `LogLevel` to `RCLCPP_*` macros. From 619edd4d296ef228bebf88b08d2e6738b285243e Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 14:39:54 -0600 Subject: [PATCH 5/6] No more link check summary --- .github/workflows/link_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 16054f26..04c45386 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -36,3 +36,4 @@ jobs: 'docs/**/*.md' README.md fail: true + jobSummary: false From 21232391147130d2cf3b03b350d8b6048ea15dcd Mon Sep 17 00:00:00 2001 From: Alan George Date: Tue, 16 Jun 2026 14:44:45 -0600 Subject: [PATCH 6/6] Cleanup on self-review --- .github/workflows/ci.yml | 3 +-- .github/workflows/tests.yml | 2 ++ README.md | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 03c26c49..aaf35bd8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -107,8 +107,7 @@ jobs: name: License Check uses: ./.github/workflows/license_check.yml - # link-check is cheap (seconds) and should run on every PR so @see URLs in - # public headers and docs do not rot. + # link-check is cheap (seconds) and should run on every PR link-check: name: Link Check uses: ./.github/workflows/link_check.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e2ad1c24..f4c29b4e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -193,6 +193,7 @@ jobs: shell: bash run: | build-release/bin/livekit_unit_tests \ + --gtest_repeat=100 \ --gtest_brief=1 \ --gtest_output=xml:build-release/unit-test-results.xml @@ -202,6 +203,7 @@ jobs: shell: pwsh run: | build-release\bin\livekit_unit_tests.exe ` + --gtest_repeat=100 ` --gtest_brief=1 ` --gtest_output="xml:build-release\unit-test-results.xml" diff --git a/README.md b/README.md index 6efc00e9..d9fd9d71 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - - + + The LiveKit icon, the name of the repository and some sample code in the background.