Skip to content

Updates for .tool-versions, deps and ci.yml #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
296 changes: 110 additions & 186 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,197 +1,121 @@
name: CI

on:
pull_request:
push:
branches:
- main

env:
CACHE_PREFIX_DEPS: v1-deps
CACHE_PREFIX_BUILD: v1-_build
CACHE_PREFIX_DIALYZER: v1-dialyzer

GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
on:
- pull_request
- push
jobs:
mix_test:
name: mix test (Erlang/OTP ${{matrix.otp}} | Elixir ${{matrix.elixir}} | Alpine ${{ matrix.alpine }})
linux:
name: Test on Ubuntu (Elixir ${{ matrix.elixir }}, OTP ${{ matrix.otp }})
runs-on: ubuntu-latest
container: hexpm/elixir:${{ matrix.elixir }}-erlang-${{ matrix.otp }}-alpine-${{ matrix.alpine }}
env:
MIX_ENV: test
VERSION_ALPINE: ${{ matrix.alpine }}
VERSION_ELIXIR: ${{ matrix.elixir }}
VERSION_OTP: ${{ matrix.otp }}
strategy:
fail-fast: false
matrix:
include:
- alpine: 3.11.6
elixir: 1.7.4
otp: 20.3.8.19
- alpine: 3.11.6
elixir: 1.8.2
otp: 20.3.8.19
- alpine: 3.11.6
elixir: 1.9.4
otp: 20.3.8.19
- alpine: 3.11.6
elixir: 1.9.4
otp: 21.3.8.16
- alpine: 3.11.6
elixir: 1.10.3
otp: 21.3.8.16
- alpine: 3.11.6
elixir: 1.11.2
otp: 22.3.4.3
- alpine: 3.11.6
elixir: 1.11.2
otp: 23.0.2
- alpine: 3.14.0
elixir: 1.12.3
otp: 24.1.1
steps:
- uses: actions/checkout@v2

- name: Cache - deps/
uses: actions/cache@v1
with:
path: deps/
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- name: Install Dependencies
run: |
mix local.rebar --force
mix local.hex --force
mix deps.get --only "$MIX_ENV"

- name: Cache - _build/
uses: actions/cache@v1
with:
path: _build/
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- run: mix compile --warnings-as-errors
- run: mix test

coverage:
name: Collect Test Coverage
runs-on: ubuntu-latest
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
env:
MIX_ENV: test
VERSION_ALPINE: 3.11.6
VERSION_ELIXIR: 1.11.2
VERSION_OTP: 22.3.4.3
steps:
- name: Install git (required for mix coveralls.github)
run: apk add --no-cache git

# mix coveralls.github uses git to fetch the pr head so we ensure the whole history is available
- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Cache - deps/
uses: actions/cache@v1
with:
path: deps/
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP}}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP}}-

- name: Install Dependencies
run: |
mix local.rebar --force
mix local.hex --force
mix deps.get --only "$MIX_ENV"

- name: Cache - _build/
uses: actions/cache@v1
with:
path: _build/
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- run: mix compile --warnings-as-errors
- run: mix coveralls.github
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

check_style:
name: Check Style
runs-on: ubuntu-latest
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
env:
MIX_ENV: dev
VERSION_ALPINE: 3.11.6
VERSION_ELIXIR: 1.11.2
VERSION_OTP: 22.3.4.3
elixir:
- '1.7.4'
- '1.8.2'
- '1.9.4'
- '1.10.4'
- '1.11.4'
- '1.12.3'
- '1.13.4'
- '1.14.1'
otp:
- '20.3'
- '21.3'
- '22.3'
- '23.3'
- '24.3'
- '25.1'
exclude:
- elixir: '1.7.4'
otp: '23.3'
- elixir: '1.7.4'
otp: '24.3'
- elixir: '1.7.4'
otp: '25.1'
- elixir: '1.8.2'
otp: '23.3'
- elixir: '1.8.2'
otp: '24.3'
- elixir: '1.8.2'
otp: '25.1'
- elixir: '1.9.4'
otp: '23.3'
- elixir: '1.9.4'
otp: '24.3'
- elixir: '1.9.4'
otp: '25.1'
- elixir: '1.10.4'
otp: '20.3'
- elixir: '1.10.4'
otp: '24.3'
- elixir: '1.10.4'
otp: '25.1'
- elixir: '1.11.4'
otp: '20.3'
- elixir: '1.11.4'
otp: '25.1'
- elixir: '1.12.3'
otp: '20.3'
- elixir: '1.12.3'
otp: '21.3'
- elixir: '1.12.3'
otp: '25.1'
- elixir: '1.13.4'
otp: '20.3'
- elixir: '1.13.4'
otp: '21.3'
- elixir: '1.14.1'
otp: '20.3'
- elixir: '1.14.1'
otp: '21.3'
- elixir: '1.14.1'
otp: '22.3'
steps:
- uses: actions/checkout@v2

- name: Cache - deps/
uses: actions/cache@v1
- name: Checkout
uses: actions/checkout@v3
- name: Setup Elixir
uses: erlef/setup-beam@v1
with:
path: deps/
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- name: Install Dependencies
run: |
mix local.rebar --force
mix local.hex --force
mix deps.get --only "$MIX_ENV"

