From 041503667eae0222f6a2fb4d34623c05f94f0cfe Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 14:33:30 +0100 Subject: [PATCH 1/8] ci: run link checker on PRs Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index 1aa2a120e..93ffb0c6a 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -1,18 +1,17 @@ -name: Links +name: Link checks on: schedule: - cron: "00 18 1 * *" - -# Uncomment the following line while testing links in a single PR. Recomment when -# done. Be sure to comment out the 'Create Issue from File' section while testing. -# pull_request + pull_request: jobs: linkChecker: runs-on: ubuntu-latest permissions: - issues: write # required for peter-evans/create-issue-from-file + contents: read + # required for peter-evans/create-issue-from-file + issues: write steps: - uses: actions/checkout@v7 @@ -21,13 +20,12 @@ jobs: uses: lycheeverse/lychee-action@v2 with: args: --accept '100..=103,200..=299,401,403,429,999' --verbose --no-progress . - fail: false + # Fail if PR is opened with broken links, but don't fail on scheduled runs. + fail: ${{ github.event_name == 'pull_request' }} jobSummary: true -# If testing links on pull_request, comment these lines out! - - name: Create Issue From File - if: steps.lychee.outputs.exit_code != 0 + if: ${{ github.event_name != 'pull_request' && steps.lychee.outputs.exit_code != 0 }} uses: peter-evans/create-issue-from-file@v6 with: title: Link Checker Report From bddc3f7a45d02dcfa1d80bf75edd0174d21fcdf2 Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 14:50:22 +0100 Subject: [PATCH 2/8] ci: split into separate jobs Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 34 +++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index 93ffb0c6a..f15d9ae77 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -5,8 +5,32 @@ on: - cron: "00 18 1 * *" pull_request: +permissions: {} + +env: + # Single definition to simplify any future changes to the linkcheck configuration. + LYCHEE_ARGS: --accept '100..=103,200..=299,401,403,429,999' --verbose --no-progress . + jobs: - linkChecker: + linkchecker-pr: + if: ${{ github.event_name == 'pull_request' }} + name: PR - Link Checker + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v7 + + - name: Link Checker + uses: lycheeverse/lychee-action@v2 + with: + args: ${{ env.LYCHEE_ARGS }} + fail: true + jobSummary: true + + linkchecker-scheduled: + if: ${{ github.event_name == 'schedule' }} + name: Monthly Link Checker runs-on: ubuntu-latest permissions: contents: read @@ -19,13 +43,13 @@ jobs: id: lychee uses: lycheeverse/lychee-action@v2 with: - args: --accept '100..=103,200..=299,401,403,429,999' --verbose --no-progress . - # Fail if PR is opened with broken links, but don't fail on scheduled runs. - fail: ${{ github.event_name == 'pull_request' }} + args: ${{ env.LYCHEE_ARGS }} + # Do not fail scheduled runs; report by issue when links are broken. + fail: false jobSummary: true - name: Create Issue From File - if: ${{ github.event_name != 'pull_request' && steps.lychee.outputs.exit_code != 0 }} + if: ${{ steps.lychee.outputs.exit_code != 0 }} uses: peter-evans/create-issue-from-file@v6 with: title: Link Checker Report From 9c9ef96bbeace0165a2fdd9aa73271a418526448 Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 14:51:09 +0100 Subject: [PATCH 3/8] ci: switch to pinned hashes Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index f15d9ae77..f46e7b58c 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -19,10 +19,10 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Link Checker - uses: lycheeverse/lychee-action@v2 + uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 with: args: ${{ env.LYCHEE_ARGS }} fail: true @@ -37,11 +37,11 @@ jobs: # required for peter-evans/create-issue-from-file issues: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Link Checker id: lychee - uses: lycheeverse/lychee-action@v2 + uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 with: args: ${{ env.LYCHEE_ARGS }} # Do not fail scheduled runs; report by issue when links are broken. @@ -50,7 +50,7 @@ jobs: - name: Create Issue From File if: ${{ steps.lychee.outputs.exit_code != 0 }} - uses: peter-evans/create-issue-from-file@v6 + uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 # v6.0.0 with: title: Link Checker Report content-filepath: ./lychee/out.md From 401ea32a11452393d0b2d62669ba8cdb6dee63eb Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 14:52:17 +0100 Subject: [PATCH 4/8] ci: allow for manual runs Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index f46e7b58c..86b6400a1 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -1,6 +1,7 @@ name: Link checks on: + workflow_dispatch: schedule: - cron: "00 18 1 * *" pull_request: @@ -29,7 +30,7 @@ jobs: jobSummary: true linkchecker-scheduled: - if: ${{ github.event_name == 'schedule' }} + if: ${{ github.event_name != 'pull_request' }} name: Monthly Link Checker runs-on: ubuntu-latest permissions: From 78869fa792abfcb8ce4356fbab9446b6865b841c Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 14:54:30 +0100 Subject: [PATCH 5/8] ci: do not fail for PRs Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index 86b6400a1..bdfb27c14 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -26,7 +26,7 @@ jobs: uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 with: args: ${{ env.LYCHEE_ARGS }} - fail: true + fail: false jobSummary: true linkchecker-scheduled: From 9033a9a885f2c674d694dfa871d067139c197523 Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 15:20:41 +0100 Subject: [PATCH 6/8] chore: update links Signed-off-by: Patrick Stephens --- .lycheeignore | 5 +++++ installation/downloads/source.md | 2 +- pipeline/outputs/dynatrace.md | 2 +- pipeline/outputs/kinesis.md | 2 +- stream-processing/tutorial.md | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 .lycheeignore diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 000000000..f90cee1c4 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,5 @@ +# Ignore certain landing pages for link checking, these may change redirects to internally +https://console.treasuredata.com/users/sign_in +https://app.datadoghq.com/logs/activation +# Ignore the redirects for Github logins when creating custom issues +^https:\/\/github\.com\/fluent\/fluent-bit\/issues\/new\?.* diff --git a/installation/downloads/source.md b/installation/downloads/source.md index 225e24bba..d50a132cf 100644 --- a/installation/downloads/source.md +++ b/installation/downloads/source.md @@ -11,7 +11,7 @@ https://github.com/fluent/fluent-bit/archive/refs/tags/v<release version>. https://github.com/fluent/fluent-bit/archive/refs/tags/v<release version>.zip ``` -For example, for version 1.8.12 the link is: [https://github.com/fluent/fluent-bit/archive/refs/tags/v1.8.12.tar.gz](https://github.com/fluent/fluent-bit/archive/refs/tags/v1.8.12.tar.gz) +For example, for version 1.8.12 the link is: [https://github.com/fluent/fluent-bit/archive/refs/tags/v1.8.12.tar.gz](https://codeload.github.com/fluent/fluent-bit/tar.gz/refs/tags/v1.8.12) ## Development diff --git a/pipeline/outputs/dynatrace.md b/pipeline/outputs/dynatrace.md index 550d16d92..37dcaa8a2 100644 --- a/pipeline/outputs/dynatrace.md +++ b/pipeline/outputs/dynatrace.md @@ -83,7 +83,7 @@ pipeline: -- [Dynatrace Fluent Bit documentation](https://docs.dynatrace.com/docs/shortlink/lma-stream-logs-with-fluent-bit) +- [Dynatrace Fluent Bit documentation](https://docs.dynatrace.com/docs/analyze-explore-automate/logs/lma-log-ingestion/lma-stream-logs-with-fluent-bit) - [Fluent Bit integration in Dynatrace Hub](https://www.dynatrace.com/hub/detail/fluent-bit/?filter=log-management-and-analytics) - [Video: Stream a Log File to Dynatrace using Fluent Bit](https://www.youtube.com/watch?v=JJJNxhtJ6R0) - [Blog: Easily stream logs from Fluent Bit to Dynatrace](https://docs.dynatrace.com/docs/analyze-explore-automate/logs/lma-log-ingestion/lma-stream-logs-with-fluent-bit) diff --git a/pipeline/outputs/kinesis.md b/pipeline/outputs/kinesis.md index 29488f187..05a29dad2 100644 --- a/pipeline/outputs/kinesis.md +++ b/pipeline/outputs/kinesis.md @@ -132,7 +132,7 @@ You can use the Fluent Bit SSM Public Parameters to find the Amazon ECR image UR aws ssm get-parameters-by-path --path /aws/service/aws-for-fluent-bit/ ``` -For more details, see the [Amazon ECR Public official doc](https://docs.aws.amazon.com/AmazonECR/latest/public/get-set-up-for-amazon-ecr.html). +For more details, see the [Amazon ECR Public official doc](https://docs.aws.amazon.com/AmazonECR/latest/public/what-is-ecr.html). ### Docker Hub diff --git a/stream-processing/tutorial.md b/stream-processing/tutorial.md index 9358e6a5b..1ce5717a8 100644 --- a/stream-processing/tutorial.md +++ b/stream-processing/tutorial.md @@ -7,7 +7,7 @@ Follow this tutorial to learn more about stream processing. This tutorial requires the following components: * Fluent Bit -* [Docker Engine](https://www.docker.com/products/docker-engine) +* Container runtime, e.g. [Docker Engine](https://www.docker.com/) * A stream processing [sample file](https://raw.githubusercontent.com/fluent/fluent-bit-docs/37b477786d6e28eb223e08611c26ec93671a34ac/stream-processing/samples/sp-samples-1k.log) ## Steps From 3d571748828fd5d555395d0c0327851537923756 Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 15:35:56 +0100 Subject: [PATCH 7/8] chore: resolve link failures Signed-off-by: Patrick Stephens --- .github/workflows/linkcheck.yaml | 4 ++++ administration/transport-security.md | 2 +- pipeline/outputs/s3.md | 2 +- stream-processing/tutorial.md | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linkcheck.yaml b/.github/workflows/linkcheck.yaml index bdfb27c14..99cd21591 100644 --- a/.github/workflows/linkcheck.yaml +++ b/.github/workflows/linkcheck.yaml @@ -21,6 +21,8 @@ jobs: contents: read steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - name: Link Checker uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0 @@ -39,6 +41,8 @@ jobs: issues: write steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - name: Link Checker id: lychee diff --git a/administration/transport-security.md b/administration/transport-security.md index ea138bf73..9d4cccd35 100644 --- a/administration/transport-security.md +++ b/administration/transport-security.md @@ -35,7 +35,7 @@ Both input and output plugins that perform Network I/O can optionally enable TLS {% hint style="info" %} -When the connection target is an IP address (IPv4 or IPv6), Fluent Bit doesn't include the TLS Server Name Indication (SNI) extension, which is consistent with [RFC 6066](https://www.rfc-editor.org/rfc/rfc6066). Certificate validation still applies against the IP address. If the server requires SNI or uses a hostname-based certificate, use a hostname as the connection target and set `tls.vhost` if needed. +When the connection target is an IP address (IPv4 or IPv6), Fluent Bit doesn't include the TLS Server Name Indication (SNI) extension, which is consistent with [RFC 6066](https://www.rfc-editor.org/info/rfc6066/). Certificate validation still applies against the IP address. If the server requires SNI or uses a hostname-based certificate, use a hostname as the connection target and set `tls.vhost` if needed. {% endhint %} diff --git a/pipeline/outputs/s3.md b/pipeline/outputs/s3.md index 00ca8d4eb..6c0e6b2ae 100644 --- a/pipeline/outputs/s3.md +++ b/pipeline/outputs/s3.md @@ -713,7 +713,7 @@ If you see errors for image pull limits, try signing in to public ECR with your aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws ``` -See the [Amazon ECR Public official documentation](https://docs.aws.amazon.com/AmazonECR/latest/public/get-set-up-for-amazon-ecr.html) for more details. +See the [Amazon ECR Public official documentation](https://docs.aws.amazon.com/AmazonECR/latest/public/what-is-ecr.html) for more details. ### Docker Hub diff --git a/stream-processing/tutorial.md b/stream-processing/tutorial.md index 1ce5717a8..c13bda870 100644 --- a/stream-processing/tutorial.md +++ b/stream-processing/tutorial.md @@ -7,7 +7,7 @@ Follow this tutorial to learn more about stream processing. This tutorial requires the following components: * Fluent Bit -* Container runtime, e.g. [Docker Engine](https://www.docker.com/) +* [Docker Engine](https://docs.docker.com/engine/) and the `docker` CLI * A stream processing [sample file](https://raw.githubusercontent.com/fluent/fluent-bit-docs/37b477786d6e28eb223e08611c26ec93671a34ac/stream-processing/samples/sp-samples-1k.log) ## Steps From dcec6c60bd0ce43c25504689a9461319d7877bdf Mon Sep 17 00:00:00 2001 From: Patrick Stephens Date: Fri, 7 Aug 2026 15:43:19 +0100 Subject: [PATCH 8/8] chore: add local link checker run Signed-off-by: Patrick Stephens --- scripts/run-link-checker.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 scripts/run-link-checker.sh diff --git a/scripts/run-link-checker.sh b/scripts/run-link-checker.sh new file mode 100755 index 000000000..72bc3c2d1 --- /dev/null +++ b/scripts/run-link-checker.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -euo pipefail + +# This script is used to run the Lychee link checker in the same way that CI does in the GitHub Actions workflow. + +SOURCE=${BASH_SOURCE[0]} +while [ -L "$SOURCE" ]; do + SCRIPT_DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) + SOURCE=$(readlink "$SOURCE") + [[ $SOURCE != /* ]] && SOURCE=$SCRIPT_DIR/$SOURCE +done +SCRIPT_DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) +REPO_DIR=${REPO_DIR:-$SCRIPT_DIR/..} + +CONTAINER_IMAGE=${CONTAINER_IMAGE:-"ghcr.io/lycheeverse/lychee:latest"} +CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-docker} + +# Always pull the latest Lychee image to ensure we are validating against the most recent version. +if ! $CONTAINER_RUNTIME pull "$CONTAINER_IMAGE" &>/dev/null; then + echo "ERROR: Failed to pull container image $CONTAINER_IMAGE" >&2 + exit 1 +fi + +# Matches the values in the GitHub Actions workflow for consistency. +LYCHEE_ARGS=${LYCHEE_ARGS:-"--accept '100..=103,200..=299,401,403,429,999' --verbose --no-progress ."} + +# Run the Lychee link checker in a container with the same arguments as the GitHub Actions workflow. +# Note we do want arguments to be expanded here, so we don't quote $LYCHEE_ARGS. +# shellcheck disable=SC2086 +"$CONTAINER_RUNTIME" run --init -it -v "$REPO_DIR":/input:ro -e GITHUB_TOKEN="${GITHUB_TOKEN:-}" "$CONTAINER_IMAGE" $LYCHEE_ARGS