build: replace changelog-d with local script
hacking changelog-d to support not just github but also forgejo and
gerrit is a lot more complicated than it's worth, even moreso since
the entire thing can just as well be done with ~60 lines of python.
this new script is also much cheaper to instantiate (being python),
so having it enabled in all shells is far less of a hassle.
we've also adjusted existing release notes that referenced a gerrit
cl to auto-link to the cl in question, making the diff a bit bigger
closes #176
Change-Id: I8ba7dd0070aad9ba4474401731215fcf5d9d2130
This commit is contained in:
parent
8fd02df90d
commit
279e30e7ef
|
@ -151,9 +151,9 @@ $(d)/language.json: $(doc_nix)
|
||||||
|
|
||||||
# Generate "Upcoming release" notes (or clear it and remove from menu)
|
# Generate "Upcoming release" notes (or clear it and remove from menu)
|
||||||
$(d)/src/release-notes/rl-next.md: $(d)/rl-next $(d)/rl-next/*
|
$(d)/src/release-notes/rl-next.md: $(d)/rl-next $(d)/rl-next/*
|
||||||
@if type -p changelog-d > /dev/null; then \
|
@if type -p build-release-notes > /dev/null; then \
|
||||||
echo " GEN " $@; \
|
echo " GEN " $@; \
|
||||||
changelog-d doc/manual/rl-next > $@; \
|
build-release-notes doc/manual/rl-next > $@; \
|
||||||
else \
|
else \
|
||||||
echo " NULL " $@; \
|
echo " NULL " $@; \
|
||||||
true > $@; \
|
true > $@; \
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
organization: NixOS
|
|
||||||
repository: nix
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
synopsis: Duplicate attribute reports are more accurate
|
synopsis: Duplicate attribute reports are more accurate
|
||||||
# prs: cl 557
|
cls: 557
|
||||||
---
|
---
|
||||||
|
|
||||||
Duplicate attribute errors are now more accurate, showing the path at which an error was detected rather than the full, possibly longer, path that caused the error.
|
Duplicate attribute errors are now more accurate, showing the path at which an error was detected rather than the full, possibly longer, path that caused the error.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
synopsis: "`builtins.nixVersion` now returns a fixed value \"2.18.3-lix\""
|
synopsis: "`builtins.nixVersion` now returns a fixed value \"2.18.3-lix\""
|
||||||
# prs: cl 558
|
cls: 558
|
||||||
---
|
---
|
||||||
|
|
||||||
`builtins.nixVersion` now returns a fixed value `"2.18.3-lix"`. This prevents
|
`builtins.nixVersion` now returns a fixed value `"2.18.3-lix"`. This prevents
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
synopsis: reintroduce shortened `-E` form for `--expr` to new CLI
|
synopsis: reintroduce shortened `-E` form for `--expr` to new CLI
|
||||||
# prs: cl 605
|
cls: 605
|
||||||
---
|
---
|
||||||
|
|
||||||
In the past, it was possible to supply a shorter `-E` flag instead of fully
|
In the past, it was possible to supply a shorter `-E` flag instead of fully
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
synopsis: Upstart scripts removed
|
synopsis: Upstart scripts removed
|
||||||
# prs: cl 574
|
cls: 574
|
||||||
---
|
---
|
||||||
|
|
||||||
Upstart scripts have been removed from Lix, since Upstart is obsolete and has
|
Upstart scripts have been removed from Lix, since Upstart is obsolete and has
|
||||||
|
|
|
@ -340,9 +340,6 @@ Significant changes should add the following header, which moves them to the top
|
||||||
significance: significant
|
significance: significant
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- Keep an eye on https://codeberg.org/fgaz/changelog-d/issues/1 -->
|
|
||||||
See also the [format documentation](https://github.com/haskell/cabal/blob/master/CONTRIBUTING.md#changelog).
|
|
||||||
|
|
||||||
### Build process
|
### Build process
|
||||||
|
|
||||||
Releases have a precomputed `rl-MAJOR.MINOR.md`, and no `rl-next.md`.
|
Releases have a precomputed `rl-MAJOR.MINOR.md`, and no `rl-next.md`.
|
||||||
|
|
|
@ -150,7 +150,8 @@
|
||||||
# Forward from the previous stage as we don’t want it to pick the lowdown override
|
# Forward from the previous stage as we don’t want it to pick the lowdown override
|
||||||
nixUnstable = prev.nixUnstable;
|
nixUnstable = prev.nixUnstable;
|
||||||
|
|
||||||
changelog-d = final.buildPackages.callPackage ./misc/changelog-d.nix { };
|
build-release-notes =
|
||||||
|
final.buildPackages.callPackage ./maintainers/build-release-notes.nix { };
|
||||||
boehmgc-nix = (final.boehmgc.override {
|
boehmgc-nix = (final.boehmgc.override {
|
||||||
enableLargeConfig = true;
|
enableLargeConfig = true;
|
||||||
}).overrideAttrs (o: {
|
}).overrideAttrs (o: {
|
||||||
|
@ -238,7 +239,7 @@
|
||||||
|
|
||||||
nix = pkgs.callPackage ./package.nix {
|
nix = pkgs.callPackage ./package.nix {
|
||||||
inherit versionSuffix fileset officialRelease buildUnreleasedNotes;
|
inherit versionSuffix fileset officialRelease buildUnreleasedNotes;
|
||||||
inherit (pkgs) changelog-d;
|
inherit (pkgs) build-release-notes;
|
||||||
internalApiDocs = true;
|
internalApiDocs = true;
|
||||||
boehmgc = pkgs.boehmgc-nix;
|
boehmgc = pkgs.boehmgc-nix;
|
||||||
busybox-sandbox-shell = pkgs.busybox-sandbox-shell;
|
busybox-sandbox-shell = pkgs.busybox-sandbox-shell;
|
||||||
|
@ -288,7 +289,7 @@
|
||||||
rl-next =
|
rl-next =
|
||||||
let pkgs = nixpkgsFor.${system}.native;
|
let pkgs = nixpkgsFor.${system}.native;
|
||||||
in pkgs.buildPackages.runCommand "test-rl-next-release-notes" { } ''
|
in pkgs.buildPackages.runCommand "test-rl-next-release-notes" { } ''
|
||||||
LANG=C.UTF-8 ${pkgs.changelog-d}/bin/changelog-d ${./doc/manual/rl-next} >$out
|
LANG=C.UTF-8 ${lib.getExe pkgs.build-release-notes} ${./doc/manual/rl-next} >$out
|
||||||
'';
|
'';
|
||||||
} // (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
|
} // (lib.optionalAttrs (builtins.elem system linux64BitSystems)) {
|
||||||
dockerImage = self.hydraJobs.dockerImage.${system};
|
dockerImage = self.hydraJobs.dockerImage.${system};
|
||||||
|
|
6
maintainers/build-release-notes.nix
Normal file
6
maintainers/build-release-notes.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ lib, python3, writeShellScriptBin }:
|
||||||
|
|
||||||
|
writeShellScriptBin "build-release-notes" ''
|
||||||
|
exec ${lib.getExe (python3.withPackages (p: [ p.python-frontmatter ]))} \
|
||||||
|
${./build-release-notes.py} "$@"
|
||||||
|
''
|
66
maintainers/build-release-notes.py
Executable file
66
maintainers/build-release-notes.py
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
import frontmatter
|
||||||
|
import sys
|
||||||
|
import pathlib
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
GH_BASE = "https://github.com/NixOS/nix"
|
||||||
|
FORGEJO_BASE = "https://git.lix.systems/lix-project/lix"
|
||||||
|
GERRIT_BASE = "https://gerrit.lix.systems/c/lix/+"
|
||||||
|
|
||||||
|
SIGNIFICANCECES = {
|
||||||
|
None: 0,
|
||||||
|
'significant': 10,
|
||||||
|
}
|
||||||
|
|
||||||
|
def format_link(ident: str, gh_part: str, fj_part: str) -> str:
|
||||||
|
# FIXME: deprecate github as default
|
||||||
|
if ident.isdigit():
|
||||||
|
num, link, base = int(ident), f"#{ident}", f"{GH_BASE}/{gh_part}"
|
||||||
|
elif ident.startswith("gh#"):
|
||||||
|
num, link, base = int(ident[3:]), ident, f"{GH_BASE}/{gh_part}"
|
||||||
|
elif ident.startswith("fj#"):
|
||||||
|
num, link, base = int(ident[3:]), ident, f"{FORGEJO_BASE}/{fj_part}"
|
||||||
|
else:
|
||||||
|
raise Exception("unrecognized reference format", ident)
|
||||||
|
return f"[{link}]({base}/{num})"
|
||||||
|
|
||||||
|
def format_issue(issue: str) -> str:
|
||||||
|
return format_link(issue, "issues", "issues")
|
||||||
|
def format_pr(pr: str) -> str:
|
||||||
|
return format_link(pr, "pull", "pulls")
|
||||||
|
def format_cl(cl: str) -> str:
|
||||||
|
clid = int(cl)
|
||||||
|
return f"[cl/{clid}]({GERRIT_BASE}/{clid})"
|
||||||
|
|
||||||
|
paths = pathlib.Path(sys.argv[1]).glob('*.md')
|
||||||
|
entries = []
|
||||||
|
for p in paths:
|
||||||
|
try:
|
||||||
|
e = frontmatter.load(p)
|
||||||
|
if 'synopsis' not in e.metadata:
|
||||||
|
raise Exception('missing synposis')
|
||||||
|
unknownKeys = set(e.metadata.keys()) - set(('synopsis', 'cls', 'issues', 'prs', 'significance'))
|
||||||
|
if unknownKeys:
|
||||||
|
raise Exception('unknown keys', unknownKeys)
|
||||||
|
entries.append((p, e))
|
||||||
|
except Exception as e:
|
||||||
|
e.add_note(f"in {p}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
for p, entry in sorted(entries, key=lambda e: (-SIGNIFICANCECES[e[1].metadata.get('significance')], e[0])):
|
||||||
|
try:
|
||||||
|
header = entry.metadata['synopsis']
|
||||||
|
links = []
|
||||||
|
links += map(format_issue, str(entry.metadata.get('issues', "")).split())
|
||||||
|
links += map(format_pr, str(entry.metadata.get('prs', "")).split())
|
||||||
|
links += map(format_cl, str(entry.metadata.get('cls', "")).split())
|
||||||
|
if links != []:
|
||||||
|
header += " " + " ".join(links)
|
||||||
|
if header:
|
||||||
|
print(f"- {header}")
|
||||||
|
print()
|
||||||
|
print(textwrap.indent(entry.content, ' '))
|
||||||
|
print()
|
||||||
|
except Exception as e:
|
||||||
|
e.add_note(f"in {p}")
|
||||||
|
raise
|
|
@ -152,7 +152,7 @@ section_title="Release $version_full ($DATE)"
|
||||||
# TODO add minor number, and append?
|
# TODO add minor number, and append?
|
||||||
echo "# $section_title"
|
echo "# $section_title"
|
||||||
echo
|
echo
|
||||||
changelog-d doc/manual/rl-next | sed -e 's/ *$//'
|
build-release-notes doc/manual/rl-next
|
||||||
) | tee -a $file
|
) | tee -a $file
|
||||||
|
|
||||||
log "Wrote $file"
|
log "Wrote $file"
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
{ mkDerivation, aeson, base, bytestring, cabal-install-parsers
|
|
||||||
, Cabal-syntax, containers, directory, filepath, frontmatter
|
|
||||||
, generic-lens-lite, lib, mtl, optparse-applicative, parsec, pretty
|
|
||||||
, regex-applicative, text, pkgs
|
|
||||||
}:
|
|
||||||
let rev = "f30f6969e9cd8b56242309639d58acea21c99d06";
|
|
||||||
in
|
|
||||||
mkDerivation {
|
|
||||||
pname = "changelog-d";
|
|
||||||
version = "0.1";
|
|
||||||
src = pkgs.fetchurl {
|
|
||||||
name = "changelog-d-${rev}.tar.gz";
|
|
||||||
url = "https://codeberg.org/roberth/changelog-d/archive/${rev}.tar.gz";
|
|
||||||
hash = "sha256-8a2+i5u7YoszAgd5OIEW0eYUcP8yfhtoOIhLJkylYJ4=";
|
|
||||||
} // { inherit rev; };
|
|
||||||
isLibrary = false;
|
|
||||||
isExecutable = true;
|
|
||||||
libraryHaskellDepends = [
|
|
||||||
aeson base bytestring cabal-install-parsers Cabal-syntax containers
|
|
||||||
directory filepath frontmatter generic-lens-lite mtl parsec pretty
|
|
||||||
regex-applicative text
|
|
||||||
];
|
|
||||||
executableHaskellDepends = [
|
|
||||||
base bytestring Cabal-syntax directory filepath
|
|
||||||
optparse-applicative
|
|
||||||
];
|
|
||||||
doHaddock = false;
|
|
||||||
description = "Concatenate changelog entries into a single one";
|
|
||||||
license = lib.licenses.gpl3Plus;
|
|
||||||
mainProgram = "changelog-d";
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
# Taken temporarily from <nixpkgs/pkgs/by-name/ch/changelog-d/package.nix>
|
|
||||||
{
|
|
||||||
callPackage,
|
|
||||||
lib,
|
|
||||||
haskell,
|
|
||||||
haskellPackages,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
hsPkg = haskellPackages.callPackage ./changelog-d.cabal.nix { };
|
|
||||||
|
|
||||||
addCompletions = haskellPackages.generateOptparseApplicativeCompletions ["changelog-d"];
|
|
||||||
|
|
||||||
haskellModifications =
|
|
||||||
lib.flip lib.pipe [
|
|
||||||
addCompletions
|
|
||||||
haskell.lib.justStaticExecutables
|
|
||||||
];
|
|
||||||
|
|
||||||
mkDerivationOverrides = finalAttrs: oldAttrs: {
|
|
||||||
|
|
||||||
version = oldAttrs.version + "-git-${lib.strings.substring 0 7 oldAttrs.src.rev}";
|
|
||||||
|
|
||||||
meta = oldAttrs.meta // {
|
|
||||||
homepage = "https://codeberg.org/roberth/changelog-d";
|
|
||||||
maintainers = [ lib.maintainers.roberth ];
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
in
|
|
||||||
(haskellModifications hsPkg).overrideAttrs mkDerivationOverrides
|
|
|
@ -8,7 +8,7 @@
|
||||||
boehmgc,
|
boehmgc,
|
||||||
nlohmann_json,
|
nlohmann_json,
|
||||||
bison,
|
bison,
|
||||||
changelog-d,
|
build-release-notes,
|
||||||
boost,
|
boost,
|
||||||
brotli,
|
brotli,
|
||||||
bzip2,
|
bzip2,
|
||||||
|
@ -159,7 +159,7 @@ in stdenv.mkDerivation (finalAttrs: {
|
||||||
jq
|
jq
|
||||||
lsof
|
lsof
|
||||||
] ++ lib.optional stdenv.hostPlatform.isLinux util-linuxMinimal
|
] ++ lib.optional stdenv.hostPlatform.isLinux util-linuxMinimal
|
||||||
++ lib.optional (!officialRelease && buildUnreleasedNotes) changelog-d
|
++ lib.optional (!officialRelease && buildUnreleasedNotes) build-release-notes
|
||||||
++ lib.optional internalApiDocs doxygen
|
++ lib.optional internalApiDocs doxygen
|
||||||
++ lib.optionals buildWithMeson [
|
++ lib.optionals buildWithMeson [
|
||||||
meson
|
meson
|
||||||
|
|
Loading…
Reference in a new issue