193 lines
4.2 KiB
Bash
Executable file
193 lines
4.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -o errexit
|
|
|
|
copy_contents() {
|
|
local source="$1"
|
|
status "Copying contents from $source"
|
|
if [[ ! "$dryrun" == "1" ]]; then
|
|
(cd "$source" >/dev/null && tar c .) | tar xv
|
|
else
|
|
_ "(cd \"$source\" >/dev/null && tar c .) | tar xv"
|
|
fi
|
|
}
|
|
|
|
# Sets git config
|
|
set_config() {
|
|
if [ -n "$GIT_NAME" ]; then _ git config user.name "$GIT_NAME"; fi
|
|
if [ -n "$GIT_EMAIL" ]; then _ git config user.email "$GIT_EMAIL"; fi
|
|
}
|
|
|
|
# Runs the deployment
|
|
run() {
|
|
if [ ! -d "$source" ]; then
|
|
echo "Source is not a directory: $source"
|
|
exit 1
|
|
fi
|
|
|
|
local tmpdir="$(mktemp -d)"
|
|
|
|
if [[ "$force" == "1" ]]; then
|
|
_ cd "$tmpdir"
|
|
_ git init
|
|
_ git checkout -b "$branch"
|
|
copy_contents "$source"
|
|
if [[ "$useenv" == "1" ]]; then set_config; fi
|
|
_ git add -A .
|
|
git_commit
|
|
git_push --force
|
|
else
|
|
_ cd "$tmpdir"
|
|
_ git clone "$repo" . -b "$branch" || ( \
|
|
_ git init && \
|
|
_ git checkout -b "$branch")
|
|
if [[ "$keep" == "0" ]]; then _ rm -rf ./*; fi
|
|
copy_contents "$source"
|
|
if [[ "$useenv" == "1" ]]; then set_config; fi
|
|
_ git add -A .
|
|
git_commit || true
|
|
git_push
|
|
fi
|
|
_ rm -rf "$tmpdir"
|
|
status_ "Done"
|
|
}
|
|
|
|
git_commit() {
|
|
if [ -z "$author" ]; then
|
|
_ git commit -m "$message"
|
|
else
|
|
_ git commit -m "$message" --author "$author"
|
|
fi
|
|
}
|
|
|
|
git_push() {
|
|
if [ -z "$GITHUB_TOKEN" ]; then
|
|
_ git push "${repo}" "$branch" "$@"
|
|
else
|
|
status "Pushing via \$GITHUB_TOKEN $@"
|
|
_ git push "https://${GITHUB_TOKEN}@github.com/${repospec}.git" "$branch" "$@" \
|
|
--quiet >/dev/null 2>&1 || \
|
|
( status_ "Failed to push"; exit 1 )
|
|
fi
|
|
}
|
|
|
|
status() {
|
|
echo -e "\n\033[34m==>\033[0;1m" "$@\033[0m"
|
|
}
|
|
status_() {
|
|
echo -e "\033[33;1m==>\033[0m" "$@"
|
|
}
|
|
|
|
_() {
|
|
echo ""
|
|
status_ "$@"
|
|
if [[ ! "$dryrun" == "1" ]]; then "$@"; fi
|
|
}
|
|
|
|
help() {
|
|
local cmd="$(basename $0)"
|
|
echo 'Usage:'
|
|
echo " $cmd <REPO> <SOURCE>"
|
|
echo ''
|
|
echo 'Parameters:'
|
|
echo " REPO repository to push to in 'user/repo' form"
|
|
echo " SOURCE path to upload to repository's gh-pages branch"
|
|
echo ''
|
|
echo 'Options:'
|
|
echo ' -h, --help show help screen'
|
|
echo ' -f, --force force push'
|
|
echo ' -n, --dry-run run in simulation mode'
|
|
echo ' -e, --use-env pick up arguments from environment variables'
|
|
echo ' -b, --branch use this branch name (default: gh-pages)'
|
|
echo ' -a, --author set the author'
|
|
echo ' -k, --keep keep existing files in the repo'
|
|
echo ''
|
|
echo 'Env var options:'
|
|
echo ' GITHUB_TOKEN if set, use this to push to the repo'
|
|
echo ''
|
|
echo 'Optional env vars:'
|
|
echo " Run with '-e' to enable the use of these variables."
|
|
echo " GIT_NAME set this as the repos user.name"
|
|
echo ' GIT_EMAIL set this as the repos user.email'
|
|
echo ' GITHUB_REPO substitute as the REPO (1st argument)'
|
|
echo ' GIT_SOURCE substitute as the SOURCE (2nd argument)'
|
|
echo ' GIT_BRANCH use this branch name (--branch)'
|
|
echo ''
|
|
echo 'Example:'
|
|
echo " $cmd rstacruz/myproject doc"
|
|
echo " # pushes './doc' into the gh-pages branch of rstacruz/myproject"
|
|
echo ''
|
|
echo " export GITHUB_REPO='xyz/abc'"
|
|
echo " export GIT_SOURCE='docs'"
|
|
echo " $cmd -e"
|
|
echo " # pushes './doc' into the gh-pages branch of xyz/abc"
|
|
}
|
|
|
|
#
|
|
# Defaults
|
|
#
|
|
|
|
force=0
|
|
dryrun=0
|
|
repospec=
|
|
source=
|
|
branch=
|
|
message="Update"
|
|
useenv=0
|
|
author=""
|
|
keep=0
|
|
|
|
#
|
|
# Parse args
|
|
#
|
|
|
|
while [[ "$1" =~ ^- && ! "$1" == '--' ]]; do case $1 in
|
|
-h | --help )
|
|
help
|
|
exit
|
|
;;
|
|
-b | --branch )
|
|
shift
|
|
branch="$1"
|
|
;;
|
|
-n | --dry-run )
|
|
dryrun=1
|
|
;;
|
|
-e | --use-env )
|
|
useenv=1
|
|
;;
|
|
-k | --keep )
|
|
keep=1
|
|
;;
|
|
-a | --author)
|
|
shift
|
|
author="$1"
|
|
;;
|
|
-f | --force )
|
|
force=1
|
|
;;
|
|
esac; shift; done
|
|
if [[ "$1" == '--' ]]; then shift; fi
|
|
|
|
if [[ "$useenv" == "1" ]] && [[ -n "$GIT_BRANCH" ]] && [[ -z "$branch" ]]; then
|
|
branch="$GIT_BRANCH"
|
|
fi
|
|
|
|
if [[ "$useenv" == "1" ]] && [[ -n "$GITHUB_REPO" ]] && [[ -n "$GIT_SOURCE" ]] && [[ -z "$2" ]]; then
|
|
repospec="$GITHUB_REPO"
|
|
source="$GIT_SOURCE"
|
|
else
|
|
repospec="$1"
|
|
source="$2"
|
|
fi
|
|
|
|
: ${branch:="gh-pages"}
|
|
|
|
if [ -z "$source" ]; then
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
source="`pwd -LP`/$source"
|
|
repo="https://github.com/${repospec}.git"
|
|
|
|
run
|