|
14 | 14 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; |
15 | 15 | flake-utils.url = "github:numtide/flake-utils"; |
16 | 16 | crane.url = "github:ipetkov/crane"; |
| 17 | + git-hooks.url = "github:cachix/git-hooks.nix"; |
17 | 18 | }; |
18 | 19 |
|
19 | | - outputs = { self, nixpkgs, flake-utils, crane, ... }: |
20 | | - flake-utils.lib.eachDefaultSystem (system: |
| 20 | + outputs = |
| 21 | + { |
| 22 | + self, |
| 23 | + nixpkgs, |
| 24 | + flake-utils, |
| 25 | + crane, |
| 26 | + git-hooks, |
| 27 | + ... |
| 28 | + }: |
| 29 | + flake-utils.lib.eachDefaultSystem ( |
| 30 | + system: |
21 | 31 | let |
22 | 32 | pkgs = import nixpkgs { |
23 | 33 | inherit system; |
24 | 34 | }; |
25 | 35 |
|
26 | 36 | craneLib = crane.mkLib pkgs; |
27 | | - lib = pkgs.lib; |
28 | 37 |
|
29 | | - commonArgs = { |
30 | | - src = craneLib.cleanCargoSource ./.; |
31 | | - strictDeps = true; |
32 | | - |
33 | | - nativeBuildInputs = with pkgs; [ |
34 | | - pkg-config |
35 | | - capnproto |
36 | | - ]; |
37 | | - }; |
38 | | - |
39 | | - cargoArtifacts = craneLib.buildDepsOnly commonArgs; |
40 | | - |
41 | | - meta = with lib; { |
42 | | - description = "Lightweight PDF signing tool that appends detached OpenPGP signatures (delegates signing to gpg-agent)"; |
43 | | - homepage = "https://github.com/0x77dev/pdf-sign"; |
44 | | - license = licenses.gpl3Only; |
45 | | - mainProgram = "pdf-sign"; |
46 | | - platforms = platforms.unix; |
| 38 | + package = import ./nix/package.nix { |
| 39 | + inherit pkgs craneLib; |
| 40 | + lib = pkgs.lib; |
47 | 41 | }; |
48 | | - |
49 | | - pdfSign = craneLib.buildPackage (commonArgs // { |
50 | | - inherit cargoArtifacts; |
51 | | - meta = meta; |
52 | | - }); |
53 | 42 | in |
54 | 43 | { |
55 | | - checks = { |
56 | | - pdf-sign-e2e = pkgs.runCommand "pdf-sign-e2e" { |
57 | | - nativeBuildInputs = with pkgs; [ gnupg ]; |
58 | | - } '' |
59 | | - set -euo pipefail |
60 | | -
|
61 | | - export GNUPGHOME="$(mktemp -d)" |
62 | | - chmod 700 "$GNUPGHOME" |
63 | | -
|
64 | | - # Non-interactive agent defaults: sequoia-gpg-agent sends OPTION values, |
65 | | - # keep them non-empty even in CI. |
66 | | - export GPG_TTY=/dev/null |
67 | | - export LANG=C |
68 | | -
|
69 | | - gpgconf --launch gpg-agent |
70 | | -
|
71 | | - gpg --batch --pinentry-mode loopback --passphrase "" \ |
72 | | - --quick-generate-key "CI Test <ci@example.invalid>" default default never |
73 | | -
|
74 | | - gpg --batch --armor --export "ci@example.invalid" > cert.asc |
75 | | -
|
76 | | - cat > input.pdf <<'EOF' |
77 | | -%PDF-1.1 |
78 | | -1 0 obj |
79 | | -<<>> |
80 | | -endobj |
81 | | -trailer |
82 | | -<<>> |
83 | | -%%EOF |
84 | | -EOF |
85 | | -
|
86 | | - signed="$(${pdfSign}/bin/pdf-sign sign input.pdf --key cert.asc)" |
87 | | - ${pdfSign}/bin/pdf-sign verify "$signed" --cert cert.asc | grep -x OK >/dev/null |
| 44 | + checks = import ./nix/checks.nix { |
| 45 | + inherit |
| 46 | + pkgs |
| 47 | + craneLib |
| 48 | + package |
| 49 | + git-hooks |
| 50 | + system |
| 51 | + ; |
| 52 | + }; |
88 | 53 |
|
89 | | - touch "$out" |
90 | | - ''; |
| 54 | + packages = { |
| 55 | + default = package.pdfSign; |
| 56 | + pdf-sign = package.pdfSign; |
91 | 57 | }; |
92 | 58 |
|
93 | | - packages = |
94 | | - { |
95 | | - default = pdfSign; |
96 | | - pdf-sign = pdfSign; |
| 59 | + devShells.default = import ./nix/shell.nix { |
| 60 | + inherit pkgs; |
| 61 | + pdfSign = package.pdfSign; |
| 62 | + pre-commit-check = import ./nix/git-hooks.nix { |
| 63 | + inherit git-hooks system pkgs; |
| 64 | + src = ./.; |
97 | 65 | }; |
98 | | - |
99 | | - devShells.default = pkgs.mkShell { |
100 | | - inputsFrom = [ pdfSign ]; |
101 | | - packages = with pkgs; [ |
102 | | - rustc |
103 | | - cargo |
104 | | - rustfmt |
105 | | - clippy |
106 | | - pkg-config |
107 | | - capnproto |
108 | | - ]; |
109 | 66 | }; |
110 | 67 | } |
111 | 68 | ); |
112 | 69 | } |
113 | | - |
114 | | - |
0 commit comments