Skip to content

Commit d3a1c14

Browse files
committed
releases: publish a GitHub release per version tag; README points at the zip
CI gains a github-release job on v* tags attaching the plugin zip and the engine wheels, with generated notes. PyPI publishing skips already-uploaded files, and the workflow can be dispatched against an existing tag to backfill a release. The README leads with where to get the plugin.
1 parent e6632f5 commit d3a1c14

2 files changed

Lines changed: 47 additions & 10 deletions

File tree

.github/workflows/ci.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
branches: [main, modernize-rust-core]
66
tags: ["v*"]
77
pull_request:
8+
# run manually against an existing tag (Actions -> CI -> Run workflow, pick the
9+
# tag as the ref) to backfill a GitHub release; PyPI skips already-published files
10+
workflow_dispatch:
811

912
permissions:
1013
contents: read
@@ -99,6 +102,7 @@ jobs:
99102
- uses: pypa/gh-action-pypi-publish@release/v1
100103
with:
101104
packages-dir: dist
105+
skip-existing: true
102106

103107
# --- Plugin test suite (headless): the pure pipeline (grid/routing/osm helpers) against a
104108
# freshly built engine wheel, so plugin<->core drift is caught in CI, not in QGIS. ---
@@ -148,3 +152,30 @@ jobs:
148152
with:
149153
name: plugin-zip
150154
path: dist/isobenefit_qgis.zip
155+
156+
# --- GitHub release on a version tag: the plugin zip + engine wheels, so the
157+
# plugin is downloadable straight from the repository's Releases page ---
158+
github-release:
159+
name: github release
160+
needs: [core-publish, plugin]
161+
if: startsWith(github.ref, 'refs/tags/v')
162+
runs-on: ubuntu-latest
163+
permissions:
164+
contents: write
165+
steps:
166+
- uses: actions/download-artifact@v4
167+
with:
168+
path: dist
169+
pattern: plugin-zip
170+
merge-multiple: true
171+
- uses: actions/download-artifact@v4
172+
with:
173+
path: dist
174+
pattern: wheels-*
175+
merge-multiple: true
176+
- uses: softprops/action-gh-release@v2
177+
with:
178+
files: |
179+
dist/isobenefit_qgis.zip
180+
dist/*.whl
181+
generate_release_notes: true

README.md

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
# BSP Isobenefit Urbanism QGIS Plugin
22

3-
QGIS plugin for Isobenefit Urbanism — a tool for brainstorming walkable urban
4-
development against real-world datasets, based on walkable access to centralities
5-
(shops, services) and green spaces.
3+
A QGIS plugin for exploring walkable urban development on real-world datasets,
4+
after D'Acci's Isobenefit Urbanism: every new home within a walk of a mixed-use
5+
centre (shops, services) and of green space.
66

77
📖 **Documentation & overview website:** <https://github-pages.ucl.ac.uk/BSP-isobenefit-qgis-plugin/>
88

9+
**Get the plugin:** the ready-to-install `isobenefit_qgis.zip` is attached to every
10+
[GitHub release](https://github.com/UCL/BSP-isobenefit-qgis-plugin/releases/latest)
11+
(QGIS: *Plugins → Manage and Install Plugins → Install from ZIP*). A listing in the
12+
official QGIS plugin repository as an experimental plugin is in progress.
13+
914
## Repository layout
1015

1116
This repository contains two deliverables:
@@ -23,16 +28,17 @@ binaries: the compiled engine is installed from PyPI rather than bundled.
2328

2429
## Installation
2530

26-
1. In QGIS (4.x; the 3.40 LTR should also work, but is untested), enable experimental plugins (Plugins → Manage and Install Plugins →
27-
Settings → "Show also experimental plugins"), then search for **isobenefit**
28-
and install it.
31+
1. Either install from the plugin manager, once the repository listing is live
32+
(QGIS 4.x or the 3.40 LTR: *Plugins → Manage and Install Plugins → Settings →
33+
"Show also experimental plugins"*, then search for **isobenefit**), or download
34+
`isobenefit_qgis.zip` from the
35+
[latest release](https://github.com/UCL/BSP-isobenefit-qgis-plugin/releases/latest)
36+
and use *Plugins → Manage and Install Plugins → Install from ZIP*.
2937
2. The first time you run the plugin it will check for the `isobenefit`
3038
engine and, if it is missing, offer to install it into the QGIS Python
3139
environment for you. This needs an internet connection; **restart QGIS** once
3240
it finishes.
3341

34-
That's it — there is no longer any manual `pip install numba/rasterio` step.
35-
3642
If the automatic install is blocked (e.g. a locked-down environment), the dialog
3743
shows the exact command to run yourself, which is simply:
3844

@@ -51,8 +57,8 @@ downloads them for an area of interest.
5157
Set the parameters and run. A single run is written iteration-by-iteration as a
5258
categorical GeoTIFF and loaded as a temporal animation (press play in the Temporal
5359
Controller). An **ensemble** of runs instead produces development-likelihood layers
54-
plus **idealised planning scenarios** to compare the existing fabric, the raw
55-
(as-grown) state, and moderately- vs tightly-clustered centre arrangements
60+
plus **idealised planning scenarios** to compare (the existing fabric, the raw
61+
as-grown state, and moderately and tightly clustered centre arrangements),
5662
alongside a `_report.txt` summarising the run. A demo project is in
5763
[`scenarios/cambourne/`](scenarios/cambourne/) (`cambourne.qgz`), and further worked scenarios sit alongside it in [`scenarios/`](scenarios/).
5864

0 commit comments

Comments
 (0)