GitLab is open source software to collaborate on code (a GitHub clone to run on your own server). Clicking a blob (a file in a repository) in GitLab shows a nice rendering if GitLab supports the file type (e.g., images, Markdown documents), or its content as plain text otherwise. The patch described here adds support to GitLab for rendering IPython notebooks (.ipynb files).
This is a Quick Hack (tm):
- It is slow
- It probably has some security issue
If you run this on a public production server, your cat might get electrocuted. Other than that, it should be fine (not the cat).
On the GitLab server:
Note: The following instructions are for GitLab 8.10. Whenever a new
version comes out, I'll try to have a branch ready for that version so you can
just substitute the current version for 8-10-stable
below.
Install GitLab as you normally would with the following changes:
- Clone the GitLab source code from https://github.com/martijnvermaat/gitlabhq.git (instead of https://github.com/gitlabhq/gitlabhq.git)
- Checkout the
8-10-stable-blob-ipython-notebook
branch (instead of8-10-stable
)
If you already have a GitLab installation running, follow the usual update guide with the following commands instead of the Get latest code step:
cd /home/git/gitlab
sudo -u git -H git remote add martijnvermaat https://github.com/martijnvermaat/gitlabhq.git
sudo -u git -H git fetch martijnvermaat
sudo -u git -H git checkout 8-10-stable-blob-ipython-notebook
Alternatively, if you know what you're doing or like living on the edge, use
branch
blob-ipython-notebook
,
which is based on master
. You probably want to rebase on upstream master
in that case too.
If needed, all can be disabled by setting ipython_notebook.render
to false
in config/gitlab.yml
.
In the same file, you can specify a custom command for converting notebook
files with ipython_notebook.nbconvert
. This command should accept an IPython
notebook file as its first argument and write an HTML representation to
standard output.
The obvious implementation would be to link to or embed the IPython Notebook Viewer. However, GitLab is often used for private repositories where we obviously cannot share the content with a public service.
So this is an alternate implementation, where the notebook file is converted
to HTML on the fly by the IPython nbconvert
tool. The rendered notebook is
returned verbatim to the browser and subject to the regular GitLab
authentication rules. Rendered notebooks are not cached.
A previous implementation embedded the rendered notebook in the GitLab page as
an IFrame using a
data URI. Since this approach
had some technical limitations and exposed some browser bugs with more complex
notebooks, the current implementation renders the notebook outside the GitLab
interface. The IFrame approach can still be found in branch
blob-ipython-notebook-iframe
(based on master
shortly after the release of GitLab 7.3.2).
Hello Martijn
Great work with this fork, hopefully gitlab will incorportate it (or a similar solution) into their hosted copy. I've tried to install it, and for some reason it's just not working. I performed a installation from source, but cloning from your repository instead of the original one. After I am done with the installation, I can see a green button "view" in notebook files. When I click this button, another tab is openned but with the raw json, not the rendered version of the notebook. Any tips?
I created this gist to keep track of what was going on.
Best,Thiago
UPDATE -- Martijn, I just realized -- after going through the configs that nbconvert was not installed. However VERY obvious, maybe you can add a quick note about this.