]> granicus.if.org Git - docbook-dsssl/commitdiff
Add logic to automatially update CDN.
authorStefan Seefeld <stefan@seefeld.name>
Thu, 27 Oct 2016 20:45:22 +0000 (16:45 -0400)
committerStefan Seefeld <stefan@seefeld.name>
Fri, 28 Oct 2016 01:47:16 +0000 (21:47 -0400)
.travis.yml
.travis/generate_index.py [new file with mode: 0755]
.travis/publish-release.sh [new file with mode: 0755]

index 4813b8a8ff650a7dad3c9afcb5a75093ded94a7b..74e51028bafc25d88fa4e97238c87ba47f50b304 100644 (file)
@@ -2,12 +2,14 @@ language: java
 branches:
   only:
   - master
+  - travis
   - "/^release.*/"
 
 env:
   global:
   - CLASSPATH=/usr/share/java/xalan-j2.jar:/usr/share/java/xercesImpl.jar:/usr/share/java/xml-resolver.jar:$(pwd)/.travis
   - secure: "CyGQbyoAoFmAst01IZtu3aGGVCTRN/oo8aMZJPwnDRi9F3q/ptueFKYoQEWWEzDYzPMPAtvbDVDx5lhfyZxlm6HwyvU8Frdt+3RTkn287EiDk0fnUhZGSasLaWwZ5SxGuRq/yonc/oLfktK1e6Z9ZUAD9q0GnWncI6ZiLeJussWpRIz5W88Jaz2VJKGdiiHZbQDmCE6b5Oe9Ucu8gYAnmHbz0QbxacPm58+D7rrWVwF9haH0oDlwlMCfM1lI0/GNJVMAREGYLFJBVsieSuDunYz9kZg3ewr0wKud4spy9qUMAGt5yEAn9I+vQYqTgzWpbLAP8cOgSxsVJWbBN8JXUuoQRh1Pu78J0phDII8YouYB98o1JdkQeytrUXJmzfdRtmw/iKKp4qAKHK7v6R0KkcpDhjeiVVWrptc4vXbkpm16EFgv3/d+Gs++M5s6fag60mlth9u6IwZ/tSJbafvUqvPn977YJbua40SSzwwF9/8GP0GGDTp7SoO7oKaIVN9Gv9qMANOYIqOGA/KCyzQ3oLuhD14P5Hy2Gdfa8S4o9UZI43QWURljWniN9ycyZb53px/4WZc2adAcxcB+V64M3UHkLGU+MH7mJWJtLE1v/32fBYaBGEkTch2Ghj/oKV89+rav40ssKyol6IYjKN7uVXh3R3t4kT8jJPbDmUBhFoo="
+  - secure: "pJBf2nm1HXQAqJTZ7+CdXAjBmppD2eOw4AlvSpkHDgUilKUBYfjSy1R5TY/CQ+TmlDOV6wX5FMVEj8XV0Kn7w5gQ+7n7J+dyDr6Cg51oYIhmHW+z+5+rc1yhikDdkQxZbQ2ervR0WaF35oZTsVnC7qw4UvAz/fHbmLBbWjjfyOhOlo7yXz+HMNt53CclZjn8BrU+O7EsQZAgY4t50iQy4D1v92hev1XKcV57ITGWvla28VZR8BBK2iMvuW+OM0DzPNJsyybwrVHOwZ0XVuDq0NNexMc6n85ISuIVhEzr2OeL5tnmpH9hECMzuVvBbNE2f7xnDJkl1XADIhEzgsljKbnNLmrP8o5Lalpi6mCB2WIPX2PRt9k2d6nj3Kx7vPNcF55f822/DfGO62LNGHressDEXAUhuyyzAHvxfp8ExxHEyj5eN3as8GY3F/fGNwGpDOfy9/yKetBVWdijdmWsqKCLIYze9JaliI3mJfUu6VzFVWalGApgVNPVUPtJaWB1qay3aDNpH2LqPu82sefD0StnjJgroKHqHBBT0MNlML2xR+HLVsU3krSZcPLFn3eWsz/Zc6Rl1ZlcarKiMAPKdUS7jVJSO/G8rfH6Y5h5jP31aV3i/0WTLoBxru69Eh4hs1QPvg1j9ZBGSKjWenP9wwxKKhY5OT6wL8tr/5e2WSw="
 
 install:
 - sudo apt-get update -q
@@ -25,6 +27,15 @@ script:
 - make check
 - make dist
 
+after_success:
+# Update CDN
+- |
+   if [ "$TRAVIS_REPO_SLUG" = "docbook/xslt10-stylesheets" -a \
+        "$TRAVIS_PULL_REQUEST" = "false" ]; then
+     export GH_TOKEN
+     .travis/publish-release.sh
+   fi
+
 before_deploy:
 - git config --global user.email "builds@travis-ci.com"
 - git config --global user.name "Travis CI"
