forked from pinscript/fly-pr-review-apps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
entrypoint.sh
executable file
·62 lines (51 loc) · 2.11 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
#!/bin/sh -l
set -ex
if [ -n "$INPUT_PATH" ]; then
# Allow user to change directories in which to run Fly commands.
cd "$INPUT_PATH" || exit
fi
PR_NUMBER=$(jq -r .number /github/workflow/event.json)
if [ -z "$PR_NUMBER" ]; then
echo "This action only supports pull_request actions."
exit 1
fi
REPO_OWNER=$(jq -r .organization.login /github/workflow/event.json | awk '{print tolower($0)}')
REPO_NAME=$(jq -r .repository.name /github/workflow/event.json | awk '{print tolower($0)}')
EVENT_TYPE=$(jq -r .action /github/workflow/event.json)
# Default the Fly app name to {repo_owner}-{repo_name}-pr-{number}
app="${INPUT_NAME:-$REPO_OWNER-$REPO_NAME-pr-$PR_NUMBER}"
region="${INPUT_REGION:-${FLY_REGION:-iad}}"
org="${INPUT_ORG:-${FLY_ORG:-personal}}"
image="$INPUT_IMAGE"
config="$INPUT_CONFIG"
if ! echo "$app" | grep "$PR_NUMBER"; then
echo "For safety, this action requires the app's name to contain the PR number."
exit 1
fi
# PR was closed - remove the Fly app if one exists and exit.
if [ "$EVENT_TYPE" = "closed" ]; then
flyctl apps destroy "$app" -y || true
exit 0
fi
# Deploy the Fly app, creating it first if needed.
if ! flyctl status --app "$app"; then
flyctl launch --no-deploy --copy-config --name "$app" --image "$image" --region "$region" --org "$org"
if [ -n "$INPUT_SECRETS" ]; then
echo $INPUT_SECRETS | tr " " "\n" | flyctl secrets import --app "$app"
fi
flyctl deploy --app "$app" --region "$region" --image "$image" --region "$region" --strategy immediate
elif [ "$INPUT_UPDATE" != "false" ]; then
flyctl deploy --config "$config" --app "$app" --region "$region" --image "$image" --region "$region" --strategy immediate
fi
# Attach postgres cluster to the app if specified.
if [ -n "$INPUT_POSTGRES" ]; then
flyctl postgres attach --postgres-app "$INPUT_POSTGRES" || true
fi
# Make some info available to the GitHub workflow.
fly status --app "$app" --json > status.json
hostname=$(jq -r .Hostname status.json)
appid=$(jq -r .ID status.json)
echo "hostname=$hostname" >> $GITHUB_OUTPUT
echo "url=https://$hostname" >> $GITHUB_OUTPUT
echo "id=$appid" >> $GITHUB_OUTPUT
echo "name=$app" >> $GITHUB_OUTPUT