Last active
April 25, 2022 18:57
-
-
Save jdschleicher/aec1bf25ad213fc6dfe71c1c6ad97549 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
### BELOW PREREQUISITE CHECKLIST TO ENSURE ALL CLI'S AND EXPECTED VALUES ARE CORRECTLY SETUP | |
#################### BEGIN SCRIPT LOGIC ############################# | |
REPOSITORY_OWNER="jdschleicher" | |
TEMPLATE_NAME="setup-github-salesforce-dx-unlocked-package-template" | |
DEVHUB_ALIAS="your-devhub" | |
ORG_NAME="Company" | |
IS_PUBLIC_REPOSITORY=true #if repository is not a pro github account and is private then the brahcn protection rules features will not be enabled | |
gh_create_repo_from_dx_template() { | |
echo What is the Project Name? | |
read PROJECT_NAME | |
PROJECT_NAME=$(echo $PROJECT_NAME | tr '[:upper:]' '[:lower:]') | |
echo What is the description of this project? | |
read DESCRIPTION | |
echo_job "CREATING REPOSITORY" | |
##### IF CREATING TEMPLATE IN ENTERPRISE ORGANIZATION USE --internal instead of --private as this plays into functionality aroung GitHub Actions" | |
##### YOU WILL ALSO NEED TO ADJUST THE REPOSITORY_OWNER AND TEMPLATE_NAME VARIABLES ABOVE | |
##### AND IN THE EVENT OF USING AN ORGANIZATION ACCOUNT USE THE BELOW LINES AND COMMENT OUT LINES 27-28 | |
# echo gh repo create /"$REPOSITORY_OWNER/$PROJECT_NAME/" --description \"$DESCRIPTION\" --template \"$REPOSITORY_OWNER/$TEMPLATE_NAME\" --internal --clone | |
# gh repo create "$REPOSITORY_OWNER/$PROJECT_NAME" --description "$DESCRIPTION" --template "$REPOSITORY_OWNER/$TEMPLATE_NAME" --internal --clonse | |
##### IN THE EVENT OF A PERSONAL ACCOUNT USE BELOW GitHub repo creation command | |
echo gh repo create \"$PROJECT_NAME\" --description \"$DESCRIPTION\" --template \"$REPOSITORY_OWNER/$TEMPLATE_NAME\" --private --clone | |
gh repo create "$PROJECT_NAME" --description "$DESCRIPTION" --template "$REPOSITORY_OWNER/$TEMPLATE_NAME" --private --clone | |
ls | |
cd $PROJECT_NAME | |
ls | |
echo_job "SETTING UP REPOSITORY SECRETS" | |
setup_github_repository_secrets $PROJECT_NAME | |
echo_job "REPLACE TEMPLATE PLACEHOLDER VALUES WITH ENTERED PROJECT INFORMATION" | |
github_project_specific_setup $PROJECT_NAME $ORG_NAME | |
echo_job "GH API SETUP OF BRANCH PROTECTION RULES FOR master AND release*" | |
setup_branch_protection_rules $REPOSITORY_OWNER $PROJECT_NAME | |
echo_job "INITIALIZING UNLOCKED PACKAGE SETUP" | |
initialize_dx_project $PROJECT_NAME $DESCRIPTION | |
#OPEN NEW REPOSITORY IN VS CODE | |
echo_job "OPENING PROJECT IN VS CODE" | |
code . | |
} | |
github_project_specific_setup(){ | |
PROJECT_NAME=$1 | |
ORG_NAME=$2 | |
echo_job "RENAMING PROJECT [[app_name]] AND ORG [[org]] TEMPLATE VALUES WITH CAPTURED PROJECT AND ORG VALUES" | |
mv "app/[[app-name]]" "app/$PROJECT_NAME" | |
git grep -l "\[\[org\]\]" | xargs sed -i "s/\[\[org\]\]/$ORG_NAME/g" | |
git grep -l "\[\[app-name\]\]" | xargs sed -i "s/\[\[app-name\]\]/$PROJECT_NAME/g" | |
git commit -am "initialization of project variables to template" | |
git push origin | |
} | |
initialize_dx_project() { | |
packageName=$1 | |
description=$2 | |
packageType="Unlocked" | |
targetdevhubusername=$DEVHUB_ALIAS | |
path="app"/"$packageName" | |
echo sfdx force:package:create --targetdevhubusername=$targetdevhubusername --name $packageName --packagetype $packageType --path $path --description "$description" --nonamespace | |
time sfdx force:package:create --targetdevhubusername=$targetdevhubusername --name $packageName --packagetype $packageType --path $path --description "$description" --nonamespace | |
git commit -am "package initialization" | |
git push origin | |
} | |
setup_branch_protection_rules() { | |
owner=$1 | |
repo_name=$2 | |
repositoryId="$(gh api graphql -f query='{repository(owner:"'$owner'",name:"'$repo_name'"){id}}' -q .data.repository.id)" | |
gh api graphql -f query=' | |
mutation($repositoryId:ID!) { | |
createBranchProtectionRule( | |
input: { | |
repositoryId: $repositoryId | |
pattern: "master" | |
requiresApprovingReviews: true | |
requiredApprovingReviewCount: 1 | |
allowsForcePushes: false | |
dismissesStaleReviews: true | |
requiredStatusCheckContexts: ["master_pull_request_job"] | |
requiresStatusChecks: true | |
} | |
) { clientMutationId } | |
}' -f repositoryId="$repositoryId" | |
} | |
setup_github_repository_secrets() { | |
PROJECT_NAME=$1 | |
PROJECT_NAME=$( echo $PROJECT_NAME | tr '[:upper:]' '[:lower:]') | |
echo "PROJECT_NAME: $PROJECT_NAME" | |
gh secret set UNLOCKED_PACKAGE_APP_NAME -b "$PROJECT_NAME"; | |
gh secret set UAT_SANDBOX_ORG_URL -b "https://theorg--uat.my.salesforce.com"; | |
gh secret set UAT_SANDBOX_AUTH_URL -b "org_uath_url"; | |
gh secret set DEVHUB_ORG_URL -b "https://devhub.my.salesforce.com"; | |
gh secret set DEVHUB_CLIENTID -b "connected_app_client_id"; | |
gh secret set CICD_DEVHUB_USERNAME -b "devhub_username@devhub.com"; | |
gh secret set DEVHUB_KEY -b "devhubserverkeyforconnetedapp"; | |
gh secret set CENTRALIZED_REPOSITORY_GITHUB_ACCESS_KEY -b "key_from_github_repository_where_centralized_cicd_logic_is_stored"; | |
} | |
echo_job() { | |
echo "" | |
echo "" | |
echo "" | |
echo "***********************************************************" | |
echo "***********************************************************" | |
echo "" | |
echo $1 | |
echo "" | |
echo "***********************************************************" | |
echo "***********************************************************" | |
echo "" | |
echo "" | |
echo "" | |
} | |
gh_create_repo_from_dx_template |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment