Skip to content

Commit c56478a

Browse files
committed
feat: finish local infra setup
1 parent 0944cd2 commit c56478a

File tree

10 files changed

+84
-56
lines changed

10 files changed

+84
-56
lines changed

Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# --- Pipeline
22

33
bump:
4-
sh scripts/package/bump.sh
4+
sh scripts/package/bump.sh "$(PROJECT)"
55

66
sign:
77
git add .
@@ -11,9 +11,12 @@ shelf:
1111
git push
1212

1313
push:
14-
sh scripts/package/bump.sh
14+
sh scripts/package/bump.sh "$(PROJECT)"
1515
git push
1616

17+
prepare:
18+
sh scripts/deploy/cluster.sh
19+
1720
build:
1821
${MAKE} -C frontend build
1922
${MAKE} -C http build

docker/Dockerfile.backend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ RUN apk --no-cache add curl
1818
RUN curl -sfS https://dotenvx.sh/install.sh | sh
1919

2020
COPY --from=builder /app/.env* ./
21-
COPY --from=builder /app/cmd/api-server/main.go .
21+
COPY --from=builder /app/cmd/api-server/main .
2222

2323
EXPOSE 3333
2424

25-
CMD ["dotenvx", "run", "--env-file=.env.production", "--", "./main"]
25+
CMD ["./main"]

docker/kind-config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: Cluster
2+
apiVersion: kind.x-k8s.io/v1alpha4
3+
nodes:
4+
- role: control-plane
5+
extraPortMappings:
6+
- containerPort: 3000
7+
hostPort: 30000
8+
protocol: TCP

frontend/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
dev:
2-
pnpm i && dotenvx run -f ../.env.local -- node ../cli/env.mjs
2+
pnpm i && dotenvx run -f ../.env.local -- node ../scripts/env/validate.mjs
33
dotenvx run -f ../.env.local -- pnpm exec vite
44

55
build:
6-
pnpm i && dotenvx run -f ../.env.production -- node ../cli/env.mjs
6+
pnpm i && dotenvx run -f ../.env.production -- node ../scripts/env/validate.mjs
77
tsc -b && dotenvx run -f ../.env.production -- pnpm exec vite build
88

99
fmt:
@@ -13,5 +13,5 @@ test:
1313
tsc && prettier --check . && eslint .
1414

1515
run:
16-
pnpm i && dotenvx run -f ../.env.production -- node ../cli/env.mjs
16+
pnpm i && dotenvx run -f ../.env.production -- node ../scripts/env/validate.mjs
1717
dotenvx run -f ../.env.production -- pnpm exec vite

scripts/deploy/cluster.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
kind delete cluster -n instructor-local
2+
kind create cluster -n instructor-local --config docker/kind-config.yml

scripts/deploy/hostname.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
set -e
2+
3+
KUBECONFIG_PATH="${KUBECONFIG:-$HOME/.kube/config}"
4+
5+
HOSTNAME=$(yq e '.clusters[] | select(.name == .contexts[] | select(.name == .current-context).context.cluster) | .cluster.server' "$KUBECONFIG_PATH")
6+
7+
echo "{\"hostname\": \"$HOSTNAME\"}"
8+

scripts/package/bump.sh

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,54 @@ C_SEAGREEN2="\033[38;5;83m"
66
C_GREY46="\033[38;5;243m"
77
C_GREY62="\033[38;5;247m"
88

9-
echo "${F_BOLD}${F_DIM}Update package versions.${NO_FORMAT}"
10-
echo "${F_DIM}${C_GREY46}Project: '$PROJECT'${NO_FORMAT}"
11-
echo "${F_DIM}${C_GREY46}Cluster: '$PROJECT-<local|dev|stg|prod>'${NO_FORMAT}"
9+
echo "${F_BOLD}INFO\tUpdate package versions.${NO_FORMAT}"
10+
11+
PROJECT=""
12+
13+
if [ -z "$1" ]; then
14+
PROJECT="instructor"
15+
else
16+
PROJECT=$1
17+
fi
18+
19+
if [ -z "${PROJECT}" ]; then
20+
echo "${F_BOLD}${C_INDIANRED1}ERROR\tMissing project name!${NO_FORMAT}"
21+
echo "${C_GREY62}HINT\tmake bump PROJECT=my-project${NO_FORMAT}"
22+
exit 2
23+
fi
24+
25+
echo "${C_GREY46}INFO\tProject: '$PROJECT'${NO_FORMAT}"
26+
echo "${C_GREY46}INFO\tNamespace: '$PROJECT-deployment' ${NO_FORMAT}"
27+
28+
kubectl get svc -n "${PROJECT}-deployment"
1229

1330
if ! git diff-index --quiet HEAD -- || [ -n "$(git ls-files --others --exclude-standard)" ]; then
14-
echo "${F_BOLD}${C_INDIANRED1}Working directory is not clean. Commit or stash your changes first.${NO_FORMAT}"
31+
echo "${F_BOLD}${C_INDIANRED1}INFO\tWorking directory is not clean. Commit or stash your changes first.${NO_FORMAT}"
1532
exit 1
1633
else
17-
echo "${F_BOLD}${C_SEAGREEN2}Working directory is clean.${NO_FORMAT}"
34+
echo "${F_BOLD}${C_SEAGREEN2}ERROR\tWorking directory is clean.${NO_FORMAT}"
1835
fi
1936

2037
VERSION=$(node -p "require('./package.json').version")
21-
echo "${C_INDIANRED1}Deprecated ${F_BOLD}${VERSION}${NO_FORMAT}"
38+
echo "${C_GREY46}INFO\tDeprecated ${F_BOLD}${VERSION}${NO_FORMAT}"
2239

2340
node scripts/package/semver.mjs
2441

