Current section
Files
Jump to
Current section
Files
priv/templates/nimble_template/.github/workflows/test.yml.eex
name: Test
on: pull_request
env:
MIX_ENV: test
DB_HOST: localhost
jobs:
install_and_compile_dependencies:
name: Install and Compile Dependencies
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.8.0
with:
access_token: ${{ github.token }}
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup asdf
uses: asdf-vm/actions/setup@v1
- name: Cache asdf
uses: actions/cache@v3
with:
path: /home/runner/.asdf
key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
restore-keys: ${{ runner.os }}-asdf-
- name: Install dependencies in .tool-versions
uses: asdf-vm/actions/install@v1
- name: Cache Elixir build
uses: actions/cache@v3
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
<%= if web_project? do %>
- name: Cache Node modules
uses: actions/cache@v3
with:
path: assets/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
<% end %>
- name: Install Elixir dependencies
run: mix deps.get
- name: Compile dependencies
run: mix compile
<%= if web_project? do %>
- name: Install Node dependencies
run: npm --prefix assets install
- name: Compile assets
run: mix assets.deploy
<% end %>
lint_codebase:
name: Linting
needs: install_and_compile_dependencies
runs-on: ubuntu-latest
services:
db:
image: postgres:14.2
ports: ['5432:5432']
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup asdf
uses: asdf-vm/actions/setup@v1
- name: Cache asdf
uses: actions/cache@v3
with:
path: /home/runner/.asdf
key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
restore-keys: ${{ runner.os }}-asdf-
- name: Install dependencies in .tool-versions
uses: asdf-vm/actions/install@v1
- name: Cache Elixir build
uses: actions/cache@v3
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
<%= if web_project? do %>
- name: Cache Node modules
uses: actions/cache@v3
with:
path: assets/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
<% end %>
- name: Install Elixir dependencies
run: mix deps.get
- name: Compile dependencies
run: mix compile --warnings-as-errors --all-warnings
<%= if web_project? do %>
- name: Install Node dependencies
run: npm --prefix assets install
- name: Compile assets
run: mix assets.deploy
<% end %>
- name: Create database
run: mix ecto.create
- name: Migrate database
run: mix ecto.migrate
- name: Ensure that localization files (POs, POTs) are up-to-date.
run:
mix gettext.extract-and-merge;
if [ -n "$(git diff --exit-code priv/gettext/)" ]; then
echo "The localization files (POs, POTs) are NOT up-to-date, run \"mix gettext.extract-and-merge\" on your local and push again.";
exit 1;
fi
- name: Run codebase check
run: mix codebase
test_database_seeds:
name: Test database seeds
needs: lint_codebase
runs-on: ubuntu-latest
services:
db:
image: postgres:14.2
ports: ['5432:5432']
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
MIX_ENV: dev
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup asdf
uses: asdf-vm/actions/setup@v1
- name: Cache asdf
uses: actions/cache@v3
with:
path: /home/runner/.asdf
key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
restore-keys: ${{ runner.os }}-asdf-
- name: Install dependencies in .tool-versions
uses: asdf-vm/actions/install@v1
- name: Cache Elixir build
uses: actions/cache@v3
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
<%= if web_project? do %>
- name: Cache Node modules
uses: actions/cache@v3
with:
path: assets/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
<% end %>
- name: Install Elixir dependencies
run: mix deps.get
- name: Compile dependencies
run: mix compile
<%= if web_project? do %>
- name: Install Node dependencies
run: npm --prefix assets install
- name: Compile assets
run: mix assets.deploy
<% end %>
- name: Create database
run: mix ecto.create
- name: Migrate database
run: mix ecto.migrate
- name: Seed database
run: mix run priv/repo/seeds.exs
unit_test:
name: Unit test
needs: lint_codebase
runs-on: ubuntu-latest
services:
db:
image: postgres:14.2
ports: ['5432:5432']
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup asdf
uses: asdf-vm/actions/setup@v1
- name: Cache asdf
uses: actions/cache@v3
with:
path: /home/runner/.asdf
key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
restore-keys: ${{ runner.os }}-asdf-
- name: Install dependencies in .tool-versions
uses: asdf-vm/actions/install@v1
- name: Cache Elixir build
uses: actions/cache@v3
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
<%= if web_project? do %>
- name: Cache Node modules
uses: actions/cache@v3
with:
path: assets/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
<% end %>
- name: Install Elixir dependencies
run: mix deps.get
- name: Compile dependencies
run: mix compile
<%= if web_project? do %>
- name: Install Node dependencies
run: npm --prefix assets install
- name: Compile assets
run: mix assets.deploy
<% end %>
- name: Create database
run: mix ecto.create
- name: Migrate database
run: mix ecto.migrate
- name: Run Tests
run: mix coverage --exclude feature_test
- name: Upload Code Coverage Artifact
uses: actions/upload-artifact@v2
if: ${{ failure() }}
with:
name: code_coverage
path: cover/
<%= if web_project? do %>
feature_test:
name: Feature test
needs: lint_codebase
runs-on: ubuntu-latest
services:
db:
image: postgres:14.2
ports: ['5432:5432']
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
# To have parallel feature test jobs, adjust the `mix_test_partition` here and the `--partitions option` in the `Run test` step.
# Example:
# - mix_test_partition: [1, 2, 3, 4]
# - mix test --only feature_test --partitions 4
strategy:
matrix:
mix_test_partition: [1]
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Setup asdf
uses: asdf-vm/actions/setup@v1
- name: Cache asdf
uses: actions/cache@v3
with:
path: /home/runner/.asdf
key: ${{ runner.os }}-asdf-${{ hashFiles('**/.tool-versions') }}
restore-keys: ${{ runner.os }}-asdf-
- name: Install dependencies in .tool-versions
uses: asdf-vm/actions/install@v1
- name: Cache Elixir build
uses: actions/cache@v3
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
- name: Cache Node modules
uses: actions/cache@v3
with:
path: assets/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
- name: Install Elixir dependencies
run: mix deps.get
- name: Compile dependencies
run: mix compile
- name: Install Node dependencies
run: npm --prefix assets install
- name: Compile assets
run: mix assets.deploy
- name: Create database
run: mix ecto.create
- name: Migrate database
run: mix ecto.migrate
- name: Run Tests
run: mix test --only feature_test --partitions 1
env:
MIX_TEST_PARTITION: ${{ matrix.mix_test_partition }}
- name: Upload Wallaby Screenshots Artifact
uses: actions/upload-artifact@v2
if: ${{ failure() }}
with:
name: wallaby_screenshots
path: tmp/wallaby_screenshots/
<% end %>