tambahannnya
This commit is contained in:
111
NOTE.md
Normal file
111
NOTE.md
Normal file
@@ -0,0 +1,111 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Load environment variables from .env file
|
||||
if [ -f ".env" ]; then
|
||||
echo "Loading environment variables from .env..."
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
else
|
||||
echo ".env file not found! Please create a .env file with the required variables."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Konfigurasi
|
||||
PROJECT_NAME="hipmi"
|
||||
REPO_NAME="hipmi"
|
||||
PROJECT_PATH="/root/projects/staging/$PROJECT_NAME/"
|
||||
RELEASE_NAME=$1
|
||||
RELEASE_PATH="$PROJECT_PATH/releases"
|
||||
ENV_PATH="$PROJECT_PATH/shared/env"
|
||||
SCRIPT_PATH="$PROJECT_PATH/scripts"
|
||||
ENV_NAME="staging"
|
||||
REPO="https://github.com/bipproduction/$REPO_NAME.git"
|
||||
BRANCH="staging"
|
||||
|
||||
# Jika RELEASE_NAME tidak diberikan, ambil SHA dari commit terakhir di branch staging
|
||||
if [ -z "$RELEASE_NAME" ]; then
|
||||
echo "No release name provided. Fetching the latest commit SHA from the $BRANCH branch..."
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo "GitHub token not found in .env file!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ambil SHA commit terbaru dari API GitHub
|
||||
API_URL="https://api.github.com/repos/bipproduction/$REPO_NAME/branches/$BRANCH"
|
||||
RESPONSE=$(curl -s -H "Authorization: token $TOKEN" "$API_URL")
|
||||
|
||||
# Ekstrak SHA commit terbaru
|
||||
SHA=$(echo "$RESPONSE" | grep -oP '"sha":\s*"\K[^"]+' | head -n 1)
|
||||
|
||||
if [ -z "$SHA" ]; then
|
||||
echo "Failed to fetch the latest commit SHA!"
|
||||
echo "API Response: $RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validasi panjang SHA (harus 40 karakter)
|
||||
if [ ${#SHA} -ne 40 ]; then
|
||||
echo "Invalid SHA length: $SHA"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RELEASE_NAME=$SHA
|
||||
echo "Using commit SHA as release name: $RELEASE_NAME"
|
||||
fi
|
||||
|
||||
# VALIDASI INPUT
|
||||
if [ -z "$RELEASE_NAME" ]; then
|
||||
echo "Release name is empty! Please provide a valid release name or allow fetching the latest commit SHA."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CEK EXISTING DIRECTORY
|
||||
if [ -d "$RELEASE_PATH/$RELEASE_NAME" ]; then
|
||||
echo "Error: Directory '$RELEASE_PATH/$RELEASE_NAME' already exists. Please choose a different release name."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CLONE REPOSITORY
|
||||
echo "Cloning repository..."
|
||||
git clone -b "$BRANCH" "$REPO" "$RELEASE_PATH/$RELEASE_NAME" || { echo "Failed to clone repository!"; exit 1; }
|
||||
|
||||
# CHECK ENVIRONMENT FILE
|
||||
if [ ! -f "$ENV_PATH/.env.$ENV_NAME" ]; then
|
||||
echo "Environment file $ENV_PATH/.env.$ENV_NAME not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# COPY ENV FILE
|
||||
cp "$ENV_PATH/.env.$ENV_NAME" "$RELEASE_PATH/$RELEASE_NAME/.env"
|
||||
|
||||
# NAVIGATE TO RELEASE DIRECTORY
|
||||
cd "$RELEASE_PATH/$RELEASE_NAME" || { echo "Failed to navigate to directory!"; exit 1; }
|
||||
|
||||
# INSTALL DEPENDENCIES
|
||||
echo "Installing dependencies with --smol flag..."
|
||||
bun i || { echo "Install dependencies failed!"; exit 1; }
|
||||
|
||||
# BUILD RELEASE
|
||||
echo "Building release with --smol flag..."
|
||||
nice -n 19 bun --smol run build || { echo "Build failed!"; exit 1; }
|
||||
|
||||
# PUSH PRISMA
|
||||
echo "Pushing Prisma schema to database..."
|
||||
nice -n 19 bunx prisma db push || { echo "Prisma DB push failed!"; exit 1; }
|
||||
|
||||
# PROMOTE RELEASE
|
||||
SOURCE_DIR="$RELEASE_PATH/$RELEASE_NAME"
|
||||
TARGET_DIR="$PROJECT_PATH/current"
|
||||
if [ -L "$TARGET_DIR" ]; then
|
||||
echo "Removing existing symlink at $TARGET_DIR..."
|
||||
rm "$TARGET_DIR" || { echo "Failed to remove existing symlink!"; exit 1; }
|
||||
fi
|
||||
ln -s "$SOURCE_DIR" "$TARGET_DIR" || { echo "Failed to create symlink!"; exit 1; }
|
||||
if [ ! -L "$TARGET_DIR" ]; then
|
||||
echo "Error: Symlink creation failed!"
|
||||
exit 1
|
||||
fi
|
||||
echo "Symlink successfully created from $SOURCE_DIR to $TARGET_DIR"
|
||||
|
||||
# RESTART SERVER
|
||||
echo "Restarting server..."
|
||||
pm2 restart "$PROJECT_NAME-$ENV_NAME" || { echo "Failed to restart $PROJECT_NAME-$ENV_NAME namespace!"; exit 1; }
|
||||
Reference in New Issue
Block a user