Skip to content

Commit 78ea518

Browse files
authored
Merge pull request #104 from yknx4/features/open-api
feature: open api
2 parents 5c9968a + dfaff05 commit 78ea518

File tree

19 files changed

+529
-307
lines changed

19 files changed

+529
-307
lines changed

.github/workflows/tests.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,10 @@ jobs:
124124
BRANCH: ${{ github.ref }}
125125
TOKEN: ${{ secrets.OPENCOV_TOKEN }}
126126
COVERALLS_ENDPOINT: ${{ secrets.OPENCOV_ENDPOINT }}
127-
RUN_NUMBER: ${{ github.run_id }}
128127
run: |
129128
MIX_ENV=test mix coveralls.post \
130-
--name github-actions \
131-
--build "$RUN_NUMBER" \
129+
--name github \
130+
--build "$GITHUB_RUN_ID" \
132131
--sha "$SHA" \
133132
--committer "$(git log -1 $SHA --pretty=format:'%cN')" \
134133
--message "$(git log -1 $SHA --pretty=format:'%s')" \

lib/opencov/plug/multipart_job.ex

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
defmodule Librecov.Plug.MultipartJob do
2+
@moduledoc """
3+
Module plug that will cast a given multiform upload and convert it to the expected json
4+
"""
5+
6+
@behaviour Plug
7+
8+
alias Plug.Conn
9+
10+
@impl Plug
11+
def init(opts) do
12+
opts
13+
end
14+
15+
@impl Plug
16+
def call(conn, _) do
17+
content_type =
18+
case Conn.get_req_header(conn, "content-type") do
19+
[header_value | _] ->
20+
header_value
21+
|> String.split(";")
22+
|> Enum.at(0)
23+
24+
_ ->
25+
nil
26+
end
27+
28+
handle(content_type, conn)
29+
end
30+
31+
def handle("application/json", %{params: %{"json" => json}} = conn) when is_binary(json) do
32+
conn
33+
|> put_parsed_job(json)
34+
end
35+
36+
def handle("multipart/form-data", %{params: %{"json_file" => file}} = conn) do
37+
conn
38+
|> put_parsed_job(file |> read_file())
39+
end
40+
41+
def handle(content_type, conn) do
42+
conn
43+
end
44+
45+
def put_parsed_job(conn, json) do
46+
parsed_json = Jason.decode!(json)
47+
48+
%{
49+
(conn
50+
|> Conn.put_req_header("content-type", "application/json"))
51+
| params: parsed_json,
52+
body_params: parsed_json
53+
}
54+
end
55+
56+
defp read_file(%Plug.Upload{content_type: "gzip/json", path: path}) do
57+
path
58+
|> File.stream!([], 2048)
59+
|> StreamGzip.gunzip()
60+
|> Enum.into("")
61+
end
62+
63+
defp read_file(%Plug.Upload{path: path}) do
64+
path
65+
|> File.read!()
66+
end
67+
end

lib/opencov/services/github/comments.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ defmodule Librecov.Services.Github.Comments do
3030
"Error processing add_pr_comment(pr_message, #{token}, #{owner}, #{repo}, #{branch}): #{message}."
3131
)
3232

33-
e ->
33+
_ ->
3434
raise(
3535
"Error processing add_pr_comment(pr_message, #{token}, #{owner}, #{repo}, #{branch})."
3636
)

lib/opencov/templates/comment_template.ex

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ defmodule Librecov.Templates.CommentTemplate do
44
alias Librecov.Endpoint
55
alias Librecov.JobManager
66
alias Librecov.File
7-
alias Librecov.Job
87
import Librecov.Router.Helpers
98
import Librecov.Helpers.Coverage
109

@@ -18,22 +17,25 @@ defmodule Librecov.Templates.CommentTemplate do
1817
previous_coverage: previous_coverage,
1918
commit_sha: commit,
2019
branch: branch
21-
},
22-
%Job{} = job
20+
} = build
2321
) do
22+
build = Repo.preload(build, :jobs)
2423
real_previous_coverage = project_coverage || previous_coverage || 0.0
2524
cov_dif = coverage_diff(coverage, real_previous_coverage)
2625

2726
report_url = build_url(Endpoint, :show, build_id)
2827

29-
job =
30-
job
28+
jobs =
29+
build.jobs
3130
|> JobManager.preload_files()
3231

3332
files =
34-
job.files
35-
|> Enum.filter(fn %File{coverage: coverage, previous_coverage: previous_coverage} ->
36-
coverage_diff(coverage, previous_coverage) != 0
33+
jobs
34+
|> Enum.flat_map(fn job ->
35+
job.files
36+
|> Enum.filter(fn %File{coverage: coverage, previous_coverage: previous_coverage} ->
37+
coverage_diff(coverage, previous_coverage) != 0
38+
end)
3739
end)
3840

3941
"""

mix.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ defmodule Librecov.Mixfile do
7272
{:meck, "~> 0.9", override: true},
7373
{:tesla, "~> 1.2"},
7474
{:poison, "~> 3.0"},
75-
{:ex_octocat, github: "yknx4/ex_octocat", tag: "v1.1.4.1"}
75+
{:ex_octocat, github: "yknx4/ex_octocat", tag: "v1.1.4.1"},
76+
{:open_api_spex, "~> 3.10"}
7677
]
7778
end
7879

mix.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"},
4848
"navigation_history": {:hex, :navigation_history, "0.4.0", "addf6342e434d3423ede47d7f1d5badc82591373d689ae13ef3d03cd9152a644", [:mix], [{:plug, "~> 1.1", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "a776c75c355361d028a572e6cfaffbb28cba9fffc801b8ca896f71197d208a91"},
4949
"oauth2": {:hex, :oauth2, "0.9.4", "632e8e8826a45e33ac2ea5ac66dcc019ba6bb5a0d2ba77e342d33e3b7b252c6e", [:mix], [{:hackney, "~> 1.7", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "407c6b9f60aa0d01b915e2347dc6be78adca706a37f0c530808942da3b62e7af"},
50+
"open_api_spex": {:hex, :open_api_spex, "3.10.0", "94e9521ad525b3fcf6dc77da7c45f87fdac24756d4de588cb0816b413e7c1844", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "2dbb2bde3d2b821f06936e8dfaf3284331186556291946d84eeba3750ac28765"},
5051
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
5152
"phoenix": {:hex, :phoenix, "1.5.10", "3ee7d5c17ff9626d72d374d8fc8909bf00f4323fd15549fbe3abbbd38b5299c8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f9c2eaa5a8fe5a412610c6aa84ccdb6f3e92f333d4df7fbaeb0d5a157dbfb48d"},
5253
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"},

0 commit comments

Comments
 (0)