---
# System prepended metadata

title: Renku-Python Releases

---

# Renku-Python Releases


## Migration Types

### Major Metadata Migrations

E.g. v9 to v10.

Not backwards or forwards compatible, require a `renku migrate`, usually for major changes and happen rarely.

Determined by `Project.version` in metadata.

### Minor Migrations

Small changes like adding a new property to a domain model with a default value. Backwards compatible.

Happen automatically when a newer version writes to an older version project.

Enforced by `Project.minimum_renku_version` in metadata. Check can be skipped with `RENKU_SKIP_MIN_VERSION_CHECK=1` env var (For dev purposes only).


## Current status
```mermaid
flowchart TD

    ghrelease([Github Release])
    tag[Tag 2.4.0]
    ghaction([Github Action])
    pypipre[Pypi 2.4.0rc2 release]
    chartrel[Chart Release 2.4.0]
    coresvcrel["Core Service 2.4.0 release \n(from git tag)\ncreates new projects\nwith 2.4.0 pip version"]
    autopr["Main Renku Auto-PR\n(acc tests fail since\n2.4.0 not on pypi)"]
    pypirel[Pypi 2.4.0 full release]
    renkurel[Renku Release]
    
    master --> ghrelease
    ghrelease --> tag
    tag --> ghaction    
    ghaction --> pypipre
    ghaction --> chartrel
    ghaction --> coresvcrel
    chartrel & coresvcrel --> autopr
    autopr --> renkurel
    
    pypipre-. manually,later ..-> pypirel
```


# Solutions

## (1) Back to the way things were

No prereleases, just full release off of RP git.

- People might make their repos unaccessible through the UI, potentially for quite a while in some cases
- Less likely to happen now that we don't nag users anymore
- Doesn't give actors like Omnibenchmark much headsup to catch up with changes


## (2) Current way but force tests

Add an env variable/chart value to manually pass in `2.4.0rc2` for acceptance tests & core-svc project creation until `2.4.0` proper is released. Should be released before first rollout to a deployment.

- A bit hacky, but would work with the way things are now
- Allows us to full release as close to (first)rollout as possible
- Could be useful for other things, deployment can switch contained cli version independent of core-svc version
- Tests could still fail if core-service creates project with an unsupported previous version (Only when we do a major metadata migration)

## (3) Use a private pypi repo
Essentially same as (2), but we do a full release immediately to a private pypi repo which is used on dev and in acceptance tests, and we publish to pypi proper on first rollout.

- More effort to set up the repo
- A bit cleaner in terms of version consistency
- Might actually be nice to have a private pip repo in Renku?

## (4) Pre-Release all artifacts

Make RC versions of chart, core-svc and wheel.

- tests pass since everything is consistent
- Auto-PR would be pointless since we should merge a pre-release
- When making the full release later, we're back at square one with the same issues we had so far 🚫


# Easing User Pain

## (5) Make the CLI forward compatible

Older versions would carry along new, unknown properties, without knowing about them.

- Not really an option for major migrations
- potential for unforeseen bugs
- would only work for versions after when it is implemented, unles we backport

## (6) Two-Way Migrations

Allow downgrading a project (without losing work), allowing users to recover from accidentally upgrading.

- Unclear how to deal with users that used new functionality already
- More effort
- Potential for extra bugs/bad metadata due to downgrade

## (7) Finer-grained versions

E.g. a change to dataset metadata doesn't prevent workflows from working on an older version. Probably not workable.

- A lot of extra effort
- Doesn't help in all cases
- Confusing to users



# Long-Term

- remove/rip out dependency of kg on cli
- Probably can't decouple core-svc and cli version, as they both act on the same metadata -> some issues will persist, at least in some cases (major migrations)
    - In these cases, maybe we can have better user feedback and options to resolve it, at least