diff --git a/.travis/generate_index.py b/.travis/generate_index.py
new file mode 100755 (executable)
index 0000000..a82d98f
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+#
+# github pages allow directories to be navigated only if
+# they contain an index.html file.
+# This script traverses a directory tree starting at 'root',
+# generating 'index.html' files with file (and directory) listings,
+# unless the given directory already contains an 'index.html' file.
+
+import os
+from os.path import *
+import sys
+import datetime
+
+if len(sys.argv) != 2:
+    print('Usage: {} <root-directory>'.format(sys.argv[0]))
+    sys.exit(-1)
+
+# start the traversal here...
+root = abspath(sys.argv[1])
+# ...but print direcory names based on one level up (to include 'xsl/' etc.)
+base = dirname(root)
+
+def make_index(dir, dirs, files):
+    filename = join(dir, 'index.html')
+    if exists(filename):
+        return
+    with open(filename, 'w') as output:
+        output.write("""<html><head>
+<title>Index of %s</title>
+<style>
+table {{ width: 100%; font-family: monospace;}}
+td {{ text-align: right}}
+td:first-child {{ text-align: left}}
+td:last-child {{ text-align: center}}
+</style>
+</head>
+<body><h1>{}</h1>
+<table>""".format(relpath(dir, base)))
+        output.write('<tr><th>{}</th><th>{}</th><th>{}</th></tr>'.format("Name", "Size", "Last Modified"))
+        output.write('<tr><td><a href="..">..</a>/</td><td></td><td></td></tr>')
+        for d in dirs:
+            s = os.stat(join(dir, d))
+            format = '<tr><td><a href="{}">{}</a>/</td><td></td><td>{}</td></tr>'
+            output.write(format.format(d, d, datetime.datetime.fromtimestamp(int(s.st_mtime))))
+        for f in files:
+            s = os.stat(join(dir, f))
+            if s.st_size > 1073741824:
+                size = '{} GB'.format(s.st_size / 1073741824)
+            elif s.st_size > 1048576:
+                size = '{} MB'.format(s.st_size / 1048576)
+            elif s.st_size > 1024:
+                size = '{} KB'.format(s.st_size / 1024)
+            else:
+                size = '{} &nbsp;&nbsp;'.format(s.st_size)
+            format = '<tr><td><a href="{}">{}</a></td><td>{}</td><td>{}</td></tr>'
+            output.write(format.format(f, f, size, datetime.datetime.fromtimestamp(int(s.st_mtime))))
+        output.write("""</table>
+</body>
+</html>""")
+
+def process(dir):
+    all = os.listdir(dir)
+    dirs = sorted([d for d in all if isdir(join(dir, d))])
+    files = sorted([f for f in all if isfile(join(dir, f)) if f != 'index.html'])
+    make_index(dir, dirs, files)
+    # recurse into subdirectory, skipping links (such as 'current')
+    for d in dirs:
+        if not islink(join(dir, d)):
+            process(join(dir, d))
+
+process(root)
diff --git a/.travis/publish-release.sh b/.travis/publish-release.sh
new file mode 100755 (executable)
index 0000000..1fc966a
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/bash
+set -e # Exit with nonzero exit code if anything fails
+here=$(dirname "${BASH_SOURCE[0]}")
+# Only commits to master should trigger deployment
+# (add 'travis' for testing purposes.)
+if [ "$TRAVIS_PULL_REQUEST" != "false" ] || \
+   [ "$TRAVIS_BRANCH" != master -a \
+     "$TRAVIS_BRANCH" != travis ]; then
+    echo "Skipping deployment"
+    exit 0
+fi
+
+# Remember the SHA of the current build.
+SHA=$(git rev-parse --verify HEAD)
+
+# Clone the minimum of the CDN repo needed.
+CDN_REPO="https://$GH_TOKEN@github.com/docbook/cdn.git"
+git clone $CDN_REPO cdn --depth=1 -q
+# Clean out existing content...
+rm -rf cdn/release/xsl/snapshot
+rm -rf cdn/release/xsl-nons/snapshot
+# ...and copy the new one.
+mkdir -p cdn/release/xsl
+mkdir -p cdn/release/xsl-nons
+cp -a dist/docbook-xsl-snapshot cdn/release/xsl/snapshot
+cp -a dist/docbook-xsl-nons-snapshot cdn/release/xsl-nons/snapshot
+# We could normally make "current" symbolic links to "snapshot"
+# but github's policy doesn't allow to publish symbolic links in pages.
+rm -rf cdn/release/xsl/current
+rm -rf cdn/release/xsl-nons/current
+cp -a cdn/release/xsl/snapshot cdn/release/xsl/current
+cp -a cdn/release/xsl-nons/snapshot cdn/release/xsl-nons/current
+
+# If there are no changes, bail out.
+# (Note that this doesn't detect additions.)
+#if (cd cdn && git diff --quiet); then
+#    echo "No changes to the output on this push; exiting."
+#    exit 0
+#fi
+
+$here/generate_index.py cdn/release/xsl
+$here/generate_index.py cdn/release/xsl-nons
+
+# Now prepare to commit and push to the CDN
+cd cdn
+git config user.name "Travis CI"
+git config user.email "travis-ci"
+
+git add .
+git commit -m "Deploy XSL Stylesheets to GitHub Pages: ${SHA}"
+git push -q origin HEAD