diff --git a/.github/workflows/add-netlify-links.yml b/.github/workflows/add-netlify-links.yml
deleted file mode 100644
index 69377f9f..00000000
--- a/.github/workflows/add-netlify-links.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-name: Add Netlify Links To Changed Pages
-on:
- workflow_call:
- pull_request_target:
-jobs:
- get-pr-changes:
- name: Get Changed Files & Update PR Description
- runs-on: ubuntu-latest
- permissions:
- issues: write
- contents: write
- pull-requests: write
- repository-projects: write
- steps:
- - uses: actions/checkout@v4
- - name: Get Changed Files
- id: changed-files
- # pin to a specific commit to ensure stability
- uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c
- with:
- separator: ","
- files: source/**
- - name: Build Netlify Links for Changed Pages
- id: build_page_links
- env:
- CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
- run: |
- new_links=""
- base_link='https://deploy-preview-${{ github.event.number }}--docs-csharp.netlify.app'
- files=$(echo "$CHANGED_FILES" | tr "," "\n")
- for file in $files; do
- echo "processing ${file}"
- if (! grep -s "includes/" <<< "$file") &&
- (! grep -s "images/" <<< "$file") &&
- (! grep -s "examples/" <<< "$file"); then
- file="${file#source}"
- file="${file%.txt}"
- filenoslash="${file:1}"
- echo "${base_link}${file}"
- new_links+="
${filenoslash}"
- else
- echo "(file skipped)"
- fi
- done
- if [ "$new_links" == "" ]; then
- new_links="No pages to preview"
- fi
- echo "Final new_links string: "
- echo "${new_links}"
- echo "staging_links=${new_links}" >> "$GITHUB_OUTPUT"
- - name: Update the PR Description
- uses: MongoCaleb/pr-description-action@master
- with:
- regex: ".*"
- appendContentOnMatchOnly: true
- regexFlags: is
- content: "\n${{ steps.build_page_links.outputs.staging_links }}\n"
- token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/vale-tdbx.yml b/.github/workflows/vale-tdbx.yml
deleted file mode 100644
index 8e4b6f49..00000000
--- a/.github/workflows/vale-tdbx.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: vale-checks
-on:
- pull_request:
- paths:
- - "source/**"
-
-jobs:
- vale:
- name: TDBX Vale rules
- runs-on: ubuntu-latest
- steps:
- - name: checkout
- uses: actions/checkout@master
-
- - name: Install docutils
- run: sudo apt-get install -y docutils
-
- - id: files
- uses: masesgroup/retrieve-changed-files@v2
- with:
- format: 'csv'
-
- - name: checkout-latest-rules
- uses: actions/checkout@master
- with:
- repository: mongodb/mongodb-vale-action
- path: './tdbx-vale-rules'
- token: ${{secrets.GITHUB_TOKEN}}
-
- - name: move-files-for-vale-action
- run: |
- cp tdbx-vale-rules/.vale.ini .vale.ini
- mkdir -p .github/styles/
- cp -rf tdbx-vale-rules/.github/styles/ .github/
-
- - name: run-vale
- uses: errata-ai/vale-action@reviewdog
- with:
- reporter: github-pr-check
- files: ${{steps.files.outputs.added_modified}}
- fail_on_error: true
- token: ${{secrets.GITHUB_TOKEN}}
diff --git a/.github/workflows/verify-redirects.yml b/.github/workflows/verify-redirects.yml
new file mode 100644
index 00000000..0095051e
--- /dev/null
+++ b/.github/workflows/verify-redirects.yml
@@ -0,0 +1,133 @@
+name: Verify Redirects
+
+on:
+ pull_request_target:
+
+jobs:
+ verify-redirects:
+ name: Verifying Redirects
+ runs-on: ubuntu-latest
+ env:
+ REDIRECTS_FILE: "pr/config/redirects"
+ permissions:
+ pull-requests: write
+ steps:
+ - name: Check Out Base Branch
+ uses: actions/checkout@v4
+
+ - name: Checkout PR Head Branch
+ uses: actions/checkout@v4
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ ref: ${{ github.event.pull_request.head.ref }}
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+ path: pr
+
+ - name: Get Changed Files
+ id: changed-files
+ uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c
+ with:
+ include_all_old_new_renamed_files: true
+
+ - name: Find Missing Redirects for Renamed Files
+ id: renamed-files
+ if: steps.changed-files.outputs.renamed_files_count > 0
+ env:
+ RENAMED_FILES: ${{ steps.changed-files.outputs.all_old_new_renamed_files }}
+ run: |
+ renamed_redirects=""
+
+ for file in $RENAMED_FILES; do
+
+ # only run for .txt files
+ if [[ ! "$file" == *.txt ]]; then
+ continue
+ fi
+
+ # format old and new URLs
+ old=$(echo "$file" | cut -d',' -f1)
+ old="${old#source}"
+ old="${old%.txt}"
+ new=$(echo "$file" | cut -d',' -f2)
+ new="${new#source}"
+ new="${new%.txt}"
+
+ redirect='${prefix}/${version}'"$old"'/ -> ${base}/${version}'"$new"'/'
+
+ # if redirect not already in file, add to string to add to PR description
+ if ! grep -q "$redirect" $REDIRECTS_FILE; then
+ renamed_redirects+="[<v>-*]: $redirect"
+ fi
+ done
+
+ echo "redirects=${renamed_redirects}" >> "$GITHUB_OUTPUT"
+
+ - name: Find Missing Redirects for Deleted Files
+ id: deleted-files
+ if: steps.changed-files.outputs.deleted_files_count > 0
+ env:
+ DELETED_FILES: ${{ steps.changed-files.outputs.deleted_files }}
+ run: |
+ deleted_redirects=""
+
+ for file in $DELETED_FILES; do
+
+ # only run for .txt files
+ if [[ ! "$file" == *.txt ]]; then
+ continue
+ fi
+
+ # format old URL
+ old=$(echo "$file" | cut -d',' -f1)
+ old="${old#source}"
+ old="${old%.txt}"
+
+ redirect='${prefix}/${version}'"$old"'/ -> ${base}/${version}/'
+
+ # escape special characters before searching for string
+ escaped_redirect=$(printf '%s\n' "$redirect" | sed 's/[[*${}|\\]/\\&/g')
+
+ # if redirect not already in file, add to string to add to PR description
+ if ! grep -qE "${escaped_redirect}$" $REDIRECTS_FILE; then
+ deleted_redirects+="[<v>-*]: $redirect"
+ fi
+ done
+
+ echo "redirects=${deleted_redirects}" >> "$GITHUB_OUTPUT"
+
+ - name: Build Redirect HTML
+ id: build-redirect-html
+ env:
+ RENAMED_REDIRECTS: ${{ steps.renamed-files.outputs.redirects }}
+ DELETED_REDIRECTS: ${{ steps.deleted-files.outputs.redirects }}
+ run: |
+ redirect_html=''
+ combined_redirects="${RENAMED_REDIRECTS}${DELETED_REDIRECTS}"
+
+ if [ -n "$combined_redirects" ]; then
+ redirect_html="Suggested redirects for moved, renamed, and deleted files:
Replace <v> with the earliest backport target version
$combined_redirects"
+ fi
+
+ echo "redirect_html=${redirect_html}" >> "$GITHUB_OUTPUT"
+
+ - name: Update PR Description
+ uses: MongoCaleb/pr-description-action@4bdfe35b98f64532b419ad20b350a92546cd3aa1
+ with:
+ regex: "- \\[ \\] Did you add forward and backward redirects\\?.*"
+ appendContentOnMatchOnly: false
+ regexFlags: is
+ content: "- [ ] Did you add forward and backward redirects?\n ${{ steps.build-redirect-html.outputs.redirect_html }}"
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Check for duplicates in redirects file
+ run: |
+ if [[ -f "$REDIRECTS_FILE" ]]; then
+ duplicates=$(sort "$REDIRECTS_FILE" | uniq -d)
+ if [[ -n "$duplicates" ]]; then
+ echo "Duplicate lines found in $REDIRECTS_FILE:"
+ echo "$duplicates"
+ exit 1 # error
+ fi
+ else
+ "Redirects file doesn't exist. Skipping duplicate check."
+ fi