Skip to content

Commit 9dba2a4

Browse files
committed
refactire(devops): optimize devops structure
1 parent 8693c9b commit 9dba2a4

19 files changed

Lines changed: 223 additions & 262 deletions

File tree

backend/build.sh

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,33 @@
11
#!/bin/bash
22
set -e
33

4-
required_vars=("COMMIT_TAG" "ENV_TAG" "MOVING_TAG" "OWNER_NAME" "REPO_NAME" "GITHUB_PAT" "DOCKER_USER" "DOCKER_PASS")
5-
for var in "${required_vars[@]}"; do
6-
if [ -z "${!var}" ]; then
7-
echo "Error: Required environment variable $var is not set"
8-
exit 1
9-
fi
10-
done
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
cd "$SCRIPT_DIR/../../app"
116

12-
# Navigate to app directory
13-
cd ../../app
7+
IMAGE_GHCR="ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG}"
8+
IMAGE_DOCKERHUB="${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG}"
149

15-
# Build Docker image with commit SHA + environment tag
16-
docker build -t ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} . > /dev/null 2>&1
10+
echo "Building Docker image..."
11+
docker build -t "$IMAGE_GHCR" .
1712

18-
# Tag with moving tag
19-
docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1
13+
docker tag "$IMAGE_GHCR" "ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG}"
14+
docker tag "$IMAGE_GHCR" "$IMAGE_DOCKERHUB"
15+
docker tag "$IMAGE_GHCR" "${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG}"
2016

21-
# Tag for Docker Hub
22-
docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1
23-
docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1
24-
25-
# Test the container (10 second timeout)
26-
docker run -d --name test_container ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 || exit 1
17+
TEST_CONTAINER="test_${COMMIT_TAG}_$$"
18+
echo "Testing container..."
19+
docker run -d --name "$TEST_CONTAINER" "$IMAGE_GHCR"
2720
sleep 10
28-
docker stop test_container > /dev/null 2>&1 || true
29-
docker rm test_container > /dev/null 2>&1 || true
21+
docker stop "$TEST_CONTAINER"
22+
docker rm "$TEST_CONTAINER"
3023

31-
# Login to GitHub Container Registry
32-
echo "${GITHUB_PAT}" | docker login ghcr.io -u "${OWNER_NAME}" --password-stdin > /dev/null 2>&1
24+
echo "Pushing to registries..."
25+
echo "${GITHUB_PAT}" | docker login ghcr.io -u "${OWNER_NAME}" --password-stdin
3326

34-
# Push to GHCR
35-
docker push ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1
36-
docker push ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1
27+
docker push "$IMAGE_GHCR"
28+
docker push "ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${MOVING_TAG}"
3729

38-
# Login to Docker Hub
39-
echo "${DOCKER_PASS}" | docker login -u "${DOCKER_USER}" --password-stdin > /dev/null 2>&1
30+
echo "${DOCKER_PASS}" | docker login -u "${DOCKER_USER}" --password-stdin
4031

