diff --git a/Dockerfile b/Dockerfile index b02593377..f51b7f75b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM registry.gitlab.com/pages/hugo/hugo_extended:0.105.0 AS builder +ARG HUGO_VERSION=0.105.0 +FROM registry.gitlab.com/pages/hugo/hugo_extended:${HUGO_VERSION} AS builder # this defaults to an empty variable ARG BASE_URL WORKDIR /site @@ -12,6 +13,16 @@ RUN set -x && ( [ -z "${BASE_URL}" ] || [ "${BASE_URL}" == "PROD" ] ) \ && hugo --gc \ || ( [ "${BASE_URL}" == 'TESTS_WEB' ] && hugo --gc --baseURL "/" || exit 1 ) + +FROM alpine AS indexer +ARG PAGEFIND_VERSION=1.6.0 +WORKDIR /site +RUN wget -qO- "https://github.com/Pagefind/pagefind/releases/download/v${PAGEFIND_VERSION}/pagefind_extended-v${PAGEFIND_VERSION}-x86_64-unknown-linux-musl.tar.gz" \ + | tar xz -C /usr/local/bin pagefind_extended +COPY --from=builder /site/public /site/public +RUN pagefind_extended --site public && rm -rf public/search-index + + FROM nginx:alpine RUN rm -rf /usr/share/nginx/html/* RUN sed -i 's/#error_page/error_page/' /etc/nginx/conf.d/default.conf @@ -21,4 +32,4 @@ RUN sed -i 's/#error_page/error_page/' /etc/nginx/conf.d/default.conf # episodes.json need no override: stock mime.types already serve .txt as # text/plain and .json as application/json.) RUN sed -i '/listen /i\ location ~ \\.md$ { root /usr/share/nginx/html; default_type text/markdown; }' /etc/nginx/conf.d/default.conf -COPY --from=builder /site/public /usr/share/nginx/html +COPY --from=indexer /site/public /usr/share/nginx/html diff --git a/Dockerfile.dev b/Dockerfile.dev index ad5f0fde9..a71f78714 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,7 @@ ARG HUGO_VERSION=0.105.0 FROM registry.gitlab.com/pages/hugo/hugo_extended:${HUGO_VERSION} -CMD [ "serve", "-D", "--bind", "0.0.0.0" ] -ENTRYPOINT [ "hugo" ] \ No newline at end of file +ARG PAGEFIND_VERSION=1.6.0 +# The image's apk points at edge, whose inotify-tools segfaults on this base's musl; use the v3.17 build. +RUN apk add --no-cache --repositories-file /dev/null -X https://dl-cdn.alpinelinux.org/alpine/v3.17/main inotify-tools \ + && wget -qO- https://github.com/Pagefind/pagefind/releases/download/v${PAGEFIND_VERSION}/pagefind_extended-v${PAGEFIND_VERSION}-x86_64-unknown-linux-musl.tar.gz | tar -xz -C /usr/local/bin pagefind_extended +ENTRYPOINT [ "sh", "-c", "D=${TMPDIR:-/tmp}/jb-public; hugo server -D --bind 0.0.0.0 --renderToDisk --disableFastRender --destination $D 2>&1 | tee $D.log & until grep -q 'Web Server is available' $D.log 2>/dev/null; do sleep 1; done; pagefind_extended --site $D; while inotifywait -r -q -e modify,create,delete content data themes; do sleep 3; until tail -n1 $D.log | grep -q 'Total in\\|Press Ctrl'; do sleep 1; done; pagefind_extended --site $D; done" ] diff --git a/Makefile b/Makefile index c6ed48143..ae292839c 100644 --- a/Makefile +++ b/Makefile @@ -12,11 +12,11 @@ help: dev-build: ## Generate the development docker container docker build --rm -f Dockerfile.dev -t jb_hugo:latest . -dev: dev-build ## Run the development hugo container +dev: dev-build ## Run the development hugo container (serves /search/; first start indexes the site, edits re-index automatically) docker run --rm -it -v "$${PWD}":/app -w /app -p $${HOST_IP:-127.0.0.1}:1313:1313 jb_hugo:latest dev-metrics: dev-build ## Run the development hugo container with metrics - docker run --rm -it -v "$${PWD}":/app -w /app -p $${HOST_IP:-127.0.0.1}:1313:1313 jb_hugo:latest serve -D --bind 0.0.0.0 --templateMetrics --templateMetricsHints + docker run --rm -it --entrypoint hugo -v "$${PWD}":/app -w /app -p $${HOST_IP:-127.0.0.1}:1313:1313 jb_hugo:latest serve -D --bind 0.0.0.0 --templateMetrics --templateMetricsHints dev-tests: dev-build ## Run the development hugo container with every page pre-rendered (for `make tests` with parallel workers) docker run --rm -it -v "$${PWD}":/app -w /app -p $${HOST_IP:-127.0.0.1}:1313:1313 jb_hugo:latest serve -D --bind 0.0.0.0 --disableFastRender diff --git a/README.md b/README.md index a7d1363ed..1e051abe8 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,12 @@ To build and run the site run This will build the site (all 28000+ pages) and takes anywhere from 30s - 5 minutes depending on your hardware. This is expected due to the size of the site. +#### Search + +Search is [Pagefind](https://pagefind.app), run against the built site (`pagefind_extended --site`) in both the production `Dockerfile` and `make dev`. In `make dev` the first start also builds the index, so `/search/` works after about 2 to 5 minutes, and edits to `content`, `data` or `themes` re-index automatically (a few minutes after each change). + +Picks (`data/picks/*.yaml`) and sponsors have no pages of their own to index, so picks get a stub in `content/search-index/picks/.md` (front matter only; `slug_key` is the data file name) and sponsors use their `/sponsors//` page. The stub pages are removed from the production image after indexing. When you add a pick, add its stub too; the build fails if a stub has no matching data. + #### Deployment Deployment is done with Github Actions, see workflow file in `.github/workflows/deploy-prod.yml` diff --git a/config.toml b/config.toml index 7d6f257dd..871321a93 100644 --- a/config.toml +++ b/config.toml @@ -179,6 +179,12 @@ paginate = 12 url = "/contact/" weight =110 +[[Menu.Main]] + name = "Search" + identifier = "search" + url = "/search/" + weight =120 + # Footer Menu (left) [[Menu.FooterLeft]] name = "PeerTube" diff --git a/content/search-index/_index.md b/content/search-index/_index.md new file mode 100644 index 000000000..4991161cd --- /dev/null +++ b/content/search-index/_index.md @@ -0,0 +1,6 @@ +--- +title: "search-index" +_build: + render: never + list: never +--- diff --git a/content/search-index/picks/actual-budget.md b/content/search-index/picks/actual-budget.md new file mode 100644 index 000000000..782d7796c --- /dev/null +++ b/content/search-index/picks/actual-budget.md @@ -0,0 +1,7 @@ +--- +title: "actual-budget" +type: search-index +slug_key: actual-budget +_build: + list: never +--- diff --git a/content/search-index/picks/add-water.md b/content/search-index/picks/add-water.md new file mode 100644 index 000000000..999ca7406 --- /dev/null +++ b/content/search-index/picks/add-water.md @@ -0,0 +1,7 @@ +--- +title: "add-water" +type: search-index +slug_key: add-water +_build: + list: never +--- diff --git a/content/search-index/picks/alttp-vt-randomizer.md b/content/search-index/picks/alttp-vt-randomizer.md new file mode 100644 index 000000000..8c1ffa4bc --- /dev/null +++ b/content/search-index/picks/alttp-vt-randomizer.md @@ -0,0 +1,7 @@ +--- +title: "alttp-vt-randomizer" +type: search-index +slug_key: alttp-vt-randomizer +_build: + list: never +--- diff --git a/content/search-index/picks/atv-desktop-remote-a-simple-app-to-allow-you-to-control-an-apple-tv-from-your-desktop.md b/content/search-index/picks/atv-desktop-remote-a-simple-app-to-allow-you-to-control-an-apple-tv-from-your-desktop.md new file mode 100644 index 000000000..10f12eff1 --- /dev/null +++ b/content/search-index/picks/atv-desktop-remote-a-simple-app-to-allow-you-to-control-an-apple-tv-from-your-desktop.md @@ -0,0 +1,7 @@ +--- +title: "atv-desktop-remote-a-simple-app-to-allow-you-to-control-an-apple-tv-from-your-desktop" +type: search-index +slug_key: atv-desktop-remote-a-simple-app-to-allow-you-to-control-an-apple-tv-from-your-desktop +_build: + list: never +--- diff --git a/content/search-index/picks/bitchat.md b/content/search-index/picks/bitchat.md new file mode 100644 index 000000000..c9b3ae756 --- /dev/null +++ b/content/search-index/picks/bitchat.md @@ -0,0 +1,7 @@ +--- +title: "bitchat" +type: search-index +slug_key: bitchat +_build: + list: never +--- diff --git a/content/search-index/picks/bpftune.md b/content/search-index/picks/bpftune.md new file mode 100644 index 000000000..b2f9cf9f5 --- /dev/null +++ b/content/search-index/picks/bpftune.md @@ -0,0 +1,7 @@ +--- +title: "bpftune" +type: search-index +slug_key: bpftune +_build: + list: never +--- diff --git a/content/search-index/picks/cavalier.md b/content/search-index/picks/cavalier.md new file mode 100644 index 000000000..670f403d3 --- /dev/null +++ b/content/search-index/picks/cavalier.md @@ -0,0 +1,7 @@ +--- +title: "cavalier" +type: search-index +slug_key: cavalier +_build: + list: never +--- diff --git a/content/search-index/picks/cdemu.md b/content/search-index/picks/cdemu.md new file mode 100644 index 000000000..53a524e8f --- /dev/null +++ b/content/search-index/picks/cdemu.md @@ -0,0 +1,7 @@ +--- +title: "cdemu" +type: search-index +slug_key: cdemu +_build: + list: never +--- diff --git a/content/search-index/picks/chat-gipitty-terminal-client-for-getting-answers-from-llms.md b/content/search-index/picks/chat-gipitty-terminal-client-for-getting-answers-from-llms.md new file mode 100644 index 000000000..f1e8fb5ea --- /dev/null +++ b/content/search-index/picks/chat-gipitty-terminal-client-for-getting-answers-from-llms.md @@ -0,0 +1,7 @@ +--- +title: "chat-gipitty-terminal-client-for-getting-answers-from-llms" +type: search-index +slug_key: chat-gipitty-terminal-client-for-getting-answers-from-llms +_build: + list: never +--- diff --git a/content/search-index/picks/cheat.sh.md b/content/search-index/picks/cheat.sh.md new file mode 100644 index 000000000..ee2db3341 --- /dev/null +++ b/content/search-index/picks/cheat.sh.md @@ -0,0 +1,7 @@ +--- +title: "cheat.sh" +type: search-index +slug_key: cheat.sh +_build: + list: never +--- diff --git a/content/search-index/picks/direnv-vscode.md b/content/search-index/picks/direnv-vscode.md new file mode 100644 index 000000000..9dc96d00d --- /dev/null +++ b/content/search-index/picks/direnv-vscode.md @@ -0,0 +1,7 @@ +--- +title: "direnv-vscode" +type: search-index +slug_key: direnv-vscode +_build: + list: never +--- diff --git a/content/search-index/picks/dockercomposemaker.md b/content/search-index/picks/dockercomposemaker.md new file mode 100644 index 000000000..e66ad4fd2 --- /dev/null +++ b/content/search-index/picks/dockercomposemaker.md @@ -0,0 +1,7 @@ +--- +title: "dockercomposemaker" +type: search-index +slug_key: dockercomposemaker +_build: + list: never +--- diff --git a/content/search-index/picks/dotfiles-installer.md b/content/search-index/picks/dotfiles-installer.md new file mode 100644 index 000000000..17a3d8d84 --- /dev/null +++ b/content/search-index/picks/dotfiles-installer.md @@ -0,0 +1,7 @@ +--- +title: "dotfiles-installer" +type: search-index +slug_key: dotfiles-installer +_build: + list: never +--- diff --git a/content/search-index/picks/duf.md b/content/search-index/picks/duf.md new file mode 100644 index 000000000..9b25ad1e8 --- /dev/null +++ b/content/search-index/picks/duf.md @@ -0,0 +1,7 @@ +--- +title: "duf" +type: search-index +slug_key: duf +_build: + list: never +--- diff --git a/content/search-index/picks/easyeffects.md b/content/search-index/picks/easyeffects.md new file mode 100644 index 000000000..c5970f8bd --- /dev/null +++ b/content/search-index/picks/easyeffects.md @@ -0,0 +1,7 @@ +--- +title: "easyeffects" +type: search-index +slug_key: easyeffects +_build: + list: never +--- diff --git a/content/search-index/picks/eilmeldung-tui-rss-reader.md b/content/search-index/picks/eilmeldung-tui-rss-reader.md new file mode 100644 index 000000000..699273cad --- /dev/null +++ b/content/search-index/picks/eilmeldung-tui-rss-reader.md @@ -0,0 +1,7 @@ +--- +title: "eilmeldung-tui-rss-reader" +type: search-index +slug_key: eilmeldung-tui-rss-reader +_build: + list: never +--- diff --git a/content/search-index/picks/element.fm.md b/content/search-index/picks/element.fm.md new file mode 100644 index 000000000..924b25a1c --- /dev/null +++ b/content/search-index/picks/element.fm.md @@ -0,0 +1,7 @@ +--- +title: "element.fm" +type: search-index +slug_key: element.fm +_build: + list: never +--- diff --git a/content/search-index/picks/eloquent.md b/content/search-index/picks/eloquent.md new file mode 100644 index 000000000..f7ee7a353 --- /dev/null +++ b/content/search-index/picks/eloquent.md @@ -0,0 +1,7 @@ +--- +title: "eloquent" +type: search-index +slug_key: eloquent +_build: + list: never +--- diff --git a/content/search-index/picks/etesync-knotes.md b/content/search-index/picks/etesync-knotes.md new file mode 100644 index 000000000..5bf6207d5 --- /dev/null +++ b/content/search-index/picks/etesync-knotes.md @@ -0,0 +1,7 @@ +--- +title: "etesync-knotes" +type: search-index +slug_key: etesync-knotes +_build: + list: never +--- diff --git a/content/search-index/picks/ffshare.md b/content/search-index/picks/ffshare.md new file mode 100644 index 000000000..4743cb92f --- /dev/null +++ b/content/search-index/picks/ffshare.md @@ -0,0 +1,7 @@ +--- +title: "ffshare" +type: search-index +slug_key: ffshare +_build: + list: never +--- diff --git a/content/search-index/picks/garmindb.md b/content/search-index/picks/garmindb.md new file mode 100644 index 000000000..8ebb6ce5b --- /dev/null +++ b/content/search-index/picks/garmindb.md @@ -0,0 +1,7 @@ +--- +title: "garmindb" +type: search-index +slug_key: garmindb +_build: + list: never +--- diff --git a/content/search-index/picks/gemini-cli.md b/content/search-index/picks/gemini-cli.md new file mode 100644 index 000000000..73be0bfaf --- /dev/null +++ b/content/search-index/picks/gemini-cli.md @@ -0,0 +1,7 @@ +--- +title: "gemini-cli" +type: search-index +slug_key: gemini-cli +_build: + list: never +--- diff --git a/content/search-index/picks/gopher64.md b/content/search-index/picks/gopher64.md new file mode 100644 index 000000000..9dd1b5be2 --- /dev/null +++ b/content/search-index/picks/gopher64.md @@ -0,0 +1,7 @@ +--- +title: "gopher64" +type: search-index +slug_key: gopher64 +_build: + list: never +--- diff --git a/content/search-index/picks/hedgedoc.md b/content/search-index/picks/hedgedoc.md new file mode 100644 index 000000000..87a9ae537 --- /dev/null +++ b/content/search-index/picks/hedgedoc.md @@ -0,0 +1,7 @@ +--- +title: "hedgedoc" +type: search-index +slug_key: hedgedoc +_build: + list: never +--- diff --git "a/content/search-index/picks/hexecute-\360\237\252\204.md" "b/content/search-index/picks/hexecute-\360\237\252\204.md" new file mode 100644 index 000000000..6faca5f29 --- /dev/null +++ "b/content/search-index/picks/hexecute-\360\237\252\204.md" @@ -0,0 +1,7 @@ +--- +title: "hexecute-🪄" +type: search-index +slug_key: hexecute-🪄 +_build: + list: never +--- diff --git a/content/search-index/picks/high-tide.md b/content/search-index/picks/high-tide.md new file mode 100644 index 000000000..bd2c536ed --- /dev/null +++ b/content/search-index/picks/high-tide.md @@ -0,0 +1,7 @@ +--- +title: "high-tide" +type: search-index +slug_key: high-tide +_build: + list: never +--- diff --git a/content/search-index/picks/home-manager-webapps.md b/content/search-index/picks/home-manager-webapps.md new file mode 100644 index 000000000..2607ba2ce --- /dev/null +++ b/content/search-index/picks/home-manager-webapps.md @@ -0,0 +1,7 @@ +--- +title: "home-manager-webapps" +type: search-index +slug_key: home-manager-webapps +_build: + list: never +--- diff --git a/content/search-index/picks/ignition.md b/content/search-index/picks/ignition.md new file mode 100644 index 000000000..17def17ae --- /dev/null +++ b/content/search-index/picks/ignition.md @@ -0,0 +1,7 @@ +--- +title: "ignition" +type: search-index +slug_key: ignition +_build: + list: never +--- diff --git a/content/search-index/picks/isd.md b/content/search-index/picks/isd.md new file mode 100644 index 000000000..d6bb7624b --- /dev/null +++ b/content/search-index/picks/isd.md @@ -0,0 +1,7 @@ +--- +title: "isd" +type: search-index +slug_key: isd +_build: + list: never +--- diff --git a/content/search-index/picks/jellify-music.md b/content/search-index/picks/jellify-music.md new file mode 100644 index 000000000..043682331 --- /dev/null +++ b/content/search-index/picks/jellify-music.md @@ -0,0 +1,7 @@ +--- +title: "jellify-music" +type: search-index +slug_key: jellify-music +_build: + list: never +--- diff --git a/content/search-index/picks/junction.md b/content/search-index/picks/junction.md new file mode 100644 index 000000000..d4dd368b1 --- /dev/null +++ b/content/search-index/picks/junction.md @@ -0,0 +1,7 @@ +--- +title: "junction" +type: search-index +slug_key: junction +_build: + list: never +--- diff --git a/content/search-index/picks/kairpods.md b/content/search-index/picks/kairpods.md new file mode 100644 index 000000000..dfcf61f15 --- /dev/null +++ b/content/search-index/picks/kairpods.md @@ -0,0 +1,7 @@ +--- +title: "kairpods" +type: search-index +slug_key: kairpods +_build: + list: never +--- diff --git a/content/search-index/picks/kde-control-station.md b/content/search-index/picks/kde-control-station.md new file mode 100644 index 000000000..56122c02b --- /dev/null +++ b/content/search-index/picks/kde-control-station.md @@ -0,0 +1,7 @@ +--- +title: "kde-control-station" +type: search-index +slug_key: kde-control-station +_build: + list: never +--- diff --git a/content/search-index/picks/kopia.md b/content/search-index/picks/kopia.md new file mode 100644 index 000000000..2ec36a58b --- /dev/null +++ b/content/search-index/picks/kopia.md @@ -0,0 +1,7 @@ +--- +title: "kopia" +type: search-index +slug_key: kopia +_build: + list: never +--- diff --git a/content/search-index/picks/kvaesitso.md b/content/search-index/picks/kvaesitso.md new file mode 100644 index 000000000..a5fa3d71e --- /dev/null +++ b/content/search-index/picks/kvaesitso.md @@ -0,0 +1,7 @@ +--- +title: "kvaesitso" +type: search-index +slug_key: kvaesitso +_build: + list: never +--- diff --git a/content/search-index/picks/lazyssh.md b/content/search-index/picks/lazyssh.md new file mode 100644 index 000000000..32a3793a4 --- /dev/null +++ b/content/search-index/picks/lazyssh.md @@ -0,0 +1,7 @@ +--- +title: "lazyssh" +type: search-index +slug_key: lazyssh +_build: + list: never +--- diff --git a/content/search-index/picks/leantime.md b/content/search-index/picks/leantime.md new file mode 100644 index 000000000..a418d1d10 --- /dev/null +++ b/content/search-index/picks/leantime.md @@ -0,0 +1,7 @@ +--- +title: "leantime" +type: search-index +slug_key: leantime +_build: + list: never +--- diff --git "a/content/search-index/picks/lemurs-\360\237\220\222.md" "b/content/search-index/picks/lemurs-\360\237\220\222.md" new file mode 100644 index 000000000..b28dcf441 --- /dev/null +++ "b/content/search-index/picks/lemurs-\360\237\220\222.md" @@ -0,0 +1,7 @@ +--- +title: "lemurs-🐒" +type: search-index +slug_key: lemurs-🐒 +_build: + list: never +--- diff --git a/content/search-index/picks/lenspect.md b/content/search-index/picks/lenspect.md new file mode 100644 index 000000000..1eb89dd3b --- /dev/null +++ b/content/search-index/picks/lenspect.md @@ -0,0 +1,7 @@ +--- +title: "lenspect" +type: search-index +slug_key: lenspect +_build: + list: never +--- diff --git a/content/search-index/picks/linuxinexcel.md b/content/search-index/picks/linuxinexcel.md new file mode 100644 index 000000000..6bdeeac50 --- /dev/null +++ b/content/search-index/picks/linuxinexcel.md @@ -0,0 +1,7 @@ +--- +title: "linuxinexcel" +type: search-index +slug_key: linuxinexcel +_build: + list: never +--- diff --git a/content/search-index/picks/lue.md b/content/search-index/picks/lue.md new file mode 100644 index 000000000..c031f7b3f --- /dev/null +++ b/content/search-index/picks/lue.md @@ -0,0 +1,7 @@ +--- +title: "lue" +type: search-index +slug_key: lue +_build: + list: never +--- diff --git a/content/search-index/picks/mazanoke.md b/content/search-index/picks/mazanoke.md new file mode 100644 index 000000000..7c7f8b9b8 --- /dev/null +++ b/content/search-index/picks/mazanoke.md @@ -0,0 +1,7 @@ +--- +title: "mazanoke" +type: search-index +slug_key: mazanoke +_build: + list: never +--- diff --git a/content/search-index/picks/meshsidecar.md b/content/search-index/picks/meshsidecar.md new file mode 100644 index 000000000..a6c245815 --- /dev/null +++ b/content/search-index/picks/meshsidecar.md @@ -0,0 +1,7 @@ +--- +title: "meshsidecar" +type: search-index +slug_key: meshsidecar +_build: + list: never +--- diff --git a/content/search-index/picks/millisecond.md b/content/search-index/picks/millisecond.md new file mode 100644 index 000000000..c4c4e9ced --- /dev/null +++ b/content/search-index/picks/millisecond.md @@ -0,0 +1,7 @@ +--- +title: "millisecond" +type: search-index +slug_key: millisecond +_build: + list: never +--- diff --git a/content/search-index/picks/mqtt.md b/content/search-index/picks/mqtt.md new file mode 100644 index 000000000..e61182e18 --- /dev/null +++ b/content/search-index/picks/mqtt.md @@ -0,0 +1,7 @@ +--- +title: "mqtt" +type: search-index +slug_key: mqtt +_build: + list: never +--- diff --git a/content/search-index/picks/mqtt5-explorer.md b/content/search-index/picks/mqtt5-explorer.md new file mode 100644 index 000000000..a65b6570d --- /dev/null +++ b/content/search-index/picks/mqtt5-explorer.md @@ -0,0 +1,7 @@ +--- +title: "mqtt5-explorer" +type: search-index +slug_key: mqtt5-explorer +_build: + list: never +--- diff --git a/content/search-index/picks/netop.md b/content/search-index/picks/netop.md new file mode 100644 index 000000000..cc65e0f9e --- /dev/null +++ b/content/search-index/picks/netop.md @@ -0,0 +1,7 @@ +--- +title: "netop" +type: search-index +slug_key: netop +_build: + list: never +--- diff --git a/content/search-index/picks/nping.md b/content/search-index/picks/nping.md new file mode 100644 index 000000000..4ab166227 --- /dev/null +++ b/content/search-index/picks/nping.md @@ -0,0 +1,7 @@ +--- +title: "nping" +type: search-index +slug_key: nping +_build: + list: never +--- diff --git a/content/search-index/picks/openaudible-to-audiblebookshelf.md b/content/search-index/picks/openaudible-to-audiblebookshelf.md new file mode 100644 index 000000000..2f1f75099 --- /dev/null +++ b/content/search-index/picks/openaudible-to-audiblebookshelf.md @@ -0,0 +1,7 @@ +--- +title: "openaudible-to-audiblebookshelf" +type: search-index +slug_key: openaudible-to-audiblebookshelf +_build: + list: never +--- diff --git a/content/search-index/picks/papra.md b/content/search-index/picks/papra.md new file mode 100644 index 000000000..2814702eb --- /dev/null +++ b/content/search-index/picks/papra.md @@ -0,0 +1,7 @@ +--- +title: "papra" +type: search-index +slug_key: papra +_build: + list: never +--- diff --git a/content/search-index/picks/parabolic.md b/content/search-index/picks/parabolic.md new file mode 100644 index 000000000..a074fd306 --- /dev/null +++ b/content/search-index/picks/parabolic.md @@ -0,0 +1,7 @@ +--- +title: "parabolic" +type: search-index +slug_key: parabolic +_build: + list: never +--- diff --git a/content/search-index/picks/planify.md b/content/search-index/picks/planify.md new file mode 100644 index 000000000..7e6cab8e4 --- /dev/null +++ b/content/search-index/picks/planify.md @@ -0,0 +1,7 @@ +--- +title: "planify" +type: search-index +slug_key: planify +_build: + list: never +--- diff --git a/content/search-index/picks/plexripper.md b/content/search-index/picks/plexripper.md new file mode 100644 index 000000000..14636fcd8 --- /dev/null +++ b/content/search-index/picks/plexripper.md @@ -0,0 +1,7 @@ +--- +title: "plexripper" +type: search-index +slug_key: plexripper +_build: + list: never +--- diff --git a/content/search-index/picks/pocket-tts.md b/content/search-index/picks/pocket-tts.md new file mode 100644 index 000000000..074f8ce9e --- /dev/null +++ b/content/search-index/picks/pocket-tts.md @@ -0,0 +1,7 @@ +--- +title: "pocket-tts" +type: search-index +slug_key: pocket-tts +_build: + list: never +--- diff --git a/content/search-index/picks/poop-(performance-optimizer-observation-platform).md b/content/search-index/picks/poop-(performance-optimizer-observation-platform).md new file mode 100644 index 000000000..f40958e6b --- /dev/null +++ b/content/search-index/picks/poop-(performance-optimizer-observation-platform).md @@ -0,0 +1,7 @@ +--- +title: "poop-(performance-optimizer-observation-platform)" +type: search-index +slug_key: poop-(performance-optimizer-observation-platform) +_build: + list: never +--- diff --git a/content/search-index/picks/poweriso.md b/content/search-index/picks/poweriso.md new file mode 100644 index 000000000..702110738 --- /dev/null +++ b/content/search-index/picks/poweriso.md @@ -0,0 +1,7 @@ +--- +title: "poweriso" +type: search-index +slug_key: poweriso +_build: + list: never +--- diff --git a/content/search-index/picks/pyatv-a-client-library-for-apple-tv-and-airplay-devices.md b/content/search-index/picks/pyatv-a-client-library-for-apple-tv-and-airplay-devices.md new file mode 100644 index 000000000..2e0208cc2 --- /dev/null +++ b/content/search-index/picks/pyatv-a-client-library-for-apple-tv-and-airplay-devices.md @@ -0,0 +1,7 @@ +--- +title: "pyatv-a-client-library-for-apple-tv-and-airplay-devices" +type: search-index +slug_key: pyatv-a-client-library-for-apple-tv-and-airplay-devices +_build: + list: never +--- diff --git a/content/search-index/picks/ramalama.md b/content/search-index/picks/ramalama.md new file mode 100644 index 000000000..9fc85b4a8 --- /dev/null +++ b/content/search-index/picks/ramalama.md @@ -0,0 +1,7 @@ +--- +title: "ramalama" +type: search-index +slug_key: ramalama +_build: + list: never +--- diff --git a/content/search-index/picks/recordapps.md b/content/search-index/picks/recordapps.md new file mode 100644 index 000000000..2cfedfc83 --- /dev/null +++ b/content/search-index/picks/recordapps.md @@ -0,0 +1,7 @@ +--- +title: "recordapps" +type: search-index +slug_key: recordapps +_build: + list: never +--- diff --git a/content/search-index/picks/rustnet.md b/content/search-index/picks/rustnet.md new file mode 100644 index 000000000..68c421a64 --- /dev/null +++ b/content/search-index/picks/rustnet.md @@ -0,0 +1,7 @@ +--- +title: "rustnet" +type: search-index +slug_key: rustnet +_build: + list: never +--- diff --git a/content/search-index/picks/savr-read-it-later.-keep-it-local.-no-server-needed..md b/content/search-index/picks/savr-read-it-later.-keep-it-local.-no-server-needed..md new file mode 100644 index 000000000..050f48c1f --- /dev/null +++ b/content/search-index/picks/savr-read-it-later.-keep-it-local.-no-server-needed..md @@ -0,0 +1,7 @@ +--- +title: "savr-read-it-later.-keep-it-local.-no-server-needed." +type: search-index +slug_key: savr-read-it-later.-keep-it-local.-no-server-needed. +_build: + list: never +--- diff --git a/content/search-index/picks/sniffnet.md b/content/search-index/picks/sniffnet.md new file mode 100644 index 000000000..350895287 --- /dev/null +++ b/content/search-index/picks/sniffnet.md @@ -0,0 +1,7 @@ +--- +title: "sniffnet" +type: search-index +slug_key: sniffnet +_build: + list: never +--- diff --git a/content/search-index/picks/soltros.md b/content/search-index/picks/soltros.md new file mode 100644 index 000000000..ff284fbdc --- /dev/null +++ b/content/search-index/picks/soltros.md @@ -0,0 +1,7 @@ +--- +title: "soltros" +type: search-index +slug_key: soltros +_build: + list: never +--- diff --git a/content/search-index/picks/somo.md b/content/search-index/picks/somo.md new file mode 100644 index 000000000..5ec796453 --- /dev/null +++ b/content/search-index/picks/somo.md @@ -0,0 +1,7 @@ +--- +title: "somo" +type: search-index +slug_key: somo +_build: + list: never +--- diff --git a/content/search-index/picks/spectacle-ocr-screenshot.md b/content/search-index/picks/spectacle-ocr-screenshot.md new file mode 100644 index 000000000..af69848ea --- /dev/null +++ b/content/search-index/picks/spectacle-ocr-screenshot.md @@ -0,0 +1,7 @@ +--- +title: "spectacle-ocr-screenshot" +type: search-index +slug_key: spectacle-ocr-screenshot +_build: + list: never +--- diff --git a/content/search-index/picks/spectacle-ocr.md b/content/search-index/picks/spectacle-ocr.md new file mode 100644 index 000000000..5862a69d9 --- /dev/null +++ b/content/search-index/picks/spectacle-ocr.md @@ -0,0 +1,7 @@ +--- +title: "spectacle-ocr" +type: search-index +slug_key: spectacle-ocr +_build: + list: never +--- diff --git a/content/search-index/picks/ssh-studio.md b/content/search-index/picks/ssh-studio.md new file mode 100644 index 000000000..b430fe2a4 --- /dev/null +++ b/content/search-index/picks/ssh-studio.md @@ -0,0 +1,7 @@ +--- +title: "ssh-studio" +type: search-index +slug_key: ssh-studio +_build: + list: never +--- diff --git a/content/search-index/picks/subgen.md b/content/search-index/picks/subgen.md new file mode 100644 index 000000000..ac0c10760 --- /dev/null +++ b/content/search-index/picks/subgen.md @@ -0,0 +1,7 @@ +--- +title: "subgen" +type: search-index +slug_key: subgen +_build: + list: never +--- diff --git a/content/search-index/picks/switcheroo.md b/content/search-index/picks/switcheroo.md new file mode 100644 index 000000000..5f7958bd4 --- /dev/null +++ b/content/search-index/picks/switcheroo.md @@ -0,0 +1,7 @@ +--- +title: "switcheroo" +type: search-index +slug_key: switcheroo +_build: + list: never +--- diff --git a/content/search-index/picks/tab-session-manager.md b/content/search-index/picks/tab-session-manager.md new file mode 100644 index 000000000..d083b53d8 --- /dev/null +++ b/content/search-index/picks/tab-session-manager.md @@ -0,0 +1,7 @@ +--- +title: "tab-session-manager" +type: search-index +slug_key: tab-session-manager +_build: + list: never +--- diff --git a/content/search-index/picks/term.everything.md b/content/search-index/picks/term.everything.md new file mode 100644 index 000000000..a7417871d --- /dev/null +++ b/content/search-index/picks/term.everything.md @@ -0,0 +1,7 @@ +--- +title: "term.everything" +type: search-index +slug_key: term.everything +_build: + list: never +--- diff --git a/content/search-index/picks/toney.md b/content/search-index/picks/toney.md new file mode 100644 index 000000000..b706bdf2e --- /dev/null +++ b/content/search-index/picks/toney.md @@ -0,0 +1,7 @@ +--- +title: "toney" +type: search-index +slug_key: toney +_build: + list: never +--- diff --git a/content/search-index/picks/treetrumamazon-kindle-bulk-downloader.md b/content/search-index/picks/treetrumamazon-kindle-bulk-downloader.md new file mode 100644 index 000000000..9304da203 --- /dev/null +++ b/content/search-index/picks/treetrumamazon-kindle-bulk-downloader.md @@ -0,0 +1,7 @@ +--- +title: "treetrumamazon-kindle-bulk-downloader" +type: search-index +slug_key: treetrumamazon-kindle-bulk-downloader +_build: + list: never +--- diff --git a/content/search-index/picks/ulauncher.md b/content/search-index/picks/ulauncher.md new file mode 100644 index 000000000..79d62544b --- /dev/null +++ b/content/search-index/picks/ulauncher.md @@ -0,0 +1,7 @@ +--- +title: "ulauncher" +type: search-index +slug_key: ulauncher +_build: + list: never +--- diff --git a/content/search-index/picks/unify.md b/content/search-index/picks/unify.md new file mode 100644 index 000000000..d2fada2f8 --- /dev/null +++ b/content/search-index/picks/unify.md @@ -0,0 +1,7 @@ +--- +title: "unify" +type: search-index +slug_key: unify +_build: + list: never +--- diff --git a/content/search-index/picks/vtunnel.md b/content/search-index/picks/vtunnel.md new file mode 100644 index 000000000..613bd205d --- /dev/null +++ b/content/search-index/picks/vtunnel.md @@ -0,0 +1,7 @@ +--- +title: "vtunnel" +type: search-index +slug_key: vtunnel +_build: + list: never +--- diff --git a/content/search-index/picks/wakemypotato.md b/content/search-index/picks/wakemypotato.md new file mode 100644 index 000000000..a3af0eb25 --- /dev/null +++ b/content/search-index/picks/wakemypotato.md @@ -0,0 +1,7 @@ +--- +title: "wakemypotato" +type: search-index +slug_key: wakemypotato +_build: + list: never +--- diff --git a/content/search-index/picks/warehouse-on-linux--flathub.md b/content/search-index/picks/warehouse-on-linux--flathub.md new file mode 100644 index 000000000..2cef08fc0 --- /dev/null +++ b/content/search-index/picks/warehouse-on-linux--flathub.md @@ -0,0 +1,7 @@ +--- +title: "warehouse-on-linux--flathub" +type: search-index +slug_key: warehouse-on-linux--flathub +_build: + list: never +--- diff --git a/content/search-index/picks/web-app-hub.md b/content/search-index/picks/web-app-hub.md new file mode 100644 index 000000000..4ab836bb3 --- /dev/null +++ b/content/search-index/picks/web-app-hub.md @@ -0,0 +1,7 @@ +--- +title: "web-app-hub" +type: search-index +slug_key: web-app-hub +_build: + list: never +--- diff --git a/content/search-index/picks/webview-kiosk.md b/content/search-index/picks/webview-kiosk.md new file mode 100644 index 000000000..9770b1d29 --- /dev/null +++ b/content/search-index/picks/webview-kiosk.md @@ -0,0 +1,7 @@ +--- +title: "webview-kiosk" +type: search-index +slug_key: webview-kiosk +_build: + list: never +--- diff --git a/content/search-index/picks/wlgblock.md b/content/search-index/picks/wlgblock.md new file mode 100644 index 000000000..6661f41c0 --- /dev/null +++ b/content/search-index/picks/wlgblock.md @@ -0,0 +1,7 @@ +--- +title: "wlgblock" +type: search-index +slug_key: wlgblock +_build: + list: never +--- diff --git a/content/search-index/picks/ws4kp.md b/content/search-index/picks/ws4kp.md new file mode 100644 index 000000000..34ee1bc65 --- /dev/null +++ b/content/search-index/picks/ws4kp.md @@ -0,0 +1,7 @@ +--- +title: "ws4kp" +type: search-index +slug_key: ws4kp +_build: + list: never +--- diff --git a/content/search-index/picks/youtarr.md b/content/search-index/picks/youtarr.md new file mode 100644 index 000000000..d7b7524bc --- /dev/null +++ b/content/search-index/picks/youtarr.md @@ -0,0 +1,7 @@ +--- +title: "youtarr" +type: search-index +slug_key: youtarr +_build: + list: never +--- diff --git a/content/search-index/picks/ytdl-sub.md b/content/search-index/picks/ytdl-sub.md new file mode 100644 index 000000000..d6d869409 --- /dev/null +++ b/content/search-index/picks/ytdl-sub.md @@ -0,0 +1,7 @@ +--- +title: "ytdl-sub" +type: search-index +slug_key: ytdl-sub +_build: + list: never +--- diff --git a/content/search-index/picks/zbridge.md b/content/search-index/picks/zbridge.md new file mode 100644 index 000000000..76a39dd28 --- /dev/null +++ b/content/search-index/picks/zbridge.md @@ -0,0 +1,7 @@ +--- +title: "zbridge" +type: search-index +slug_key: zbridge +_build: + list: never +--- diff --git a/content/search/_index.md b/content/search/_index.md new file mode 100644 index 000000000..8c1e23c8e --- /dev/null +++ b/content/search/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Search" +description = "Search the Jupiter Broadcasting site" +date = "2023-01-15T00:10:01-05:00" +draft = false ++++ diff --git a/test/conftest.py b/test/conftest.py index fece5c9d2..89d48ca52 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -200,4 +200,5 @@ def expect_nav_items() -> List[Dict[str,str]]: {'title': 'Archive', 'href': '/archive/'}, # failing on tests here: https://github.com/JupiterBroadcasting/jupiterbroadcasting.com/runs/8254156209?check_suite_focus=true#step:9:26 {'title': 'Contact', 'href': '/contact/'}, + {'title': 'Search', 'href': '/search/'}, ] diff --git a/test/e2e/test_search.py b/test/e2e/test_search.py new file mode 100644 index 000000000..0c0c71821 --- /dev/null +++ b/test/e2e/test_search.py @@ -0,0 +1,128 @@ +from pathlib import Path +import pytest +from playwright.sync_api import Page, expect + + +def search(page: Page, query: str): + page.goto("/search/") + page.fill("#search-input", query) + + +def test_search_screenshot(page: Page, screenshot_dir: Path): + search(page, "add water") + expect(page.locator(".search-result").first).to_be_visible() + page.screenshot(path=f"{screenshot_dir}/search.png", full_page=True) + + +def test_pick_ranks_first(page: Page): + search(page, "add water") + first = page.locator(".search-result").first + expect(first).to_have_attribute("data-type", "pick") + expect(first.locator("a").first).to_have_attribute("href", "https://flathub.org/apps/dev.qwery.AddWater") + + +def test_sponsor_ranks_first(page: Page): + search(page, "1password") + expect(page.locator(".search-result").first).to_have_attribute("data-type", "sponsor") + + +def test_episode_title_found(page: Page): + search(page, "All Your Kernels Belong to Rust") + episode = page.locator('.search-result[data-type="episode"] a[href*="/show/linux-unplugged/603"]') + expect(episode.first).to_be_visible() + + +def test_person_found(page: Page): + search(page, "Hannah Anderson") + expect(page.locator('.search-result[data-type="person"]').first).to_be_visible() + + +def test_empty_query_shows_nothing(page: Page): + search(page, "add water") + expect(page.locator(".search-result").first).to_be_visible() + page.fill("#search-input", " ") + expect(page.locator("#search-results > *")).to_have_count(0) + expect(page.locator("#search-status")).to_have_text("") + + +def test_no_results_message(page: Page): + search(page, "xkcdqzv 77777") + expect(page.locator("#search-status")).to_have_text("No results") + + +def test_markup_is_escaped(page: Page): + dialogs = [] + page.on("dialog", lambda d: (dialogs.append(d), d.dismiss())) + search(page, " +{{ end }} + +{{ define "main" }} +
+

