1
- name : Add Redirects
1
+ name : Verify Redirects
2
+
2
3
on :
3
4
pull_request_target :
5
+
4
6
jobs :
5
- add -redirects :
6
- name : Get Redirects for Modified Files
7
+ verify -redirects :
8
+ name : Verifying Redirects
7
9
runs-on : ubuntu-latest
10
+ env :
11
+ REDIRECTS_FILE : " config/redirects"
8
12
permissions :
9
13
pull-requests : write
10
14
steps :
11
- - uses : actions/checkout@v4
15
+ - name : Check Out Base Branch
16
+ uses : actions/checkout@v4
17
+
12
18
- name : Get Changed Files
13
19
id : changed-files
14
20
uses : tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c
15
21
with :
16
22
include_all_old_new_renamed_files : true
17
- - name : Make Redirects for Renamed Files
23
+
24
+ - name : Find Missing Redirects for Renamed Files
18
25
id : renamed-files
19
26
if : steps.changed-files.outputs.renamed_files_count > 0
20
27
env :
21
28
RENAMED_FILES : ${{ steps.changed-files.outputs.all_old_new_renamed_files }}
22
29
run : |
23
- renamed_redirects=""
30
+ renamed_redirects=()
24
31
for file in $RENAMED_FILES; do
32
+
33
+ # only run for .txt files
25
34
if [[ ! "$file" == *.txt ]]; then
26
35
continue
27
36
fi
37
+
38
+ # format old and new URLs
28
39
old=$(echo "$file" | cut -d',' -f1)
29
40
old="${old#source}"
30
41
old="${old%.txt}"
31
42
new=$(echo "$file" | cut -d',' -f2)
32
43
new="${new#source}"
33
44
new="${new%.txt}"
34
- #single quotes = ${var} rendered literally; double quotes = $var interpreted
35
- renamed_redirects+='<li>[<v>-*]: ${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
36
53
done
37
54
echo "redirects=${renamed_redirects}" >> "$GITHUB_OUTPUT"
38
- - name : Make Redirects for Deleted Files
55
+
56
+ - name : Find Missing Redirects for Deleted Files
39
57
id : deleted-files
40
58
if : steps.changed-files.outputs.deleted_files_count > 0
41
59
env :
42
60
DELETED_FILES : ${{ steps.changed-files.outputs.deleted_files }}
43
61
run : |
44
- deleted_redirects=""
62
+ deleted_redirects=()
45
63
for file in $DELETED_FILES; do
64
+
65
+ # only run for .txt files
46
66
if [[ ! "$file" == *.txt ]]; then
47
67
continue
48
68
fi
69
+
70
+ # format old URL
49
71
old=$(echo "$file" | cut -d',' -f1)
50
72
old="${old#source}"
51
73
old="${old%.txt}"
52
- deleted_redirects+='<li>[<v>-*]: ${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
+
53
83
done
54
84
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>[<v>-*]: $renamed_redirect</li>"
97
+ done
98
+
99
+ for deleted_redirect in "${DELETED_REDIRECTS[@]}"; do
100
+ redirect_html+="<li>[<v>-*]: $deleted_redirect</li>"
101
+ done
102
+
103
+ echo "redirect_html=${redirect_html}" >> "$GITHUB_OUTPUT"
104
+
55
105
- 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
57
107
uses : MongoCaleb/pr-description-action@4bdfe35b98f64532b419ad20b350a92546cd3aa1
108
+ env :
109
+ REDIRECT_HTML : ${{ steps.build-redirect-html.outputs.redirect_html }}
58
110
with :
59
111
regex : " - \\ [ \\ ] Did you add redirects\\ ?.*"
60
112
appendContentOnMatchOnly : false
61
113
regexFlags : is
62
- content : " - [ ] Did you add redirects?\n *Suggested redirects for moved/deleted files (replace <v> 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 <v> 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