2542
VERSION=$(node -p "require('./package.json').version")
26-
echo "${C_SEAGREEN2}Upstream ${F_BOLD}${VERSION}${NO_FORMAT}"
43+
echo "${C_GREY62}INFO Package file versions updated to '${VERSION}'.${NO_FORMAT}."
2744

2845
sed -i '' "s/Release-.*-blue/Release-${VERSION}-blue/" README.md
2946
git tag -a "v${VERSION}" -m "Release v${VERSION}"
3047

31-
echo "${F_DIM}${C_GREY62}Tag '${PROJECT} v${VERSION}' ready to be released.${NO_FORMAT}."
48+
echo "${C_GREY62}INFO Tag '${PROJECT} v${VERSION}' ready to be released.${NO_FORMAT}."
3249

3350
git add package.json docker/package.json frontend/package.json http/package.json scripts/package.json terraform/package.json README.md
3451

52+
3553
git commit -m "chore(ci): bump version v${VERSION}"
3654

37-
echo "${F_DIM}${C_GREY62}Changes are committed and ready to push.${NO_FORMAT}"
55+
echo "${C_GREY62}INFO Changes are committed and ready to push.${NO_FORMAT}"
3856

39-
echo "${F_BOLD}${C_SEAGREEN2}Updated package versions successfully!${NO_FORMAT}"
57+
echo "${F_BOLD}${C_SEAGREEN2}DONE Updated package versions successfully!${NO_FORMAT}"
4058

4159
exit 0

terraform/k8s.tf

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ resource "kubernetes_namespace" "app" {
44
}
55
}
66

7-
resource "kubernetes_deployment" "frontend" {
7+
resource "kubernetes_deployment" "instructor-frontend" {
88
metadata {
9-
name = "frontend"
9+
name = "instructor-frontend"
1010
namespace = kubernetes_namespace.app.metadata[0].name
1111
}
1212

@@ -15,21 +15,23 @@ resource "kubernetes_deployment" "frontend" {
1515

1616
selector {
1717
match_labels = {
18-
app = "frontend"
18+
app = "instructor-frontend"
1919
}
2020
}
2121

2222
template {
2323
metadata {
2424
labels = {
25-
app = "frontend"
25+
app = "instructor-frontend"
2626
}
2727
}
2828

2929
spec {
3030
container {
31-
name = "frontend"
32-
image = "frontend-app:latest"
31+
name = "instructor-frontend"
32+
image = "instructor-frontend-app:latest"
33+
image_pull_policy = "Never"
34+
3335
port {
3436
container_port = 3000
3537
}
@@ -39,29 +41,30 @@ resource "kubernetes_deployment" "frontend" {
3941
}
4042
}
4143

42-
resource "kubernetes_service" "frontend" {
44+
resource "kubernetes_service" "instructor-frontend" {
4345
metadata {
44-
name = "frontend"
46+
name = "instructor-frontend"
4547
namespace = kubernetes_namespace.app.metadata[0].name
4648
}
4749

4850
spec {
4951
selector = {
50-
app = "frontend"
52+
app = "instructor-frontend"
5153
}
5254

5355
port {
5456
port = 80
5557
target_port = 3000
58+
node_port = 30000
5659
}
5760

5861
type = "NodePort"
5962
}
6063
}
6164

62-
resource "kubernetes_deployment" "backend" {
65+
resource "kubernetes_deployment" "instructor-backend" {
6366
metadata {
64-
name = "backend"
67+
name = "instructor-backend"
6568
namespace = kubernetes_namespace.app.metadata[0].name
6669
}
6770

@@ -70,21 +73,23 @@ resource "kubernetes_deployment" "backend" {
7073

7174
selector {
7275
match_labels = {
73-
app = "backend"
76+
app = "instructor-backend"
7477
}
7578
}
7679

7780
template {
7881
metadata {
7982
labels = {
80-
app = "backend"
83+
app = "instructor-backend"
8184
}
8285
}
8386

8487
spec {
8588
container {
86-
name = "backend"
87-
image = "backend-app:latest"
89+
name = "instructor-backend"
90+
image = "instructor-backend-app:latest"
91+
image_pull_policy = "Never"
92+
8893
port {
8994
container_port = 3333
9095
}
@@ -94,15 +99,15 @@ resource "kubernetes_deployment" "backend" {
9499
}
95100
}
96101

97-
resource "kubernetes_service" "backend" {
102+
resource "kubernetes_service" "instructor-backend" {
98103
metadata {
99-
name = "backend"
104+
name = "instructor-backend"
100105
namespace = kubernetes_namespace.app.metadata[0].name
101106
}
102107

103108
spec {
104109
selector = {
105-
app = "backend"
110+
app = "instructor-backend"
106111
}
107112

108113
port {

terraform/providers.tf

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
terraform {
22
required_providers {
33
kubernetes = {
4-
source = "hashicorp/kubernetes"
5-
version = "~> 2.0"
4+
source = "hashicorp/kubernetes"
5+
version = "~> 2.0"
66
}
77
}
88
}
99

1010
provider "kubernetes" {
11-
host = var.host
12-
client_certificate = base64decode(var.client_certificate)
13-
client_key = base64decode(var.client_key)
14-
cluster_ca_certificate = base64decode(var.cluster_ca_certificate)
11+
config_path = "~/.kube/config"
12+
config_context = "kind-instructor-local"
13+
insecure = true
1514
}
1615

1716

terraform/variables.tf

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +0,0 @@
1-
variable "host" {
2-
type = string
3-
}
4-
5-
variable "client_certificate" {
6-
type = string
7-
}
8-
9-
variable "client_key" {
10-
type = string
11-
}
12-
13-
variable "cluster_ca_certificate" {
14-
type = string
15-
}

0 commit comments

Comments
 (0)