Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Deploy to Dev

on:
push:
branches: [ develop ]
workflow_dispatch:

env:
ENVIRONMENT: dev
GCP_PROJECT_ID: ${{ secrets.DEV_GCP_PROJECT_ID }}
GCP_REGION: asia-southeast1
GCP_ZONE: asia-southeast1-a

jobs:
terraform-plan:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./terraform-gcp-vm
steps:
- uses: actions/checkout@v3

- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.0

- name: Authenticate to GCP
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.DEV_GCP_SA_KEY }}

- name: Terraform Init - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform init

- name: Terraform Plan - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform plan -var="project_id=${{ env.GCP_PROJECT_ID }}" -var="environment=dev"

- name: Terraform Init - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: terraform init

- name: Terraform Plan - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: |
terraform plan \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="instance_name=dev-vm" \
-var="zone=${{ env.GCP_ZONE }}"

build-and-deploy:
needs: terraform-plan
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v3

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: Build Load Balancer
working-directory: ./algorithm
run: |
GOOS=linux GOARCH=amd64 go build -o loadbalancer ./cmd/loadbalancer

- name: Build Node Exporter
working-directory: ./golang-node-exporter
run: |
GOOS=linux GOARCH=amd64 go build -o node-exporter

- name: Authenticate to GCP
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.DEV_GCP_SA_KEY }}

- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v1

- name: Deploy Terraform Backend
working-directory: ./terraform-gcp-vm/backend
run: |
terraform init
terraform apply -auto-approve \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="environment=dev"

- name: Deploy VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: |
terraform init
terraform apply -auto-approve \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="instance_name=dev-vm" \
-var="zone=${{ env.GCP_ZONE }}"

104 changes: 104 additions & 0 deletions .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: Deploy to Production

on:
push:
branches: [ main ]
tags:
- 'v*'
workflow_dispatch:

env:
ENVIRONMENT: prod
GCP_PROJECT_ID: ${{ secrets.PROD_GCP_PROJECT_ID }}
GCP_REGION: asia-southeast1
GCP_ZONE: asia-southeast1-a

jobs:
terraform-plan:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./terraform-gcp-vm
steps:
- uses: actions/checkout@v3

- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.0

- name: Authenticate to GCP
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.PROD_GCP_SA_KEY }}

- name: Terraform Init - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform init

- name: Terraform Plan - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform plan -var="project_id=${{ env.GCP_PROJECT_ID }}" -var="environment=prod"

- name: Terraform Init - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: terraform init

- name: Terraform Plan - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: |
terraform plan \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="instance_name=prod-vm" \
-var="zone=${{ env.GCP_ZONE }}" \
-var="machine_type=e2-medium"

deploy:
needs: terraform-plan
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/')
environment: production
steps:
- uses: actions/checkout@v3

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: Build Load Balancer
working-directory: ./algorithm
run: |
GOOS=linux GOARCH=amd64 go build -o loadbalancer ./cmd/loadbalancer

- name: Build Node Exporter
working-directory: ./golang-node-exporter
run: |
GOOS=linux GOARCH=amd64 go build -o node-exporter

- name: Authenticate to GCP
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.PROD_GCP_SA_KEY }}

- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v1

- name: Deploy Terraform Backend
working-directory: ./terraform-gcp-vm/backend
run: |
terraform init
terraform apply -auto-approve \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="environment=prod"

- name: Deploy VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: |
terraform init
terraform apply -auto-approve \
-var="project_id=${{ env.GCP_PROJECT_ID }}" \
-var="instance_name=prod-vm" \
-var="zone=${{ env.GCP_ZONE }}" \
-var="machine_type=e2-medium"

111 changes: 111 additions & 0 deletions .github/workflows/golang-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Golang CI

on:
push:
branches: [ main, develop ]
paths:
- 'algorithm/**'
- 'golang-node-exporter/**'
- '.github/workflows/golang-ci.yml'
pull_request:
branches: [ main, develop ]
paths:
- 'algorithm/**'
- 'golang-node-exporter/**'

jobs:
test-algorithm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: Cache Go modules
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-

- name: Install dependencies
working-directory: ./algorithm
run: go mod download

- name: Run tests
working-directory: ./algorithm
run: go test -v -race -coverprofile=coverage.out ./...

- name: Check coverage
working-directory: ./algorithm
run: |
go tool cover -func=coverage.out

- name: Build
working-directory: ./algorithm
run: go build -v ./cmd/loadbalancer

test-node-exporter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: Cache Go modules
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-

- name: Install dependencies
working-directory: ./golang-node-exporter
run: go mod download

- name: Run tests
working-directory: ./golang-node-exporter
run: go test -v -race -coverprofile=coverage.out ./...

- name: Check coverage
working-directory: ./golang-node-exporter
run: go tool cover -func=coverage.out

- name: Build
working-directory: ./golang-node-exporter
run: go build -v

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: golangci-lint algorithm
uses: golangci/golangci-lint-action@v3
with:
version: latest
working-directory: ./algorithm

- name: golangci-lint node-exporter
uses: golangci/golangci-lint-action@v3
with:
version: latest
working-directory: ./golang-node-exporter

54 changes: 54 additions & 0 deletions .github/workflows/terraform-validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Terraform Validate

on:
pull_request:
paths:
- 'terraform-gcp-vm/**'
- '.github/workflows/terraform-validate.yml'

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.0

- name: Terraform Format Check
working-directory: ./terraform-gcp-vm
run: terraform fmt -check -recursive

- name: Terraform Init - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform init -backend=false

- name: Terraform Validate - Backend
working-directory: ./terraform-gcp-vm/backend
run: terraform validate

- name: Terraform Init - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: terraform init -backend=false

- name: Terraform Validate - VM Module
working-directory: ./terraform-gcp-vm/modules/gcp_vm
run: terraform validate

tflint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- uses: terraform-linters/setup-tflint@v3
with:
tflint_version: latest

- name: Run tflint
working-directory: ./terraform-gcp-vm
run: |
tflint --init
tflint --recursive

Loading
Loading