- name: Cache - _build/
uses: actions/cache@v1
with:
path: _build/
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- run: mix compile --warnings-as-errors
- run: mix format --check-formatted
- run: mix credo

check_types:
name: Check Types
runs-on: ubuntu-latest
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
env:
MIX_ENV: dev
VERSION_ALPINE: 3.11.6
VERSION_ELIXIR: 1.11.2
VERSION_OTP: 22.3.4.3
steps:
- uses: actions/checkout@v2

- name: Cache - deps/
uses: actions/cache@v1
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}
- name: Restore deps
uses: actions/cache@v3
with:
path: deps/
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- name: Install Dependencies
run: |
mix local.rebar --force
mix local.hex --force
mix deps.get --only "$MIX_ENV"

- name: Cache - _build/
uses: actions/cache@v1
path: deps
key: deps-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
- name: Restore _build
uses: actions/cache@v3
with:
path: _build/
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-

- run: mix compile --warnings-as-errors

- name: Cache - Dialyzer PLTs
uses: actions/cache@v1
path: _build
key: _build-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
- name: Restore .dialyzer
uses: actions/cache@v3
with:
path: .dialyzer/
key: ${{ env.CACHE_PREFIX_DIALYZER }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}

- run: mix dialyzer
path: .dialyzer
key: .dialyzer-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
- name: Get dependencies
run: mix deps.get
- name: Compile dependencies
run: MIX_ENV=test mix deps.compile
- name: Compile project
run: MIX_ENV=test mix compile --warnings-as-errors
- name: Check unused dependencies
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
run: MIX_ENV=test mix deps.unlock --check-unused
- name: Check code format
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
run: MIX_ENV=test mix format --check-formatted
- name: Lint code
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
run: MIX_ENV=dev mix credo --strict
- name: Run tests
run: MIX_ENV=test mix test
if: ${{ !(contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1')) }}
- name: Run tests with coverage
run: MIX_ENV=test mix coveralls.github
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
- name: Static code analysis
run: mix dialyzer
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
4 changes: 2 additions & 2 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
elixir 1.12.2
erlang 23.3.4.5
elixir 1.14.1-otp-25
erlang 25.1.1
16 changes: 3 additions & 13 deletions lib/knigge/options.ex
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,7 @@ defmodule Knigge.Options do
- `[only: <envs>]` - equivalent to the option above
- `[except: <envs>]` - only delegates at runtime if the current environment is __not__ contained in the list

__Default__: `Application.get_env(:knigge, :delegate_at_runtime?, #{
inspect(@defaults[:delegate_at_runtime?])
})`
__Default__: `Application.get_env(:knigge, :delegate_at_runtime?, #{inspect(@defaults[:delegate_at_runtime?])})`

### `do_not_delegate`
A keyword list defining callbacks for which no delegation should happen.
Expand Down Expand Up @@ -156,9 +154,7 @@ defmodule Knigge.Options do

message when is_binary(message) ->
IO.warn(
"Knigge encountered the deprecated option `#{key}`, this option is no longer supported; #{
message
}."
"Knigge encountered the deprecated option `#{key}`, this option is no longer supported; #{message}."
)

nil
Expand All @@ -178,13 +174,7 @@ defmodule Knigge.Options do

@doc """
Applies the defaults to the given options:
#{
@defaults
|> Enum.map(fn {key, value} ->
" - #{key} = #{inspect(value)}"
end)
|> Enum.join("\n")
}
#{Enum.map_join(@defaults, "\n", fn {key, value} -> " - `#{key} = #{inspect(value)}`" end)}
"""
@spec with_defaults(raw()) :: raw()
def with_defaults(opts) do
Expand Down
4 changes: 1 addition & 3 deletions lib/knigge/warnings.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ defmodule Knigge.Warnings do

There are two ways to resolve this warning:
1. move the behaviour into a separate module and `use Knigge, behaviour: MyBehaviour`;
this enables to compiler to finish compilation of `#{inspect(implementation)}` before compiling `#{
inspect(module)
}`
this enables to compiler to finish compilation of `#{inspect(implementation)}` before compiling `#{inspect(module)}`
2. pass `delegate_at_runtime?: true` as option, this will move **all** delegation to runtime
""")
end
Expand Down
5 changes: 1 addition & 4 deletions lib/mix/tasks/knigge/verify.ex
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,7 @@ defmodule Mix.Tasks.Knigge.Verify do
end

defp unknown_switches(errors) do
options =
errors
|> Enum.map(&elem(&1, 0))
|> Enum.join(", ")
options = Enum.map_join(errors, ", ", &elem(&1, 0))

{:error, {:unknown_options, "Unknown switch(es) received: " <> options}}
end
Expand Down
4 changes: 2 additions & 2 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ defmodule Knigge.MixProject do

# Test
{:excoveralls, "~> 0.13", only: :test},
{:mox, "~> 0.5", only: :test},
{:mox, "~> 1.0", only: :test},

# Docs
{:inch_ex, ">= 0.0.0", only: :docs}
Expand All @@ -74,7 +74,7 @@ defmodule Knigge.MixProject do
defp dialyzer do
[
ignore_warnings: ".dialyzer_ignore.exs",
plt_add_apps: [:bunt],
plt_add_apps: [:bunt, :mix],
plt_file: {:no_warn, ".dialyzer/dialyzer.plt"}
]
end
Expand Down
Loading