#!/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 -f origin echo echo -n "Pushing to upstream/$TARG... " git push -f upstream 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 "http://marlinfw.org/" echo "$line" done } # remove the temporary folder rm -rf ${TMPFOLDER} # Go back to the branch we started from [[ $BRANCH != $CURR ]] && git checkout $BRANCH && [[ $HAS_STASH == 1 ]] && git stash pop