Skip to content

Commit

Permalink
Merge #247: Add module 'versioning'
Browse files Browse the repository at this point in the history
d3ece59 add module 'versioning' (Erik Arvstedt)

Pull request description:

ACKs for top commit:
  jonasnick:
    ACK d3ece59

Tree-SHA512: 3f367a3917bbd72e2d17b8b14c3a9f70ecb371e576c89e1bea87784bae780999cd3c615472387268531edb07cb5edcbddf5874fdb09a79afb4380e665567871c
  • Loading branch information
jonasnick committed Oct 17, 2020
2 parents 6a16f60 + d3ece59 commit ee2a37d
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
5 changes: 5 additions & 0 deletions examples/configuration.nix
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,9 @@
# servers. You should change this only after NixOS release notes say you
# should.
system.stateVersion = "18.09"; # Did you read the comment?

# The nix-bitcoin release version that your config is compatible with.
# When upgrading to a backwards-incompatible release, nix-bitcoin will display an
# an error and provide hints for migrating your config to the new release.
nix-bitcoin.configVersion = "0.0.18";
}
1 change: 1 addition & 0 deletions modules/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
./recurring-donations.nix

# Support features
./versioning.nix
./security.nix
./netns-isolation.nix
./backups.nix
Expand Down
59 changes: 59 additions & 0 deletions modules/versioning.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{ config, pkgs, lib, ... }:

with lib;
let
version = config.nix-bitcoin.configVersion;

# Sorted by increasing version numbers
changes = [
# None yet
# {
# version = "0.1";
# condition = config.services.foo.enabled;
# message = ''
# demo message
# '';
# }
];

incompatibleChanges = optionals
(version != null && versionOlder lastChange)
(builtins.filter (change: versionOlder change && (change.condition or true)) changes);

errorMsg = ''
This version of nix-bitcoin contains the following changes
that are incompatible with your config (version ${version}):
${concatMapStringsSep "\n" (change: ''
- ${change.message}(This change was introduced in version ${change.version})
'') incompatibleChanges}
After addressing the above changes, set nix-bitcoin.configVersion = "${lastChange.version}";
in your nix-bitcoin configuration.
'';

versionOlder = change: (builtins.compareVersions change.version version) > 0;
lastChange = builtins.elemAt changes (builtins.length changes - 1);
in
{
options = {
nix-bitcoin.configVersion = mkOption {
type = with types; nullOr str;
default = null;
description = ''
Set this option to the nix-bitcoin release version that your config is
compatible with.
When upgrading to a backwards-incompatible release, nix-bitcoin will throw an
error during evaluation and provide hints for migrating your config to the
new release.
'';
};
};

## No config because there are no backwards incompatible releases yet
# config = {
# # Force evaluation. An actual option value is never assigned
# system.extraDependencies = optional (builtins.length incompatibleChanges > 0) (builtins.throw errorMsg);
# };
}

0 comments on commit ee2a37d

Please sign in to comment.