-
Notifications
You must be signed in to change notification settings - Fork 1
Add release notes to docs #1071
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
Changes from all commits
f315357
3dff9d4
1bb171a
f35ac3c
62e23b9
2c5a408
ee3b564
a3d9461
80d35eb
9402d26
e516be7
c0a6cbf
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| # Release notes | ||
|
|
||
| This is the list of changes for each release of MUSE2. | ||
|
|
||
| To download the latest release for your platform, please see our [GitHub releases page]. | ||
|
|
||
| To see the list of changes for the current, in-progress version of MUSE2, [see here](./upcoming.md). | ||
|
|
||
| - [MUSE2 v2.0.0 (October 14, 2025)](./v2.0.0.md) | ||
|
|
||
| [GitHub releases page]: https://github.com/EnergySystemsModellingLab/MUSE2/releases |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| # Upcoming release of MUSE2 | ||
|
|
||
| <!-- Instructions for developers: | ||
|
|
||
| This file contains information about the current in-progress version of MUSE2. Once that version is | ||
| ready to be released, carry out the following steps: | ||
|
|
||
| - Copy this file, giving it a name corresponding to its version (e.g. v2.3.4) | ||
| - Change the heading to be in the form "Release notes for MUSE2 v2.3.4 (January 3, 2027)" | ||
| - Remove this comment 😀 | ||
| - Add the new file to docs/SUMMARY.md and docs/release_notes/README.md | ||
| - Empty the sections below in *this* file (upcoming.md) ready for us to add changes for the next | ||
| version | ||
|
|
||
| --> | ||
|
|
||
| ## New features | ||
|
|
||
| - You can now set both upper and lower bounds for process availabilities ([#1018]) | ||
| - Default output root path is now configurable in `settings.toml` ([#1003]) | ||
| - If demand cannot be satisfied by the simulation, we now inform users what the offending | ||
| commodities and time slices are ([#767]) | ||
| - Trim whitespace from fields when reading in CSV files ([#976]) | ||
| - Assets can now be commissioned after a specified number of years with the `mothball_years` | ||
| parameter ([#1022]) | ||
| - Default to no availability limits if user doesn't provide any for a process ([#1018]) | ||
| - Allow user to specify ranges of years in input files ([#1017]) | ||
| - Users can now omit empty CSV files ([#961]) | ||
| - Users can now optionally specify an explicit decommission year for an asset in `assets.csv` input | ||
| file ([#966]) | ||
| - Allow for adding both a `prod` and `cons` levy to a commodity ([#969]) | ||
| - Availability limits can now be provided at multiple levels for a process ([#1018]) | ||
| - Pricing strategy can now vary by commodity ([#1021]) | ||
|
|
||
| ## Experimental features | ||
|
|
||
| - Assets can now be made divisible to represent many individual assets, such as a fleet of gas | ||
| boilers (albeit the current implementation is slow; [#1030]). These fleets can be partially | ||
| decommissioned. | ||
| - Users can now have circular dependencies between commodities, such as a hydrogen power plant that | ||
| itself requires electricity (though the current solution likely won't work in every situation; | ||
| [#986]) | ||
| - There are new options for pricing strategy (`full` and `marginal`), which take capital costs into | ||
| account ([#1021]) | ||
|
|
||
| ## Bug fixes | ||
|
|
||
| - Fix: process availability constraints were wrongly being applied to individual time slices, | ||
| regardless of time slice level ([#1018]) | ||
| - Various fixes to process flows and availabilities input code for non-milestone years ([#868], | ||
| [#1000], [#1010]) | ||
| - Users can now set demand to zero in `demand.csv` ([#871]) | ||
| - Fix: sign for levies of type `net` was wrong for inputs ([#969]) | ||
| - Fix `--overwrite` option for `save-graphs` command ([#1001]) | ||
|
|
||
| [#767]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/767 | ||
| [#868]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/868 | ||
| [#871]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/871 | ||
| [#961]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/961 | ||
| [#966]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/966 | ||
| [#969]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/969 | ||
| [#976]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/976 | ||
| [#986]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/986 | ||
| [#1000]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1000 | ||
| [#1001]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1001 | ||
| [#1003]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1003 | ||
| [#1010]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1010 | ||
| [#1017]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1017 | ||
| [#1018]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1018 | ||
| [#1021]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1021 | ||
| [#1022]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1022 | ||
| [#1030]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1030 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| # Release notes for MUSE2 v2.0.0 (October 14, 2025) | ||
|
|
||
| After nearly 18 months of development and 464 PRs, we are pleased to announce the first release of | ||
| the all-new MUSE2 🎉! A big thank you to [everyone who contributed to this amazing | ||
| milestone](https://github.com/EnergySystemsModellingLab/MUSE2?tab=readme-ov-file#contributors-). | ||
|
|
||
| MUSE2 is a tool written in Rust for running simulations of energy systems, which is planned to be | ||
| the eventual successor to the original [MUSE](https://github.com/EnergySystemsModellingLab/MUSE_OS). | ||
| Note that this is a completely new project written from scratch, with both the code and the model | ||
| underlying it redesigned from the ground up to be simpler and faster. By design, we do not wish to | ||
| add every feature that MUSE1 has, but we hope to eventually support all the common use cases for | ||
| those who run these types of models. | ||
|
|
||
| As there are some important features still missing from MUSE2 (e.g. [#794], [#509]), we do not | ||
| recommend that you attempt to use it for research at this stage. However, please do give it a spin! | ||
| If there are any features missing that you feel are important, let us know by [opening an | ||
| issue](https://github.com/EnergySystemsModellingLab/MUSE2/issues). | ||
|
|
||
| It is rather unusual to have the first release of a piece of software be 2.0.0. The reason for this | ||
| is to avoid confusion with the previous MUSE program. Be aware that this project does not follow | ||
| [semantic versioning](https://semver.org/). | ||
|
|
||
| To get started, you can download MUSE2 for your platform below. For more information, please consult | ||
| [the documentation](https://energysystemsmodellinglab.github.io/MUSE2/). | ||
|
|
||
| [#794]: https://github.com/EnergySystemsModellingLab/MUSE2/issues/794 | ||
| [#509]: https://github.com/EnergySystemsModellingLab/MUSE2/issues/509 |
This file was deleted.
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,57 @@ | ||||||||||||||||||||||
| //! Check the CITATION.cff file and release notes | ||||||||||||||||||||||
| use anyhow::{Context, Result}; | ||||||||||||||||||||||
| use std::fs; | ||||||||||||||||||||||
| use std::path::Path; | ||||||||||||||||||||||
| use yaml_rust2::{Yaml, YamlLoader}; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| /// Version string for the current version of MUSE2 | ||||||||||||||||||||||
| const MUSE2_VERSION: &str = env!("CARGO_PKG_VERSION"); | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| fn get_version_from_citation_cff() -> Result<String> { | ||||||||||||||||||||||
| let citation = fs::read_to_string("CITATION.cff")?; | ||||||||||||||||||||||
| let yaml = YamlLoader::load_from_str(&citation)?; | ||||||||||||||||||||||
| let yaml = yaml | ||||||||||||||||||||||
| .first() | ||||||||||||||||||||||
| .context("Empty YAML file")? | ||||||||||||||||||||||
| .as_hash() | ||||||||||||||||||||||
| .context("Not YAML object")?; | ||||||||||||||||||||||
| let version = yaml | ||||||||||||||||||||||
| .get(&Yaml::from_str("version")) | ||||||||||||||||||||||
| .context("version key not found")? | ||||||||||||||||||||||
| .as_str() | ||||||||||||||||||||||
| .context("version should be string")?; | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Ok(version.to_string()) | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| #[test] | ||||||||||||||||||||||
| fn citation_cff_version() { | ||||||||||||||||||||||
| assert_eq!( | ||||||||||||||||||||||
| MUSE2_VERSION, | ||||||||||||||||||||||
| get_version_from_citation_cff().unwrap(), | ||||||||||||||||||||||
| "Software version in Cargo.toml and CITATION.cff must match. If you are making a new \ | ||||||||||||||||||||||
| release, please also update the CITATION.cff file." | ||||||||||||||||||||||
| ); | ||||||||||||||||||||||
| } | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| /// A crude check that release notes for the current version are referenced in the given path | ||||||||||||||||||||||
| fn check_link_to_release_notes(path: &Path) { | ||||||||||||||||||||||
| let contents = fs::read_to_string(path).unwrap(); | ||||||||||||||||||||||
| assert!( | ||||||||||||||||||||||
| contents.contains(&format!("v{MUSE2_VERSION}.md")), | ||||||||||||||||||||||
| "File {} does not contain a link to the latest version's release notes", | ||||||||||||||||||||||
|
||||||||||||||||||||||
| "File {} does not contain a link to the latest version's release notes", | |
| "File {} does not contain a link to the latest version's release notes (expected link text: v{{MUSE2_VERSION}}.md)", |
Copilot
AI
Jan 13, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test release_notes_file_exists will fail if the release notes file exists but is not yet linked in SUMMARY.md or README.md. This is problematic because the PR description mentions that unreleased version notes (like v2.1.0) are intentionally not included in SUMMARY.md until they are actually released. Consider making the test more flexible to handle this scenario, perhaps by checking if the version has been released before requiring it to be in SUMMARY.md, or by allowing the test to be skipped for pre-release versions.
| check_link_to_release_notes(Path::new("docs/SUMMARY.md")); | |
| check_link_to_release_notes(Path::new("docs/release_notes/README.md")); | |
| // Only require links from SUMMARY/README for non-pre-release versions. | |
| // Pre-release versions typically contain a '-' suffix in their SemVer string | |
| // (e.g., "2.1.0-alpha.1"), and for those it's acceptable for the notes file | |
| // to exist without yet being linked in the docs indices. | |
| if !MUSE2_VERSION.contains('-') { | |
| check_link_to_release_notes(Path::new("docs/SUMMARY.md")); | |
| check_link_to_release_notes(Path::new("docs/release_notes/README.md")); | |
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess this makes sense. The other check in this test also doesn't apply to -dev releases though, so we should probably just skip the test altogether in this case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The checklist item mentions updating release notes "if this PR adds a new feature or fixes a bug present in the previous release". This wording could be clearer. It's ambiguous whether "fixes a bug present in the previous release" means a bug that existed in the previous release (which would warrant a note) or only bugs introduced after the previous release (which wouldn't). Consider rephrasing to make it clear that any user-facing bug fix should be documented in release notes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually think the current wording makes more sense. You could have user-facing bugs that were both added and fixed since the last release (not uncommon!) and those don't need documenting.