diff options
Diffstat (limited to 'buildroot/share/git/mfpub')
-rw-r--r-- | buildroot/share/git/mfpub | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/buildroot/share/git/mfpub b/buildroot/share/git/mfpub new file mode 100644 index 0000000..6a912e5 --- /dev/null +++ b/buildroot/share/git/mfpub @@ -0,0 +1,138 @@ +#!/usr/bin/env bash +# +# mfpub +# +# Use Jekyll to generate Marlin Documentation, which is then +# git-pushed to Github to publish it to the live site. +# This publishes the current branch, and doesn't force +# changes to be pushed to the 'master' branch. Be sure to +# push any permanent changes to 'master'. +# + +[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "Usage: `basename $0` [branch]" 1>&2 ; exit 1; } + +MFINFO=$(mfinfo "$@") || exit 1 +IFS=' ' read -a INFO <<< "$MFINFO" +ORG=${INFO[0]} +FORK=${INFO[1]} +REPO=${INFO[2]} +TARG=${INFO[3]} +BRANCH=${INFO[4]} +CURR=${INFO[5]} + +if [[ $ORG != "MarlinFirmware" || $REPO != "MarlinDocumentation" ]]; then + echo "Wrong repository." + exit +fi + +if [[ $BRANCH == "gh-pages" ]]; then + echo "Can't build from 'gh-pages.' Only the Jekyll branches (based on 'master')." + exit +fi + +# Check out the named branch (or stay in current) + +if [[ $BRANCH != $CURR ]]; then + echo "Stashing any changes to files..." + [[ $(git stash) != "No local "* ]] && HAS_STASH=1 + git checkout $BRANCH +fi + +COMMIT=$( git log --format="%H" -n 1 ) + +# Clean out changes and other junk in the branch +git clean -d -f + +opensite() { + URL="$1" + OPEN=$(echo $(which gnome-open xdg-open open) | awk '{ print $1 }') + if [ -z "$OPEN" ]; then + echo "Can't find a tool to open the URL:" + echo $URL + else + echo "Opening the site in the browser..." + "$OPEN" "$URL" + fi +} + +# Push 'master' to the fork and make a proper PR... +if [[ $BRANCH == $TARG ]]; then + + # Don't lose upstream changes! + git fetch upstream + + # Rebase onto latest master + if git rebase upstream/$TARG; then + + # Allow working directly with the main fork + echo + echo -n "Pushing to origin/$TARG... " + git push origin HEAD:$TARG + + echo + echo -n "Pushing to upstream/$TARG... " + git push upstream HEAD:$TARG + + else + + echo "Merge conflicts? Stopping here." + exit + + fi + +else + + if [ -z "$(git branch -vv | grep ^\* | grep \\\[origin)" ]; then + firstpush + else + echo + echo -n "Pushing to origin/$BRANCH... " + git push -f origin + fi + + opensite "https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1" + +fi + +# Uncomment to compress the final html files +# mv ./_plugins/jekyll-press.rb-disabled ./_plugins/jekyll-press.rb +# bundle install + +echo +echo "Generating MarlinDocumentation..." + +rm -rf build + +# build the site statically and proof it +bundle exec jekyll build --profile --trace --no-watch +bundle exec htmlproofer ./build --only-4xx --allow-hash-href --check-favicon --check-html --url-swap ".*marlinfw.org/:/" + +# Sync the built site into a temporary folder +TMPFOLDER=$( mktemp -d ) +rsync -av build/ ${TMPFOLDER}/ + +# Clean out changes and other junk in the branch +git reset --hard +git clean -d -f + +# Copy built-site into the gh-pages branch +git checkout gh-pages || { echo "Something went wrong!"; exit 1; } +rsync -av ${TMPFOLDER}/ ./ + +# Commit and push the new live site directly +git add --all +git commit --message "Built from ${COMMIT}" +git push -f origin +git push -f upstream | { + while IFS= read -r line + do + [[ $line =~ "gh-pages -> gh-pages" ]] && opensite "https://marlinfw.org/" + echo "$line" + done +} + +# remove the temporary folder +rm -rf ${TMPFOLDER} + +# Go back to the branch we started from +git checkout $CURR && [[ $HAS_STASH == 1 ]] && git stash pop |