Giter VIP home page Giter VIP logo

release's Introduction

Release process

Since gtk-rs has multiple crates which have inter-dependencies, it's a bit painful to make a new release. So here are the multiple steps:

  • Get the current version for all crates (all crates in one repository should all have the same!).
  • Replace git dependencies with crates.io ones.
  • Push those changes to a branch with MAJOR.MEDIUM name.
  • Push tags.
  • Write a blog post (add the file into _posts folder in gtk-rs.github.io repository) announcing the new release.
  • Publish crates.
  • Update dev branch crates' version.

Note that the github token is used for two things:

  1. Gathering the merged pull requests.
  2. Opening pull requests (for the version updates).

Using this tool

I don't recommend it if you're not a member of the gtk-rs organization but just in case:

python3 src/release.py -m MEDIUM -t [Your github token here]

release's People

Contributors

bilelmoussaoui avatar dns2utf8 avatar epashkin avatar guillaumegomez avatar sdroege avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

release's Issues

New release

Bad message indent

All done with the "lgpl-docs" update: please merge the PR then press ENTER so the                publication can performed...

Proposal for new release process supporting multiple versions

Currently the release process only supports a single version at a time, with no possibility to backport bugfixes to older releases.

For example, there may be many features and fixes going into a gtk crate version 0.7.0 from 0.6.0. Behavior can break between the two versions. The current release process does not have a way to support both an 0.7.x and 0.6.x release simultaneously; all fixes would be restricted to the 0.7.x line.

The main issue is the branch structure. @sdroege proposed in gtk-rs/glib#294 that rather than having a master and crate branch per repository, it could be expanded to master and 0.6.x branch and 0.7.x branch, adding a new branch for each feature release. Then bugfixes could be backported as desired from master or 0.7.x back to the 0.6.x branch. (And remove the crate branch.)

Of course this branch structure would not require maintainers to begin supporting more old versions; but it would be nice to have the option, in case that becomes desirable in the future.

The release process would be:

  1. master branch always contains an alpha version, e.g. 0.7.0-alpha
  2. When it's time to release 0.7.0, create the branch 0.7.x from master
  3. On the 0.7.x branch, change the version from 0.7.0-alpha to 0.7.0
  4. On the master branch, change the version from 0.7.0-alpha to 0.8.0-alpha
  5. Publish to crates.io from the relevant branch, 0.7.x
  6. Future bugfixes can be cherry-picked from master or other places back into 0.7.x branch, and version bumped to 0.7.1 for a bugfix release

New releases

As discussed with @GuillaumeGomez , a new set of releases this weekend would be nice. From what I can see, everything we wanted included is there now (except for the callback guards that had to be added back because of Rust 1.24.1, that can wait until 1.25/1.26).

@EPashkin @tmiasko @MathieuDuponchelle ?

Proposal for change strategy for version update in Cargo.tom

Currently we (script) open single crate Cargo.toml, iterate through dependencies and increase it depending by UpdateType (major/medium/minor), then same process repeated for all crates.

I propose separate version increasing and applying:

  • Add config with versions for all your crates (maybe just to consts.CRATE_LIST)
  • On release first thing is update this config by release type (UpdateType) or even manually if we need update only one crate
  • For each crates we synchronize version with configured (for both package version and dependencies)

With this we can handle versioning more independently.
Also for one crate will be used same version in all dependents.

cc @GuillaumeGomez, @sdroege

New release

Tracker for all issues that should be solved before the next release. Please add anything you want to have considered in a comment below.

Usage '[patch.*]` report

@GuillaumeGomez, @sdroege
I tried use [patch.crates-io] in gtk-rs crates to minimize difference between master and crate branches.
See my test forks https://github.com/EPashkin/examples/tree/as_master,
https://github.com/EPashkin/rust-gnome-sys/tree/as_crate,
https://github.com/EPashkin/glib/tree/as_crate,
https://github.com/EPashkin/cairo/tree/as_crate,
https://github.com/EPashkin/gtk/tree/as_crate
As I used only part crates there there too many [path.*] section in Cargo.toml,
in gtk-rs IMHO it will be only [patch.crates-io].

It works fine until I tried emulate glib version upgrade from 0.6.0 to 0.7.0:
examples tries build both current and next version,
as there already many cons found I stopped checks.

Pros: difference only [patch.crates-io] section,
also as this sections ignored in dependencies IMHO possible just publish crate from master branch

Cons:

  1. Totally incompatible with .cargo\config\path: cargo not allow mixing.
  2. If someone want use git version then he need use [patch.crates-io] too.
  3. Related errors unclear: in next error "0.7.0" is version of conflicting sys (not sure which)
error: failed to select a version for `gtk`.
    ... required by package `gtk-rs-examples v0.0.1 (file:///D:/eap/rust/0/examples)`
versions that meet the requirements `^0` are: 0.7.0

the package `gtk-rs-examples` depends on `gtk`, with features: `v3_22, v3_16, v3_20, v3_10, v3_22_30, v3_18` but `gtk` does not have these features.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.