aboutsummaryrefslogtreecommitdiff
path: root/buildroot/share/git/mfpub
diff options
context:
space:
mode:
Diffstat (limited to 'buildroot/share/git/mfpub')
-rw-r--r--buildroot/share/git/mfpub138
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