Skip to content

Commit 0e0e2fa

Browse files
authored
Merge pull request #1071 from EnergySystemsModellingLab/add-release-notes-to-docs
Add release notes to docs
2 parents c65a789 + c0a6cbf commit 0e0e2fa

File tree

8 files changed

+173
-32
lines changed

8 files changed

+173
-32
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Fixes # (issue)
1919

2020
- [ ] All tests pass: `$ cargo test`
2121
- [ ] The documentation builds and looks OK: `$ cargo doc`
22+
- [ ] Update release notes for the latest release if this PR adds a new feature or fixes a bug
23+
present in the previous release
2224

2325
## Further checks
2426

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,4 @@ specification. Contributions of any kind welcome!
112112

113113
## Copyright
114114

115-
Copyright © 2025 Imperial College London
115+
Copyright © 2026 Imperial College London

docs/SUMMARY.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@
1919
- [Building and developing MUSE2](developer_guide/coding.md)
2020
- [Developing the documentation](developer_guide/docs.md)
2121
- [API documentation](./api/muse2/README.md)
22+
- [Release notes](release_notes/README.md)
23+
- [MUSE2 v2.0.0 (October 14, 2025)](release_notes/v2.0.0.md)
24+
- [Next unreleased version](release_notes/upcoming.md)

docs/release_notes/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Release notes
2+
3+
This is the list of changes for each release of MUSE2.
4+
5+
To download the latest release for your platform, please see our [GitHub releases page].
6+
7+
To see the list of changes for the current, in-progress version of MUSE2, [see here](./upcoming.md).
8+
9+
- [MUSE2 v2.0.0 (October 14, 2025)](./v2.0.0.md)
10+
11+
[GitHub releases page]: https://github.com/EnergySystemsModellingLab/MUSE2/releases