41-
# Push to Docker Hub
42-
docker push ${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1
43-
docker push ${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1
32+
docker push "$IMAGE_DOCKERHUB"
33+
docker push "${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG}"

backend/deploy.sh

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
#!/bin/bash
22
set -e
33

4-
required_vars=("ENV_TAG" "IMAGE_TAG" "IMAGE_REPO" "AZURE_CLIENT_ID" "AZURE_CLIENT_SECRET" "AZURE_TENANT_ID" "AZURE_RESOURCE_GROUP" "AZURE_CLUSTER_NAME")
5-
for var in "${required_vars[@]}"; do
6-
if [ -z "${!var}" ]; then
7-
echo "Error: Required environment variable $var is not set"
8-
exit 1
9-
fi
10-
done
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
if [ -z "$ENV_TAG" ]; then
7+
echo "ENV_TAG not set"
8+
exit 1
9+
fi
1110

12-
# Determine release name and values file based on environment
1311
if [ "${ENV_TAG}" = "prod" ]; then
1412
RELEASE_NAME="hankers-backend-prod"
1513
VALUES_FILE="values-prod.yaml"
@@ -50,15 +48,14 @@ az aks get-credentials \
5048
--name ${AZURE_CLUSTER_NAME} \
5149
--overwrite-existing > /dev/null 2>&1
5250

53-
# Deploy using Helm
54-
helm upgrade ${RELEASE_NAME} ./helm-chart \
51+
helm upgrade "$RELEASE_NAME" "$SCRIPT_DIR/helm-chart" \
5552
--install \
5653
--create-namespace \
5754
--namespace default \
58-
--values ./helm-chart/${VALUES_FILE} \
59-
--set image.tag=${IMAGE_TAG} \
60-
--set image.repository=${IMAGE_REPO} \
55+
--values "$SCRIPT_DIR/helm-chart/${VALUES_FILE}" \
56+
--set image.tag="$IMAGE_TAG" \
57+
--set image.repository="$IMAGE_REPO" \
6158
--history-max 3 \
6259
--wait \
6360
--timeout 5m \
64-
--atomic > /dev/null 2>&1
61+
--atomic

backend/helm-chart/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ secrets:
6565
GITHUB_CLIENT_ID: github-client-id
6666
GITHUB_SECRET_KEY: github-secret-key
6767
GITHUB_CALLBACK_URL: github-callback-url
68+
GITHUB_CLIENT_ID_PROD: github-client-id-prod
69+
GITHUB_SECRET_KEY_PROD: github-secret-key-prod
70+
GITHUB_CALLBACK_URL_PROD: github-callback-url-prod
6871
GOOGLE_RECAPTCHA_SITE_KEY: recaptcha-site-key
6972
GOOGLE_RECAPTCHA_SECRET_KEY: recaptcha-secret-key
7073
GOOGLE_RECAPTCHA_MIN_SCORE: recaptcha-min-score

cross-platform/build.sh

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ if ! command -v npm &> /dev/null; then
2929
sudo apt-get install -y nodejs npm
3030
elif [ "$OS_TYPE" = "macos" ]; then
3131
if ! command -v brew &> /dev/null; then
32-
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
32+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
3333
eval "$(/opt/homebrew/bin/brew shellenv)"
3434
fi
3535
brew install node
@@ -56,16 +56,39 @@ fi
5656

5757
export PATH="$PATH:$FLUTTER_DIR/bin"
5858

59-
# --- Flutter build steps ---
59+
# --- Common Flutter build steps ---
6060
cd lam7a
6161
flutter pub get
6262

6363
flutter pub run build_runner build --delete-conflicting-outputs
6464

65-
flutter build apk --release
66-
6765
# --- Platform-specific builds ---
68-
if [ "$OS_TYPE" = "macos" ]; then
66+
if [ "$OS_TYPE" = "ubuntu" ]; then
67+
echo "Building APK for Android..."
68+
flutter build apk --release
69+
elif [ "$OS_TYPE" = "macos" ]; then
70+
echo "Building IPA for iOS..."
6971
flutter build ipa --release --no-codesign
7072
fi
7173

74+
# --- Trigger macOS builder on Ubuntu (Ubuntu can't build IPA) ---
75+
if [ "$OS_TYPE" = "ubuntu" ]; then
76+
echo "Ubuntu detected. Triggering flutter-ios-builder workflow for iOS build..."
77+
curl -X POST \
78+
-H "Accept: application/vnd.github.v3+json" \
79+
-H "Authorization: token ${GITHUB_PAT}" \
80+
https://api.github.com/repos/karimzakzouk/flutter-ios-builder/dispatches \
81+
-d "{
82+
\"event_type\": \"trigger-macos-build\",
83+
\"client_payload\": {
84+
\"owner_name\": \"${OWNER_NAME}\",
85+
\"repo_name\": \"${REPO_NAME}\",
86+
\"branch\": \"${BRANCH}\",
87+
\"commit_tag\": \"${COMMIT_TAG}\",
88+
\"env_tag\": \"${ENV_TAG}\",
89+
\"moving_tag\": \"${MOVING_TAG}\"
90+
}
91+
}"
92+
echo "iOS build workflow triggered."
93+
fi
94+

cross-platform/deploy.sh

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
#!/bin/bash
22
set -e
33

4-
required_vars=("ENV_TAG" "OWNER_NAME" "REPO_NAME" "GITHUB_PAT")
5-
for var in "${required_vars[@]}"; do
6-
if [ -z "${!var}" ]; then
7-
echo "Error: Required environment variable $var is not set"
8-
exit 1
9-
fi
10-
done
11-
12-
# Navigate to app directory
13-
cd ../../app/lam7a
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
cd "$SCRIPT_DIR/../../app/lam7a"
146

157
# Extract COMMIT_TAG from IMAGE_TAG if not set
168
if [ -z "$COMMIT_TAG" ]; then

frontend/build.sh

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
#!/bin/bash
22
set -e
33

4-
required_vars=("COMMIT_TAG" "ENV_TAG" "MOVING_TAG" "OWNER_NAME" "REPO_NAME" "GITHUB_PAT" "DOCKER_USER" "DOCKER_PASS")
5-
for var in "${required_vars[@]}"; do
6-
if [ -z "${!var}" ]; then
7-
echo "Error: Required environment variable $var is not set"
8-
exit 1
9-
fi
10-
done
11-
12-
# Navigate to app directory
13-
cd ../../app
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
cd "$SCRIPT_DIR/../../app"
146

