Refactor of scripts to add a target for auto creating a pr

I plan to use this for automated builds
This commit is contained in:
ViViDboarder 2020-07-01 12:45:20 -07:00
parent 771760f828
commit 26a70dce27
5 changed files with 157 additions and 12 deletions

1
.gitignore vendored
View File

@ -17,3 +17,4 @@ build/
archive/ archive/
.DS_Store .DS_Store
docset-gen docset-gen
repotmp/

View File

@ -19,30 +19,42 @@ run-lightning: clean-index
.PHONY: package-apex .PHONY: package-apex
package-apex: run-apex package-apex: run-apex
./package-docset.sh apexcode ./scripts/package-docset.sh apexcode
.PHONY: package-vf .PHONY: package-vf
package-vf: run-vf package-vf: run-vf
./package-docset.sh pages ./scripts/package-docset.sh pages
.PHONY: package-lightning .PHONY: package-lightning
package-lightning: run-lightning package-lightning: run-lightning
./package-docset.sh lightning ./scripts/package-docset.sh lightning
.PHONY: archive-apex .PHONY: archive-apex
archive-apex: package-apex archive-apex: package-apex
./archive-docset.sh apexcode ./scripts/archive-docset.sh apexcode
./archive/Salesforce_Apex: archive-apex
.PHONY: archive-vf .PHONY: archive-vf
archive-vf: package-vf archive-vf: package-vf
./archive-docset.sh pages ./scripts/archive-docset.sh pages
./archive/Salesforce_Visualforce: archive-vf
.PHONY: archive-lightning .PHONY: archive-lightning
archive-lightning: package-lightning ./archive-lightning: package-lightning
./archive-docset.sh lightning ./scripts/archive-docset.sh lightning
./archive/Salesforce_Lightning: archive-lightning
.PHONY: archive-all .PHONY: archive-all
archive-all: archive-apex archive-vf archive-lightning archive-all: archive-apex archive-vf # archive-lightning Lightning package isn't functional
./archive: archive-all
.PHONY: create-pr
create-pr: ./archive
./scripts/create-pr.sh
.PHONY: clean-index .PHONY: clean-index
clean-index: clean-index:
@ -64,5 +76,9 @@ clean: clean-index clean-package clean-archive
clean-build: clean-build:
rm -fr ./build rm -fr ./build
.PHONY: clean-pr
clean-pr:
rm -fr ./repotmp
.PHONY: clean-all .PHONY: clean-all
clean-all: clean clean-build clean-all: clean clean-build clean-pr

View File

