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