diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 898d252..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,40 +0,0 @@ -version: 2.1 - -jobs: - test: - docker: - - image: cimg/elixir:<< parameters.elixir >> - environment: - MIX_ENV: test - parameters: - elixir: - type: string - steps: - - checkout - - restore_cache: - keys: - - v1-mix-deps-<< parameters.elixir >>-{{checksum "mix.lock"}} - - v1-mix-deps-<< parameters.elixir >> - - run: mix local.hex --force - - run: mix local.rebar --force - - run: mix do deps.get --only test, deps.compile, compile --warnings-as-errors - - save_cache: - key: v1-mix-deps-<< parameters.elixir >>-{{checksum "mix.lock"}} - paths: - - _build - - deps - - ~/.mix - - when: - condition: - equal: ["1.16", << parameters.elixir >>] - steps: - - run: mix format --check-formatted - - run: mix test - -workflows: - all-tests: - jobs: - - test: - matrix: - parameters: - elixir: ["1.12", "1.13", "1.14", "1.15", "1.16", "1.17"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4d2b529 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: CI + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +env: + MIX_ENV: test + +permissions: + contents: read + +jobs: + test: + name: Checks/Tests on OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}} + runs-on: ubuntu-latest + strategy: + matrix: + include: + - elixir: '1.12' + otp: '24' + - elixir: '1.13' + otp: '24' + - elixir: '1.14' + otp: '25' + - elixir: '1.15' + otp: '26' + - elixir: '1.16' + otp: '26' + - elixir: '1.17' + otp: '27' + steps: + - name: Set up Elixir + id: setup + uses: erlef/setup-beam@v1 + with: + otp-version: ${{matrix.otp}} + elixir-version: ${{matrix.elixir}} + version-type: strict + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache dependencies + id: cache-deps + env: + cache-name: cache-elixir-deps + uses: actions/cache@v4 + with: + key: ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}-${{steps.setup.outputs.elixir-version}}-${{hashFiles('**/mix.lock')}} + path: deps + restore-keys: | + ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}-${{steps.setup.outputs.elixir-version}}- + ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}- + ${{runner.os}}-mix-${{env.cache-name}}- + + - name: Cache compiled build + id: cache-build + env: + cache-name: cache-compiled-build + uses: actions/cache@v4 + with: + key: ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}-${{steps.setup.outputs.elixir-version}}-${{hashFiles('**/mix.lock')}} + path: _build + restore-keys: | + ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}-${{steps.setup.outputs.elixir-version}}- + ${{runner.os}}-mix-${{env.cache-name}}-${{steps.setup.outputs.otp-version}}- + ${{runner.os}}-mix-${{env.cache-name}}- + + - name: Clean if incremental build fails + if: github.run_attempt != '1' + run: | + mix deps.clean --all + mix clean + + - name: Install dependencies + run: mix deps.get + + - name: Compile + run: mix compile --warnings-as-errors + + - name: Check formatting + if: ${{matrix.elixir == '1.17'}} + run: mix format --check-formatted + + - name: Run tests + run: mix test diff --git a/README.md b/README.md index 4c89977..d0d3fcd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # mix test.interactive -[![Build Status](https://circleci.com/gh/randycoulman/mix_test_interactive.svg?style=shield)](https://app.circleci.com/pipelines/github/randycoulman/mix_test_interactive) +[![Build Status](https://github.com/randycoulman/mix_test_interactive/actions/workflows/ci.yml/badge.svg)](https://github.com/randycoulman/mix_test_interactive/actions) [![Module Version](https://img.shields.io/hexpm/v/mix_test_interactive.svg)](https://hex.pm/packages/mix_test_interactive) [![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/mix_test_interactive/) [![License](https://img.shields.io/hexpm/l/mix_test_interactive.svg)](https://github.com/randycoulman/mix_test_interactive/blob/master/LICENSE.md)