Skip to content

Commit edf7c0e

Browse files
committed
verify existing redirects
1 parent 381130c commit edf7c0e

File tree

1 file changed

+82
-14
lines changed

1 file changed

+82
-14
lines changed

.github/workflows/add-redirects.yml

Lines changed: 82 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,131 @@
1-
name: Add Redirects
1+
name: Verify Redirects
2+
23
on:
34
pull_request_target:
5+
46
jobs:
5-
add-redirects:
6-
name: Get Redirects for Modified Files
7+
verify-redirects:
8+
name: Verifying Redirects
79
runs-on: ubuntu-latest
10+
env:
11+
REDIRECTS_FILE: "config/redirects"
812
permissions:
913
pull-requests: write
1014
steps:
11-
- uses: actions/checkout@v4
15+
- name: Check Out Base Branch
16+
uses: actions/checkout@v4
17+
1218
- name: Get Changed Files
1319
id: changed-files
1420
uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c
1521
with:
1622
include_all_old_new_renamed_files: true
17-
- name: Make Redirects for Renamed Files
23+
24+
- name: Find Missing Redirects for Renamed Files
1825
id: renamed-files
1926
if: steps.changed-files.outputs.renamed_files_count > 0
2027
env:
2128
RENAMED_FILES: ${{ steps.changed-files.outputs.all_old_new_renamed_files }}
2229
run: |
23-
renamed_redirects=""
30+
renamed_redirects=()
2431
for file in $RENAMED_FILES; do
32+
33+
# only run for .txt files
2534
if [[ ! "$file" == *.txt ]]; then
2635
continue
2736
fi
37+
38+
# format old and new URLs
2839
old=$(echo "$file" | cut -d',' -f1)
2940
old="${old#source}"
3041
old="${old%.txt}"
3142
new=$(echo "$file" | cut -d',' -f2)
3243
new="${new#source}"
3344
new="${new%.txt}"
34-
#single quotes = ${var} rendered literally; double quotes = $var interpreted
35-
renamed_redirects+='<li>[&lt;v&gt;-*]: ${prefix}/${version}'"$old"'/ -> ${base}/${version}'"$new"'/</li>'
45+
46+
# single quotes = ${var} rendered literally; double quotes = $var interpreted
47+
renamed_redirect='${prefix}/${version}'"$old"'/ -> ${base}/${version}'"$new"'/'
48+
49+
# if redirect not already in file, add to array to add to PR description
50+
if ! grep -q "$renamed_redirect" $REDIRECTS_FILE; then
51+
renamed_redirects+=("$renamed_redirect")
52+
fi
3653
done
3754
echo "redirects=${renamed_redirects}" >> "$GITHUB_OUTPUT"
38-
- name: Make Redirects for Deleted Files
55+
56+
- name: Find Missing Redirects for Deleted Files
3957
id: deleted-files
4058
if: steps.changed-files.outputs.deleted_files_count > 0
4159
env:
4260
DELETED_FILES: ${{ steps.changed-files.outputs.deleted_files }}
4361
run: |
44-
deleted_redirects=""
62+
deleted_redirects=()
4563
for file in $DELETED_FILES; do
64+
65+
# only run for .txt files
4666
if [[ ! "$file" == *.txt ]]; then
4767
continue
4868
fi
69+
70+
# format old URL
4971
old=$(echo "$file" | cut -d',' -f1)
5072
old="${old#source}"
5173
old="${old%.txt}"
52-
deleted_redirects+='<li>[&lt;v&gt;-*]: ${prefix}/${version}'"$old"'/ -> ${base}/${version}/</li>'
74+
75+
# single quotes = ${var} rendered literally; double quotes = $var interpreted
76+
deleted_redirect='${prefix}/${version}'"$old"'/ -> ${base}/${version}/'
77+
78+
# if redirect not already in file, add to array to add to PR description
79+
if ! grep -q "$deleted_redirect" $REDIRECTS_FILE; then
80+
deleted_redirects+=("$deleted_redirect")
81+
fi
82+
5383
done
5484
echo "redirects=${deleted_redirects}" >> "$GITHUB_OUTPUT"
85+
86+
- name: Build Redirect HTML
87+
id: build-redirect-html
88+
env:
89+
RENAMED_REDIRECTS: ${{ steps.renamed-files.outputs.redirects }}
90+
DELETED_REDIRECTS: ${{ steps.deleted-files.outputs.redirects }}
91+
run: |
92+
# empty string that stays empty if there are no redirects to suggest
93+
redirect_html=""
94+
95+
for renamed_redirect in "${RENAMED_REDIRECTS[@]}"; do
96+
redirect_html+="<li>[&lt;v&gt;-*]: $renamed_redirect</li>"
97+
done
98+
99+
for deleted_redirect in "${DELETED_REDIRECTS[@]}"; do
100+
redirect_html+="<li>[&lt;v&gt;-*]: $deleted_redirect</li>"
101+
done
102+
103+
echo "redirect_html=${redirect_html}" >> "$GITHUB_OUTPUT"
104+
55105
- name: Update PR Description
56-
if: steps.changed-files.outputs.renamed_files_count > 0 || steps.changed-files.outputs.deleted_files_count > 0
106+
if: steps.build-redirect-html.outputs.redirect_html
57107
uses: MongoCaleb/pr-description-action@4bdfe35b98f64532b419ad20b350a92546cd3aa1
108+
env:
109+
REDIRECT_HTML: ${{ steps.build-redirect-html.outputs.redirect_html }}
58110
with:
59111
regex: "- \\[ \\] Did you add redirects\\?.*"
60112
appendContentOnMatchOnly: false
61113
regexFlags: is
62-
content: "- [ ] Did you add redirects?\n *Suggested redirects for moved/deleted files (replace &lt;v&gt; with earliest backport target version):*\n${{ steps.renamed-files.outputs.redirects }}${{ steps.deleted-files.outputs.redirects }}\n"
63-
token: ${{ secrets.GITHUB_TOKEN }}
114+
content: "- [ ] Did you add redirects?\n *Suggested redirects for moved/deleted files (replace &lt;v&gt; with earliest backport target version):*\n${{ steps.build-redirect-html.outputs.redirect_html }}\n"
115+
token: ${{ secrets.GITHUB_TOKEN }}
116+
117+
- name: Check for duplicates in redirects file
118+
run: |
119+
# Specify the file to check
120+
file="$REDIRECTS_FILE"
121+
122+
if [[ -f "$file" ]]; then
123+
duplicates=$(sort "$file" | uniq -d)
124+
if [[ -n "$duplicates" ]]; then
125+
echo "Duplicate lines found in $file:"
126+
echo "$duplicates"
127+
exit 1 # error
128+
fi
129+
else
130+
echo "File $file does not exist. Skipping duplicate check."
131+
fi

0 commit comments

Comments
 (0)