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
262 lines
8.4 KiB
Bash
Executable File
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## |