Skip to content

Add a macos CI as well as a homebrew formula #6

Add a macos CI as well as a homebrew formula

Add a macos CI as well as a homebrew formula #6

Workflow file for this run

name: CI | macOS
on:
push:
paths-ignore:
- '*.md'
- 'doc/**'
- 'docker-k8s/**'
- 'windows/**'
pull_request:
paths-ignore:
- '*.md'
- 'doc/**'
- 'docker-k8s/**'
- 'windows/**'
jobs:
ci:
name: CI | macOS with homebrew
runs-on: macos-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
with: # For scripts/get-version:
fetch-depth: 0
- name: Install dependencies
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
run: |
brew update
brew install \
erlang \
openssl \
libyaml \
rebar3
- name: Cache Rebar data
uses: actions/cache@v3
with:
path: ~/.cache/rebar3
key: ${{ runner.os }}-${{ hashFiles('rebar.config') }}
# Until https://github.com/erlware/relx/issues/905 is fixed:
- name: Create Erlang cookie
run: erl -noinput -sname cookie -eval 'halt()'
- name: Download dependencies
run: rebar3 get-deps
- name: Compile code
env:
LDFLAGS: -L/usr/local/opt/openssl/lib -L/usr/local/lib
CFLAGS: -I/usr/local/opt/openssl/include/ -I/usr/local/include
CPPFLAGS: -I/usr/local/opt/openssl/include/ -I/usr/local/include
run: rebar3 compile
- name: Build release
run: rebar3 release
- name: Start release
run: _build/default/rel/eturnal/bin/eturnal daemon
- name: Ping release
run: _build/default/rel/eturnal/bin/eturnal ping
- name: Stop release
run: _build/default/rel/eturnal/bin/eturnal stop
- name: Analyze cross references
run: rebar3 xref
- name: Perform static code analysis
run: rebar3 dialyzer
- name: Run black-box tests (CT)
run: rebar3 ct || rebar3 ct
shell: bash
- name: Run white-box tests (EUnit)
run: rebar3 eunit
- name: Check test coverage
run: rebar3 cover
formula:
name: On ${{ matrix.os }} | install & test ${{ matrix.vsn }} Formula
runs-on: ${{ matrix.os }}-latest
strategy:
matrix:
os: [macos, ubuntu]
vsn: [head, stable]
fail-fast: false
steps:
- name: Check out repository code
uses: actions/checkout@v3
with: # For scripts/get-version:
fetch-depth: 0
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Cache Homebrew Bundler RubyGems
id: cache
uses: actions/cache@v3
with:
path: ${{ steps.set-up-homebrew.outputs.gems-path }}
key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }}
restore-keys: ${{ runner.os }}-rubygems-
- name: Install Homebrew Bundler RubyGems
if: steps.cache.outputs.cache-hit != 'true'
run: brew install-bundler-gems
- name: Install eturnal with homebrew formula
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
run: |
if [ ${{ matrix.vsn }} = 'head' ]; then export vsn='--head'; fi
if [ ${{ github.event_name }} = 'pull_request' ]
then
curl -O https://raw.githubusercontent.com/${{ github.repository }}/$(git rev-parse HEAD)/Formula/eturnal.rb
brew install ./eturnal.rb
else
brew tap ${{ github.repository }} https://github.com/${{ github.repository }}
brew install --build-from-source ${vsn:-} --verbose ${{ github.repository }}/eturnal
fi
- name: Homebrew autoremove unused packages
if: matrix.os != 'ubuntu'
run: |
brew uninstall erlang rebar3
brew autoremove
- name: Set erlang cookie, because we build from HEAD
if: matrix.vsn == 'head'
run: echo "-setcookie eturnal" >> $(find $(brew --prefix)/Cellar/eturnal -name vm.args)
- name: Run eturnal Formula test
run: brew test --verbose eturnal
- name: Start eturnal service
run: brew services start eturnal
- name: Wait shortly
run: sleep 10
- name: Create test credentials
run: $(brew --prefix)/opt/eturnal/bin/eturnalctl credentials
- name: Test eturnalctl on $PATH
run: eturnalctl info
- name: Stop eturnal service
run: brew services stop eturnal
# - name: Lint formula
# run: brew audit --strict eturnal