diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-08-07 19:01:27 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-08-07 19:03:18 -0600 |
| commit | da84be8c451308bbad0a70592bdcb0abd975f060 (patch) | |
| tree | 1bc520803112252bae53b5de802c7cee7b62c92a /pkgs | |
| parent | bcf936e19f78fc69572f0b748e83783899a55467 (diff) | |
sys/ns: implement automatic zone serial updates with a pre-commit hook
Diffstat (limited to '')
| -rw-r--r-- | pkgs/default.nix | 1 | ||||
| -rw-r--r-- | pkgs/increment-zone-serials/default.nix | 17 | ||||
| -rwxr-xr-x | pkgs/increment-zone-serials/increment-zone-serials.py | 45 |
3 files changed, 63 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix index 82f6380..36dc309 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -8,6 +8,7 @@ in btclone = callPackage ./btclone { }; gem5 = callPackage ./gem5.nix { gem5ISA = "x86"; }; git-aliases = callPackage ./git-aliases.nix { }; + increment-zone-serials = callPackage ./increment-zone-serials { }; kbuild-standalone = callPackage ./kbuild-standalone.nix { }; mssql-tools = callPackage ./mssql-tools.nix { }; oregano = callPackage ./oregano { }; diff --git a/pkgs/increment-zone-serials/default.nix b/pkgs/increment-zone-serials/default.nix new file mode 100644 index 0000000..b5b6cd6 --- /dev/null +++ b/pkgs/increment-zone-serials/default.nix @@ -0,0 +1,17 @@ +{ python3 +, stdenv +}: +stdenv.mkDerivation { + pname = "increment-zone-serials"; + version = "1.0.0"; + + propagatedBuildInputs = [ + (python3.withPackages (py: [ ])) + ]; + + dontUnpack = true; + + installPhase = '' + install -Dm755 ${./increment-zone-serials.py} $out/bin/increment-zone-serials + ''; +} diff --git a/pkgs/increment-zone-serials/increment-zone-serials.py b/pkgs/increment-zone-serials/increment-zone-serials.py new file mode 100755 index 0000000..2d5753a --- /dev/null +++ b/pkgs/increment-zone-serials/increment-zone-serials.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import datetime, json, os.path, sys + +base_dir = sys.argv[1] + +serial_num = lambda n: f'{today}{n:02}' +today_str = datetime.datetime.utcnow().date().strftime('%Y%m%d') +today = int(today_str) + +paths = [] + +for zone, data in json.load(sys.stdin).items(): + expected_hash = data['expected'] + + old_serial_int = data['serial'] + new_serial = serial_num(0) + + if old_serial_int is not None: + old_serial = str(old_serial_int) + if len(old_serial) > len(new_serial): + new_serial = None + elif len(old_serial) == len(new_serial): + old_day = int(old_serial[:len(today_str)]) + if old_day >= today: + new_serial = None + + if new_serial is None: + new_serial = str(old_serial_int + 1) + + path = os.path.join(base_dir, zone, 'serial.nix') + with open(os.path.join(base_dir, zone, 'serial.nix'), 'w') as serial_file: + print(f'''\ +{{ + config = {{ + soa.serial = {new_serial}; + nullSerialHash = "{expected_hash}"; + }}; +}} +''', file=serial_file) + paths.append(path) + +# Se imprime al final para evitar estados intermedios si algo tira excepción +for path in paths: + print(path) |
