Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: configure tfvars file #7

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
113 changes: 100 additions & 13 deletions .github/workflows/terraform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ env:
TF_API_TOKEN: "${{ secrets.TF_API_TOKEN }}"
TF_WORKSPACE: "${{ vars.TF_WORKSPACE }}"
CONFIG_DIRECTORY: "./"
ENVIRONMENT: dev

permissions:
contents: read
Expand All @@ -29,7 +30,7 @@ jobs:
uses: actions/checkout@v4

- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
uses: hashicorp/setup-terraform@v3
with:
cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}

Expand All @@ -55,38 +56,124 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

plan:
needs: [test]
if: github.event_name == 'pull_request'
name: "Terraform Plan"
runs-on: ubuntu-latest"
environment: ${{ env.ENVIRONMENT }}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix the invalid usage of the env context and the typographical error in the ubuntu-latest" label.

The static analysis tool has flagged the following issues:

  1. The env context is not allowed in the environment field according to the GitHub Actions documentation. Please remove the usage of the env context and directly specify the environment name.

  2. The ubuntu-latest" label has an extra double quote, which is a typographical error. Please remove the extra double quote.

Apply this diff to fix the issues:

-    environment: ${{ env.ENVIRONMENT }}
+    environment: dev
     runs-on: ubuntu-latest"
+    runs-on: ubuntu-latest

Also applies to: 148-148

Tools
actionlint

63-63: label "ubuntu-latest"" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-14.0", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "macos-13.0", "macos-12-xl", "macos-12-xlarge", "macos-12-large", "macos-12", "macos-12.0", "macos-11", "macos-11.0", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)


64-64: context "env" is not allowed here. available contexts are "github", "inputs", "matrix", "needs", "strategy", "vars". see https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability for more details

(expression)

permissions:
contents: read
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Create .auto.tfvars file
run: |
cat <<EOF > eks.auto.tfvars
vpc_name = "${{ secrets.BMB_EKS_CLUSTER_VPC }}"
cluster_name = "${{ vars.BMB_MYSQL_CLUSTER }}"
database_name = "${{ vars.BMB_MYSQL_DATABASE }}"
username = "${{ secrets.BMB_MYSQL_USER }}"
password = "${{ secrets.BMB_MYSQL_PASSWORD }}"
environment = "${{ env.ENVIRONMENT }}"
EOF

- name: Upload Configuration
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-upload
with:
workspace: ${{ env.TF_WORKSPACE }}
directory: ${{ env.CONFIG_DIRECTORY }}
speculative: true

- name: Create Plan Run
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-run
with:
workspace: ${{ env.TF_WORKSPACE }}
configuration_version: ${{ steps.plan-upload.outputs.configuration_version_id }}
plan_only: true

- name: Get Plan Output
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: plan-output
with:
plan: ${{ fromJSON(steps.plan-run.outputs.payload).data.relationships.plan.data.id }}

- name: Update PR
uses: actions/github-script@v7
id: plan-comment
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 Cloud Plan Output')
});
const output = `#### Terraform Cloud Plan Output
\`\`\`
Plan: ${{ steps.plan-output.outputs.add }} to add, ${{ steps.plan-output.outputs.change }} to change, ${{ steps.plan-output.outputs.destroy }} to destroy.
\`\`\`
[Terraform Cloud Plan](${{ steps.plan-run.outputs.run_link }})
`;
// 3. Delete previous comment so PR timeline makes sense
if (botComment) {
github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
});
}
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
});



deploy:
needs: [test]
if: github.ref == 'refs/heads/main'
name: "Terraform Apply"
runs-on: ubuntu-latest
environment: dev
environment: ${{ env.ENVIRONMENT }}
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Create .auto.tfvars file
run: |
cat <<EOF > eks.auto.tfvars
vpc_name = "${{ secrets.BMB_EKS_CLUSTER_VPC }}"
cluster_name = "${{ vars.BMB_MYSQL_CLUSTER }}"
database_name = "${{ vars.BMB_MYSQL_DATABASE }}"
username = "${{ secrets.BMB_MYSQL_USER }}"
password = "${{ secrets.BMB_MYSQL_PASSWORD }}"
environment = "${{ env.ENVIRONMENT }}"
EOF

- name: Upload Configuration
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: apply-upload
with:
workspace: ${{ env.TF_WORKSPACE }}
directory: ${{ env.CONFIG_DIRECTORY }}

- name: Create Apply Run
uses: hashicorp/tfc-workflows-github/actions/[email protected]
id: apply-run
with:
workspace: ${{ env.TF_WORKSPACE }}
configuration_version: ${{ steps.apply-upload.outputs.configuration_version_id }}
message: "Plan Run from GitHub Actions CI ${{ github.sha }}"
TF_VAR_vpc_name: "\"teste\""

