#!/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! "