@ -10,7 +10,8 @@ deliverable=$1
function get_friendly_name { function get_friendly_name {
local deliverable=$1 local deliverable=$1
local name="$(tr '[:lower:]' '[:upper:]' <<< "${deliverable:0:1}")${deliverable:1}" local name
name="$(tr '[:lower:]' '[:upper:]' <<< "${deliverable:0:1}")${deliverable:1}"
case "$deliverable" in case "$deliverable" in
"apexcode") "apexcode")
name="Apex" name="Apex"
@ -34,14 +35,17 @@ function get_icon_name {
} }
function main { function main {
local name=$(get_friendly_name "$deliverable") local name
name=$(get_friendly_name "$deliverable")
local package="$out_dir/Salesforce $name.docset" local package="$out_dir/Salesforce $name.docset"
local archive_dir="$archive_dir/Salesforce_$name" local archive_dir="$archive_dir/Salesforce_$name"
local archive="$archive_dir/Salesforce_$name.tgz" local archive="$archive_dir/Salesforce_$name.tgz"
local icon=$(get_icon_name "$deliverable") local icon
icon=$(get_icon_name "$deliverable")
mkdir -p "$archive_dir" mkdir -p "$archive_dir"
# Generate docset.json # Generate docset.json
local version
version=$(cat "$build_dir/$deliverable-version.txt") version=$(cat "$build_dir/$deliverable-version.txt")
sed "s/VERSION/$version/" "$files_dir/docset-$deliverable.json" > "$archive_dir/docset.json" sed "s/VERSION/$version/" "$files_dir/docset-$deliverable.json" > "$archive_dir/docset.json"
# Generated tgz archive # Generated tgz archive

124
scripts/create-pr.sh Executable file
View File

@ -0,0 +1,124 @@
#! /bin/bash
set -eu
set -o pipefail
if ! git config --global user.name ;then
# If no global git configs exist, let's set some temporary values
export GIT_COMMITTER_NAME="${GIT_COMMITTER_NAME:-"ViViDboarder"}"
export GIT_COMMITTER_EMAIL="${GIT_COMMITTER_EMAIL:-"ViViDboarder@gmail.com"}"
export GIT_AUTHOR_NAME="$GIT_COMMITTER_NAME"
export GIT_AUTHOR_EMAIL="$GIT_COMMITTER_EMAIL"
fi
# Get name of the fork and target repo
FORK_REPO="${FORK_REPO:-"ViViDboarder/Dash-User-Contributions"}"
TARGET_REPO="${TARGET_REPO:-"ViViDboarder/Dash-User-Contributions"}"
# If no github user is provided, take it from the fork name
if [ -z "${GITHUB_USER:-""}" ]; then
GITHUB_USER="${FORK_REPO%%/*}"
fi
GITHUB_TOKEN="${GITHUB_TOKEN:-default}"
WORKDIR=$(pwd)
TMP_DIR="$WORKDIR/repotmp"
REPO_DIR="$TMP_DIR/Dash-User-Contributions"
function validate() {
if [ -z "$GITHUB_TOKEN" ]; then
echo "Must provide \$GITHUB_TOKEN as an environment variable"
exit 1
fi
echo "Creating PR for $GITHUB_USER to $TARGET_REPO"
}
function read_version() {
local apex_version
apex_version="$(cat ./build/apexcode-version.txt)"
local pages_version
pages_version="$(cat ./build/pages-version.txt)"
local lightning_version
lightning_version="$(cat ./build/lightning-version.txt)"
if [ "$apex_version" != "$pages_version" ] || [ "$apex_version" != "$lightning_version" ]; then
echo "Apex: $apex_version, Pages: $pages_version, Lightning: $lightning_version"
echo "One of the doc versions doesn't match"
exit 1
fi
# All versions match, return one of them
echo "$apex_version"
}
function workdir_git() {
cd "$REPO_DIR"
if ! git "$@" ;then
# Be sure to return to workdir after a failed git command
cd "$WORKDIR"
return 1
fi
cd "$WORKDIR"
}
function shallow_clone_or_pull() {
mkdir -p "$TMP_DIR"
if [ -d "$REPO_DIR" ]; then
workdir_git checkout master
workdir_git pull --ff-only origin master
else
git clone --depth 1 "https://$GITHUB_USER:$GITHUB_TOKEN@github.com/$FORK_REPO" "$REPO_DIR"
fi
}
function copy_release() {
cp -r archive/* "$REPO_DIR/docsets/"
}
function create_release_branch() {
local branch="$1"
if ! workdir_git checkout -b "$branch" ; then
echo "Could not create release branch. Release likely already exists."
exit 1
fi
}
function create_pr() {
local version="$1"
local branch="$2"
local title="Update Salesforce docsets to $version"
workdir_git checkout "$branch"
workdir_git add .
workdir_git commit -m "$title"
workdir_git push origin HEAD
local result
result=$(curl \
-u "$GITHUB_USER:$GITHUB_TOKEN" \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$TARGET_REPO/pulls" \
-d "{\"title\":\"$title\",\"body\":\"This branch contains auto-generated updates to version $version\", \"head\":\"$GITHUB_USER:$branch\",\"base\":\"master\"}")
local result_url
if result_url="$(echo "$result" | jq --exit-status --raw-output .html_url)" ;then
echo "Pull request created at $result_url"
else
echo "$result"
exit 1
fi
}
function main() {
validate
local version
version="$(read_version)" || { echo "$version"; exit 1; }
local branch="salesforce-$version"
shallow_clone_or_pull
copy_release
create_release_branch "$branch"
create_pr "$version" "$branch"
}
main