Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
5d72ad7
fix: indentation
dlaehnemann Jan 9, 2026
eb39a89
fix: indentations
dlaehnemann Jan 9, 2026
9855601
fix: move download stats into per-package (/ per-output) for-loop
dlaehnemann Jan 9, 2026
a33cccb
[build all recipes]
dlaehnemann Jan 12, 2026
27b97c8
docs: fix docs build environement creation command
dlaehnemann Jan 12, 2026
d9a2232
docs: further indentation fixes in recipe readme.rst
dlaehnemann Jan 12, 2026
bb0e7b4
docs: (re-?)introduce missing link
dlaehnemann Jan 12, 2026
72ab64f
fix: try getting `[build all recipes]` commit tag to work again
dlaehnemann Jan 12, 2026
413ba41
docs: fix link
dlaehnemann Jan 12, 2026
a1d154d
ci: try fixing [build all recipes] tag gating
dlaehnemann Jan 12, 2026
2cdbcd6
ci: debug print of variables
dlaehnemann Jan 12, 2026
9582ba5
fix: only produce recipe README sections for either all outputs:, or …
dlaehnemann Jan 20, 2026
36fe195
docs: further improve infos on how to build parts of the docs
dlaehnemann Jan 20, 2026
b529e5e
fix: package_name variable loading and indentation
dlaehnemann Jan 23, 2026
4252d6b
fix: inline package_dashboard.html to allow sphinx templating over pa…
dlaehnemann Jan 23, 2026
18bc2d5
docs: add in explanatory comment, ensured correct syntax
dlaehnemann Jan 23, 2026
b2a0d2a
ci: log lots of info, to know where to get commit message from
dlaehnemann Jan 23, 2026
1210499
ci: try some more ways to get to the last commit's message
dlaehnemann Jan 23, 2026
dde3ecc
ci: try fixing syntax
dlaehnemann Jan 23, 2026
ce35735
ci: more syntax trials
dlaehnemann Jan 23, 2026
d2292ee
ci syntax test
dlaehnemann Jan 23, 2026
3a3e1d6
ci: further payload exploration
dlaehnemann Jan 23, 2026
27aa484
ci: even more payload exploration
dlaehnemann Jan 23, 2026
527dc6f
ci: further trying around
dlaehnemann Jan 23, 2026
bcfd00b
ci: printing, printing, printing JSON
dlaehnemann Jan 23, 2026
3907d04
ci: retrigger, after random install failure
dlaehnemann Jan 23, 2026
9603b87
ci: more and more debugging printout
dlaehnemann Jan 23, 2026
4fdd440
ci: revert attempt of `[buil all recipes]` fix to previous version, w…
dlaehnemann Jan 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,13 @@ allows us to keep editing the documentation lightweight.

## Building docs locally

Make an environment containing the `bioconda-utils` package. E.g.,
Make an environment containing the `bioconda-utils` package and some further build tools. E.g.,

```bash
mamba create \
env -n bioconda-docs \
-n bioconda-docs \
bioconda-utils \
sphinx sphinx-autodoc-typehints celery \
--channel conda-forge \
--channel bioconda \
--strict-channel-priority
Expand All @@ -55,11 +56,17 @@ top level of this repo, run:
make BIOCONDA_FILTER_RECIPES=10 html SPHINXOPTS="-T -j1"
```

The output will be found in `build/html`.
This will generate all the main HTML files plus the `README.html` for 10 recipes, with the output in `build/html`.

Note that you can set `BIOCONDA_FILTER_RECIPES` to some other number; omitting
it completely will build *all* recipes' README.html pages which can take
a while.
Note that you can set `BIOCONDA_FILTER_RECIPES` to some other number or to a regex.
For example, you can specify the building of only the `openms-meta` recipe with:

```bash
make BIOCONDA_FILTER_RECIPES="openms-meta" html SPHINXOPTS="-T -j1"
```

And omitting `BIOCONDA_FILTER_RECIPES` completely will build *all* recipes' README.html pages.
This can take a while.


## Points of interest
Expand Down
11 changes: 10 additions & 1 deletion source/_ext/bioconda_sphinx_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,16 @@ def generate_readme(recipe_basedir, output_dir, folder, repodata, renderer):

# Format the README
packages = []
for package in sorted(list(set(recipe.package_names))):

# Check, whether the recipe has an outputs section. If so, we need to look
# at its contents -- otherwise we only look at the main package name.
outputs_section = recipe.get("outputs", {})
if outputs_section:
outputs = sorted([o["name"] for o in outputs_section])
else:
outputs = [ recipe.name ]

