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
This commit is contained in:
Executable
+262
@@ -0,0 +1,262 @@
|
||||
#!/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##
|
||||
Reference in New Issue
Block a user