about summary refs log tree commit diff
diff options
context:
space:
mode:
authormcarton <cartonmartin+git@gmail.com>2016-07-19 21:25:46 +0200
committermcarton <cartonmartin+git@gmail.com>2016-07-19 21:26:16 +0200
commit01c61a714bb532efe4eff4375c5b7931570907fe (patch)
tree46426c075b425e6b9e63094eea7eef041cdd19b5
parentc638e5b67911165b451625c4155f01d1a883a47a (diff)
Setup automatic push of gh-pages
-rwxr-xr-x.github/deploy.sh66
-rw-r--r--.github/deploy_key.encbin0 -> 1680 bytes
-rw-r--r--.gitignore4
-rwxr-xr-xutil/export.py27
4 files changed, 92 insertions, 5 deletions
diff --git a/.github/deploy.sh b/.github/deploy.sh
new file mode 100755
index 00000000000..7b40371e01b
--- /dev/null
+++ b/.github/deploy.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+# Automatically deploy on gh-pages
+
+set -e
+
+SOURCE_BRANCH="master"
+TARGET_BRANCH="gh-pages"
+
+# Save some useful information
+REPO=$(git config remote.origin.url)
+SSH_REPO=${REPO/https:\/\/github.com\//git@github.com:}
+SHA=$(git rev-parse --verify HEAD)
+
+# Clone the existing gh-pages for this repo into out/
+(
+    git clone "$REPO" out
+    cd out
+    git checkout $TARGET_BRANCH
+)
+
+# Remove the current doc for master
+rm -rf out/master/ || exit 0
+
+# Make the doc for master
+mkdir out/master/
+cp util/gh-pages/index.html out/master
+./util/export.py out/master/lints.json
+
+# Save the doc for the current tag and point current/ to it
+if [ -n "$TRAVIS_TAG" ]; then
+    cp -r out/master "out/$TRAVIS_TAG"
+    rm -f out/current
+    ln -s "$TRAVIS_TAG" out/current
+fi
+
+# Pull requests and commits to other branches shouldn't try to deploy, just build to verify
+if [ "$TRAVIS_PULL_REQUEST" != "false" ] || [ "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then
+    echo "Generated, won't push"
+    exit 0
+fi
+
+# Now let's go have some fun with the cloned repo
+cd out
+git config user.name "Travis CI"
+git config user.email "travis@ci.invalid"
+
+if [ -z "$(git diff --exit-code)" ]; then
+    echo "No changes to the output on this push; exiting."
+    exit 0
+fi
+
+git add .
+git commit -m "Automatic deploy to GitHub Pages: ${SHA}"
+
+# Get the deploy key by using Travis's stored variables to decrypt deploy_key.enc
+ENCRYPTED_KEY_VAR="encrypted_${ENCRYPTION_LABEL}_key"
+ENCRYPTED_IV_VAR="encrypted_${ENCRYPTION_LABEL}_iv"
+ENCRYPTED_KEY=${!ENCRYPTED_KEY_VAR}
+ENCRYPTED_IV=${!ENCRYPTED_IV_VAR}
+openssl aes-256-cbc -K "$ENCRYPTED_KEY" -iv "$ENCRYPTED_IV" -in deploy_key.enc -out deploy_key -d
+chmod 600 deploy_key
+eval $(ssh-agent -s)
+ssh-add deploy_key
+
+# Now that we're all set up, we can push.
+git push "$SSH_REPO" "$TARGET_BRANCH"
diff --git a/.github/deploy_key.enc b/.github/deploy_key.enc
new file mode 100644
index 00000000000..48cb3f5a127
--- /dev/null
+++ b/.github/deploy_key.enc
Binary files differdiff --git a/.gitignore b/.gitignore
index e5a2f2aa7b7..0206d9dc963 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
+# Used by Travis to be able to push:
+/.github/deploy_key
+out
+
 # Compiled files
 *.o
 *.so
diff --git a/util/export.py b/util/export.py
index 9ef06e6a2ba..558209eee4d 100755
--- a/util/export.py
+++ b/util/export.py
@@ -1,8 +1,11 @@
 #!/usr/bin/env python
+# Build the gh-pages
 
+import json
 import os
 import re
-import json
+import sys
+
 
 level_re = re.compile(r'''(Forbid|Deny|Warn|Allow)''')
 conf_re = re.compile(r'''define_Conf! {\n([^}]*)\n}''', re.MULTILINE)
@@ -15,10 +18,19 @@ This lint has the following configuration variables:
 * `%s: %s`: %s (defaults to `%s`).
 """
 
+
 # TODO: actual logging
-def warn(*args): print(args)
-def debug(*args): print(args)
-def info(*args): print(args)
+def warn(*args):
+    print(*args)
+
+
+def debug(*args):
+    print(*args)
+
+
+def info(*args):
+    print(*args)
+
 
 def parse_path(p="clippy_lints/src"):
     lints = []
@@ -52,6 +64,7 @@ def parse_conf(p):
 
     return c
 
+
 def parseLintDef(level, comment, name):
     lint = {}
     lint['id'] = name
@@ -80,6 +93,7 @@ def parseLintDef(level, comment, name):
 
     return lint
 
+
 def parse_file(d, f):
     last_comment = []
     comment = True
@@ -134,10 +148,13 @@ def parse_file(d, f):
                     warn("Warning: Missing Lint-Name in", f)
                     comment = True
 
+
 def main():
     lints = parse_path()
     info("got %s lints" % len(lints))
-    with open("util/gh-pages/lints.json", "w") as file:
+
+    outdir = sys.argv[1] if len(sys.argv) > 1 else "util/gh-pages/lints.json"
+    with open(outdir, "w") as file:
         json.dump(lints, file, indent=2)
         info("wrote JSON for great justice")