for package in outputs:
versions_in_channel = set(repodata.get_package_data(['version', 'build_number'],
channels='bioconda', name=package))
sorted_versions = sorted(versions_in_channel,
Expand Down
2 changes: 2 additions & 0 deletions source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ For more options and details see the `pixi documentation <https://pixi.sh>`__.
.. _`Install pixi`: https://pixi.sh/latest/installation
.. _`conda-forge`: https://conda-forge.org/docs/index.html

.. _with-conda:

With Conda
----------

Expand Down
70 changes: 0 additions & 70 deletions source/templates/package_dashboard.html

This file was deleted.

106 changes: 92 additions & 14 deletions source/templates/readme.rst_t
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,11 @@
</span>
{% endif %}

.. rubric:: Installation
.. rubric:: Installation

You need a conda-compatible package manager
(currently either `micromamba <https://mamba.readthedocs.io>`_, `mamba <https://mamba.readthedocs.io>`_, or `conda <https://docs.conda.io/projects/conda>`_)
and the Bioconda channel already activated (see :ref:`set-up-channels`).
and the Bioconda channel already activated (see :ref:`with-conda`).

While any of above package managers is fine, it is currently recommended to use either
micromamba or mamba (see `here <https://mamba.readthedocs.io>`_ for installation instructions).
Expand All @@ -93,7 +93,7 @@

mamba install {{ package.name }}

and update with::
and update with::

mamba update {{ package.name }}

Expand All @@ -108,7 +108,7 @@

docker pull quay.io/biocontainers/{{ package.name }}:<tag>

(see `{{package.name}}/tags`_ for valid values for ``<tag>``)
(see `{{package.name}}/tags`_ for valid values for ``<tag>``)


.. |downloads_{{package.name}}| image:: https://img.shields.io/conda/dn/bioconda/{{package.name}}.svg?style=flat
Expand All @@ -121,13 +121,97 @@

.. raw:: html

<script>
var package = "{{name}}";
var versions = [{%- for version in package.versions[:5] -%} "{{ version.split('-')[0] }}"{%- if not loop.last -%},{%- endif -%} {%- endfor -%}];
</script>
<script>
var package = "{{package.name}}";
var versions = [{%- for version in package.versions[:5] -%} "{{ version.split('-')[0] }}"{%- if not loop.last -%},{%- endif -%} {%- endfor -%}];
</script>

.. rubric:: Download stats

.. raw:: html

<div style="width: 100%" id="download_plot_{{ package.name }}"></div>
<div style="width: 100%" id="platform_plot_{{ package.name }}"></div>
<div style="width: 100%" id="cdf_plot_{{ package.name }}"></div>

{% endfor %}

..
Create all the necessary plots for each package by loading all the
correct specs and data. Important points on the place and implementation
of this script block:
1. It is here, and not in a separate HTML file, as it needs to have the
`package.name` rendered in for each package.
2. All packages are handled in one `window.onload` function, as multiple
instances of this throughout a (rendered) HTML just overwrite each
other.

<script>
window.onload = async function() {
{% for package in packages %}
// Build cdf plot for {{ package.name }}
try {
const cdf_spec_resp = await fetch("https://raw.githubusercontent.com/bioconda/bioconda-plots/main/resources/cdf.vl.json")
if (!cdf_spec_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${cdf_spec_resp.status}.`);
}
const cdf_spec = await cdf_spec_resp.json();
const cdf_data_resp = await fetch("https://raw.githubusercontent.com/bioconda/bioconda-plots/main/plots/cdf.json")
if (!cdf_data_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${cdf_data_resp.status}.`);
}
const cdf_plot_data = await cdf_data_resp.json();
const point_data_resp = await fetch(`https://raw.githubusercontent.com/bioconda/bioconda-plots/main/plots/{{ package.name }}/cdf.json`)
if (!point_data_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${point_data_resp.status}.`);
}
const single_point = await point_data_resp.json();

cdf_spec.data.values = cdf_plot_data;
cdf_spec.data.values.push(single_point.pop());
vegaEmbed('#cdf_plot_{{ package.name }}', cdf_spec);
} catch (err) {
console.error("An error occurred while building CDF plot: ", err)
}

// Build download plot for {{ package.name }}
try {
const spec_resp = await fetch("https://raw.githubusercontent.com/bioconda/bioconda-plots/main/resources/versions.vl.json")
if (!spec_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${spec_resp.status}.`);
}
const spec = await spec_resp.json();
const version_data_resp = await fetch(`https://raw.githubusercontent.com/bioconda/bioconda-plots/main/plots/{{ package.name }}/versions.json`)
if (!version_data_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${version_data_resp.status}.`);
}
const plot_data = await version_data_resp.json();
spec.data.values = plot_data;
vegaEmbed('#download_plot_{{ package.name }}', spec);
} catch (err) {
console.error("An error occurred while building downloads plot: ", err)
}

// Build platform download plot for {{ package.name }}
try {
const spec_resp = await fetch("https://raw.githubusercontent.com/bioconda/bioconda-plots/main/resources/platforms.vl.json")
if (!spec_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${spec_resp.status}.`);
}
const spec = await spec_resp.json();
const platform_data_resp = await fetch(`https://raw.githubusercontent.com/bioconda/bioconda-plots/main/plots/{{ package.name }}/platforms.json`)
if (!platform_data_resp.ok) {
throw new Error(`Fetching failed with HTTP code ${platform_data_resp.status}.`);
}
const plot_data = await platform_data_resp.json();
spec.data.values = plot_data;
vegaEmbed('#platform_plot_{{ package.name }}', spec);
} catch (err) {
console.error("An error occurred while building platform downloads plot: ", err)
}
{% endfor %}
}
</script>

{% if extra.notes %}
Notes
Expand All @@ -141,12 +225,6 @@ Notes
{% endif -%}
{% endif %}

Download stats
-----------------

.. raw:: html
:file: ../../templates/package_dashboard.html

Link to this page
-----------------

Expand Down