mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
214 lines
7.0 KiB
YAML
214 lines
7.0 KiB
YAML
stages:
|
|
- build
|
|
- deploy
|
|
|
|
# ==========================================================
|
|
# ✅ Global defaults
|
|
# ==========================================================
|
|
default:
|
|
tags:
|
|
- server-development-biznet
|
|
interruptible: true
|
|
|
|
# ==========================================================
|
|
# 🏗️ Build Template
|
|
# ==========================================================
|
|
.build_template: &build_template
|
|
stage: build
|
|
image: node:20-alpine
|
|
cache:
|
|
key: npm-cache
|
|
paths:
|
|
- node_modules/
|
|
variables:
|
|
NPM_CONFIG_PRODUCTION: 'false'
|
|
NODE_ENV: ''
|
|
script:
|
|
- echo "Installing dependencies..."
|
|
- npm ci --no-audit --no-fund
|
|
- echo "Build env used:"
|
|
- echo "NEXT_PUBLIC_LTI_URL=$NEXT_PUBLIC_LTI_URL"
|
|
- echo "NEXT_PUBLIC_SSO_LOGIN_URL=$NEXT_PUBLIC_SSO_LOGIN_URL"
|
|
- echo "NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL"
|
|
- echo "Building Next.js static export..."
|
|
- npx next build
|
|
- |
|
|
mkdir -p out
|
|
cat <<EOF > out/build-info.json
|
|
{
|
|
"commit": "$CI_COMMIT_SHORT_SHA",
|
|
"pipeline": "$CI_PIPELINE_ID",
|
|
"built_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
|
|
"NEXT_PUBLIC_LTI_URL": "$NEXT_PUBLIC_LTI_URL",
|
|
"NEXT_PUBLIC_SSO_LOGIN_URL": "$NEXT_PUBLIC_SSO_LOGIN_URL",
|
|
"NEXT_PUBLIC_API_BASE_URL": "$NEXT_PUBLIC_API_BASE_URL"
|
|
}
|
|
EOF
|
|
artifacts:
|
|
name: 'out-$CI_COMMIT_SHORT_SHA'
|
|
paths:
|
|
- out/
|
|
expire_in: 1 week
|
|
|
|
# ==========================================================
|
|
# 🚀 Deploy Template
|
|
# ==========================================================
|
|
.deploy_template: &deploy_template
|
|
stage: deploy
|
|
image:
|
|
name: amazon/aws-cli:latest
|
|
entrypoint: ['/bin/sh', '-c']
|
|
script:
|
|
- set -e
|
|
- aws --version
|
|
- echo "Cleaning up newline characters in AWS credentials..."
|
|
- export AWS_ACCESS_KEY_ID=$(echo $AWS_ACCESS_KEY_ID | tr -d '\r\n')
|
|
- export AWS_SECRET_ACCESS_KEY=$(echo $AWS_SECRET_ACCESS_KEY | tr -d '\r\n')
|
|
- echo "Deploying to s3://$S3_BUCKET in region $AWS_REGION"
|
|
- aws s3api head-bucket --bucket "$S3_BUCKET" --region "$AWS_REGION" || aws s3api create-bucket --bucket "$S3_BUCKET" --region "$AWS_REGION" --create-bucket-configuration LocationConstraint="$AWS_REGION"
|
|
- aws s3 sync ./out "s3://$S3_BUCKET" --delete --region "$AWS_REGION" --endpoint-url "https://s3.ap-southeast-3.amazonaws.com"
|
|
|
|
# CloudFront invalidation
|
|
- |
|
|
STATUS="success"
|
|
if [ -n "$CLOUDFRONT_DISTRIBUTION_ID" ]; then
|
|
echo "Invalidating CloudFront cache..."
|
|
if ! aws cloudfront create-invalidation --distribution-id "$CLOUDFRONT_DISTRIBUTION_ID" --paths "/*"; then
|
|
echo "CloudFront invalidation failed."
|
|
STATUS="failed"
|
|
fi
|
|
else
|
|
echo "No CloudFront distribution specified — skipping invalidation"
|
|
fi
|
|
|
|
# Notifikasi Discord
|
|
- |
|
|
RUN_URL="${CI_PROJECT_URL}/-/pipelines/${CI_PIPELINE_ID}"
|
|
|
|
if [ "$CI_COMMIT_BRANCH" = "development" ]; then
|
|
ENVIRONMENT_NAME="WEB-LTI-DEV"
|
|
elif [ "$CI_COMMIT_BRANCH" = "staging" ]; then
|
|
ENVIRONMENT_NAME="WEB-LTI-STAGING"
|
|
else
|
|
ENVIRONMENT_NAME="UNKNOWN"
|
|
fi
|
|
|
|
if [ "$STATUS" = "success" ]; then
|
|
COLOR=3066993
|
|
TITLE="✅ Deployment ${ENVIRONMENT_NAME} Succeeded"
|
|
DESC="Deployment job on branch \${CI_COMMIT_REF_NAME}\ completed successfully."
|
|
else
|
|
COLOR=15158332
|
|
TITLE="❌ Deployment ${ENVIRONMENT_NAME} Failed"
|
|
DESC="Deployment job on branch \${CI_COMMIT_REF_NAME}\ encountered issues."
|
|
fi
|
|
|
|
jq -n \
|
|
--arg title "$TITLE" \
|
|
--arg desc "$DESC" \
|
|
--arg color "$COLOR" \
|
|
--arg repo "$CI_PROJECT_PATH" \
|
|
--arg actor "$GITLAB_USER_LOGIN" \
|
|
--arg commit "$CI_COMMIT_SHA" \
|
|
--arg run_url "$RUN_URL" \
|
|
'{
|
|
username: "CI Bot - LTI WEB",
|
|
embeds: [{
|
|
title: $title,
|
|
description: $desc,
|
|
color: ($color|tonumber),
|
|
fields: [
|
|
{name: "Repository", value: $repo, inline: true},
|
|
{name: "Actor", value: $actor, inline: true},
|
|
{name: "Commit", value: $commit, inline: false},
|
|
{name: "Pipeline", value: ("[Open run](" + $run_url + ")"), inline: false}
|
|
]
|
|
}]
|
|
}' > payload.json
|
|
|
|
curl -sS -H "Content-Type: application/json" -d @payload.json "$DISCORD_WEBHOOK_URL"
|
|
|
|
# ==========================================================
|
|
# ==== DEVELOPMENT (Branch development) ======
|
|
# ==========================================================
|
|
build:dev:
|
|
<<: *build_template
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "development"'
|
|
environment:
|
|
name: development
|
|
variables:
|
|
NEXT_PUBLIC_LTI_URL: 'https://dev-lti-erp.mbugroup.id'
|
|
NEXT_PUBLIC_SSO_LOGIN_URL: 'https://dev-auth-erp.mbugroup.id'
|
|
NEXT_PUBLIC_API_BASE_URL: 'https://dev-api-lti.mbugroup.id/api'
|
|
NEXT_PUBLIC_CLIENT_ID: 'Lumbung-Telur-Indonesia'
|
|
|
|
deploy:dev:
|
|
<<: *deploy_template
|
|
needs: ['build:dev']
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "development"'
|
|
variables:
|
|
S3_BUCKET: 'dev-lti-erp.mbugroup.id'
|
|
AWS_REGION: 'ap-southeast-3'
|
|
CLOUDFRONT_DISTRIBUTION_ID: 'E1Z8XTA8XF1GIV'
|
|
environment:
|
|
name: development
|
|
url: https://dev-lti-erp.mbugroup.id
|
|
|
|
# ==========================================================
|
|
# ====== STAGING (Branch staging) ======
|
|
# ==========================================================
|
|
build:staging:
|
|
<<: *build_template
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "staging"'
|
|
environment:
|
|
name: staging
|
|
variables:
|
|
NEXT_PUBLIC_LTI_URL: 'https://stg-lti-erp.mbugroup.id'
|
|
NEXT_PUBLIC_SSO_LOGIN_URL: 'https://stg-auth-erp.mbugroup.id'
|
|
NEXT_PUBLIC_API_BASE_URL: 'https://stg-api-lti.mbugroup.id/api'
|
|
NEXT_PUBLIC_CLIENT_ID: 'Lumbung-Telur-Indonesia'
|
|
|
|
deploy:staging:
|
|
<<: *deploy_template
|
|
needs: ['build:staging']
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "staging"'
|
|
variables:
|
|
S3_BUCKET: 'stg-lti-erp.mbugroup.id'
|
|
AWS_REGION: 'ap-southeast-3'
|
|
CLOUDFRONT_DISTRIBUTION_ID: 'E2V6PPO1AUIU7H'
|
|
environment:
|
|
name: staging
|
|
url: https://stg-lti-erp.mbugroup.id
|
|
|
|
# ==========================================================
|
|
# ====== STAGING (Branch production) ======
|
|
# ==========================================================
|
|
build:production:
|
|
<<: *build_template
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "production"'
|
|
environment:
|
|
name: staging
|
|
variables:
|
|
NEXT_PUBLIC_LTI_URL: 'https://lti-erp.mbugroup.id'
|
|
NEXT_PUBLIC_SSO_LOGIN_URL: 'https://auth-erp.mbugroup.id'
|
|
NEXT_PUBLIC_API_BASE_URL: 'https://api-lti.mbugroup.id/api'
|
|
NEXT_PUBLIC_CLIENT_ID: 'Lumbung-Telur-Indonesia'
|
|
|
|
deploy:production:
|
|
<<: *deploy_template
|
|
needs: ['build:production']
|
|
rules:
|
|
- if: '$CI_COMMIT_BRANCH == "production"'
|
|
variables:
|
|
S3_BUCKET: 'production-lti-erp.mbugroup.id'
|
|
AWS_REGION: 'ap-southeast-3'
|
|
CLOUDFRONT_DISTRIBUTION_ID: 'E1SSLXKYYITASJ'
|
|
environment:
|
|
name: staging
|
|
url: https://lti-erp.mbugroup.id
|