Skip to content

Commit b1f48e9

Browse files
authored
Add Typesense (#44)
1 parent d6cadef commit b1f48e9

File tree

14 files changed

+557
-4
lines changed

14 files changed

+557
-4
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ jobs:
2424
- name: Check mix format
2525
run: mix format --check-formatted
2626

27+
- name: Start Typesense
28+
run: docker compose up -d typesense
29+
2730
- name: Run tests
2831
run: |
29-
mix test
32+
mix test --include typesense

compose.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
services:
2+
typesense:
3+
image: typesense/typesense:27.1
4+
command: --data-dir /tmp --api-key=hexdocs
5+
ports:
6+
- 8108:8108

config/config.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ config :hexdocs,
44
port: "4002",
55
hexpm_url: "http://localhost:4000",
66
hexpm_secret: "2cd6d09334d4b00a2be4d532342b799b",
7+
typesense_url: "http://localhost:8108",
8+
typesense_api_key: "hexdocs",
9+
typesense_collection: "hexdocs",
710
hexpm_impl: Hexdocs.Hexpm.Impl,
811
store_impl: Hexdocs.Store.Local,
912
cdn_impl: Hexdocs.CDN.Local,
13+
search_impl: Hexdocs.Search.Local,
1014
source_repo_impl: Hexdocs.SourceRepo.GitHub,
1115
tmp_dir: "tmp",
1216
queue_id: "test",

config/dev.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ config :hexdocs,
55
hexpm_url: "http://localhost:4000",
66
hexpm_impl: Hexdocs.Hexpm.Impl,
77
store_impl: Hexdocs.Store.Local,
8-
cdn_impl: Hexdocs.CDN.Local
8+
cdn_impl: Hexdocs.CDN.Local,
9+
search_impl: Hexdocs.Search.Local

config/prod.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ config :hexdocs,
44
hexpm_impl: Hexdocs.Hexpm.Impl,
55
store_impl: Hexdocs.Store.Impl,
66
cdn_impl: Hexdocs.CDN.Fastly,
7+
search_impl: Hexdocs.Search.Typesense,
78
queue_producer: BroadwaySQS.Producer,
89
gcs_put_debounce: 3000
910

config/runtime.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ if config_env() == :prod do
55
port: System.fetch_env!("HEXDOCS_PORT"),
66
hexpm_url: System.fetch_env!("HEXDOCS_HEXPM_URL"),
77
hexpm_secret: System.fetch_env!("HEXDOCS_HEXPM_SECRET"),
8+
typesense_url: System.fetch_env!("HEXDOCS_TYPESENSE_URL"),
9+
typesense_api_key: System.fetch_env!("HEXDOCS_TYPESENSE_API_KEY"),
10+
typesense_collection: System.fetch_env!("HEXDOCS_TYPESENSE_COLLECTION"),
811
fastly_key: System.fetch_env!("HEXDOCS_FASTLY_KEY"),
912
fastly_hexdocs: System.fetch_env!("HEXDOCS_FASTLY_HEXDOCS"),
1013
queue_id: System.fetch_env!("HEXDOCS_QUEUE_ID"),

config/test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ config :hexdocs,
66
hexpm_impl: Hexdocs.HexpmMock,
77
store_impl: Hexdocs.Store.Local,
88
cdn_impl: Hexdocs.CDN.Local,
9+
search_impl: Hexdocs.Search.Local,
910
source_repo_impl: Hexdocs.SourceRepo.Mock
1011

1112
config :logger, level: :warning

lib/hexdocs/http.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ defmodule Hexdocs.HTTP do
2323
|> read_response()
2424
end
2525

26+
def post(url, headers, body, opts \\ []) do
27+
:hackney.post(url, headers, body, opts)
28+
end
29+
2630
def delete(url, headers) do
2731
:hackney.delete(url, headers)
2832
|> read_response()

lib/hexdocs/queue.ex

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,12 @@ defmodule Hexdocs.Queue do
125125
update_package_sitemap(repository, key, package, files)
126126
end
127127

128+
if repository == "hexpm" do
129+
update_search_index(key, package, version, files)
130+
end
131+
128132
elapsed = System.os_time(:millisecond) - start
129-
Logger.info("FINISHED UPLOADING DOCS #{key} #{elapsed}ms")
133+
Logger.info("FINISHED UPLOADING AND INDEXING DOCS #{key} #{elapsed}ms")
130134

131135
{:error, reason} ->
132136
Logger.error("Failed unpack #{repository}/#{package} #{version}: #{reason}")
@@ -149,6 +153,10 @@ defmodule Hexdocs.Queue do
149153
Hexdocs.Bucket.delete(repository, package, version, all_versions)
150154
update_index_sitemap(repository, key)
151155

156+
if repository == "hexpm" do
157+
Hexdocs.Search.delete(package, version)
158+
end
159+
152160
elapsed = System.os_time(:millisecond) - start
153161
Logger.info("FINISHED DELETING DOCS #{key} #{elapsed}ms")
154162
:ok
@@ -228,6 +236,14 @@ defmodule Hexdocs.Queue do
228236
:ok
229237
end
230238

239+
defp update_search_index(key, package, version, files) do
240+
with {proglang, items} <- Hexdocs.Search.find_search_items(package, version, files) do
241+
Logger.info("UPDATING SEARCH INDEX #{key}")
242+
Hexdocs.Search.index(package, version, proglang, items)
243+
Logger.info("UPDATED SEARCH INDEX #{key}")
244+
end
245+
end
246+
231247
@doc false
232248
def paths_for_sitemaps() do
233249
key_regex = ~r"docs/(.*)-(.*).tar.gz$"

lib/hexdocs/search/local.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule Hexdocs.Search.Local do
2+
@behaviour Hexdocs.Search
3+
4+
@impl true
5+
def index(_package, _version, _proglang, _items), do: :ok
6+
7+
@impl true
8+
def delete(_package, _version), do: :ok
9+
end

0 commit comments

Comments
 (0)