diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 1b8f2e4..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,101 +0,0 @@ -version: 2.1 - -defaults: &defaults - working_directory: ~/repo - environment: - LC_ALL: C.UTF-8 - -install_hex_rebar: &install_hex_rebar - run: - name: Install hex and rebar - command: | - mix local.hex --force - mix local.rebar --force -install_system_deps: &install_system_deps - run: - name: Install system dependencies - command: | - apk add build-base - -jobs: - elixir_1_12_otp_24: - docker: - - image: hexpm/elixir:1.12.2-erlang-24.0.5-alpine-3.14.0 - <<: *defaults - steps: - - checkout - - <<: *install_hex_rebar - - <<: *install_system_deps - - restore_cache: - keys: - - v1-mix-cache-{{ checksum "mix.lock" }} - - run: mix deps.get - - run: mix compile --warnings-as-errors - - run: mix format --check-formatted - - run: mix deps.unlock --check-unused - - run: mix test - - run: mix docs - - run: mix hex.build - - run: mix dialyzer - - save_cache: - key: v1-mix-cache-{{ checksum "mix.lock" }} - paths: - - _build - - deps - - elixir_1_11_otp_23: - docker: - - image: hexpm/elixir:1.11.4-erlang-23.3.4.5-alpine-3.14.0 - <<: *defaults - steps: - - checkout - - <<: *install_hex_rebar - - <<: *install_system_deps - - run: mix deps.get - - run: mix compile - - run: mix test - - elixir_1_10_otp_23: - docker: - - image: hexpm/elixir:1.10.4-erlang-23.3.4.5-alpine-3.14.0 - <<: *defaults - steps: - - checkout - - <<: *install_hex_rebar - - <<: *install_system_deps - - run: mix deps.get - - run: mix compile - - run: mix test - - elixir_1_10_otp_22: - docker: - - image: hexpm/elixir:1.10.4-erlang-22.3.4.20-alpine-3.14.0 - <<: *defaults - steps: - - checkout - - <<: *install_hex_rebar - - <<: *install_system_deps - - run: mix deps.get - - run: mix compile - - run: mix test - - elixir_1_9_otp_22: - docker: - - image: hexpm/elixir:1.9.4-erlang-22.3.4.20-alpine-3.14.0 - <<: *defaults - steps: - - checkout - - <<: *install_hex_rebar - - <<: *install_system_deps - - run: mix deps.get - - run: mix compile - - run: mix test - -workflows: - build_test: - jobs: - - elixir_1_12_otp_24 - - elixir_1_11_otp_23 - - elixir_1_10_otp_23 - - elixir_1_10_otp_22 - - elixir_1_9_otp_22 diff --git a/.github/workflows/elixir.yaml b/.github/workflows/elixir.yaml new file mode 100644 index 0000000..897ac7f --- /dev/null +++ b/.github/workflows/elixir.yaml @@ -0,0 +1,87 @@ +name: mix test + +# Define workflow that runs when changes are pushed to the +# `main` branch or pushed to a PR branch that targets the `main` +# branch. Change the branch name if your project uses a +# different name for the main branch like "master" or "production". +on: + push: + branches: [ "main" ] # adapt branch for project + pull_request: + branches: [ "main" ] # adapt branch for project + +# Sets the ENV `MIX_ENV` to `test` for running tests +env: + MIX_ENV: test + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + name: Test on OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}} + strategy: + # Specify the OTP and Elixir versions to use when building + # and running the workflow steps. + matrix: + otp: ['25.0.4'] # Define the OTP version [required] + elixir: ['1.14.1'] # Define the elixir version [required] + steps: + # Step: Setup Elixir + Erlang image as the base. + - name: Set up Elixir + uses: erlef/setup-beam@v1 + with: + otp-version: ${{matrix.otp}} + elixir-version: ${{matrix.elixir}} + + # Step: Check out the code. + - name: Checkout code + uses: actions/checkout@v3 + + # Step: Define how to cache deps. Restores existing cache if present. + - name: Cache deps + id: cache-deps + uses: actions/cache@v3 + env: + cache-name: cache-elixir-deps + with: + path: deps + key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }} + restore-keys: | + ${{ runner.os }}-mix-${{ env.cache-name }}- + + # Step: Define how to cache the `_build` directory. After the first run, + # this speeds up tests runs a lot. This includes not re-compiling our + # project's downloaded deps every run. + - name: Cache compiled build + id: cache-build + uses: actions/cache@v3 + env: + cache-name: cache-compiled-build + with: + path: _build + key: ${{ runner.os }}-mix-${{ env.cache-name }}-${{ hashFiles('**/mix.lock') }} + restore-keys: | + ${{ runner.os }}-mix-${{ env.cache-name }}- + ${{ runner.os }}-mix- + + # Step: Download project dependencies. If unchanged, uses + # the cached version. + - name: Install dependencies + run: mix deps.get + + # Step: Compile the project treating any warnings as errors. + # Customize this step if a different behavior is desired. + - name: Compiles without warnings + run: mix compile --warnings-as-errors + + # Step: Check that the checked in code has already been formatted. + # This step fails if something was found unformatted. + # Customize this step as desired. + - name: Check Formatting + run: mix format --check-formatted + + # Step: Execute the tests. + - name: Run tests + run: mix test diff --git a/README.md b/README.md index 219a19b..24e27a5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Hex version](https://img.shields.io/hexpm/v/blue_heron.svg "Hex version")](https://hex.pm/packages/blue_heron) [![API docs](https://img.shields.io/hexpm/v/blue_heron.svg?label=hexdocs "API docs")](https://hexdocs.pm/blue_heron/BlueHeron.html) -[![CircleCI](https://circleci.com/gh/blue-heron/blue_heron/tree/main.svg?style=svg)](https://circleci.com/gh/blue-heron/blue_heron/tree/main) +[![mix test](https://github.com/blue-heron/blue_heron/actions/workflows/elixir.yaml/badge.svg)](https://github.com/blue-heron/blue_heron/actions/workflows/elixir.yaml) BlueHeron is a new Elixir Bluetooth LE Library that communicates directly with Bluetooth modules via HCI. It is VERY much under construction, and we expect the