0template¶
Maintainer: Thomas Leonard
License: GNU Lesser General Public License
Source: https://github.com/0install/0template
Zero Install feed: https://apps.0install.net/0install/0template.xml
0template creates the XML for one version of a program from a template. The diagram below shows how it fits into the overall publishing process:
That is, each time you want to add a new release of a program to your master XML feed, you first use 0template to generate the XML for the new release. Once you're happy with it, merge it into the master feed with 0repo.
0template is mostly useful for publishing existing binary or source archives. If you are making releases of your own software from Git, consider using 0release instead.
Installation¶
To get it:
0install add 0template https://apps.0install.net/0install/0template.xml
Creating the template¶
To start, run it with a non-existent file and it will offer to create it:
$ 0template myprog.xml.template
'myprog.xml.template' does not exist; creating new template.
Does your program need to be compiled before it can be used?
1) Generate a source template (e.g. for compiling C source code)
2) Generate a binary template (e.g. for a pre-compiled binary or script)
> 2
Writing myprog.xml.template
Then edit the generated myprog.xml.template
to taste. A minimal example would be:
<?xml version="1.0"?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
<name>myprog</name>
<summary>does useful stuff</summary>
<group>
<command name="run" path="myprog"/>
<implementation version="{version}">
<manifest-digest/>
<archive href="http://example.com/downloads/myprog-{version}.zip"/>
</implementation>
</group>
</interface>
You would typically want to add any dependencies here too. See the feed specification for details.
Tip
You can also use 0template to create a local feed to run a Git checkout, rather than an archive on the web. In that case, just don't use the .template
extension, and it will generate a feed rather than a template.
Using the template¶
To generate the XML for a particular version, run 0template on it and provide the template parameters (version
in this example), e.g.
$ 0template myprog.xml.template version=1.0
Downloading http://example.com/downloads/myprog-1.0.zip to ./myprog-1.0.zip
Writing myprog-1.0.xml
You now have a feed with the appropriate details filled in:
<?xml version="1.0"?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
<name>myprog</name>
<summary>does useful stuff</summary>
<group>
<command name="run" path="myprog"/>
<implementation id="sha1new=67ba178ed33b292efa5ab364d01a8fc13fe9eba3" version="1.0">
<manifest-digest sha256new="FBXDJXLMHAPCRNZ5XOQTVYQHD6VP7CZAZ2UKCCV5UYE27C752GIQ"/>
<archive extract="myprog-1.0" href="http://example.com/downloads/myprog-1.0.zip" size="352"/>
</implementation>
</group>
</interface>
Specifically, 0template fills in these values:
- All
{...}
text is expanded with the values you provided on the command-line. - The archive is downloaded to the directory containing the feed, if it's not already there.
- The
size
attribute is set to the size of the archive. - The
extract
attribute is set to the single top-level directory in the archive, if it has one. - The
id
is set to the sha1new digest of the archive. - Any empty attributes of
manifest-digest
are filled in with the calculated digests. If there are no attributes, asha256new
digest is added.
You can now test this feed using e.g.
$ 0install run myprog-1.0.xml
Or, for source feeds:
$ 0compile autocompile myprog-1.0.xml
Once you are happy with it, you can add it to the master feed (which contains all versions) using 0repo. e.g.
$ 0repo add myprog-1.2.xml
The packaging guide includes a tutorial showing how to use 0template.