Files
fflib-apex-extensions/dev-tools/rebuild-scratch-org
T
Wim Velzeboer 039e82d73c Add Dynamic Application Factory
This enabled realtime dependency injection for the fflib application.
By default the configuration comes from the Custom Metadata object fflib_AppBinding__mdt, but can be fully customised and extended.

Initial stuff
2021-07-02 13:57:11 +01:00

262 lines
8.4 KiB
Bash
Executable File

#!/bin/bash
####################################################################################################
#
# FILENAME: rebuild-scratch-org
#
# PURPOSE: Deletes then recreates a scratch org based on the SFDX source in this project.
#
# DESCRIPTION: Executing this script will first delete the exisisting default scratch org for
# this project (if it exists), then create a new one using the source and config
# information defined in your dev-tools/lib/local-config.sh file.
#
# INSTRUCTIONS: Execute the following command from the root of your SFDX project directory.
# ./dev-tools/rebuild-scratch-org
#
####################################################################################################
#
##
###
#### LOAD SHARED FUNCTIONS LIBRARY #################################################################
###
##
#
# Make sure that the shared-functions.sh script exists.
if [ ! -r `dirname $0`/lib/shared-functions.sh ]; then
echo "\nFATAL ERROR: `tput sgr0``tput setaf 1`Could not load dev-tools/lib/shared-functions.sh. File not found.\n"
exit 1
fi
# Indicate the operation being carried out by this script.
REQUESTED_OPERATION="REBUILD_SCRATCH_ORG"
# Load the shared-functions.sh library. This action will also cause the
# config variables from dev-tools/lib/local-config.sh to be loaded.
source `dirname $0`/lib/shared-functions.sh
#
##
###
#### CONFIRM SCRIPT EXECUTION ######################################################################
###
##
#
confirmScriptExecution "Do you want to rebuild your scratch org?"
#
##
###
#### CREATE LOCAL VARIABLES ########################################################################
###
##
#
# The default version of this script does not require additional local
# variables. If your customized script does require them, this is where
# you would define and initialize them.
#
##
###
#### FUNCTION: assignPermset () ####################################################################
###
##
#
assignPermset () {
# Assign permission sets to the scratch org's Admin user.
echoStepMsg "Assign the $1 permission set to the scratch org's Admin user"
echo \
"Executing force:user:permset:assign \\
--permsetname "$1" \\
--targetusername $SCRATCH_ORG_ALIAS \\
--loglevel error\n"
(cd $PROJECT_ROOT && exec sfdx force:user:permset:assign \
--permsetname "$1" \
--targetusername $SCRATCH_ORG_ALIAS \
--loglevel error)
if [ $? -ne 0 ]; then
echoErrorMsg "Permission set \"$1\" could not be assigned to the admin user. Aborting Script."
exit 1
fi
}
#
##
###
#### FUNCTION: createScratchOrg () #################################################################
###
##
#
createScratchOrg() {
# Create a new scratch org using the scratch-def.json locally configured for this project.
echoStepMsg "Create a new $SCRATCH_ORG_ALIAS scratch org"
echo "Executing force:org:create -f $SCRATCH_ORG_CONFIG -a $SCRATCH_ORG_ALIAS -v $DEV_HUB_ALIAS -s -d 29"
(cd $PROJECT_ROOT && exec sfdx force:org:create -f $SCRATCH_ORG_CONFIG -a $SCRATCH_ORG_ALIAS -v $DEV_HUB_ALIAS -s -d 29)
if [ $? -ne 0 ]; then
echoErrorMsg "Scratch org could not be created. Aborting Script."
exit 1
fi
}
#
##
###
#### FUNCTION: deleteScratchOrg () #################################################################
###
##
#
deleteScratchOrg () {
# Delete the current scratch org.
echoStepMsg "Delete the $SCRATCH_ORG_ALIAS scratch org"
echo "Executing force:org:delete -p -u $SCRATCH_ORG_ALIAS -v $DEV_HUB_ALIAS"
(cd $PROJECT_ROOT && exec sfdx force:org:delete -p -u $SCRATCH_ORG_ALIAS -v $DEV_HUB_ALIAS )
}
#
##
###
#### FUNCTION: importData () #######################################################################
###
##
#
importData () {
# Setup development data
echoStepMsg "Import data from $1"
echo \
"Executing force:data:tree:import \\
--plan \"$1\" \\
--targetusername $SCRATCH_ORG_ALIAS \\
--loglevel error)\n"
(cd $PROJECT_ROOT && exec sfdx force:data:tree:import \
--plan "$1" \
--targetusername $SCRATCH_ORG_ALIAS \
--loglevel error)
if [ $? -ne 0 ]; then
echoErrorMsg "Data import failed. Aborting Script."
exit 1
fi
}
#
##
###
#### FUNCTION: installPackage () ###################################################################
###
##
#
installPackage () {
# Echo the string provided by argument three. This string should provide the
# user with an easy-to-understand idea of what package is being installed.
echoStepMsg "$3"
# Print the time (HH:MM:SS) when the installation started.
echo "Executing force:package:install -i $1 -p 5 -w 10 -u $SCRATCH_ORG_ALIAS"
echo "\n`tput bold`Package installation started at `date +%T``tput sgr0`\n"
local startTime=`date +%s`
# Perform the package installation. If the installation fails abort the script.
(cd $PROJECT_ROOT && exec sfdx force:package:install -i $1 -p 5 -w 10 -u $SCRATCH_ORG_ALIAS)
if [ $? -ne 0 ]; then
echoErrorMsg "$2 could not be installed. Aborting Script."
exit 1
fi
# Print the time (HH:MM:SS) when the installation completed.
echo "\n`tput bold`Package installation completed at `date +%T``tput sgr0`"
local endTime=`date +%s`
# Determine the total runtime (in seconds) and show the user.
local totalRuntime=$((endTime-startTime))
echo "Total runtime for package installation was $totalRuntime seconds."
}
#
##
###
#### FUNCTION: pushMetadata () #####################################################################
###
##
#
pushMetadata () {
# Push metadata to the new Scratch Org.
echoStepMsg "Push metadata to the new scratch org"
echo "Executing force:source:push -u $SCRATCH_ORG_ALIAS"
(cd $PROJECT_ROOT && exec sfdx force:source:push -u $SCRATCH_ORG_ALIAS)
if [ $? -ne 0 ]; then
echoErrorMsg "SFDX source could not be pushed to the scratch org. Aborting Script."
exit 1
fi
}
#
##
###
#### FUNCTION: validateScratchOrgDeletion () #######################################################
###
##
#
validateScratchOrgDeletion () {
# Confirm that the scratch org is no longer the default username in SFDX local config.
echoStepMsg "Validate deletion of the scratch org"
echo "Executing sfdx force:config:list to confirm deletion from project local config"
(cd $PROJECT_ROOT && exec sfdx force:config:list)
}
#
##
###
#### SCRATCH ORG SETUP (DELETE/CREATE/PUSH) ########################################################
###
##
#
# STEP 0
# Reset the Step Message counter to reflect the number of TOTAL STEPS
# in your rebuild process. For the baseline SFDX-Falcon template it's 4.
resetStepMsgCounter 5
# STEPS 1 and 2
# Delete the current scratch org.
deleteScratchOrg
# STEP 3
# Create a new scratch org using the scratch-def.json locally configured for this project.
createScratchOrg
# STEP 4 through ???
# Install any packages (managed or unmanaged).
# Template for calling this function:
# installPackage #PACKAGE_VERSION_ID# \
# "#PACKAGE_NAME#" \
# "#STEP_MESSAGE#"
echoStepMsg "Installing fflib-apex-mocks and fflib-apex-common to $SCRATCH_ORG_ALIAS scratch org"
mkdir $PROJECT_ROOT/temp
cd $PROJECT_ROOT/temp
rm -Rf fflib-apex-mocks/
rm -Rf fflib-apex-common/
git clone https://github.com/apex-enterprise-patterns/fflib-apex-mocks.git
git clone https://github.com/apex-enterprise-patterns/fflib-apex-common.git
sfdx force:source:deploy -p ./fflib-apex-mocks/sfdx-source -u $SCRATCH_ORG_ALIAS
sfdx force:source:deploy -p ./fflib-apex-common/sfdx-source -u $SCRATCH_ORG_ALIAS
# STEP 5 through ???
# Assign any permission sets that were added by installed packages.
# Template for calling this function:
# assignPermset #PACKAGED_PERMSET_NAME#
# STEP 6
# Push metadata to the new Scratch Org.
pushMetadata
# STEP 7 through ????
# Assign any permission sets that were added by your Source Push.
# Template for calling this function:
# assignPermset #PERMSET_NAME#
# STEP 8 through ????
# Import data used during development. You may need to make multiple calls
# Template for calling this function:
# importData "$PROJECT_ROOT/data/#DATA_PLAN_JSON#"
#
##
###
#### ECHO CLOSING MESSAGE ##########################################################################
###
##
#
echoScriptCompleteMsg \
"Rebuild of scratch org $SCRATCH_ORG_ALIAS completed successfully."
exit 0
##END##