/
0downstream.xml
166 lines (143 loc) · 7.65 KB
/
0downstream.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='interface.xsl'?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface" uri="http://gfxmonk.net/dist/0install/0downstream.xml">
<name>0downstream</name>
<summary>maintain a zeroinstall feed based on an upstream project</summary>
<publish xmlns="http://gfxmonk.net/dist/0install" mode="0tools"/>
<description>
# 0downstream
Easily generate [zero-install][] feeds and keep them up to date based on an
existing upstream project. You can run this feed from:
[http://gfxmonk.net/dist/0install/0downstream.xml][self]
Currently supported project sources are:
- [github][]
- [rubygems.org][]
- [pypi][]
These locations are all frequently used for interpreted languages. There is no
support for `0compile`d (source) feeds yet, but I hope to add it in the future.
### Create a new feed:
0downstream new --prefix=<prefix> <url> <filename>
e.g:
0downstream new \
--prefix=http://gfxmonk.net/dist/0install/ \
https://github.com/jkbr/httpie \
httpie.xml
Instead of the URL, you can also just use <type>:<id>, i.e: `github:jkbr/httpie`
This will fill in feed details using the available metadata, and add an
implementation for the latest implementation of the project, based on
project releases (or version tags in the case of github). You'll still
have to fill in dependency information, environment bindings and any
commands yourself, but hopefully only once. You can see the result at
[my 0install repository](http://gfxmonk.net/dist/0install/httpie.xml)
(view source to see the actual generated xml).
The `prefix` argument is the base URL where you plan to upload the feed. All mine
go in `http://gfxmonk.net/dist/0install/`.
### update an existing feed:
because 0downstream embeds project information inside the generated feed, you
can just run:
0downstream update <filename>
And it'll add an &lt;implementation&gt; for the latest version of the project
(in the &lt;group&gt; nearest the end of the file).
### check for updates:
Not very useful for manual use, but this command will exit with a `1` status
code if there is a newer version on the project page than in the feed. Probably
useful in a `cron` script.
0downstream check <filename>
# "it doesn't work", or "you should add ..."
Please open a github issue. I especially like the "pull request" type where
you've done all the hard work and I just press the green button.
It should be reasonably easy to add a new project type - you can use one of the
existing ones in `zeroinstall_downstream/project` to base it on. I won't merge
pull requests for new project sources until you've added the appropriate tests
(they're not hard!).
[zero-install]: http://0install.net/
[github]: https://github.com/
[rubygems.org]: https://rubygems.org/
[pypi]: https://pypi.python.org/pypi/
[self]: http://gfxmonk.net/dist/0install/0downstream.xml
</description>
<group main="zeroinstall_downstream/main.py">
<requires interface="http://repo.roscidus.com/python/python">
<version before="3"/>
</requires>
<requires interface="http://gfxmonk.net/dist/0install/version.xml"/>
<requires interface="http://gfxmonk.net/dist/0install/xmlformat.xml"/>
<requires interface="http://0install.net/2007/interfaces/ZeroInstall.xml">
<environment insert="" mode="prepend" name="PYTHONPATH"/>
</requires>
<command name="run" path="zeroinstall_downstream/main.py">
<runner interface="http://repo.roscidus.com/python/python"/>
</command>
<command name="test">
<requires interface="http://gfxmonk.net/dist/0install/mocktest.xml">
<version not-before="0.6.3"/>
</requires>
<requires interface="http://gfxmonk.net/dist/0install/python-beautifulsoup.xml"/>
<runner command="run-py2" interface="http://gfxmonk.net/dist/0install/nosetests-runner.xml"/>
<arg>-v</arg>
<arg>--exe</arg>
</command>
<command name="notebook">
<requires interface="http://gfxmonk.net/dist/0install/mocktest.xml"/>
<requires interface="http://gfxmonk.net/dist/0install/python-beautifulsoup.xml"/>
<runner command="notebook" interface="http://gfxmonk.net/dist/0install/ipython.xml"/>
</command>
<requires interface="http://gfxmonk.net/dist/0install/python-requests.xml"/>
<environment insert="" mode="prepend" name="PYTHONPATH"/>
<implementation id="sha1new=2ec3239738d824c4a06a6346aca6d63266ae9eed" released="2012-05-19" version="0.1">
<manifest-digest sha256="50e1ec9fd54cdea0305b69ef9fb09a716868aff803cba4366ab33b9adcf654d2"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.1.tgz" size="12607"/>
</implementation>
<implementation id="sha1new=6b7f27aca8a4aac1cb1167ceb86098db60da08a4" released="2012-05-20" version="0.2">
<manifest-digest sha256="824a3089643126730a05f605debaeb3e37fea42b1299a9403f2bebcaeb442fe3"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.2.tgz" size="15125"/>
</implementation>
<implementation id="sha1new=ab541cdc3760e362d9c65f607cc232a6acfe7d44" released="2012-05-27" version="0.2.1">
<manifest-digest sha256="2a898640dd6880f2725391257c4568a9a131a837180ce0cc026eb9a819bdd5ba"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.2.1.tgz" size="15185"/>
</implementation>
<implementation id="sha1new=061cb6a1fabd72d55171b1ae8ee9ba83ed0bb702" released="2012-06-25" version="0.3.1">
<manifest-digest sha256="e111cbc9051dedaee8d2690d100460ca9c5701329b51080ef04b85a0e48e5d05"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.3.1.tgz" size="15803"/>
</implementation>
</group>
<group main="zeroinstall_downstream/main.py">
<requires interface="http://repo.roscidus.com/python/python">
<version before="3"/>
</requires>
<requires interface="http://gfxmonk.net/dist/0install/version.xml">
<version not-before="0.8"/>
</requires>
<requires interface="http://gfxmonk.net/dist/0install/xmlformat.xml"/>
<requires interface="http://gfxmonk.net/dist/0install/python-requests.xml"/>
<requires interface="http://0install.net/2007/interfaces/ZeroInstall.xml">
<environment insert="" mode="prepend" name="PYTHONPATH"/>
</requires>
<command name="run" path="zeroinstall_downstream/main.py">
<runner interface="http://repo.roscidus.com/python/python"/>
</command>
<environment insert="" mode="prepend" name="PYTHONPATH"/>
<command name="test">
<requires interface="http://gfxmonk.net/dist/0install/mocktest.xml">
<version not-before="0.6.3"/>
</requires>
<requires interface="http://gfxmonk.net/dist/0install/python-beautifulsoup.xml"/>
<runner command="run-py2" interface="http://gfxmonk.net/dist/0install/nosetests-runner.xml"/>
<arg>-v</arg>
<arg>--exe</arg>
</command>
<command name="notebook">
<requires interface="http://gfxmonk.net/dist/0install/mocktest.xml"/>
<requires interface="http://gfxmonk.net/dist/0install/python-beautifulsoup.xml"/>
<runner command="notebook" interface="http://gfxmonk.net/dist/0install/ipython.xml"/>
</command>
<implementation id="sha1new=6415c371b1df869f9d0c5c8044e736b8da45360f" released="2012-07-26" version="0.3.2">
<manifest-digest sha256="dc7c27cb32c1b2b8fe982e0bc66e312e411e79942b93b24694de91a39f48bc46"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.3.2.tgz" size="15967"/>
</implementation>
<implementation id="sha1new=81726f72752784851c8fe4731ada76f26b8941f2" released="2013-05-08" version="0.4">
<manifest-digest sha256new="R5MPVOJHD6AOFF3KTTV33PBA2HMF7XNLIPAM7R2O5IHBQXUWJCYA"/>
<archive href="http://gfxmonk.net/dist/0install/0downstream/0downstream-0.4.tgz" size="18615"/>
</implementation>
</group>
</interface>