forked from cloudflare/wrangler-action
-
Notifications
You must be signed in to change notification settings - Fork 1
/
entrypoint.sh
executable file
·167 lines (131 loc) · 4.14 KB
/
entrypoint.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/bin/bash
set -e
export HOME="/github/workspace"
export WRANGLER_HOME="/github/workspace"
mkdir -p "$HOME/.wrangler"
chmod -R 770 "$HOME/.wrangler"
export API_CREDENTIALS=""
# Used to execute any specified pre and post commands
execute_commands() {
echo "$ Running: $1"
COMMANDS=$1
while IFS= read -r COMMAND; do
CHUNKS=()
for CHUNK in $COMMAND; do
CHUNKS+=("$CHUNK")
done
eval "${CHUNKS[@]}"
CHUNKS=()
done <<< "$COMMANDS"
}
secret_not_found() {
echo "::error::Specified secret \"$1\" not found in environment variables."
exit 1
}
WRANGLER_VERSION=2
# If no Wrangler version is specified install v2.
if [ -z "$INPUT_WRANGLERVERSION" ]; then
npm i -g wrangler
# If Wrangler version starts with 1 then install wrangler v1
elif [[ "$INPUT_WRANGLERVERSION" == 1* ]]; then
npm i -g "@cloudflare/wrangler@$INPUT_WRANGLERVERSION"
WRANGLER_VERSION=1
# Else install Wrangler 2
else
npm i -g "wrangler@$INPUT_WRANGLERVERSION"
WRANGLER_VERSION=2
fi
# If an API token is detected as input
if [ -n "$INPUT_APITOKEN" ]; then
# Wrangler v1 uses CF_API_TOKEN but v2 uses CLOUDFLARE_API_TOKEN
if [ $WRANGLER_VERSION == 1 ]; then
export CF_API_TOKEN="$INPUT_APITOKEN"
else
export CLOUDFLARE_API_TOKEN="$INPUT_APITOKEN"
fi
export API_CREDENTIALS="API Token"
fi
# If an API key and email are detected as input
if [ -n "$INPUT_APIKEY" ] && [ -n "$INPUT_EMAIL" ]; then
# Wrangler v1 uses CF_ but v2 uses CLOUDFLARE_
if [ $WRANGLER_VERSION == 1 ]; then
export CF_EMAIL="$INPUT_EMAIL"
export CF_API_KEY="$INPUT_APIKEY"
else
echo "::error::Wrangler v2 does not support using the API Key. You should instead use an API token."
exit 1
fi
export API_CREDENTIALS="Email and API Key"
fi
if [ -n "$INPUT_ACCOUNTID" ]; then
if [ $WRANGLER_VERSION == 1 ]; then
export CF_ACCOUNT_ID="$INPUT_ACCOUNTID"
else
export CLOUDFLARE_ACCOUNT_ID="$INPUT_ACCOUNTID"
fi
fi
if [ -n "$INPUT_APIKEY" ] && [ -z "$INPUT_EMAIL" ]
then
echo "Provided an API key without an email for authentication. Please pass in 'apiKey' and 'email' to the action."
fi
if [ -z "$INPUT_APIKEY" ] && [ -n "$INPUT_EMAIL" ]
then
echo "Provided an email without an API key for authentication. Please pass in 'apiKey' and 'email' to the action."
exit 1
fi
if [ -z "$API_CREDENTIALS" ]
then
>&2 echo "Unable to find authentication details. Please pass in an 'apiToken' as an input to the action, or a legacy 'apiKey' and 'email'."
exit 1
else
echo "Using $API_CREDENTIALS authentication"
fi
# If a working directory is detected as input
if [ -n "$INPUT_WORKINGDIRECTORY" ]
then
cd "$INPUT_WORKINGDIRECTORY"
fi
# If precommands is detected as input
if [ -n "$INPUT_PRECOMMANDS" ]
then
execute_commands "$INPUT_PRECOMMANDS"
fi
# If we have secrets, set them
for SECRET in $INPUT_SECRETS; do
VALUE=$(printenv "$SECRET") || secret_not_found "$SECRET"
if [ -z "$INPUT_ENVIRONMENT" ]; then
echo "$VALUE" | wrangler secret put "$SECRET"
else
echo "$VALUE" | wrangler secret put "$SECRET" --env "$INPUT_ENVIRONMENT"
fi
done
PUBLISH_LOG=".wrangler_publish_log"
# If there's no input command then default to publish otherwise run it
if [ -z "$INPUT_COMMAND" ]; then
echo "::notice:: No command was provided, defaulting to 'publish'"
if [ -z "$INPUT_ENVIRONMENT" ]; then
wrangler publish | tee $PUBLISH_LOG
else
wrangler publish --env "$INPUT_ENVIRONMENT" | tee $PUBLISH_LOG
fi
else
if [ -n "$INPUT_ENVIRONMENT" ]; then
echo "::notice::Since you have specified an environment you need to make sure to pass in '--env $INPUT_ENVIRONMENT' to your command."
fi
execute_commands "wrangler $INPUT_COMMAND | tee $PUBLISH_LOG"
fi
PUBLISH_LOG_LAST_LINE="$(cat $PUBLISH_LOG | tail -n1)"
PUBLISH_URL="$(echo $PUBLISH_LOG_LAST_LINE | sed -E 's/^.* Take a peek over at (.*)/\1/')"
echo $PUBLISH_URL
echo "url=$PUBLISH_URL" >> $GITHUB_OUTPUT
# If postcommands is detected as input
if [ -n "$INPUT_POSTCOMMANDS" ]
then
execute_commands "$INPUT_POSTCOMMANDS"
fi
# If a working directory is detected as input, revert to the
# original directory before continuing with the workflow
if [ -n "$INPUT_WORKINGDIRECTORY" ]
then
cd $HOME
fi