Skip to content

Commit 5477274

Browse files
authored
Add the custom retry GH action (#1060)
*Description of changes:* Add the custom retry GH action By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. Co-authored-by: $(git --no-pager log --format=format:'%an' -n 1) <$(git --no-pager log --format=format:'%ae' -n 1)>
1 parent e7ac70c commit 5477274

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Reusable Action for executing commands and retrying them if it fails
2+
name: Command Retry Logic
3+
4+
inputs:
5+
# (Optional) Command to run before the retry command. To be used for environment setup, etc
6+
pre-command:
7+
required: false
8+
type: string
9+
# (Optional) Number of retries to perform. Default is 3
10+
max_retry:
11+
required: false
12+
type: number
13+
default: 3
14+
# (Required) Command to execute with the retry mechanism
15+
command:
16+
required: true
17+
type: string
18+
# (Required) Command to clean up resources before retrying the main command
19+
cleanup:
20+
required: false
21+
type: string
22+
# (Optional) Time to wait between each attempt in seconds. Default is 10 seconds
23+
sleep_time:
24+
required: false
25+
type: number
26+
default: 10
27+
# (Optional) Follow-up command after the main command is finished.
28+
post-command:
29+
required: false
30+
type: string
31+
32+
runs:
33+
using: "composite"
34+
steps:
35+
- name: Run command
36+
shell: bash
37+
env:
38+
PRE_COMMAND: ${{ inputs.pre-command }}
39+
MAX_RETRY: ${{ inputs.max_retry }}
40+
COMMAND: ${{ inputs.command }}
41+
CLEANUP: ${{ inputs.cleanup }}
42+
POST_COMMAND: ${{ inputs.post-command }}
43+
SLEEP_TIME: ${{ inputs.sleep_time }}
44+
run: |
45+
echo "Starting the execute_and_retry action for command $COMMAND"
46+
echo "Executing pre-command for the execute_and_retry action"
47+
eval "$PRE_COMMAND"
48+
49+
retry_counter=0
50+
while [ $retry_counter -lt $MAX_RETRY ]; do
51+
echo "Attempt Number $retry_counter for execute_and_retry action"
52+
53+
attempt_failed=0
54+
eval "$COMMAND" || attempt_failed=$?
55+
56+
if [ $attempt_failed -ne 0 ]; then
57+
echo "Command failed for execute_and_retry action, executing cleanup command for another attempt"
58+
59+
eval "$CLEANUP" || true
60+
retry_counter=$(($retry_counter+1))
61+
sleep "$SLEEP_TIME"
62+
else
63+
echo "Command executed successfully for execute_and_retry"
64+
break
65+
fi
66+
if [[ $retry_counter -ge $MAX_RETRY ]]; then
67+
echo "Max retry reached, command failed to execute properly. Exiting action"
68+
exit 1
69+
fi
70+
done
71+
72+
echo "Executing post-command for the execute_and_retry action"
73+
eval "$POST_COMMAND"
74+
echo "Exiting execute_and_retry action"

0 commit comments

Comments
 (0)