157
# Build Docker image with frontend-specific build arguments
168
BUILD_ARGS=(
@@ -36,11 +28,11 @@ docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ghcr.
3628
docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1
3729
docker tag ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} ${DOCKER_USER}/${REPO_NAME,,}:${MOVING_TAG} > /dev/null 2>&1
3830

39-
# Test the container (10 second timeout)
40-
docker run -d --name test_container ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG} > /dev/null 2>&1 || exit 1
31+
TEST_CONTAINER="test_${COMMIT_TAG}_$$"
32+
docker run -d --name "$TEST_CONTAINER" ghcr.io/${OWNER_NAME,,}/${REPO_NAME,,}:${COMMIT_TAG}-${ENV_TAG}
4133
sleep 10
42-
docker stop test_container > /dev/null 2>&1 || true
43-
docker rm test_container > /dev/null 2>&1 || true
34+
docker stop "$TEST_CONTAINER"
35+
docker rm "$TEST_CONTAINER"
4436

4537
# Login to GitHub Container Registry
4638
echo "${GITHUB_PAT}" | docker login ghcr.io -u "${OWNER_NAME}" --password-stdin > /dev/null 2>&1

frontend/deploy.sh

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
#!/bin/bash
22
set -e
33

4-
required_vars=("ENV_TAG" "IMAGE_TAG" "IMAGE_REPO" "AZURE_CLIENT_ID" "AZURE_CLIENT_SECRET" "AZURE_TENANT_ID" "AZURE_RESOURCE_GROUP" "AZURE_CLUSTER_NAME")
5-
for var in "${required_vars[@]}"; do
6-
if [ -z "${!var}" ]; then
7-
echo "Error: Required environment variable $var is not set"
8-
exit 1
9-
fi
10-
done
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
if [ -z "$ENV_TAG" ]; then
7+
echo "ENV_TAG not set"
8+
exit 1
9+
fi
1110

12-
# Determine release name and values file based on environment
1311
if [ "${ENV_TAG}" = "prod" ]; then
1412
RELEASE_NAME="hankers-frontend-prod"
1513
VALUES_FILE="values-prod.yaml"
@@ -50,15 +48,14 @@ az aks get-credentials \
5048
--name ${AZURE_CLUSTER_NAME} \
5149
--overwrite-existing > /dev/null 2>&1
5250

53-
# Deploy using Helm
54-
helm upgrade ${RELEASE_NAME} ./helm-chart \
51+
helm upgrade "$RELEASE_NAME" "$SCRIPT_DIR/helm-chart" \
5552
--install \
5653
--create-namespace \
5754
--namespace default \
58-
--values ./helm-chart/${VALUES_FILE} \
59-
--set image.tag=${IMAGE_TAG} \
60-
--set image.repository=${IMAGE_REPO} \
55+
--values "$SCRIPT_DIR/helm-chart/${VALUES_FILE}" \
56+
--set image.tag="$IMAGE_TAG" \
57+
--set image.repository="$IMAGE_REPO" \
6158
--history-max 3 \
6259
--wait \
6360
--timeout 5m \
64-
--atomic > /dev/null 2>&1
61+
--atomic

infra/setup/config/dashboards/logs.json

Lines changed: 0 additions & 45 deletions
This file was deleted.

infra/setup/config/logging/values.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,21 @@ write:
4242
gateway:
4343
enabled: true
4444

45+
chunksCache:
46+
enabled: false
47+
48+
resultsCache:
49+
enabled: false
50+
51+
promtail:
52+
resources:
53+
requests:
54+
memory: 32Mi
55+
cpu: 25m
56+
limits:
57+
memory: 64Mi
58+
cpu: 100m
59+
4560
monitoring:
4661
selfMonitoring:
4762
enabled: false

infra/setup/config/monitoring/values.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ grafana:
3939
editable: true
4040
options:
4141
path: /var/lib/grafana/dashboards/default
42+
dashboards:
43+
default:
44+
kubernetes-cluster:
45+
gnetId: 315
46+
revision: 3
47+
datasource: Prometheus
48+
node-exporter:
49+
gnetId: 1860
50+
revision: 27
51+
datasource: Prometheus
52+
kubernetes-advanced:
53+
gnetId: 6417
54+
revision: 1
55+
datasource: Prometheus
4256
additionalDataSources:
4357
- name: Loki
4458
type: loki

0 commit comments

Comments
 (0)