Sunday 1 p.m.–1:30 p.m.

"Continuous Publication" with Python: Another Approach (ja)

Daisuke Miyakawa

Audience level:
Project Case-Studies / プロジェクト事例


This introduces a system that builds documents automatically and publish it online. The system uses several components around Python; Django, Celery, GitHub, GitPython, Docker, Calibre, TexLive, and Re:VIEW. After the successful maintenance for over a year, the speaker would like to share several observations he made during the period, and discuss them with the other Python hackers.


In this talk, we'll introduce a system we have developed for more than a year. It pulls git repository from GitHub, building the document on demand. As a result, authors are able to obtain pdf, epub, html (and InDesign XML if they want). Actually, this system is along with the recent, well-accepted idea about Pull-Request driven tech writing. This system has been adapted by several projects, including commercial ones. One example is "Effective Android", which was published in Comiket 84 as a Dojin (or indies) publication and was released from Tatsu-zine (達人出版会) and Impress Japan (インプレスジャパン) as commercial books. To manage articles by over-30 authors, TechBooster has been using GitHub and our system for all the recent Dojin publications too. There are some other usages we cannot share publicly. This talk is NOT about how the system makes us (as authors) happy. This is about HOW it has been built with Python. We've adapted Django and Celery for continuous building and serving files via Web. Python's "subprocess.Popen()" was just simple to call Re:VIEW command that is written in Ruby. Using Docker via docker-py was really great to isolate processes to avoid several vulnerabilities. Although we really love Python and Python products, we sometimes made some counter-intuitive decisions for communities. We did not utilize Sphinx. We did not choose ReST, Textile, or even Markdown, but selected Re:VIEW. We have not used other Continuous Integration mechanisms available for free. We'll explain how we thought toward those questions, letting audiences grab some sense about how to choose what.