diff --git a/.github/workflows/lint_and_test.yml b/.github/workflows/lint_and_test.yml new file mode 100644 index 0000000..53ae7c0 --- /dev/null +++ b/.github/workflows/lint_and_test.yml @@ -0,0 +1,66 @@ +name: Perform linting and run tests + +on: + push: + branches: + - master + pull_request: + branches: + - master + workflow_dispatch: + +jobs: + check-formatting: + runs-on: ubuntu-latest + if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')" + name: Check formatting + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Elixir and OTP + uses: erlef/setup-beam@v1 + with: + otp-version: "27.x" + elixir-version: "1.17.x" + + - name: Install and compile dependencies + run: mix deps.get && mix deps.compile &> /dev/null + + - name: Check formatting + run: mix format --check-formatted + + test-matrix: + runs-on: ubuntu-latest + if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')" + name: Test on OTP ${{ matrix.versions.otp }} / Elixir ${{ matrix.versions.elixir }} + env: + MIX_ENV: test + strategy: + matrix: + versions: + [ + { otp: "24.x", elixir: "1.13.x" }, + { otp: "25.x", elixir: "1.14.x" }, + { otp: "26.x", elixir: "1.15.x" }, + { otp: "26.x", elixir: "1.16.x" }, + { otp: "27.x", elixir: "1.17.x" }, + ] + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Elixir and OTP + uses: erlef/setup-beam@v1 + with: + otp-version: ${{ matrix.versions.otp }} + elixir-version: ${{ matrix.versions.elixir }} + + - name: Install and compile dependencies + run: mix deps.get && mix deps.compile &> /dev/null + + - name: Compile project with warnings as errors + run: mix compile --warnings-as-errors + + - name: Run tests + run: mix test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index de9dd38..0000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: elixir -jobs: - include: - - elixir: 1.7.4 - otp_release: 19.3 - script: - - mix compile - - mix test - - elixir: 1.8.2 - otp_release: 20.3 - script: - - mix compile --warning-as-errors - - mix test --cover - - elixir: 1.9.4 - otp_release: 20.3 - script: - - mix compile --warning-as-errors - - mix test --cover - - elixir: 1.10.4 - otp_release: 23.0 - script: - - mix compile --warning-as-errors - - mix test --cover - - elixir: 1.11 - otp_release: 23.0 - script: - - mix compile --warning-as-errors - - mix test --cover - - elixir: 1.14 - otp_release: 25.0 - script: - - mix format --check-formatted - - mix compile --warning-as-errors - - mix test --cover diff --git a/lib/rewire/cover.ex b/lib/rewire/cover.ex index db5bb86..79fecbe 100644 --- a/lib/rewire/cover.ex +++ b/lib/rewire/cover.ex @@ -71,7 +71,7 @@ defmodule Rewire.Cover do {_, binary, _} = :code.get_object_code(:cover) {:ok, {_, [{_, {_, abstract_code}}]}} = :beam_lib.chunks(binary, [:abstract_code]) {:ok, module, binary} = :compile.forms(abstract_code, [:export_all]) - :code.load_binary(module, '', binary) + :code.load_binary(module, ~c"", binary) end defp replace_coverdata!(rewired, original_module) do diff --git a/lib/rewire/utils.ex b/lib/rewire/utils.ex index bbb0fe2..6c62666 100644 --- a/lib/rewire/utils.ex +++ b/lib/rewire/utils.ex @@ -111,7 +111,7 @@ defmodule Rewire.Utils do end def debug_log(%{debug: true, mod: mod}, message) do - IO.puts(IO.ANSI.format([:light_blue, "[Rewire] [#{mod}] #{message}"])) + IO.puts(IO.ANSI.format([:light_blue, "[Rewire] [#{mod}] #{message}"], true)) end def debug_log(_opts, _message), do: :ok diff --git a/mix.exs b/mix.exs index 10807cd..bff879e 100644 --- a/mix.exs +++ b/mix.exs @@ -5,7 +5,7 @@ defmodule Rewire.MixProject do [ app: :rewire, version: "0.9.0", - elixir: "~> 1.7", + elixir: "~> 1.13", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), deps: deps(), diff --git a/test/rewire_debug_test.exs b/test/rewire_debug_test.exs index 56107a5..b1d0f74 100644 --- a/test/rewire_debug_test.exs +++ b/test/rewire_debug_test.exs @@ -19,7 +19,7 @@ defmodule RewireDebugTest do |> String.replace(":\"::\"", ":::") |> String.split("\n") - common = [ + expected = [ "\e[94m[Rewire] [Elixir.Rewire.Hello] old name: [:Rewire, :Hello]\e[0m", "\e[94m[Rewire] [Elixir.Rewire.Hello] new name: [:Rewire, :Hello, :R]\e[0m", "\e[94m[Rewire] [Elixir.Rewire.Hello] alias: :Hello\e[0m", @@ -85,13 +85,7 @@ defmodule RewireDebugTest do " ]}", "", "\e[0m", - "\e[94m[Rewire] [Elixir.Rewire.Hello] new code:" - ] - - # The structure changed a little bit for this part in Elixir 1.13, so we - # have different expectations depending on the currently running version. - - current_structure = [ + "\e[94m[Rewire] [Elixir.Rewire.Hello] new code:", "", "defmodule Rewire.Hello.R do", " [", @@ -108,25 +102,6 @@ defmodule RewireDebugTest do "" ] - pre_elixir_1_13 = [ - "", - "defmodule(Rewire.Hello.R) do", - " [def(__rewire__()) do", - " %{original: [:Rewire, :Hello], rewired: %{}}", - " end, @callback(hello() :: String.t()), def(hello()) do", - " \"hello\"", - " end]", - "end", - "\e[0m", - "" - ] - - expected = - case Version.compare(System.version(), "1.13.0") do - :lt -> common ++ pre_elixir_1_13 - _ -> common ++ current_structure - end - assert actual == expected end end