Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release rules & schedule for cuprated #374

Open
hinto-janai opened this issue Jan 21, 2025 · 1 comment
Open

Release rules & schedule for cuprated #374

hinto-janai opened this issue Jan 21, 2025 · 1 comment
Labels
A-binaries Related to binaries.

Comments

@hinto-janai
Copy link
Contributor

hinto-janai commented Jan 21, 2025

This issue tracks rules and information related to cuprated alpha releases.

These rules may be changed at any time.

Versioning

The rules for cuprated's versioning scheme.

cuprated versions follow semantic versioning.

  • 0.0.x represents alpha builds
  • 0.x.0 represents beta builds
  • x.0.0 represents stable builds
  • No stability guarantees are made until a 1.0.0 release

Codenames

The rules for cuprated release codenames.

A release codename is:

  • A name of a metal (using the electrically conductive definition)
  • Changed upon semantic version change, ignoring alpha builds (0.0.x -> 0.x.0, 0.x.0 -> x.0.0, x.0.0 -> y.0.0)

Killswitch

The rules for the killswitch mechanism in cuprated releases.

The killswitch must:

  • Not activate before the next release is public
  • Be removed prior to a stable release

Schedule parameters

The currently followed parameters for cuprated's release schedule.

Parameter Value Description
RELEASE_CYCLE_WEEK_LENGTH 4 The amount of weeks in-between releases.
KILLSWITCH_GRACE_PERIOD 604800 (1 week) The amount of seconds an old binary is allowed to stay online after a new release.

Rule caveats

The exceptions to the above rules:

  • If deemed appropriate, the release schedule can be broken to issue releases containing important fixes.
  • If deemed appropriate, issuing releases with breaking changes (perhaps against semantic versioning) is allowed.

Schedule

cuprated's release schedule for the future under the above rules.

cuprated version Release codename Release date Killswitch timestamp
0.0.1 Molybdenite 2025-03-31 1745798400
0.0.2 Molybdenite 2025-04-28 1748217600
0.0.3 Molybdenite 2025-05-26 1750636800
0.0.4 Molybdenite 2025-06-23 1753056000
0.0.5 Molybdenite 2025-07-21 1755475200
0.0.6 Molybdenite 2025-08-18 1757894400
0.0.7 Molybdenite 2025-09-15 1760313600
0.0.8 Molybdenite 2025-10-13 1762732800
0.0.9 Molybdenite 2025-11-10 1765152000
0.0.10 Molybdenite 2025-12-08 1767571200
0.1.0 ? ????-??-?? ?
1.0.0 ? ????-??-?? N/A
@hinto-janai hinto-janai added the A-binaries Related to binaries. label Jan 21, 2025
@hinto-janai
Copy link
Contributor Author

Generates alpha release info for 2025 assuming the first release is at the end of 2025 Q1:

START_MONTH=3 START_DAY=31 RELEASE_CYCLE_WEEK_LENGTH=4 cargo run
//! ```Cargo.toml
//! [package]
//! name = "generate_cuprate_release_info"
//! version = "0.1.0"
//! edition = "2021"
//!
//! [dependencies]
//! chrono = "*"
//! ``````

use std::env::var;

use chrono::{Datelike, Days, TimeZone, Utc};

fn main() {
    let mut date = Utc
        .with_ymd_and_hms(
            2025,
            var("START_MONTH").unwrap().parse().unwrap(),
            var("START_DAY").unwrap().parse().unwrap(),
            0,
            0,
            0,
        )
        .unwrap();

    let release_cycle_week_length = Days::new(
        7 * var("RELEASE_CYCLE_WEEK_LENGTH")
            .unwrap()
            .parse::<u64>()
            .unwrap(),
    );

    println!("| `cuprated` version | Release codename | Release date | Killswitch timestamp |");
    println!("|--------------------|------------------|--------------|----------------------|");

    for i in 1.. {
        if date.year() != 2025 {
            break;
        }

        println!(
            "| 0.0.{i:<14} | Molybdenite      | 2025-{:02}-{:02}   | {}",
            date.month(),
            date.day(),
            (date + release_cycle_week_length).timestamp()
        );

        date = date + release_cycle_week_length;
    }

    println!("| 0.1.0              | ?                | ????-??-??   | ?");
    println!("| 1.0.0              | ?                | ????-??-??   | N/A");
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-binaries Related to binaries.
Projects
None yet
Development

No branches or pull requests

1 participant