diff --git a/.formatter.exs b/.formatter.exs index d2cda26..90c80fe 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -1,4 +1,5 @@ # Used by "mix format" [ - inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"], + import_deps: [:ecto] ] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..a8f4753 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,84 @@ +name: CI + +on: + push: + pull_request: + branches: + - master + +jobs: + test: + name: Elixir ${{matrix.elixir}} / OTP ${{matrix.otp}} + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + ports: + - 5432:5432 + env: + POSTGRES_DB: dataloader_test + POSTGRES_PASSWORD: postgres + + strategy: + matrix: + elixir: + - '1.10' + - '1.11' + otp: + - '22' + - '23' + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up Elixir + uses: erlef/setup-elixir@v1 + with: + elixir-version: ${{ matrix.elixir }} + otp-version: ${{ matrix.otp }} + + - name: Restore deps cache + uses: actions/cache@v2 + with: + path: | + deps + _build + key: deps-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('**/mix.lock') }}-git-${{ github.sha }} + restore-keys: | + deps-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('**/mix.lock') }} + deps-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }} + + - name: Create dializer plts path + run: mkdir -p priv/plts + + - name: Restore plts cache + uses: actions/cache@v2 + with: + path: priv/plts + key: plts-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('**/mix.lock') }}-${{ github.sha }} + restore-keys: | + plts-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles('**/mix.lock') }} + plts-${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }} + + - name: Install package dependencies + run: mix deps.get + + - name: Check code format + run: mix format --check-formatted + + - name: Compile dependencies + run: mix compile + env: + MIX_ENV: test + + - name: Run unit tests + run: | + mix ecto.setup + mix test + env: + MIX_ENV: test + + - name: Run dialyzer + run: mix dialyzer diff --git a/.gitignore b/.gitignore index a48db45..d507d71 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,7 @@ dataloader-*.tar # Temporary files for e.g. tests. /tmp/ + +# Ignore Dialyzer .plts files +/priv/plts/*.plt +/priv/plts/*.plt.hash diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index da6b32e..0000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: elixir -elixir: - - 1.7 -otp_release: - - 20.1 -sudo: false -services: - - postgresql -notifications: - recipients: - - bruce.williams@cargosense.com -env: - - MIX_ENV=test -before_script: - - mix ecto.setup diff --git a/config/test.exs b/config/test.exs index d1dd09b..14a81e7 100644 --- a/config/test.exs +++ b/config/test.exs @@ -3,6 +3,7 @@ use Mix.Config config :dataloader, Dataloader.TestRepo, hostname: "localhost", username: "postgres", + password: "postgres", database: "dataloader_test", pool: Ecto.Adapters.SQL.Sandbox diff --git a/mix.exs b/mix.exs index 1f06534..e4fb1b3 100644 --- a/mix.exs +++ b/mix.exs @@ -8,13 +8,20 @@ defmodule Dataloader.Mixfile do [ app: :dataloader, version: @version, - elixir: "~> 1.5", + elixir: "~> 1.10", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), package: package(), aliases: aliases(), deps: deps(), - docs: docs() + docs: docs(), + preferred_cli_env: [ + dialyzer: :test + ], + dialyzer: [ + plt_core_path: "priv/plts", + plt_add_apps: [:mix, :ecto, :ecto_sql] + ] ] end @@ -57,7 +64,7 @@ defmodule Dataloader.Mixfile do {:ecto, ">= 3.4.3 and < 4.0.0", optional: true}, {:ecto_sql, "~> 3.0", optional: true, only: :test}, {:postgrex, "~> 0.14", only: :test, runtime: false}, - {:dialyxir, "~> 0.5", only: :dev, runtime: false}, + {:dialyxir, "~> 1.0.0", only: [:dev, :test], runtime: false}, {:ex_doc, ">= 0.0.0", only: :dev, runtime: false} ] end diff --git a/mix.lock b/mix.lock index 5f6aaf9..f29a616 100644 --- a/mix.lock +++ b/mix.lock @@ -2,10 +2,11 @@ "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, "db_connection": {:hex, :db_connection, "2.2.0", "e923e88887cd60f9891fd324ac5e0290954511d090553c415fbf54be4c57ee63", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "bdf196feedfa6b83071e808b2b086fb113f8a1c4c7761f6eff6fe4b96aba0086"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, - "dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], [], "hexpm", "6c32a70ed5d452c6650916555b1f96c79af5fc4bf286997f8b15f213de786f73"}, + "dialyxir": {:hex, :dialyxir, "1.0.0", "6a1fa629f7881a9f5aaf3a78f094b2a51a0357c843871b8bc98824e7342d00a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "aeb06588145fac14ca08d8061a142d52753dbc2cf7f0d00fc1013f53f8654654"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, "ecto": {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"}, "ecto_sql": {:hex, :ecto_sql, "3.4.4", "d28bac2d420f708993baed522054870086fd45016a9d09bb2cd521b9c48d32ea", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "edb49af715dd72f213b66adfd0f668a43c17ed510b5d9ac7528569b23af57fe8"}, + "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f1155337ae17ff7a1255217b4c1ceefcd1860b7ceb1a1874031e7a861b052e39"}, "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, diff --git a/test/dataloader/ecto/limit_query_test.exs b/test/dataloader/ecto/limit_query_test.exs index acea22f..ab995c9 100644 --- a/test/dataloader/ecto/limit_query_test.exs +++ b/test/dataloader/ecto/limit_query_test.exs @@ -33,7 +33,7 @@ defmodule Dataloader.LimitQueryTest do |> having(count() >= ^n) |> order_by(^order_by) |> limit(^limit) - |> preload([likes: :user]) + |> preload(likes: :user) end defp query(schema, %{limit: limit, order_by: order_by}, test_pid) do