Initial commit
Nothing works
This commit is contained in:
commit
2cc44e3c6c
3
dune-project
Normal file
3
dune-project
Normal file
|
@ -0,0 +1,3 @@
|
|||
(lang dune 3.7)
|
||||
|
||||
(name reynir-www)
|
20
src/dune
Normal file
20
src/dune
Normal file
|
@ -0,0 +1,20 @@
|
|||
(executable
|
||||
(name reynir_www)
|
||||
(libraries
|
||||
logs
|
||||
logs.fmt
|
||||
logs.cli
|
||||
fmt
|
||||
fmt.tty
|
||||
fmt.cli
|
||||
cmdliner
|
||||
preface
|
||||
mirage-clock-unix
|
||||
http-lwt-client
|
||||
git-unix
|
||||
yocaml
|
||||
yocaml_yaml
|
||||
yocaml_markdown
|
||||
yocaml_unix
|
||||
yocaml_git
|
||||
yocaml_jingoo))
|
16
src/file.ml
Normal file
16
src/file.ml
Normal file
|
@ -0,0 +1,16 @@
|
|||
open Yocaml
|
||||
|
||||
let is_css = with_extension "css"
|
||||
let is_javascript = with_extension "js"
|
||||
|
||||
let is_image =
|
||||
let open Preface.Predicate in
|
||||
with_extension "png" ||
|
||||
with_extension "svg" ||
|
||||
with_extension "jpg" ||
|
||||
with_extension "jpeg" ||
|
||||
with_extension "gif"
|
||||
|
||||
let is_markdown =
|
||||
let open Preface.Predicate in
|
||||
with_extension "md" || with_extension "markdown"
|
6
src/file.mli
Normal file
6
src/file.mli
Normal file
|
@ -0,0 +1,6 @@
|
|||
open Yocaml
|
||||
|
||||
val is_css : Filepath.t -> bool
|
||||
val is_javascript : Filepath.t -> bool
|
||||
val is_image : Filepath.t -> bool
|
||||
val is_markdown : Filepath.t -> bool
|
114
src/reynir_www.ml
Normal file
114
src/reynir_www.ml
Normal file
|
@ -0,0 +1,114 @@
|
|||
let caller = Filename.basename Sys.argv.(0)
|
||||
let version = "%%VERSION%%"
|
||||
let default_port = 8888
|
||||
let default_target = Fpath.v "_site"
|
||||
|
||||
let program ~target =
|
||||
let open Yocaml in
|
||||
let* () = Task.move_css target in
|
||||
Task.move_images target
|
||||
|
||||
let local_build _quiet target =
|
||||
Yocaml_unix.execute (program ~target:(Fpath.to_string target))
|
||||
|
||||
let watch quiet target potential_port =
|
||||
let port = Option.value ~default:default_port potential_port in
|
||||
let () = local_build quiet target in
|
||||
let target = Fpath.to_string target in
|
||||
let server = Yocaml_unix.serve ~filepath:target ~port (program ~target) in
|
||||
Lwt_main.run server
|
||||
|
||||
let common_options = "COMMON OPTIONS"
|
||||
|
||||
let verbosity =
|
||||
let open Cmdliner in
|
||||
let env = Cmd.Env.info "REYNIR_LOGS" in
|
||||
Logs_cli.level ~docs:common_options ~env ()
|
||||
|
||||
let renderer =
|
||||
let open Cmdliner in
|
||||
let env = Cmd.Env.info "REYNIR_FMT" in
|
||||
Fmt_cli.style_renderer ~docs:common_options ~env ()
|
||||
|
||||
let utf_8 =
|
||||
let open Cmdliner in
|
||||
let doc = "Allow binaries to emit UTF-8 characters." in
|
||||
let env = Cmd.Env.info "BLOGGER_UTF_8" in
|
||||
Arg.(value & opt bool true & info [ "with-utf-8" ] ~doc ~env)
|
||||
|
||||
let reporter ppf =
|
||||
let report src level ~over k msgf =
|
||||
let k _ =
|
||||
over ();
|
||||
k ()
|
||||
in
|
||||
let with_metadata header _tags k ppf fmt =
|
||||
Fmt.kpf
|
||||
k
|
||||
ppf
|
||||
("%a[%a]: " ^^ fmt ^^ "\n%!")
|
||||
Logs_fmt.pp_header
|
||||
(level, header)
|
||||
Fmt.(styled `Magenta string)
|
||||
(Logs.Src.name src)
|
||||
in
|
||||
msgf @@ fun ?header ?tags fmt -> with_metadata header tags k ppf fmt
|
||||
in
|
||||
{ Logs.report }
|
||||
|
||||
let setup_logs utf_8 style_renderer level =
|
||||
Fmt_tty.setup_std_outputs ~utf_8 ?style_renderer ();
|
||||
Logs.set_level level;
|
||||
Logs.set_reporter (reporter Fmt.stderr);
|
||||
Option.is_none level
|
||||
|
||||
|
||||
let setup_logs =
|
||||
Cmdliner.Term.(const setup_logs $ utf_8 $ renderer $ verbosity)
|
||||
|
||||
let man =
|
||||
let open Cmdliner in
|
||||
[ `S Manpage.s_authors; `P "reynir.dk" ]
|
||||
|
||||
let watch_cmd =
|
||||
let open Cmdliner in
|
||||
let doc =
|
||||
"Serve from the specified directory as an HTTP server and rebuild \
|
||||
website on demand"
|
||||
in
|
||||
let exits = Cmd.Exit.defaults in
|
||||
let path_arg =
|
||||
let doc = "Specify where we build the website" in
|
||||
let arg = Arg.info ~doc [ "destination" ] in
|
||||
Arg.(value & opt (conv (Fpath.of_string, Fpath.pp)) default_target & arg)
|
||||
in
|
||||
let port_arg =
|
||||
let doc = "The port" in
|
||||
let arg = Arg.info ~doc [ "port"; "P"; "p" ] in
|
||||
Arg.(value & opt (some int) None & arg)
|
||||
in
|
||||
let info = Cmd.info "watch" ~version ~doc ~exits ~man in
|
||||
Cmd.v info Term.(const watch $ setup_logs $ path_arg $ port_arg)
|
||||
|
||||
|
||||
let build_cmd =
|
||||
let open Cmdliner in
|
||||
let doc = "Build the website into the specified directory" in
|
||||
let exits = Cmd.Exit.defaults in
|
||||
let info = Cmd.info "build" ~version ~doc ~exits ~man in
|
||||
let path_arg =
|
||||
let doc = "Specify where to build the website" in
|
||||
let arg = Arg.info ~doc ["destination"] in
|
||||
Arg.(value & opt (conv (Fpath.of_string, Fpath.pp)) default_target & arg)
|
||||
in
|
||||
Cmd.v info Term.(const local_build $ setup_logs $ path_arg)
|
||||
|
||||
let cmd =
|
||||
let open Cmdliner in
|
||||
let sdocs = Manpage.s_common_options in
|
||||
let doc = "Build, push or serve reynir.dk" in
|
||||
let default_info = Cmd.info caller ~version ~doc ~sdocs ~man in
|
||||
let default = Term.(ret (const (`Help (`Pager, None)))) in
|
||||
Cmd.group ~default default_info [ build_cmd; watch_cmd ]
|
||||
|
||||
let () = exit @@ Cmdliner.Cmd.eval cmd
|
24
src/task.ml
Normal file
24
src/task.ml
Normal file
|
@ -0,0 +1,24 @@
|
|||
open Yocaml
|
||||
module Metaformat = Yocaml_yaml
|
||||
module Markup = Yocaml_markdown
|
||||
module Template = Yocaml_jingoo
|
||||
|
||||
let css_target target = "css" |> into target
|
||||
let images_target target = "images" |> into target
|
||||
let index_html target = "index.html" |> into target
|
||||
let about_us_html target = "about_us.html" |> into target
|
||||
let our_work_html target = "our_work.html" |> into target
|
||||
let donate_html target = "donate.html" |> into target
|
||||
|
||||
let move_css target =
|
||||
process_files
|
||||
[ "css" ]
|
||||
File.is_css
|
||||
(Build.copy_file ~into:(css_target target))
|
||||
|
||||
let move_images target =
|
||||
process_files
|
||||
[ "images" ]
|
||||
File.is_image
|
||||
(Build.copy_file ~into:(images_target target))
|
||||
|
Loading…
Reference in a new issue