{{ .Title }}

+ +
+
+ +
+
+

+
+
+{{ end }} diff --git a/themes/jb/layouts/show/list.html b/themes/jb/layouts/show/list.html index 87f5e21a8..523e75939 100644 --- a/themes/jb/layouts/show/list.html +++ b/themes/jb/layouts/show/list.html @@ -31,8 +31,14 @@ {{ else }} +{{ $episode_paginator := .Paginate (where .Pages "Type" "episode") }} +{{/* Only page 1 is indexed so paginated copies of the show page do not show up as duplicate results. */}} +

{{.Title}}

+ {{- if not .Params.active }} + + {{- end }}
@@ -59,6 +65,7 @@

Your Hosts

{{end}}
+
@@ -69,7 +76,6 @@

Your Hosts

{{ end }} - {{ $episode_paginator := .Paginate (where .Pages "Type" "episode") }} {{ range $episode_paginator.Pages }}
{{ partial "episode/preview.html" . }} diff --git a/themes/jb/layouts/sponsors/single.html b/themes/jb/layouts/sponsors/single.html new file mode 100644 index 000000000..079ef646b --- /dev/null +++ b/themes/jb/layouts/sponsors/single.html @@ -0,0 +1,20 @@ +{{ define "main" }} +
+
+
+

{{ .Title }}

