Skip to content

Merge pull request #79 from cul/HOURS-124 #164

Merge pull request #79 from cul/HOURS-124

Merge pull request #79 from cul/HOURS-124 #164

Workflow file for this run

name: CI
on:
push:
branches: [ '*' ]
jobs:
ci:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: ['3.0.3']
node: ['8', '12']
env:
RAILS_ENV: test
MYSQL_HOST: 127.0.0.1
MYSQL_PORT: 3306
MYSQL_VERSION: 5.7
MYSQL_DATABASE: hours_test
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USER: user
MYSQL_USER_PASSWORD: password
NOKOGIRI_USE_SYSTEM_LIBRARIES: true
steps:
# Set up MySQL first because it can take some time to start up
- uses: mirromutth/[email protected]
with:
host port: ${{ env.MYSQL_PORT }}
container port: ${{ env.MYSQL_PORT }}
character set server: 'utf8mb4'
mysql version: ${{ env.MYSQL_VERSION }}
collation server: 'utf8mb4_general_ci'
mysql database: ${{ env.MYSQL_DATABASE }}
mysql root password: ${{ env.MYSQL_ROOT_PASSWORD }}
- uses: actions/checkout@v2
- name: Install libxslt for nokogiri gem (required for version < 1.11)
run: sudo apt-get install -y libxml2-dev libxslt-dev
- name: Add --no-document option to .gemrc file to speed up bundle install
run: "echo 'gem: --no-document' > ~/.gemrc"
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Set up Node
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
- run: npm install -g yarn
- run: yarn install
- run: cp config/database.gh-actions.yml config/database.yml
- run: cp config/secrets.template.yml config/secrets.yml
- run: cp config/wifi_density.template.yml config/wifi_density.yml
# Before we run any MySQL-related commands, make sure that MySQL has started
- name: Wait for MySQL to start
run: |
for i in 1 2 3 4 5; do mysqladmin ping -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -h ${{ env.MYSQL_HOST }} --port ${{ env.MYSQL_PORT }} && break || sleep 5; done
# Run one final time to return success or error status (cancelling CI run if we get an error status)
mysqladmin ping -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -h ${{ env.MYSQL_HOST }} --port ${{ env.MYSQL_PORT }}
- name: Grant database permissions
run: |
mysql -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -h ${{ env.MYSQL_HOST }} --port ${{ env.MYSQL_PORT }} -e "CREATE USER '${{ env.MYSQL_USER }}'@'%' IDENTIFIED BY '${{ env.MYSQL_USER_PASSWORD }}';";
mysql -u root -p${{ env.MYSQL_ROOT_PASSWORD }} -h ${{ env.MYSQL_HOST }} --port ${{ env.MYSQL_PORT }} -e "GRANT ALL PRIVILEGES ON ${{ env.MYSQL_DATABASE }}.* TO '${{ env.MYSQL_USER }}'@'%';";
- name: Database user connection test
run: mysql -u ${{ env.MYSQL_USER }} -p${{ env.MYSQL_USER_PASSWORD }} -h ${{ env.MYSQL_HOST }} --port ${{ env.MYSQL_PORT }} -e "SHOW DATABASES;";
- run: RAILS_ENV=test bundle exec rake db:schema:load --trace
- run: RAILS_ENV=test bundle exec rake db:test:prepare
- name: Run tests
run: bundle exec rspec spec
- name: Send coverage file to Coveralls for analysis
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-lcov: coverage/lcov.info
flag-name: run-${{ matrix.test_number }}
parallel: true
# Since Coveralls runs for each test in the matrix, we need to run those coveralls tests with
# `parallel: true` and then run `parallel-finished: true` below, after everything else is done.
finish:
needs: ci
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true