From 64fe8451281357265a1e71188a3125fc4c4861fe Mon Sep 17 00:00:00 2001 From: M1 AIR Date: Tue, 13 Jan 2026 10:46:55 +0700 Subject: [PATCH 1/6] Update CICD --- .gitlab-ci.yml | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b0e3883e..e5f0f4ac 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,31 +6,31 @@ stages: default: tags: - - self-hosted-stg + - self-hosted-prod workflow: rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "staging"' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' when: always - when: never variables: DOCKER_BUILDKIT: "1" - IMAGE_TAG: "staging_${CI_COMMIT_SHORT_SHA}" + IMAGE_TAG: "production_${CI_COMMIT_SHORT_SHA}" IMAGE_NAME: "${CI_REGISTRY_IMAGE}:${IMAGE_TAG}" - IMAGE_LATEST: "${CI_REGISTRY_IMAGE}:staging_latest" + IMAGE_LATEST: "${CI_REGISTRY_IMAGE}:production_latest" - DEPLOY_DIR: "/opt/deploy/stg-lti-api" + DEPLOY_DIR: "/opt/deploy/lti" COMPOSE_FILE: "docker-compose.yaml" # ========================= # BUILD (AUTO) # ========================= -build_staging: +build_production: stage: build rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "staging"' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' script: | set -e docker info @@ -51,16 +51,16 @@ build_staging: # ========================= # MIGRATE (AUTO) # ========================= -migrate_staging: +migrate_production: stage: migrate rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "staging"' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' needs: - - job: build_staging + - job: build_production artifacts: false script: | set -e - echo "✅ Running migrations (staging) ..." + echo "✅ Running migrations (production) ..." cd "$DEPLOY_DIR" test -f "$COMPOSE_FILE" || (echo "❌ $COMPOSE_FILE not found in $DEPLOY_DIR" && exit 1) @@ -128,14 +128,14 @@ migrate_staging: # ========================= # DEPLOY (AUTO) # ========================= -deploy_staging: +deploy_production: stage: deploy rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "staging"' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' needs: - - job: migrate_staging + - job: migrate_production artifacts: false - - job: build_staging + - job: build_production artifacts: false script: | set -e @@ -154,12 +154,12 @@ deploy_staging: # ========================= # SEED (MANUAL) # ========================= -seed_staging: +seed_production: stage: seed rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "staging"' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' needs: - - job: deploy_staging + - job: deploy_production artifacts: false when: manual allow_failure: false @@ -170,4 +170,6 @@ seed_staging: test -f .env || (echo "❌ .env not found" && exit 1) docker compose -f "$COMPOSE_FILE" pull seed || true - docker compose -f "$COMPOSE_FILE" run --rm seed \ No newline at end of file + docker compose -f "$COMPOSE_FILE" run --rm seed + + From f8415ea15d5e44c5b2434db3941daf52fc5f01c2 Mon Sep 17 00:00:00 2001 From: M1 AIR Date: Tue, 13 Jan 2026 10:59:51 +0700 Subject: [PATCH 2/6] Update gitlab --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e5f0f4ac..0985896e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -83,7 +83,7 @@ migrate_production: # ✅ Pastikan postgres & redis ON (sesuaikan nama service compose kamu!) echo "✅ Ensuring postgres & redis running ..." - docker compose -f "$COMPOSE_FILE" up -d stg-postgres-lti stg-redis-lti || true + docker compose -f "$COMPOSE_FILE" up -d postgres-lti redis-lti || true # ✅ Ambil network key dari compose COMPOSE_NETWORK_KEY="$(docker compose -f "$COMPOSE_FILE" config | awk '/networks:/ {getline; print $1}' | tr -d ':')" @@ -172,4 +172,3 @@ seed_production: docker compose -f "$COMPOSE_FILE" pull seed || true docker compose -f "$COMPOSE_FILE" run --rm seed - From d26c2dba3f1f6192b8f728f428dcfc1cc7843e36 Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 13 Jan 2026 04:15:08 +0000 Subject: [PATCH 3/6] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 71 ++++++++++++-------------------------------------- 1 file changed, 16 insertions(+), 55 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0985896e..52a49bd6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -49,80 +49,41 @@ build_production: # ========================= -# MIGRATE (AUTO) +# MIGRATE (PRODUCTION - MANUAL) # ========================= migrate_production: stage: migrate rules: - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' + when: manual + allow_failure: false needs: - job: build_production artifacts: false script: | set -e - echo "✅ Running migrations (production) ..." + cd /opt/deploy/lti-prod + test -f .env || (echo "❌ .env not found" && exit 1) - cd "$DEPLOY_DIR" - test -f "$COMPOSE_FILE" || (echo "❌ $COMPOSE_FILE not found in $DEPLOY_DIR" && exit 1) - test -f .env || (echo "❌ .env not found in $DEPLOY_DIR" && exit 1) - - # ✅ load env dari server set -a . ./.env set +a - # ✅ validasi - test -n "$DB_HOST" || (echo "❌ DB_HOST empty" && exit 1) - test -n "$DB_PORT" || (echo "❌ DB_PORT empty" && exit 1) - test -n "$DB_USER" || (echo "❌ DB_USER empty" && exit 1) - test -n "$DB_PASSWORD" || (echo "❌ DB_PASSWORD empty" && exit 1) - test -n "$DB_NAME" || (echo "❌ DB_NAME empty" && exit 1) + # Validasi env wajib + : "${DB_HOST:?DB_HOST not set}" + : "${DB_PORT:?DB_PORT not set}" + : "${DB_USER:?DB_USER not set}" + : "${DB_PASSWORD:?DB_PASSWORD not set}" + : "${DB_NAME:?DB_NAME not set}" - export DATABASE_URL="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE:-disable}" - echo "✅ DATABASE_URL=$DATABASE_URL" + DB_SSLMODE="${DB_SSLMODE:-require}" + export DATABASE_URL="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE}" - # ✅ Pastikan postgres & redis ON (sesuaikan nama service compose kamu!) - echo "✅ Ensuring postgres & redis running ..." - docker compose -f "$COMPOSE_FILE" up -d postgres-lti redis-lti || true - - # ✅ Ambil network key dari compose - COMPOSE_NETWORK_KEY="$(docker compose -f "$COMPOSE_FILE" config | awk '/networks:/ {getline; print $1}' | tr -d ':')" - echo "✅ Compose network key: $COMPOSE_NETWORK_KEY" - - # ✅ Cari network name yang dipakai docker - NETWORK_NAME="$(docker network ls --format '{{.Name}}' | grep "_${COMPOSE_NETWORK_KEY}$" | head -n 1)" - test -n "$NETWORK_NAME" || (echo "❌ Cannot find docker network for compose ($COMPOSE_NETWORK_KEY)" && exit 1) - - echo "✅ Docker network detected: $NETWORK_NAME" - - # ✅ Migrations dari repo (CI workspace) - echo "✅ Checking migrations from repo..." - ls -lah "$CI_PROJECT_DIR/internal/database/migrations" - - echo "✅ Running migrations via migrate/migrate container" - set +e - out=$(docker run --rm \ - --network "$NETWORK_NAME" \ + echo "✅ Running migrations (production)..." + docker run --rm \ -v "$CI_PROJECT_DIR/internal/database/migrations:/migrations:ro" \ migrate/migrate:v4.15.2 \ - -path=/migrations -database "$DATABASE_URL" up 2>&1) - code=$? - set -e - - echo "$out" - - # ✅ Handle no change dengan benar (tidak false-success) - if echo "$out" | grep -qi "no change"; then - echo "✅ No change (already up to date)" - exit 0 - fi - - if [ $code -ne 0 ]; then - echo "❌ Migration failed with exit code $code" - exit $code - fi - - echo "✅ Migration applied successfully" + -path=/migrations -database "$DATABASE_URL" up # ========================= From 7fd90f32681df609351091a7d255a6e02713ff6c Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 13 Jan 2026 04:19:00 +0000 Subject: [PATCH 4/6] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 52a49bd6..7fc8bac8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,7 +62,7 @@ migrate_production: artifacts: false script: | set -e - cd /opt/deploy/lti-prod + cd /opt/deploy/lti test -f .env || (echo "❌ .env not found" && exit 1) set -a From 4c434899aaeccd0fc2107859ceb695a66d629d3f Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 13 Jan 2026 04:36:34 +0000 Subject: [PATCH 5/6] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7fc8bac8..abe16f61 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -118,18 +118,15 @@ deploy_production: seed_production: stage: seed rules: - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "production"' - needs: - - job: deploy_production - artifacts: false - when: manual - allow_failure: false + - if: '$CI_COMMIT_BRANCH == "production"' + when: manual script: | set -e - cd "$DEPLOY_DIR" - test -f "$COMPOSE_FILE" || (echo "❌ $COMPOSE_FILE not found" && exit 1) + cd /opt/deploy/lti-prod test -f .env || (echo "❌ .env not found" && exit 1) - docker compose -f "$COMPOSE_FILE" pull seed || true - docker compose -f "$COMPOSE_FILE" run --rm seed + echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" + + docker compose --env-file .env pull seed + docker compose --env-file .env run --rm seed From cfbe431222f1c78a8be8e4aeeafd31fdbae5a112 Mon Sep 17 00:00:00 2001 From: kris Date: Tue, 13 Jan 2026 04:43:44 +0000 Subject: [PATCH 6/6] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index abe16f61..c99f940f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -122,7 +122,7 @@ seed_production: when: manual script: | set -e - cd /opt/deploy/lti-prod + cd /opt/deploy/lti test -f .env || (echo "❌ .env not found" && exit 1) echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"