- name: Apply
uses: hashicorp/tfc-workflows-github/actions/[email protected]
if: fromJSON(steps.apply-run.outputs.payload).data.attributes.actions.IsConfirmable && false
id: apply
with:
run: ${{ steps.apply-run.outputs.run_id }}
comment: "Apply Run from GitHub Actions CI ${{ github.sha }}"
message: "Create Run from GitHub Actions CI ${{ github.sha }}"
57 changes: 57 additions & 0 deletions init/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
use techchallenge;

create table IF NOT EXISTS Customers
(
Id char(36) not null
primary key,
Cpf varchar(11) not null,
Name varchar(100) null,
Email varchar(100) null
);


create table IF NOT EXISTS Products
(
Id char(36) not null comment 'product id'
primary key,
Name varchar(100) not null,
Description varchar(200) not null,
Category int not null,
Price decimal(10,2) not null,
Images varchar(1000) null
);


create table IF NOT EXISTS Orders
(
Id char(36) not null,
CustomerId char(36) null,
PaymentId char(36) null,
Status int not null,
Created datetime null,
Updated datetime null,
TrackingCode varchar(7) null
);
Comment on lines +25 to +34
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a primary key to the Orders table.

The Orders table does not have a primary key defined. Consider adding a primary key to uniquely identify each order record.

For example, you could add the following line after the Id column definition:

primary key,



create table IF NOT EXISTS OrderItems
(
OrderId char(36) not null,
ProductId char(36) not null,
ProductName varchar(200) not null,
UnitPrice decimal not null,
Quantity int null
);
Comment on lines +37 to +44
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a composite primary key to the OrderItems table.

The OrderItems table does not have a primary key defined. Consider adding a composite primary key using the OrderId and ProductId columns to uniquely identify each order item record.

For example, you could add the following line after the Quantity column definition:

PRIMARY KEY (OrderId, ProductId)


create table IF NOT EXISTS Payments
(
Id char(36) not null,
OrderId char(36) not null,
Status int not null,
Created datetime null,
Updated datetime null,
PaymentType int not null,
ExternalReference varchar(36) not null,
Amount decimal(10,2) not null,
PRIMARY KEY (Id, OrderId)
);
24 changes: 12 additions & 12 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ data "aws_subnets" "public_subnets" {
}

data "aws_subnet" "subnet" {
for_each = toset(concat(data.aws_subnets.public_subnets.ids, data.aws_subnets.private_subnets.ids))
for_each = toset(concat(data.aws_subnets.private_subnets.ids))
id = each.value
}

module "aurora_db_serverless_cluster" {
source = "terraform-aws-modules/rds-aurora/aws"
version = "~> 9.9.0"

name = "${var.cluster_name}"
database_name = "techchallenge"
name = var.cluster_name
database_name = var.database_name
engine = "aurora-mysql"
engine_mode = "serverless"
storage_encrypted = true
Expand All @@ -69,7 +69,7 @@ module "aurora_db_serverless_cluster" {
master_password = var.password
manage_master_user_password = false

autoscaling_enabled = false
autoscaling_enabled = false
vpc_id = data.aws_vpc.vpc.id
db_subnet_group_name = var.vpc_name
security_group_rules = {
Expand All @@ -78,20 +78,20 @@ module "aurora_db_serverless_cluster" {
}
}

publicly_accessible = true
apply_immediately = true
publicly_accessible = true
apply_immediately = true
# enabled_cloudwatch_logs_exports = ["general"]
enable_http_endpoint = true
monitoring_interval = 0
skip_final_snapshot = true
enable_http_endpoint = true
monitoring_interval = 0
skip_final_snapshot = true

serverlessv2_scaling_configuration = {
min_capacity = 1
max_capacity = 2
}

tags = {
Terraform = "true"
Terraform = "true"
Environment = var.environment
}

}
}
2 changes: 1 addition & 1 deletion output.tf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ output "subnet_cidr_blocks" {
}

output "cluster" {
value = module.aurora_db_serverless_cluster
value = module.aurora_db_serverless_cluster
sensitive = true
}

Expand Down
7 changes: 4 additions & 3 deletions providers.tf
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ provider "aws" {
profile = var.profile
region = var.region
alias = "us-east-1"

default_tags {
tags = {
tags = {
ManagedBy = "Terraform"
"teste" = "teste"
}
}
}
}
10 changes: 10 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ variable "cluster_name" {
default = "techchallenge-mysql"
}

variable "database_name" {
type = string
default = "techchallenge"
}

variable "username" {
type = string
sensitive = true
Expand All @@ -32,3 +37,8 @@ variable "password" {
sensitive = true
default = "F#P9ia-3"
}

variable "environment" {
default = "dev"
type = string
}