+

{{ .Params.description }}

+

{{ .Params.link }}

+ {{- $episodes := where (where site.RegularPages "Type" "episode") "Params.sponsors" "intersect" (slice .Params.shortname) }} + {{- $shows := slice }} + {{- range $episodes }}{{ $shows = $shows | append .CurrentSection.Title }}{{ end }} + {{- with uniq $shows }} + {{ delimit (sort .) ", " }} + {{- end }} + {{- with .Params.episode }} + {{ . }} + {{- end }} +
+
+
+{{ end }} diff --git a/themes/jb/layouts/taxonomy/guest.html b/themes/jb/layouts/taxonomy/guest.html index 88417562d..37deb9305 100644 --- a/themes/jb/layouts/taxonomy/guest.html +++ b/themes/jb/layouts/taxonomy/guest.html @@ -2,7 +2,8 @@
-
+ {{/* People who are also hosts are indexed once, via their host page. */}} +
{{ $current_page_type := .Data.Singular }} {{ $person := index ( diff --git a/themes/jb/layouts/taxonomy/host.html b/themes/jb/layouts/taxonomy/host.html index 3a1499c6c..c84c81b43 100644 --- a/themes/jb/layouts/taxonomy/host.html +++ b/themes/jb/layouts/taxonomy/host.html @@ -2,7 +2,7 @@
-
+
{{ $current_page_type := .Data.Singular }} {{ $person := index (