mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 21:41:57 +00:00
137 lines
4.4 KiB
YAML
137 lines
4.4 KiB
YAML
stages:
|
||
- build
|
||
- deploy
|
||
|
||
# ====== TEMPLATE: BUILD STATIC NEXT.JS ======
|
||
.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 "⚙️ Building Next.js static export..."
|
||
- npx next build
|
||
artifacts:
|
||
name: "out-$CI_COMMIT_SHORT_SHA"
|
||
paths:
|
||
- out/
|
||
expire_in: 1 week
|
||
|
||
# ====== TEMPLATE: DEPLOY KE S3 + CLOUDFRONT + NOTICE DISCORD ======
|
||
.deploy_template: &deploy_template
|
||
stage: deploy
|
||
image:
|
||
name: amazon/aws-cli:latest
|
||
entrypoint: ["/bin/sh", "-c"]
|
||
script:
|
||
- 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
|
||
- |
|
||
if [ -n "$CLOUDFRONT_DISTRIBUTION_ID" ]; then
|
||
echo "📦 Invalidating CloudFront cache..."
|
||
aws cloudfront create-invalidation \
|
||
--distribution-id "$CLOUDFRONT_DISTRIBUTION_ID" \
|
||
--paths "/*"
|
||
else
|
||
echo "ℹ️ No CloudFront distribution specified — skipping invalidation"
|
||
fi
|
||
# Notifikasi Discord
|
||
- |
|
||
RUN_URL="${CI_PROJECT_URL}/-/pipelines/${CI_PIPELINE_ID}"
|
||
|
||
if [ "$STATUS" = "success" ]; then
|
||
COLOR=3066993
|
||
TITLE="✅ Deployment Succeeded"
|
||
DESC="Deployment job on branch \`${CI_COMMIT_REF_NAME}\` completed successfully."
|
||
else
|
||
COLOR=15158332
|
||
TITLE="❌ Deployment 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 API",
|
||
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 devops-s3) ======
|
||
build:dev:
|
||
<<: *build_template
|
||
rules:
|
||
- if: '$CI_COMMIT_BRANCH == "devops-s3"'
|
||
environment:
|
||
name: devops-s3
|
||
variables:
|
||
NEXT_PUBLIC_API_BASE_URL: "https://dev-api-lti.mbugroup.id"
|
||
NEXT_PUBLIC_SSO_LOGIN_URL: "https://dev-api-sso.mbugroup.id"
|
||
|
||
deploy:dev:
|
||
<<: *deploy_template
|
||
needs: ["build:dev"]
|
||
rules:
|
||
- if: '$CI_COMMIT_BRANCH == "devops-s3"'
|
||
variables:
|
||
S3_BUCKET: "dev-lti-erp.mbugroup.id"
|
||
AWS_REGION: "ap-southeast-3"
|
||
CLOUDFRONT_DISTRIBUTION_ID: "E1Z8XTA8XF1GIV"
|
||
environment:
|
||
name: devops-s3
|
||
url: https://dev-lti-erp.mbugroup.id
|
||
|
||
# ====== PRODUCTION ======
|
||
# build:production:
|
||
# <<: *build_template
|
||
# rules:
|
||
# # pilih salah satu: pakai branch master ATAU pakai tags rilis
|
||
# - if: '$CI_COMMIT_BRANCH == "master"'
|
||
# # - if: '$CI_COMMIT_TAG' # kalau mau rilis via tag, uncomment ini dan hapus baris di atas
|
||
# environment:
|
||
# name: production
|
||
|
||
# deploy:production:
|
||
# <<: *deploy_template
|
||
# needs: ["build:production"]
|
||
# rules:
|
||
# - if: '$CI_COMMIT_BRANCH == "master"'
|
||
# # - if: '$CI_COMMIT_TAG' # selaras dengan rule di build:production
|
||
# variables:
|
||
# S3_BUCKET: "lti-erp.mbugroup.id"
|
||
# CLOUDFRONT_DISTRIBUTION_ID: "ddfd"
|
||
# environment:
|
||
# name: production
|
||
# url: https://royalgoldcapital.com
|
||
|