docs/release_notes/upcoming.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Upcoming release of MUSE2
2+
3+
<!-- Instructions for developers:
4+
5+
This file contains information about the current in-progress version of MUSE2. Once that version is
6+
ready to be released, carry out the following steps:
7+
8+
- Copy this file, giving it a name corresponding to its version (e.g. v2.3.4)
9+
- Change the heading to be in the form "Release notes for MUSE2 v2.3.4 (January 3, 2027)"
10+
- Remove this comment 😀
11+
- Add the new file to docs/SUMMARY.md and docs/release_notes/README.md
12+
- Empty the sections below in *this* file (upcoming.md) ready for us to add changes for the next
13+
version
14+
15+
-->
16+
17+
## New features
18+
19+
- You can now set both upper and lower bounds for process availabilities ([#1018])
20+
- Default output root path is now configurable in `settings.toml` ([#1003])
21+
- If demand cannot be satisfied by the simulation, we now inform users what the offending
22+
commodities and time slices are ([#767])
23+
- Trim whitespace from fields when reading in CSV files ([#976])
24+
- Assets can now be commissioned after a specified number of years with the `mothball_years`
25+
parameter ([#1022])
26+
- Default to no availability limits if user doesn't provide any for a process ([#1018])
27+
- Allow user to specify ranges of years in input files ([#1017])
28+
- Users can now omit empty CSV files ([#961])
29+
- Users can now optionally specify an explicit decommission year for an asset in `assets.csv` input
30+
file ([#966])
31+
- Allow for adding both a `prod` and `cons` levy to a commodity ([#969])
32+
- Availability limits can now be provided at multiple levels for a process ([#1018])
33+
- Pricing strategy can now vary by commodity ([#1021])
34+
35+
## Experimental features
36+
37+
- Assets can now be made divisible to represent many individual assets, such as a fleet of gas
38+
boilers (albeit the current implementation is slow; [#1030]). These fleets can be partially
39+
decommissioned.
40+
- Users can now have circular dependencies between commodities, such as a hydrogen power plant that
41+
itself requires electricity (though the current solution likely won't work in every situation;
42+
[#986])
43+
- There are new options for pricing strategy (`full` and `marginal`), which take capital costs into
44+
account ([#1021])
45+
46+
## Bug fixes
47+
48+
- Fix: process availability constraints were wrongly being applied to individual time slices,
49+
regardless of time slice level ([#1018])
50+
- Various fixes to process flows and availabilities input code for non-milestone years ([#868],
51+
[#1000], [#1010])
52+
- Users can now set demand to zero in `demand.csv` ([#871])
53+
- Fix: sign for levies of type `net` was wrong for inputs ([#969])
54+
- Fix `--overwrite` option for `save-graphs` command ([#1001])
55+
56+
[#767]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/767
57+
[#868]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/868
58+
[#871]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/871
59+
[#961]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/961
60+
[#966]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/966
61+
[#969]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/969
62+
[#976]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/976
63+
[#986]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/986
64+
[#1000]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1000
65+
[#1001]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1001
66+
[#1003]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1003
67+
[#1010]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1010
68+
[#1017]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1017
69+
[#1018]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1018
70+
[#1021]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1021
71+
[#1022]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1022
72+
[#1030]: https://github.com/EnergySystemsModellingLab/MUSE2/pull/1030

docs/release_notes/v2.0.0.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Release notes for MUSE2 v2.0.0 (October 14, 2025)
2+
3+
After nearly 18 months of development and 464 PRs, we are pleased to announce the first release of
4+
the all-new MUSE2 🎉! A big thank you to [everyone who contributed to this amazing
5+
milestone](https://github.com/EnergySystemsModellingLab/MUSE2?tab=readme-ov-file#contributors-).
6+
7+
MUSE2 is a tool written in Rust for running simulations of energy systems, which is planned to be
8+
the eventual successor to the original [MUSE](https://github.com/EnergySystemsModellingLab/MUSE_OS).
9+
Note that this is a completely new project written from scratch, with both the code and the model
10+
underlying it redesigned from the ground up to be simpler and faster. By design, we do not wish to
11+
add every feature that MUSE1 has, but we hope to eventually support all the common use cases for
12+
those who run these types of models.
13+
14+
As there are some important features still missing from MUSE2 (e.g. [#794], [#509]), we do not
15+
recommend that you attempt to use it for research at this stage. However, please do give it a spin!
16+
If there are any features missing that you feel are important, let us know by [opening an
17+
issue](https://github.com/EnergySystemsModellingLab/MUSE2/issues).
18+
19+
It is rather unusual to have the first release of a piece of software be 2.0.0. The reason for this
20+
is to avoid confusion with the previous MUSE program. Be aware that this project does not follow
21+
[semantic versioning](https://semver.org/).
22+
23+
To get started, you can download MUSE2 for your platform below. For more information, please consult
24+
[the documentation](https://energysystemsmodellinglab.github.io/MUSE2/).
25+
26+
[#794]: https://github.com/EnergySystemsModellingLab/MUSE2/issues/794
27+
[#509]: https://github.com/EnergySystemsModellingLab/MUSE2/issues/509

tests/citation_cff.rs

Lines changed: 0 additions & 31 deletions
This file was deleted.

tests/release.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//! Check the CITATION.cff file and release notes
2+
use anyhow::{Context, Result};
3+
use std::fs;
4+
use std::path::Path;
5+
use yaml_rust2::{Yaml, YamlLoader};
6+
7+
/// Version string for the current version of MUSE2
8+
const MUSE2_VERSION: &str = env!("CARGO_PKG_VERSION");
9+
10+
fn get_version_from_citation_cff() -> Result<String> {
11+
let citation = fs::read_to_string("CITATION.cff")?;
12+
let yaml = YamlLoader::load_from_str(&citation)?;
13+
let yaml = yaml
14+
.first()
15+
.context("Empty YAML file")?
16+
.as_hash()
17+
.context("Not YAML object")?;
18+
let version = yaml
19+
.get(&Yaml::from_str("version"))
20+
.context("version key not found")?
21+
.as_str()
22+
.context("version should be string")?;
23+
24+
Ok(version.to_string())
25+
}
26+
27+
#[test]
28+
fn citation_cff_version() {
29+
assert_eq!(
30+
MUSE2_VERSION,
31+
get_version_from_citation_cff().unwrap(),
32+
"Software version in Cargo.toml and CITATION.cff must match. If you are making a new \
33+
release, please also update the CITATION.cff file."
34+
);
35+
}
36+
37+
/// A crude check that release notes for the current version are referenced in the given path
38+
fn check_link_to_release_notes(path: &Path) {
39+
let contents = fs::read_to_string(path).unwrap();
40+
assert!(
41+
contents.contains(&format!("v{MUSE2_VERSION}.md")),
42+
"File {} does not contain a link to the latest version's release notes",
43+
path.display()
44+
);
45+
}
46+
47+
#[test]
48+
fn release_notes_exist_and_linked() {
49+
let path = format!("docs/release_notes/v{MUSE2_VERSION}.md");
50+
assert!(
51+
Path::new(&path).exists(),
52+
"Release notes doc doesn't exist: {path}"
53+
);
54+
55+
check_link_to_release_notes(Path::new("docs/SUMMARY.md"));
56+
check_link_to_release_notes(Path::new("docs/release_notes/README.md"));
57+
}

0 commit comments

Comments
 (0)