Fail early when build of one of the components fails, instead of proceeding to build the Docker image and failing _much_ later. [Slack conversation](https://theappsmith.slack.com/archives/C02MUD8DNUR/p1717484636886919). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Chores** - Improved the build process with better error handling for server, client, and RTS components, ensuring clearer messaging in case of build failures. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
117 lines
3.5 KiB
Bash
Executable File
117 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -o errexit
|
|
|
|
display_help()
|
|
{
|
|
echo "---------------------------------------------------------------------------------------"
|
|
echo "Use this script to run a local instance of Appsmith on port 80."
|
|
echo "The script will build all the artefacts required for a fat Docker container to come up."
|
|
echo "If no argument is given, the build defaults to release branch."
|
|
echo "If --local or -l is passed, it will build with local changes"
|
|
echo "---------------------------------------------------------------------------------------"
|
|
echo
|
|
echo "Syntax: $0 [-h] [-l] [-r [remote_url]] [branch_name] [cs_url]"
|
|
echo "options:"
|
|
echo "-h Print this help"
|
|
echo "-l or --local Use the local codebase and not git"
|
|
echo "-r or --remote Use the branch from a remote repository"
|
|
echo "For more info please check: https://www.notion.so/appsmith/Test-an-Appsmith-branch-locally-c39ad68aea0d42bf94a149ea22e86820#9cee16c7e2054b5980513ec6f351ace2"
|
|
echo
|
|
}
|
|
|
|
pretty_print()
|
|
{
|
|
echo "----------------"
|
|
echo $1
|
|
echo "----------------"
|
|
echo
|
|
}
|
|
|
|
# Check whether user had supplied -h or --help. If yes display usage
|
|
if [[ ( $@ == "--help") || $@ == "-h" ]]
|
|
then
|
|
display_help
|
|
exit 0
|
|
fi
|
|
|
|
LOCAL=false
|
|
if [[ ($1 == "--local" || $1 == "-l")]]
|
|
then
|
|
LOCAL=true
|
|
fi
|
|
|
|
REMOTE=false
|
|
if [[ ($1 == "--remote" || $1 == "-r")]]
|
|
then
|
|
REMOTE=true
|
|
fi
|
|
|
|
if [[ ($LOCAL == true) ]]
|
|
then
|
|
pretty_print "Setting up instance with local changes"
|
|
BRANCH=release
|
|
cs_url=$2
|
|
elif [[ ($REMOTE == true) ]]
|
|
then
|
|
pretty_print "Setting up instance with remote repository branch ..."
|
|
REMOTE_REPOSITORY_URL=$2
|
|
REMOTE_BRANCH=$3
|
|
pretty_print "Please ignore if the following error occurs: remote remote_origin_for_local_test already exists."
|
|
git remote add remote_origin_for_local_test $REMOTE_REPOSITORY_URL || git remote set-url remote_origin_for_local_test $REMOTE_REPOSITORY_URL
|
|
git fetch remote_origin_for_local_test
|
|
git checkout $REMOTE_BRANCH
|
|
git pull remote_origin_for_local_test $REMOTE_BRANCH
|
|
else
|
|
BRANCH=$1
|
|
cs_url=$2
|
|
pretty_print "Setting up instance to run on branch: $BRANCH"
|
|
cd "$(dirname "$0")"/..
|
|
git fetch origin $BRANCH
|
|
git checkout $BRANCH
|
|
git pull origin $BRANCH
|
|
pretty_print "Local branch is now up to date. Starting server build ..."
|
|
fi
|
|
|
|
edition=ce
|
|
if [[ "$(git remote get-url origin)" == *"/appsmith-ee"* ]]; then
|
|
edition=ee
|
|
fi
|
|
|
|
pretty_print "Starting server build ..."
|
|
|
|
pushd app/server > /dev/null
|
|
if ! ./build.sh -DskipTests > /dev/null; then
|
|
echo Server build failed >&2
|
|
exit 1
|
|
fi
|
|
pretty_print "Server build successful. Starting client build ..."
|
|
|
|
popd
|
|
pushd app/client > /dev/null
|
|
yarn > /dev/null
|
|
if ! yarn build > /dev/null; then
|
|
echo Client build failed >&2
|
|
exit 1
|
|
fi
|
|
pretty_print "Client build successful. Starting RTS build ..."
|
|
|
|
popd
|
|
pushd app/client/packages/rts/ > /dev/null
|
|
if ! ./build.sh > /dev/null; then
|
|
echo RTS build failed >&2
|
|
exit 1
|
|
fi
|
|
pretty_print "RTS build successful. Starting Docker build ..."
|
|
|
|
popd
|
|
bash "$(dirname "$0")/generate_info_json.sh"
|
|
docker build -t appsmith/appsmith-ce:local-testing \
|
|
--build-arg BASE="appsmith/base-$edition:release" \
|
|
--build-arg APPSMITH_CLOUD_SERVICES_BASE_URL="${cs_url:-https://release-cs.appsmith.com}" \
|
|
. \
|
|
> /dev/null
|
|
pretty_print "Docker image build successful. Triggering run now ..."
|
|
|
|
(docker stop appsmith || true) && (docker rm appsmith || true)
|
|
docker run -d --name appsmith -p 80:80 -v "$PWD/stacks:/appsmith-stacks" appsmith/appsmith-ce:local-testing && sleep 15 && pretty_print "Local instance is up! Open Appsmith at http://localhost! "
|