Skip to content

Commit 34a5108

Browse files
Resolve Dialyzer errors on Elixir 1.16 (#643)
1 parent 27cc13e commit 34a5108

File tree

3 files changed

+70
-12
lines changed

3 files changed

+70
-12
lines changed

.github/workflows/test.yml

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ jobs:
1010
strategy:
1111
matrix:
1212
include:
13-
- otp: '25.3.2.12'
14-
elixir: '1.15.8'
13+
- elixir: '1.15.8'
14+
otp: '25.3.2.12'
1515
experimental: false
1616
lint: false
17-
- otp: '26.2.5'
18-
elixir: '1.16.3'
17+
- elixir: '1.16.3'
18+
otp: '26.2.5'
1919
experimental: true
2020
lint: true
21-
- otp: '27.0'
22-
elixir: '1.17.1'
21+
- elixir: '1.17.1'
22+
otp: '27.0'
2323
experimental: true
2424
lint: false
2525
steps:
@@ -32,11 +32,13 @@ jobs:
3232
version-type: strict
3333
- name: Restore dependencies cache
3434
uses: actions/cache@v4
35+
id: cache
3536
with:
3637
path: deps
37-
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
38-
restore-keys: ${{ runner.os }}-mix-
38+
key: ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-mix-${{ hashFiles('**/mix.lock') }}
39+
restore-keys: ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-mix-
3940
- name: Install Dependencies
41+
if: steps.cache.outputs.cache-hit != 'true'
4042
env:
4143
MIX_ENV: test
4244
run: |
@@ -63,10 +65,11 @@ jobs:
6365
version-type: strict
6466
- name: Restore dependencies cache
6567
uses: actions/cache@v4
68+
id: cache
6669
with:
6770
path: deps
68-
key: ${{ runner.os }}-mix-${{ hashFiles('test/lockfiles/gun1.lock') }}
69-
restore-keys: ${{ runner.os }}-mix-
71+
key: ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-mix-gun-${{ hashFiles('test/lockfiles/gun1.lock') }}
72+
restore-keys: ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-mix-gun-
7073
- name: Install Dependencies
7174
env:
7275
MIX_ENV: test
@@ -79,3 +82,52 @@ jobs:
7982
env:
8083
LOCKFILE: gun1
8184
run: mix test test/tesla/adapter/gun_test.exs --trace
85+
86+
dialyzer:
87+
runs-on: ubuntu-latest
88+
name: Dialyzer
89+
steps:
90+
- uses: actions/checkout@v4
91+
- name: Set up Elixir
92+
uses: erlef/setup-beam@v1
93+
with:
94+
elixir-version: '1.16.3'
95+
otp-version: '26.2.5'
96+
version-type: strict
97+
- name: Restore dependencies cache
98+
uses: actions/cache@v4
99+
id: cache
100+
with:
101+
path: |
102+
deps
103+
_build
104+
dialyzer
105+
key: ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-dialyzer-${{ hashFiles('**/mix.lock') }}
106+
restore-keys: |
107+
${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-dialyzer-
108+
- name: Install Dependencies
109+
if: steps.cache.outputs.cache-hit != 'true'
110+
env:
111+
MIX_ENV: test
112+
run: |
113+
mix local.rebar --force
114+
mix local.hex --force
115+
mix deps.get
116+
# Doesn't cache PLTs based on mix.lock hash, as Dialyzer can incrementally update even old ones
117+
# Cache key based on Elixir & Erlang version.
118+
- name: Restore PLT cache
119+
uses: actions/cache@v2
120+
id: plt_cache
121+
with:
122+
key: |
123+
${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-plt
124+
restore-keys: |
125+
${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-plt
126+
path: |
127+
priv/plts
128+
# Create PLTs if no cache was found
129+
- name: Create PLTs
130+
if: steps.plt_cache.outputs.cache-hit != 'true'
131+
run: mix dialyzer --plt
132+
- name: Run dialyzer
133+
run: mix dialyzer --format github

lib/tesla/multipart.ex

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ defmodule Tesla.Multipart do
103103
false -> headers
104104
end
105105

106-
data = File.stream!(path, [], 2048)
106+
data = stream_file!(path, 2048)
107107
add_file_content(mp, data, filename, opts ++ [headers: headers])
108108
end
109109

@@ -194,4 +194,10 @@ defmodule Tesla.Multipart do
194194
defp assert_part_value!(val) do
195195
raise(ArgumentError, "#{inspect(val)} is not a supported multipart value.")
196196
end
197+
198+
if Version.compare(System.version(), "1.16.0") in [:gt, :eq] do
199+
defp stream_file!(path, bytes), do: File.stream!(path, bytes)
200+
else
201+
defp stream_file!(path, bytes), do: File.stream!(path, [], bytes)
202+
end
197203
end

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ defmodule Tesla.Mixfile do
1818
dialyzer: [
1919
plt_core_path: "_build/#{Mix.env()}",
2020
plt_add_apps: [:mix, :inets, :idna, :ssl_verify_fun, :ex_unit],
21-
plt_add_deps: :project
21+
plt_add_deps: :apps_direct
2222
],
2323
docs: docs(),
2424
preferred_cli_env: [coveralls: :test, "coveralls.html": :test]

0 commit comments

Comments
 (0)