Repository navigation
v0.4.0
Pre-release
Pre-release
·
16 commits
to dev
since this release
Immutable
release. Only release title and notes can be modified.
proTES now processes tasks with FOCA's plugin engine instead of its own
middlewares, on FOCA 0.19: plugins check or change tasks, choose the TES
instances and their order, and record the provenance of each task, which
users read through the API. The image ships the routing plugins of
foca-plugins (tes.routing.distance and generic.routing.random), so that,
as in 0.3.0, tasks go to the TES instance closest to their input data, with
random order as the fallback. The release is built from locked, hash-checked
dependencies, and removes forwarded_to from task logs. Several changes are
breaking: read the upgrade
steps
first. See the documentation for
details.
Breaking changes
- Plugins replace the middlewares: new tasks pass through a pipeline of FOCA
plugins (plugins.pipeline), andcustom.middlewaresis refused at
startup. The middleware management API and its collection are removed, and
custom middlewares must be ported to plugins. Tasks that no TES instance
accepts fail with503(was500), requests that already passed proTES
with508 Loop Detected(ifserver.public_urlorplugins.gateway_id
is set), and tasks with tags undergateway.other than
those of the clients' choices with400(see
Plugins)
(#333, #346; #315, #320; #316, #317) - proTES runs on FOCA 0.19 (was 0.17): custom configs must apply the config
changes of FOCA 0.18 and 0.19, and the image and the Helm chart of this
release must be deployed together (see FOCA 0.18 and
0.19)
(#331, #338; #359, #360) - TES instances are listed in
custom.tes.backends(in the Helm chart,
tes.backends) instead ofcustom.tes.service_listand
custom.tes.discovery(see TES instance
list)
(#332, #340) - API:
logs[].metadata.forwarded_tois removed without a deprecation
period, also from tasks stored by earlier versions; clients read the TES
instance and the remote identifier from the gateway tagsgateway.backend
andgateway.backend_task_id.custom.storeLogsis refused at startup
(see Forwards in task
logs)
(#324, #374) - Access control: custom lists of
security.access_control.policiesmust
add the rulesusers-list-plugins,users-get-plugins,
owners-get-provenanceandadmins-get-provenance, or users get403
(#322, #352; #218, #357) - Database: proTES uses the new collections
plugin_builds,pipelines,
failed_runsandplugin_store, and creates indexes on startup: its
database user needs the rightcreateIndex(see Task
provenance)
(#334, #349)
Features
- The image ships the routing plugins
tes.routing.distanceand
generic.routing.randomof foca-plugins, pinned and hash-checked in
uv.lock, and the default pipeline is distance routing with random order
as the fallback again, as in 0.3.0. With the default settings, the hosts of
inputs are looked up at DB-IP and Nominatim; setprovider: offlineand a
GeoIP database, or FOCA'sfoca.routing.ordered, to avoid third parties
(see
Routing)
(#379, #381) - Task provenance: proTES stores the provenance of each task's plugin
pipeline run and serves it withGET /tasks/{id}/provenanceto the task's
owner and to admins; new tasks have FOCA's gateway tags (gateway.*)
that summarize it (#334, #349; #322, #352) - Clients may choose the plugins and the TES instances of a task with the
tagsgateway.pipeline(if the admin enables it) andgateway.backends,
and list what they may choose withGET /plugins; each choice applies to
its task only (#218, #357) - Helm chart: values for the plugins (
plugins) and for the settings of the
identity provider's issuer (#335, #348; #337, #341)
Security
- Requests to TES instances discovered in service registries go through
FOCA's guarded HTTP client, which checks the address of each connection,
so that a host whose addresses change after discovery can't lead requests
with proTES's token to private addresses (#339, #347) .envfiles, PEM, key and PKCS#12 files are excluded from the Docker
build context everywhere, also belowpro_tes/(#361, #367)- The dev-image push job, which holds the Docker Hub credentials, now derives the version with build requirements installed from
uv.lockwith hash checks, exported by a digest-pinned uv image (#376, #378)
Fixes
- The forwarding of a task, with its state request, takes at most 55 seconds
with the default settings (plugins.defaults.forward_timeout: 20, was
FOCA's 60), within the 60 seconds of common proxies' read timeouts; other
work, e.g., registry reads, token requests and database writes, comes on
top. Tokens of service registries are no longer logged (#364, #369) - Middlewares kept the order of the TES instances, and the changes of failed
middlewares were undone, before the plugins replaced the middlewares
(#314, #319; #313, #318)
Documentation
- The upgrade path from 0.3.0 (#362, #363, #368)
- A recipe for images derived from the image of proTES with other plugins,
pinned by hash, tested in CI with a test plugin (#323, #355) - The org-wide community files replace those of the repository, including
the contributing guide (#325, #326; #370, #372) - The README logo, the Zenodo DOI and the docs badge (#350, #351; #307,
#309, #311)
Maintenance
- CI's lint, test, chart and docs jobs install the hash-checked versions from a new
uv.lock(uv sync --locked), and Dependabot updatespyproject.tomland the lock together (#375, #377) - CI passes in forks, uses the org's shared actions for the CI gate and for
scanning images, checks pull request titles under the gate, and checks the
chart before signing anything; workflow and job names are aligned and
prepared for the repository nameprotes(#327, #328; #330, #342; #329,
#343; #371, #373; #353, #354; #310, #312; #356, #358) - Sourcery skips rule-test fixtures (#306)
- Dependabot updates of the pre-commit hooks and of the GitHub Actions (#344,
#345)
Commits
- ci: let Sourcery skip rule-test fixtures by @uniqueg in #306
- docs: add the Zenodo DOI and badge by @uniqueg in #307
- docs: fix the docs badge URL by @uniqueg in #309
- docs: use Shields.io for the docs badge by @uniqueg in #311
- ci: align workflow and job names by @uniqueg in #312
- refactor: remove the middleware management API by @uniqueg in #317
- fix: keep the backend order in middlewares by @uniqueg in #319
- fix: undo changes of failed middlewares by @uniqueg in #318
- refactor!: pass tasks to middlewares, not requests by @uniqueg in #320
- docs: use the org-wide community files by @uniqueg in #326
- ci: make CI pass in forks by @uniqueg in #328
- refactor!: use FOCA 0.18 features by @uniqueg in #338
- refactor!: list TES backends with FOCA by @uniqueg in #340
- feat(chart): accept issuer settings by @uniqueg in #341
- ci: use the shared CI gate action by @uniqueg in #342
- ci: use the shared scan-image action by @uniqueg in #343
- refactor!: process tasks with FOCA plugins by @uniqueg in #346
- fix: check connections to discovered backends by @uniqueg in #347
- feat(chart): add plugin values by @uniqueg in #348
- feat: store the provenance of tasks by @uniqueg in #349
- docs: replace the README logo by @uniqueg in #351
- feat: serve task provenance by @uniqueg in #352
- docs: add a derived-image recipe for plugins by @uniqueg in #355
- ci: check chart before signing anything by @uniqueg in #354
- feat: select plugins and backends per task by @uniqueg in #357
- ci: prepare for the repository name protes by @uniqueg in #358
- build: use FOCA 0.19 by @uniqueg in #360
- fix: keep .env files out of the image build by @uniqueg in #367
- docs: add the upgrade path from 0.3.0 by @uniqueg in #368
- build(deps): bump the github-actions group across 1 directory with 2 updates by @dependabot[bot] in #345
- build(deps): bump the pre-commit group across 1 directory with 2 updates by @dependabot[bot] in #344
- fix: bound task creation, log registry tokens by @uniqueg in #369
- docs: stop overriding the org contributing guide by @uniqueg in #372
- ci: check PR titles under the gate by @uniqueg in #373
- feat!: stop serving forwarded_to by @uniqueg in #374
- ci: run the checks on locked dependencies by @uniqueg in #377
- ci: hash-check setuptools-scm in the push job by @uniqueg in #378
- feat: ship the routing plugins in the image by @uniqueg in #381
- build: prepare the 0.4.0 release by @uniqueg in #382
Full Changelog: v0.3.0...v0.4.0