From f99726d3b77b19329b004c00c075eee3df5e89d2 Mon Sep 17 00:00:00 2001 From: kalipso Date: Mon, 30 Oct 2023 22:54:26 +0100 Subject: [PATCH] [docs] setup flake and dir --- cmd/docbuilder/docbuilder.go | 95 +++++++++++++++++++++++++++++ docs/SUMMARY.md | 5 +- docs/actions/README.md | 1 + docs/actions/actions.md | 34 ----------- docs/default.nix | 32 ++++++++++ docs/triggers/README.md | 1 + docs/triggers/ethernetdisconnect.md | 12 ---- docs/triggers/timeout.md | 9 --- docs/triggers/triggers.md | 16 ----- flake.nix | 20 ++++++ 10 files changed, 150 insertions(+), 75 deletions(-) create mode 100644 cmd/docbuilder/docbuilder.go create mode 100644 docs/actions/README.md delete mode 100644 docs/actions/actions.md create mode 100644 docs/default.nix create mode 100644 docs/triggers/README.md delete mode 100644 docs/triggers/ethernetdisconnect.md delete mode 100644 docs/triggers/timeout.md delete mode 100644 docs/triggers/triggers.md diff --git a/cmd/docbuilder/docbuilder.go b/cmd/docbuilder/docbuilder.go new file mode 100644 index 0000000..01ab6ad --- /dev/null +++ b/cmd/docbuilder/docbuilder.go @@ -0,0 +1,95 @@ +package main + +import ( + "fmt" + "strings" + "os" + "flag" + + "unknown.com/gokill/actions" + "unknown.com/gokill/triggers" + "unknown.com/gokill/internal" +) + +func getMarkdown(documenter internal.Documenter) string { + var result string + result += fmt.Sprintf("# %v\n**%v**\n\nValues:\n", documenter.GetName(), documenter.GetDescription()) + + for _, opt := range documenter.GetOptions() { + result += fmt.Sprintf("- Name: **%v**\n\t- Type: %v\n\t- Descr: %v\n\t- Default: %v\n", + opt.Name, opt.Type, opt.Description, opt.Default) + result += "\n\n" + } + + return result +} + +func writeToFile(path string, documenter internal.Documenter) error { + fileName := fmt.Sprintf("%s/%s.md", path, documenter.GetName()) + + f, err := os.Create(fileName) + + if err != nil { + fmt.Println(err) + return err + } + + defer f.Close() + + _, err = f.WriteString(getMarkdown(documenter)) + + if err != nil { + fmt.Println(err) + return err + } + + return nil +} + +func writeDocumentersToFiles(destination string) { + writeFolder := func(typeName string, documenters []internal.Documenter) { + path := fmt.Sprintf("%s/%s", destination, typeName) + _ = os.Mkdir(path, os.ModePerm) + for _, documenter := range documenters { + writeToFile(path, documenter) + } + } + + actions := actions.GetDocumenters() + writeFolder("actions", actions) + + triggers := triggers.GetDocumenters() + writeFolder("triggers", triggers) +} + +func printDocumentersSummary() { + result := fmt.Sprintf("- [Triggers](triggers/README.md)\n") + for _, trigger := range triggers.GetDocumenters() { + result += fmt.Sprintf("\t- [%s](triggers/%s.md)\n", trigger.GetName(), trigger.GetName()) + } + + result += fmt.Sprintf("- [Actions](actions/README.md)\n") + for _, action := range actions.GetDocumenters() { + result += fmt.Sprintf("\t- [%s](actions/%s.md)\n", action.GetName(), action.GetName()) + } + + fmt.Print(result) +} + + +func main() { + outputPath := flag.String("output", "", "path where docs/ shoud be created") + + flag.Parse() + + if *outputPath == "" { + printDocumentersSummary() + return + } + + if len(*outputPath) > 1 { + *outputPath = strings.TrimSuffix(*outputPath, "/") + } + + writeDocumentersToFiles(*outputPath) +} diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 1290623..a4added 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -1,7 +1,4 @@ # Summary - [Introduction](./gokill.md) - - [Triggers](triggers/triggers.md) - - [Timeout](triggers/timeout.md) - - [EthernetDisconnect](triggers/ethernetdisconnect.md) - - [Actions](actions/actions.md) +@GOKILL_OPTIONS@ diff --git a/docs/actions/README.md b/docs/actions/README.md new file mode 100644 index 0000000..1060a65 --- /dev/null +++ b/docs/actions/README.md @@ -0,0 +1 @@ +# Actions diff --git a/docs/actions/actions.md b/docs/actions/actions.md deleted file mode 100644 index 2ac68ee..0000000 --- a/docs/actions/actions.md +++ /dev/null @@ -1,34 +0,0 @@ -# Available Actions: - -# Print -Description: When triggered prints the configured message to stdout -Values: -- **message** - - Type: string - - Descr: Message that should be printed - - Default: "" - -### Timeout -Description: When triggered waits given duration before continuing with next stage -Values: -- **duration** - - Type: int - - Descr: duration in seconds - - Default: 0 - -# Command -Description: When triggered executes given command -Values: -- **command** - - Type: string - - Descr: command to execute - - Default: -- **args** - - Type: string[] - - Descr: args - - Default: - -### Shutdown -Description: When triggered shuts down the machine -Values: - diff --git a/docs/default.nix b/docs/default.nix new file mode 100644 index 0000000..0a8867b --- /dev/null +++ b/docs/default.nix @@ -0,0 +1,32 @@ +{ pkgs, lib, self, ... }: + +with lib; +let + docbuilder = self.packages.x86_64-linux.gokill-docbuilder; + + prepareMD = '' + # Copy inputs into the build directory + cp -r --no-preserve=all $inputs/* ./ + + ${docbuilder}/bin/docbuilder --output ./ + substituteInPlace ./SUMMARY.md \ + --replace "@GOKILL_OPTIONS@" "$(${docbuilder}/bin/docbuilder)" + + cat ./SUMMARY.md + ''; +in +pkgs.stdenv.mkDerivation { + name = "gokill-docs"; + phases = [ "buildPhase" ]; + buildInputs = [ pkgs.mdbook ]; + + inputs = sourceFilesBySuffices ./. [ ".md" ".toml" ]; + + buildPhase = '' + dest=$out/share/doc + mkdir -p $dest + ${prepareMD} + mdbook build + cp -r ./book/* $dest + ''; +} diff --git a/docs/triggers/README.md b/docs/triggers/README.md new file mode 100644 index 0000000..e773cf1 --- /dev/null +++ b/docs/triggers/README.md @@ -0,0 +1 @@ +# Triggers diff --git a/docs/triggers/ethernetdisconnect.md b/docs/triggers/ethernetdisconnect.md deleted file mode 100644 index c8cfca1..0000000 --- a/docs/triggers/ethernetdisconnect.md +++ /dev/null @@ -1,12 +0,0 @@ -# EthernetDisconnect -Description: Triggers if Ethernetcable is disconnected. -Values: -- **waitTillConnected** - - Type: bool - - Descr: Only trigger when device was connected before - - Default: true -- **interfaceName** - - Type: string - - Descr: Name of ethernet adapter - - Default: "" - diff --git a/docs/triggers/timeout.md b/docs/triggers/timeout.md deleted file mode 100644 index 219e0f6..0000000 --- a/docs/triggers/timeout.md +++ /dev/null @@ -1,9 +0,0 @@ -# Timeout - -Description: Triggers after given duration. -Values: -- **duration** - - Type: int - - Descr: duration in seconds - - Default: 0 - diff --git a/docs/triggers/triggers.md b/docs/triggers/triggers.md deleted file mode 100644 index 32b357e..0000000 --- a/docs/triggers/triggers.md +++ /dev/null @@ -1,16 +0,0 @@ -# Available Triggers: - - -### UsbDisconnect -Description: Triggers when given usb drive is disconnected -Values: -- **waitTillConnected** - - Type: bool - - Descr: Only trigger when device was connected before - - Default: true -- **deviceId** - - Type: string - - Descr: Name of device under /dev/disk/by-id/ - - Default: "" - - diff --git a/flake.nix b/flake.nix index 3a8962d..9fccf3c 100644 --- a/flake.nix +++ b/flake.nix @@ -28,6 +28,20 @@ ''; }; + packages.x86_64-linux.gokill-docbuilder = nixpkgs.legacyPackages.x86_64-linux.buildGoModule rec { + pname = "docbuilder"; + version = "1.0"; + vendorHash = null; + buildFLags = "-o . $dest/cmd/gokill/docbuilder"; + src = ./.; + + postInstall = '' + ''; + }; + + + packages.x86_64-linux.docs = pkgs.callPackage (import ./docs/default.nix) { self = self; }; + packages.x86_64-linux.default = self.packages.x86_64-linux.gokill; nixosModules.gokill = { config, lib, pkgs, ... }: @@ -140,5 +154,11 @@ ${self.packages."x86_64-linux".testVm}/bin/run-nixos-vm ''); }; + + apps.x86_64-linux.docs = { + type = "app"; + program = builtins.toString (nixpkgs.legacyPackages."x86_64-linux".writeScript "docs" '' + ${pkgs.python3}/bin/python3 -m http.server --directory ${self.packages."x86_64-linux".docs}/share/doc''); + }; }; }