From 24daef097171ab4edaaf86a094ee136bcdb8431d Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Fri, 8 Mar 2024 11:43:28 +0000 Subject: [PATCH 1/7] Added local serving of HTML manuals --- Dockerfile | 2 ++ src/global/url.ml | 4 +++- src/ocamlorg_web/lib/redirection.ml | 26 ++++++++++++++++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index d9aa5bb1eb..f0d262bfa2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,6 +34,8 @@ COPY --from=build /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/s COPY playground/asset playground/asset +RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual && for a in $(git -C /manual branch -r --format='%(refname:lstrip=3)') ; do git -C /manual submodule add ./ $a && git -C /manual/$a checkout $a; done + RUN git config --global --add safe.directory /var/opam-repository ENV OCAMLORG_REPO_PATH /var/opam-repository/ diff --git a/src/global/url.ml b/src/global/url.ml index 8e0fee4707..fa86cc5a1c 100644 --- a/src/global/url.ml +++ b/src/global/url.ml @@ -46,7 +46,9 @@ let minor v = let v2 = "https://v2.ocaml.org" let manual_with_version v = v2 ^ "/releases/" ^ minor v ^ "/htmlman/index.html" -let manual = "/releases/latest/manual.html" +let manual = "/manual" +let manual_lang v = "/manual/" ^ minor v ^ "/index.html" +let manual_api v = "/manual/" ^ minor v ^ "/api/index.html" let api_with_version v = v2 ^ "/releases/" ^ minor v ^ "/api/index.html" let api = "/releases/latest/api/index.html" let books = "/books" diff --git a/src/ocamlorg_web/lib/redirection.ml b/src/ocamlorg_web/lib/redirection.ml index e7b0c288dc..bdb52c476f 100644 --- a/src/ocamlorg_web/lib/redirection.ml +++ b/src/ocamlorg_web/lib/redirection.ml @@ -449,6 +449,25 @@ let from_v2 = ("/releases/latest/api/index.html", Url.api_with_version latest_version); ] +let default_index_html = + [ + ("/manual", Url.manual_lang latest_version); + ("/manual/4.12", Url.manual_lang "4.12"); + ("/manual/4.12/api", Url.manual_api "4.12"); + ("/manual/4.13", Url.manual_lang "4.13"); + ("/manual/4.13/api", Url.manual_api "4.13"); + ("/manual/4.14", Url.manual_lang "4.14"); + ("/manual/4.14/api", Url.manual_api "4.14"); + ("/manual/5.0", Url.manual_lang "5.0"); + ("/manual/5.0/api", Url.manual_api "5.0"); + ("/manual/5.1", Url.manual_lang "5.1"); + ("/manual/5.1/api", Url.manual_api "5.1"); + ("/manual/5.2", Url.manual_lang "5.2"); + ("/manual/5.2/api", Url.manual_api "5.2"); + ("/manual/5.3", Url.manual_lang "5.3"); + ("/manual/5.3/api", Url.manual_api "5.3"); + ] + let redirect_p pattern = let handler req = let target = Dream.target req in @@ -459,12 +478,14 @@ let redirect_p pattern = let fwd_v2 origin = Dream.get origin (fun req -> Dream.redirect req (Url.v2 ^ origin)) +let serve url path = + Dream.get url (Dream.static path) + let manual = [ + serve "/manual/**" "/manual/"; redirect_p "/api/**"; fwd_v2 "/api"; - redirect_p "/manual/**"; - fwd_v2 "/manual"; redirect_p "/releases/3.12/htmlman/**"; fwd_v2 "/releases/3.12/htmlman"; redirect_p "/releases/4.00/htmlman/**"; @@ -539,6 +560,7 @@ let package_docs req = let t = Dream.scope "" [] [ + make default_index_html; make from_v2; make v2_assets; Dream.scope "" [ Dream_encoding.compress ] manual; From 228a480db92af68d36de7555f784b5fbe9c86ed0 Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Fri, 8 Mar 2024 12:50:08 +0000 Subject: [PATCH 2/7] Update format --- src/ocamlorg_web/lib/redirection.ml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ocamlorg_web/lib/redirection.ml b/src/ocamlorg_web/lib/redirection.ml index bdb52c476f..5f5fd882fa 100644 --- a/src/ocamlorg_web/lib/redirection.ml +++ b/src/ocamlorg_web/lib/redirection.ml @@ -478,8 +478,7 @@ let redirect_p pattern = let fwd_v2 origin = Dream.get origin (fun req -> Dream.redirect req (Url.v2 ^ origin)) -let serve url path = - Dream.get url (Dream.static path) +let serve url path = Dream.get url (Dream.static path) let manual = [ From a223824b4b98046b32c055d2bfbbb77fd0fd0751 Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Wed, 27 Mar 2024 12:48:11 +0000 Subject: [PATCH 3/7] Updates following review --- Dockerfile | 2 +- src/ocamlorg_web/lib/redirection.ml | 17 ++++++++++++++--- src/ocamlorg_web/lib/router.ml | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index f0d262bfa2..bbc806a005 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ COPY --from=build /home/opam/_build/default/src/ocamlorg_web/bin/main.exe /bin/s COPY playground/asset playground/asset -RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual && for a in $(git -C /manual branch -r --format='%(refname:lstrip=3)') ; do git -C /manual submodule add ./ $a && git -C /manual/$a checkout $a; done +RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual RUN git config --global --add safe.directory /var/opam-repository diff --git a/src/ocamlorg_web/lib/redirection.ml b/src/ocamlorg_web/lib/redirection.ml index 5f5fd882fa..40fc48ba39 100644 --- a/src/ocamlorg_web/lib/redirection.ml +++ b/src/ocamlorg_web/lib/redirection.ml @@ -452,6 +452,20 @@ let from_v2 = let default_index_html = [ ("/manual", Url.manual_lang latest_version); + ("/manual/latest", Url.manual_lang latest_version); + ("/manual/3.12", Url.manual_lang "3.12"); + ("/manual/4.00", Url.manual_lang "4.00"); + ("/manual/4.01", Url.manual_lang "4.01"); + ("/manual/4.02", Url.manual_lang "4.02"); + ("/manual/4.03", Url.manual_lang "4.03"); + ("/manual/4.04", Url.manual_lang "4.04"); + ("/manual/4.05", Url.manual_lang "4.05"); + ("/manual/4.06", Url.manual_lang "4.06"); + ("/manual/4.07", Url.manual_lang "4.07"); + ("/manual/4.08", Url.manual_lang "4.08"); + ("/manual/4.09", Url.manual_lang "4.09"); + ("/manual/4.10", Url.manual_lang "4.10"); + ("/manual/4.11", Url.manual_lang "4.11"); ("/manual/4.12", Url.manual_lang "4.12"); ("/manual/4.12/api", Url.manual_api "4.12"); ("/manual/4.13", Url.manual_lang "4.13"); @@ -478,11 +492,8 @@ let redirect_p pattern = let fwd_v2 origin = Dream.get origin (fun req -> Dream.redirect req (Url.v2 ^ origin)) -let serve url path = Dream.get url (Dream.static path) - let manual = [ - serve "/manual/**" "/manual/"; redirect_p "/api/**"; fwd_v2 "/api"; redirect_p "/releases/3.12/htmlman/**"; diff --git a/src/ocamlorg_web/lib/router.ml b/src/ocamlorg_web/lib/router.ml index d4dcef89b6..2d568f83a5 100644 --- a/src/ocamlorg_web/lib/router.ml +++ b/src/ocamlorg_web/lib/router.ml @@ -120,6 +120,9 @@ let router t = package_route t; graphql_route t; sitemap_routes; + Dream.scope "" + [ Dream_encoding.compress ] + [ Dream.get "/manual/**" (Dream.static "/manual/") ]; Dream.scope "" [ Dream_encoding.compress ] [ Dream.get "/media/**" (Dream.static ~loader:media_loader "") ]; From 7f96d42717b659f1233a8c6ae42eed3558bafaa2 Mon Sep 17 00:00:00 2001 From: Cuihtlauac ALVARADO Date: Fri, 5 Apr 2024 09:31:09 +0200 Subject: [PATCH 4/7] Set manual path in config variable --- Dockerfile | 1 + src/ocamlorg_web/lib/config.ml | 2 ++ src/ocamlorg_web/lib/router.ml | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bbc806a005..1145765b00 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,6 +39,7 @@ RUN git clone https://github.com/ocaml-web/html-compiler-manuals /manual RUN git config --global --add safe.directory /var/opam-repository ENV OCAMLORG_REPO_PATH /var/opam-repository/ +ENV OCAMLORG_MANUAL_PATH /manual ENV OCAMLORG_PKG_STATE_PATH /var/package.state ENV DREAM_VERBOSITY info ENV OCAMLORG_HTTP_PORT 8080 diff --git a/src/ocamlorg_web/lib/config.ml b/src/ocamlorg_web/lib/config.ml index 37925cad41..678cbcd57a 100644 --- a/src/ocamlorg_web/lib/config.ml +++ b/src/ocamlorg_web/lib/config.ml @@ -4,3 +4,5 @@ let to_bool s = match String.lowercase_ascii s with "true" | "1" -> true | _ -> false let http_port = env_with_default "OCAMLORG_HTTP_PORT" "8080" |> int_of_string + +let manual_path = env_with_default "OCAMLORG_MANUAL_PATH" "http-compiler-manuals" diff --git a/src/ocamlorg_web/lib/router.ml b/src/ocamlorg_web/lib/router.ml index 2d568f83a5..2a3061a454 100644 --- a/src/ocamlorg_web/lib/router.ml +++ b/src/ocamlorg_web/lib/router.ml @@ -122,7 +122,7 @@ let router t = sitemap_routes; Dream.scope "" [ Dream_encoding.compress ] - [ Dream.get "/manual/**" (Dream.static "/manual/") ]; + [ Dream.get "/manual/**" (Dream.static Config.manual_path) ]; Dream.scope "" [ Dream_encoding.compress ] [ Dream.get "/media/**" (Dream.static ~loader:media_loader "") ]; From e3b7c5e2231b10bfcd847f5afc585aae28393bbb Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Fri, 5 Apr 2024 11:58:26 +0100 Subject: [PATCH 5/7] Reformat cherry picked commit --- src/ocamlorg_web/lib/config.ml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ocamlorg_web/lib/config.ml b/src/ocamlorg_web/lib/config.ml index 678cbcd57a..d8ba90020d 100644 --- a/src/ocamlorg_web/lib/config.ml +++ b/src/ocamlorg_web/lib/config.ml @@ -5,4 +5,5 @@ let to_bool s = let http_port = env_with_default "OCAMLORG_HTTP_PORT" "8080" |> int_of_string -let manual_path = env_with_default "OCAMLORG_MANUAL_PATH" "http-compiler-manuals" +let manual_path = + env_with_default "OCAMLORG_MANUAL_PATH" "http-compiler-manuals" From bb59352aeab20285a0407b9901f6a3492cd12e77 Mon Sep 17 00:00:00 2001 From: Cuihtlauac ALVARADO Date: Mon, 8 Apr 2024 16:35:46 +0200 Subject: [PATCH 6/7] Remove * Repair broken API links to v2 * Deduplicate - Url.manual_lang into Url.manual_with_version - Url.manual_api into Url.api_with_version --- src/global/url.ml | 8 ++-- src/ocamlorg_web/lib/redirection.ml | 62 +++++++++++++++-------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/global/url.ml b/src/global/url.ml index fa86cc5a1c..380005aed2 100644 --- a/src/global/url.ml +++ b/src/global/url.ml @@ -45,12 +45,10 @@ let minor v = | _ -> invalid_arg (v ^ ": invalid OCaml version") let v2 = "https://v2.ocaml.org" -let manual_with_version v = v2 ^ "/releases/" ^ minor v ^ "/htmlman/index.html" +let manual_with_version v = "/manual/" ^ minor v ^ "/index.html" let manual = "/manual" -let manual_lang v = "/manual/" ^ minor v ^ "/index.html" -let manual_api v = "/manual/" ^ minor v ^ "/api/index.html" -let api_with_version v = v2 ^ "/releases/" ^ minor v ^ "/api/index.html" -let api = "/releases/latest/api/index.html" +let api_with_version v = "/manual/" ^ minor v ^ "/index.html" +let api = "/api" let books = "/books" let changelog = "/changelog" let changelog_entry id = "/changelog/" ^ id diff --git a/src/ocamlorg_web/lib/redirection.ml b/src/ocamlorg_web/lib/redirection.ml index 40fc48ba39..407999b22a 100644 --- a/src/ocamlorg_web/lib/redirection.ml +++ b/src/ocamlorg_web/lib/redirection.ml @@ -451,35 +451,39 @@ let from_v2 = let default_index_html = [ - ("/manual", Url.manual_lang latest_version); - ("/manual/latest", Url.manual_lang latest_version); - ("/manual/3.12", Url.manual_lang "3.12"); - ("/manual/4.00", Url.manual_lang "4.00"); - ("/manual/4.01", Url.manual_lang "4.01"); - ("/manual/4.02", Url.manual_lang "4.02"); - ("/manual/4.03", Url.manual_lang "4.03"); - ("/manual/4.04", Url.manual_lang "4.04"); - ("/manual/4.05", Url.manual_lang "4.05"); - ("/manual/4.06", Url.manual_lang "4.06"); - ("/manual/4.07", Url.manual_lang "4.07"); - ("/manual/4.08", Url.manual_lang "4.08"); - ("/manual/4.09", Url.manual_lang "4.09"); - ("/manual/4.10", Url.manual_lang "4.10"); - ("/manual/4.11", Url.manual_lang "4.11"); - ("/manual/4.12", Url.manual_lang "4.12"); - ("/manual/4.12/api", Url.manual_api "4.12"); - ("/manual/4.13", Url.manual_lang "4.13"); - ("/manual/4.13/api", Url.manual_api "4.13"); - ("/manual/4.14", Url.manual_lang "4.14"); - ("/manual/4.14/api", Url.manual_api "4.14"); - ("/manual/5.0", Url.manual_lang "5.0"); - ("/manual/5.0/api", Url.manual_api "5.0"); - ("/manual/5.1", Url.manual_lang "5.1"); - ("/manual/5.1/api", Url.manual_api "5.1"); - ("/manual/5.2", Url.manual_lang "5.2"); - ("/manual/5.2/api", Url.manual_api "5.2"); - ("/manual/5.3", Url.manual_lang "5.3"); - ("/manual/5.3/api", Url.manual_api "5.3"); + ("/manual", Url.manual_with_version latest_version); + ("/manual/latest", Url.manual_with_version latest_version); + ("/api", Url.api_with_version latest_version); + ("/api/latest", Url.api_with_version latest_version); + ("/manual/api", Url.api_with_version latest_version); + ("/manual/api/latest", Url.api_with_version latest_version); + ("/manual/3.12", Url.manual_with_version "3.12"); + ("/manual/4.00", Url.manual_with_version "4.00"); + ("/manual/4.01", Url.manual_with_version "4.01"); + ("/manual/4.02", Url.manual_with_version "4.02"); + ("/manual/4.03", Url.manual_with_version "4.03"); + ("/manual/4.04", Url.manual_with_version "4.04"); + ("/manual/4.05", Url.manual_with_version "4.05"); + ("/manual/4.06", Url.manual_with_version "4.06"); + ("/manual/4.07", Url.manual_with_version "4.07"); + ("/manual/4.08", Url.manual_with_version "4.08"); + ("/manual/4.09", Url.manual_with_version "4.09"); + ("/manual/4.10", Url.manual_with_version "4.10"); + ("/manual/4.11", Url.manual_with_version "4.11"); + ("/manual/4.12", Url.manual_with_version "4.12"); + ("/manual/4.12/api", Url.api_with_version "4.12"); + ("/manual/4.13", Url.manual_with_version "4.13"); + ("/manual/4.13/api", Url.api_with_version "4.13"); + ("/manual/4.14", Url.manual_with_version "4.14"); + ("/manual/4.14/api", Url.api_with_version "4.14"); + ("/manual/5.0", Url.manual_with_version "5.0"); + ("/manual/5.0/api", Url.api_with_version "5.0"); + ("/manual/5.1", Url.manual_with_version "5.1"); + ("/manual/5.1/api", Url.api_with_version "5.1"); + ("/manual/5.2", Url.manual_with_version "5.2"); + ("/manual/5.2/api", Url.api_with_version "5.2"); + ("/manual/5.3", Url.manual_with_version "5.3"); + ("/manual/5.3/api", Url.api_with_version "5.3"); ] let redirect_p pattern = From ec9456b96cce79117e098355453176c9e9345410 Mon Sep 17 00:00:00 2001 From: Mark Elvers Date: Wed, 10 Apr 2024 16:31:12 +0100 Subject: [PATCH 7/7] Latest updates --- src/global/url.ml | 2 +- src/ocamlorg_web/lib/redirection.ml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/global/url.ml b/src/global/url.ml index 380005aed2..e44dface21 100644 --- a/src/global/url.ml +++ b/src/global/url.ml @@ -47,7 +47,7 @@ let minor v = let v2 = "https://v2.ocaml.org" let manual_with_version v = "/manual/" ^ minor v ^ "/index.html" let manual = "/manual" -let api_with_version v = "/manual/" ^ minor v ^ "/index.html" +let api_with_version v = "/manual/" ^ minor v ^ "/api/index.html" let api = "/api" let books = "/books" let changelog = "/changelog" diff --git a/src/ocamlorg_web/lib/redirection.ml b/src/ocamlorg_web/lib/redirection.ml index 407999b22a..f8cbefe894 100644 --- a/src/ocamlorg_web/lib/redirection.ml +++ b/src/ocamlorg_web/lib/redirection.ml @@ -498,8 +498,6 @@ let fwd_v2 origin = let manual = [ - redirect_p "/api/**"; - fwd_v2 "/api"; redirect_p "/releases/3.12/htmlman/**"; fwd_v2 "/releases/3.12/htmlman"; redirect_p "/releases/4.00/htmlman/**";