-
Notifications
You must be signed in to change notification settings - Fork 2
97 lines (93 loc) · 3.99 KB
/
create.yml
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
name: _create
on:
workflow_call:
inputs:
environment:
description: 'Github Deployment Environment'
required: true
type: string
environment_url:
description: 'Github Deployment Environment URL'
required: true
type: string
secrets:
DIGITALOCEAN_API_TOKEN:
required: true
jobs:
create:
name: Create droplet
runs-on: ubuntu-latest
environment:
name: ${{ inputs.environment }}
url: ${{ inputs.environment_url }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Load defaults form .env file
run: |
echo "Loading environment variables from .env file..."
set -o allexport
source .env
set +o allexport
echo "Override with environment variables from Github..."
export DIGITALOCEAN_API_TOKEN="${{ secrets.DIGITALOCEAN_API_TOKEN }}"
export DOMAIN="${{ vars.DOMAIN }}"
export TAG="${{ github.ref_name }}"
export VOLUME_NAME="${{ vars.VOLUME_NAME }}"
envsubst < ./deploy/butane.template.yml > ./deploy/butane.yml
cat ./deploy/butane.yml
- name: Build Ignition Config
id: build_ignition
run: |
docker run --rm -i -v $(pwd)/deploy:/deploy -w /deploy quay.io/coreos/butane:v0.14.0 --files-dir /deploy --pretty --strict < deploy/butane.yml > deploy/ignition.json
echo "file=$(pwd)/deploy/ignition.json" >> $GITHUB_OUTPUT
- name: Set up doctl
uses: digitalocean/action-doctl@v2
with:
token: ${{ secrets.DIGITALOCEAN_API_TOKEN }}
- name: Get pre-existing droplet ID
id: get_droplet
run: |
name="${{ inputs.environment }}"
droplet_id=$(doctl compute droplet list --format ID,Name --no-header | grep " ${name}\$" | awk '{print $1}')
echo "droplet_id=$droplet_id" >> $GITHUB_OUTPUT
- name: Destroy pre-existing droplet
if : ${{ steps.get_droplet.outputs.droplet_id != '' }}
run: |
droplet_id="${{ steps.get_droplet.outputs.droplet_id }}"
doctl compute droplet delete "$droplet_id" --force
- name: Get image ID
id: get_image
run: |
image_name="${{ vars.IMAGE_NAME }}"
image_id=$(doctl compute image list --format ID,Name --no-header | grep " $image_name\$" | awk '{print $1}')
echo "image_id=$image_id" >> $GITHUB_OUTPUT
- name: Get ssh key ID
id: get_ssh_key
run: |
ssh_key_name="${{ vars.SSH_KEY_NAME }}"
ssh_key_id=$(doctl compute ssh-key list --format ID,Name --no-header | grep " $ssh_key_name\$" | awk '{print $1}')
echo "ssh_key_id=$ssh_key_id" >> $GITHUB_OUTPUT
- name: Get volume ID
id: get_volume
run: |
volume_name="${{ vars.VOLUME_NAME }}"
volume_id=$(doctl compute volume list --format ID,Name --no-header | grep " $volume_name\$" | awk '{print $1}')
echo "volume_id=$volume_id" >> $GITHUB_OUTPUT
- name: Create droplet
id: create_droplet
run: |
name="${{ inputs.environment }}"
size="${{ vars.SIZE }}"
region="${{ vars.REGION }}"
image_id="${{ steps.get_image.outputs.image_id }}"
ssh_key_id="${{ steps.get_ssh_key.outputs.ssh_key_id }}"
volume_id="${{ steps.get_volume.outputs.volume_id }}"
data_file="${{ steps.build_ignition.outputs.file }}"
droplet_id=$(doctl compute droplet create "${name}" --size "${size}" --region "${region}" --image "${image_id}" --ssh-keys "${ssh_key_id}" --volumes "${volume_id}" --user-data-file "${data_file}" --format ID --no-header --wait)
echo "droplet_id=${droplet_id}" >> $GITHUB_OUTPUT
- name: Bind Reserved IP address to droplet
run: |
droplet_id="${{ steps.create_droplet.outputs.droplet_id }}"
reserved_ip="${{ vars.RESERVED_IP_ADDRESS }}"
doctl compute floating-ip-action assign "$reserved_ip" "$droplet_id"