[wip] documentation generation/serving

This commit is contained in:
Foo Bar
2022-11-21 11:49:03 -07:00
parent c260c090d9
commit 8959f06b63
+146 -83
View File
@@ -31,10 +31,10 @@ help() ->
% TODONE: make tsdocs % TODONE: make tsdocs
% TODONE: jex pull % TODONE: jex pull
% TODO: delete before mindist % TODONE: delete before mindist
% TODO: delete before push % TODONE: delete before push
% TODO: delete before pushdocs % TODONE: delete before pushdocs
% TODO: jex viewdocs [port] % TODO: jex viewdocs PKG [port]
% TODO: make fulldist tarballs % TODO: make fulldist tarballs
% TODO: be smart about creating jex_include % TODO: be smart about creating jex_include
@@ -47,60 +47,66 @@ help_screen() ->
["Jex: simple JavaScript packaging system\n" ["Jex: simple JavaScript packaging system\n"
"\n" "\n"
"COMMANDS:\n" "COMMANDS:\n"
" man show the manual\n" " man show the manual\n"
" dwim- init, pull, build\n" " dwim- init, pull, build\n"
" dwim+ init, pull, build, mindist, push\n" " dwim+ init, pull, build, mindist, push\n"
" dwim++ init, pull, build, mindist, push, mkdocs, pushdocs\n" " dwim++ init, pull, build, mindist, push, mkdocs, pushdocs\n"
" cfgbarf barf out the jex.eterms file (mostly to make sure it parses correctly)\n" " cfgbarf barf out the jex.eterms file (mostly to make sure it parses correctly)\n"
" echo home echo $HOME\n" " echo home echo $HOME\n"
" echo jexdir echo $HOME/.jex\n" " echo jexdir echo $HOME/.jex\n"
" echo devdir echo $HOME/.jex/dev\n" " echo devdir echo $HOME/.jex/dev\n"
" echo docsdir echo $HOME/.jex/docs\n" " echo docsdir echo $HOME/.jex/docs\n"
" echo pkgname name of current package\n" " echo pkgname name of current package\n"
" echo pkg_devdir echo $HOME/.jex/dev/realm-name-X.Y.Z\n" " echo pkg_devdir echo $HOME/.jex/dev/realm-name-X.Y.Z\n"
" echo pkg_docsdir echo $HOME/.jex/docs/realm-name-X.Y.Z\n" " echo pkg_devdir PKG echo $HOME/.jex/dev/PKG\n"
" echo deps list dependencies of current package\n" " echo pkg_docsdir echo $HOME/.jex/docs/realm-name-X.Y.Z\n"
" echo pathof PKG list the path to PKG or \n" " echo pkg_docsdir PKG echo $HOME/.jex/docs/PKG\n"
" init mkdir -p $HOME/.jex/dev\n" " echo deps list dependencies of current package\n"
" build tsc && cp -r ./src/jex_include ./dist/\n" " init mkdir -p $HOME/.jex/dev\n"
" -w, --weak continue building even if tsc fails\n" " build tsc && cp -r ./src/jex_include ./dist/\n"
" -f, --force use cp -rf instead of cp -r\n" " -w, --weak continue building even if tsc fails\n"
" mindist mkdir jex_mindist && cp -r src jex_mindist && cp -r dist jex_mindist && rm -r jex_mindist/src/jex_include\n" " -f, --force use cp -rf instead of cp -r\n"
" -f, --force use cp -rf instead of cp -r\n" " mindist mkdir jex_mindist && cp -r src jex_mindist && cp -r dist jex_mindist && rm -r jex_mindist/src/jex_include\n"
" push rsync -a jex_mindist/ PKG_DEVDIR\n" " -f, --force use cp -rf instead of cp -r\n"
" mkdocs (maybe run dwim- first) npx typedoc\n" " push rsync -a jex_mindist/ PKG_DEVDIR\n"
" pushdocs rsync -a docs/ PKG_DOCSDIR\n" " mkdocs (maybe run dwim- first) npx typedoc\n"
" ls ls $HOME/.jex/dev\n" " pushdocs rsync -a docs/ PKG_DOCSDIR\n"
" tree tree $HOME/.jex/\n" " viewdocs PKG [PORT] view package docs in browser\n"
" rmpkg PKG rm -r $HOME/.jex/dev/PKG\n" " ls ls $HOME/.jex/dev\n"
" pull pull each dependency into src/jx_include\n" " tree tree $HOME/.jex/\n"
" rmpkg PKG rm -r $HOME/.jex/dev/PKG\n"
" pull pull each dependency into src/jx_include\n"
]. ].
dispatch(["man"]) -> man(); dispatch(["man"]) -> man();
dispatch(["dwim-"]) -> dwim(minus); dispatch(["dwim-"]) -> dwim(minus);
dispatch(["dwim+"]) -> dwim(plus); dispatch(["dwim+"]) -> dwim(plus);
dispatch(["dwim++"]) -> dwim(plus_plus); dispatch(["dwim++"]) -> dwim(plus_plus);
dispatch(["cfgbarf"]) -> cfgbarf(); dispatch(["cfgbarf"]) -> cfgbarf();
dispatch(["echo", "home"]) -> echo(home); dispatch(["echo", "home"]) -> echo(home);
dispatch(["echo", "jexdir"]) -> echo(jexdir); dispatch(["echo", "jexdir"]) -> echo(jexdir);
dispatch(["echo", "devdir"]) -> echo(devdir); dispatch(["echo", "devdir"]) -> echo(devdir);
dispatch(["echo", "docsdir"]) -> echo(docsdir); dispatch(["echo", "docsdir"]) -> echo(docsdir);
dispatch(["echo", "pkgname"]) -> echo(pkgname); dispatch(["echo", "pkgname"]) -> echo(pkgname);
dispatch(["echo", "pkg_devdir"]) -> echo(pkg_devdir); dispatch(["echo", "pkg_devdir"]) -> echo(pkg_devdir);
dispatch(["echo", "pkg_docsdir"]) -> echo(pkg_docsdir); dispatch(["echo", "pkg_devdir", PkgName]) -> echo({pkg_devdir, PkgName});
dispatch(["echo", "deps"]) -> echo(deps); dispatch(["echo", "pkg_docsdir"]) -> echo(pkg_docsdir);
dispatch(["init"]) -> init(); dispatch(["echo", "pkg_docsdir", PkgName]) -> echo({pkg_docsdir, PkgName});
dispatch(["build" | Opts]) -> build(Opts); dispatch(["echo", "deps"]) -> echo(deps);
dispatch(["mindist" | Opts]) -> mindist(Opts); dispatch(["init"]) -> init();
dispatch(["push"]) -> push(); dispatch(["build" | Opts]) -> build(Opts);
dispatch(["mkdocs"]) -> mkdocs(); dispatch(["mindist" | Opts]) -> mindist(Opts);
dispatch(["pushdocs"]) -> pushdocs(); dispatch(["push"]) -> push();
dispatch(["ls"]) -> ls(); dispatch(["mkdocs"]) -> mkdocs();
dispatch(["tree"]) -> tree(); dispatch(["pushdocs"]) -> pushdocs();
dispatch(["rmpkg", Pkg]) -> rmpkg(Pkg); dispatch(["viewdocs", Pkg]) -> viewdocs(Pkg);
dispatch(["pull"]) -> pull(); dispatch(["viewdocs", Pkg, Port]) -> viewdocs(Pkg, Port);
dispatch(_) -> help(). dispatch(["ls"]) -> ls();
dispatch(["tree"]) -> tree();
dispatch(["rmpkg", Pkg]) -> rmpkg(Pkg);
dispatch(["pull"]) -> pull();
dispatch(_) -> help().
@@ -160,17 +166,24 @@ echo(docsdir) ->
echo(pkgname) -> echo(pkgname) ->
tell(info, "~ts", [pkgname()]); tell(info, "~ts", [pkgname()]);
echo(pkg_devdir) -> echo(pkg_devdir) ->
tell(info, "~ts", [pkg_devdir()]); {_Exists, PkgDevDir} = pkg_devdir(),
tell(info, "~ts", [PkgDevDir]);
echo({pkg_devdir, PkgName}) ->
case pkg_devdir(PkgName) of
{exists, Dir} -> tell(info, "~ts", [Dir]);
Error -> tell(error, "Error: ~tp", [Error])
end;
echo(pkg_docsdir) -> echo(pkg_docsdir) ->
tell(info, "~ts", [pkg_docsdir()]); {_Exists, PkgDocsDir} = pkg_docsdir(),
tell(info, "~ts", [PkgDocsDir]);
echo({pkg_docsdir, PkgName}) ->
case pkg_docsdir(PkgName) of
{exists, Dir} -> tell(info, "~ts", [Dir]);
Error -> tell(error, "Error: ~tp", [Error])
end;
echo(deps) -> echo(deps) ->
PrintDep = PrintDep = fun(Dep) -> tell(info, "~ts", [Dep]) end,
fun(Dep) -> lists:foreach(PrintDep, deps()).
tell(info, "~ts", [Dep])
end,
lists:foreach(PrintDep, deps());
echo({pathof, Pkg}) ->
tell(info, "~ts", [pathof(Pkg)]).
home() -> home() ->
@@ -197,10 +210,25 @@ pkgname() ->
io_lib:format("~tp-~tp-~ts", [Realm, Name, Vsn]). io_lib:format("~tp-~tp-~ts", [Realm, Name, Vsn]).
pkg_devdir() -> pkg_devdir() ->
filename:join(devdir(), pkgname()). pkg_devdir(pkgname()).
pkg_devdir(Pkg) ->
Filename = filename:join(devdir(), Pkg),
case file_exists(Filename) of
true -> {exists, Filename};
false -> {dne, Filename}
end.
pkg_docsdir() -> pkg_docsdir() ->
filename:join([docsdir(), pkgname()]). pkg_docsdir(pkgname()).
pkg_docsdir(PkgName) ->
Filename = filename:join([docsdir(), PkgName]),
case file_exists(Filename) of
true -> {exists, Filename};
false -> {dne, Filename}
end.
deps() -> deps() ->
{ok, Cfg} = cfg(), {ok, Cfg} = cfg(),
@@ -212,12 +240,6 @@ deps() ->
end. end.
pathof(Pkg) ->
Filename = filename:join(devdir(), Pkg),
case file_exists(Filename) of
true -> Filename;
false -> error({unknown_package, Pkg})
end.
file_exists(Filename) -> file_exists(Filename) ->
case file:read_file_info(Filename) of case file:read_file_info(Filename) of
@@ -277,14 +299,15 @@ mindist(Opts) ->
% flags if flag default % flags if flag default
OptsConfig = [{["-f", "--force"], {force, force}, {force, dont_force}}], OptsConfig = [{["-f", "--force"], {force, force}, {force, dont_force}}],
#{force := Force} = parseopts(OptsConfig, Opts), #{force := Force} = parseopts(OptsConfig, Opts),
_ = cmd("rm -r jex_mindist"),
_ = cmd("mkdir -p jex_mindist"), _ = cmd("mkdir -p jex_mindist"),
_ = mindist_cp(Force), _ = mindist_cp(Force),
_ = cmd("rm -r jex_mindist/src/jex_include"), _ = cmd("rm -r jex_mindist/src/jex_include"),
ok. ok.
mindist_cp(dont_force) -> mindist_cp(dont_force) ->
_ = cmd("rsync -avv --exclude=\"*.swp\" src jex_mindist"), _ = cmd("rsync -avv --exclude=\"*.swp\" --exclude=\"*.swo\" src jex_mindist"),
_ = cmd("cp -rv dist jex_mindist"), _ = cmd("cp -rv dist jex_mindist"),
ok; ok;
mindist_cp(force) -> mindist_cp(force) ->
_ = cmd("cp -rvf src jex_mindist"), _ = cmd("cp -rvf src jex_mindist"),
@@ -298,7 +321,9 @@ mindist_cp(force) ->
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------
push() -> push() ->
_ = cmd(io_lib:format("rsync -avv jex_mindist/ ~ts", [pkg_devdir()])), {_Exists, PackageDestination} = pkg_devdir(),
_ = cmd(["rm -r ", PackageDestination]),
_ = cmd(["rsync -avv jex_mindist/ ", PackageDestination()]),
ok. ok.
@@ -323,8 +348,14 @@ tree() ->
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------
rmpkg(Pkg) -> rmpkg(Pkg) ->
Filename = pathof(Pkg), case pkg_devdir(Pkg) of
_ = cmd(io_lib:format("rm -r ~ts", [Filename])), {exists, Filename} -> cmd(io_lib:format("rm -r ~ts", [Filename]));
{dne, Filename} -> tell(error, "package not installed: ~ts", [Pkg])
end,
case pkg_docsdir(Pkg) of
{exists, Filename} -> cmd(io_lib:format("rm -r ~ts", [Filename]));
{dne, Filename} -> tell(error, "documentation not installed: ~ts", [Pkg])
end,
ok. ok.
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------
@@ -342,11 +373,15 @@ pull([]) ->
ok. ok.
pull_dep(Dep) -> pull_dep(Dep) ->
Src = pathof(Dep), case pkg_devdir(Dep) of
Dst = filename:join("./src/jex_include", Dep), {exists, Src} ->
_ = cmd(io_lib:format("mkdir -p ~ts", [Dst])), Dst = filename:join("./src/jex_include", Dep),
%tell(info, "path of ~s: ~s", [Dep, Src]), _ = cmd(io_lib:format("mkdir -p ~ts", [Dst])),
_ = cmd(io_lib:format("rsync -avv ~ts/ ~ts", [Src, Dst])), %tell(info, "path of ~s: ~s", [Dep, Src]),
_ = cmd(io_lib:format("rsync -avv ~ts/ ~ts", [Src, Dst]));
DNE ->
error(DNE)
end,
ok. ok.
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------
@@ -362,7 +397,35 @@ mkdocs() ->
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------
pushdocs() -> pushdocs() ->
_ = cmd(["rsync -avv docs/ ", pkg_docsdir()]), {_Exists, DocsDestDir} = pkg_docsdir(),
_ = cmd(["rm -r ", DocsDestDir]),
_ = cmd(["rsync -avv docs/ ", DocsDestDir]),
ok.
%%-----------------------------------------------------------------------------
%% jex viewdocs
%%-----------------------------------------------------------------------------
viewdocs(Pkg) ->
viewdocs(Pkg, 6969).
viewdocs(Pkg, Port) ->
case pkg_docsdir(Pkg) of
{exists, DocsPath} -> viewdocs2(DocsPath, Port);
DNE -> error(DNE)
end.
viewdocs2(DocsPath, Port) ->
spawn_link(fun() -> servedocs(DocsPath, Port) end),
firefox(Port).
servedocs(DocsPath, Port) ->
_ = cmd(io_lib:format("cd ~ts && python3 -m http.server ~tp", [DocsPath, Port])),
ok.
firefox(Port) ->
_ = cmd(io_lib:format("firefox localhost:~tp", [Port])),
ok. ok.
%%----------------------------------------------------------------------------- %%-----------------------------------------------------------------------------