-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (119 loc) · 4.35 KB
/
workflow.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
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
name: Deploy to Kubernetes cluster
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
deploy-sock-shop:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3.4.0
- name: export Access token
run: export TF_VAR_token=$TF_VAR_token
env:
TF_VAR_token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
- name: Kubectl tool installer
uses: Azure/setup-kubectl@v3
with:
version: 'v1.24.0' # default is latest stable
id: Install
- name: GitHub Action for DigitalOcean - doctl
uses: digitalocean/action-doctl@v2.3.0
with:
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
# - name: Log in to DigitalOcean Container Registry
# run: doctl registry login --expiry-seconds 600
- name: HashiCorp - Setup Terraform
uses: hashicorp/setup-terraform@v2.0.3
with:
terraform_wrapper: true
# - name: Run Script to perform provision of clusters
# run:
- name: Terraform fmt
id: fmt
run: terraform fmt --check
continue-on-error: true
shell: bash
- name: Terraform Init
id: init
run: terraform init
env:
TF_VAR_token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
working-directory: terraform-microservice
shell: bash
- name: Terraform Validate
id: validate
run: terraform validate -no-color
env:
TF_VAR_token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
working-directory: terraform-microservice
shell: bash
- name: Terraform Plan
id: plan
run: terraform plan -no-color -input=false -var 'do_token=$TF_VAR_token'
env:
TF_VAR_token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
working-directory: terraform-microservice
- uses: actions/github-script@v6
if: github.event_name == 'pull_request'
env:
PLAN: "terraform\n${{ steps.plan.outputs.stdout }}"
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// 1. Retrieve existing bot comments for the PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
})
const botComment = comments.find(comment => {
return comment.user.type === 'Bot' && comment.body.includes('Terraform Format and Style')
})
// 2. Prepare format of the comment
const output = `#### Terraform Format and Style 🖌\`${{ steps.fmt.outcome }}\`
#### Terraform Initialization ⚙️\`${{ steps.init.outcome }}\`
#### Terraform Validation 🤖\`${{ steps.validate.outcome }}\`
<details><summary>Validation Output</summary>
\`\`\`\n
${{ steps.validate.outputs.stdout }}
\`\`\`
</details>
#### Terraform Plan 📖\`${{ steps.plan.outcome }}\`
<details><summary>Show Plan</summary>
\`\`\`\n
${process.env.PLAN}
\`\`\`
</details>
*Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ env.tf_actions_working_dir }}\`, Workflow: \`${{ github.workflow }}\`*`;
// 3. If we have a comment, update it, otherwise create a new one
if (botComment) {
github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: output
)
} else {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
}
working-directory: terraform-microservice
shell: bash
- name: Terraform Apply
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
id: apply
run: terraform apply -auto-approve -no-color -input=false -var 'do_token=$TF_VAR_token'
env:
TF_VAR_token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
working-directory: terraform-microservice
shell: bash
- name: Run script to deploy to Kubernetes cluster
run: bash ./do-k8s-config/deploy.sh
working-directory: terraform-microservice