I’m still new to GitHub action. I’m running a Phoenix/Elixir project, In my config file, I have the following configuration for the test:
# Set HTTPClientMock as the HTTP client for the PayService
config :sender_service, :pay_service,
http_client: SenderService.HTTPClientMock,
url: System.get_env("PAY_URL"),
secret_key: System.get_env("PAY_SECRET_KEY"),
api_key: System.get_env("PAY_API_KEY")
and this a snippet of the test:
defmodule SenderService.PayServiceTest do
use ExUnit.Case, async: true
alias SenderService.PayService
import Mox
describe "pay_service" do
@http_client SenderService.HTTPClientMock
test "get_balances returns a list of balances" do
url = System.get_env("PAY_URL") <> "/v1/accounts/balances"
list_balances_body = [
%{
balance: "0.00000000",
holdAmount: "0.00000000",
productSymbol: "USD"
}
]
expect(@http_client, :get, fn actual_url, actual_headers ->
assert actual_url == "https://uat-pay-api.com/v1/accounts/balances"
# Check that Authorization header is present
authorization_header = List.keyfind(actual_headers, "Authorization", 0)
assert authorization_header != nil
{:ok, %HTTPoison.Response{body: list_balances_body |> Jason.encode!(), status_code: 200}}
end)
assert {:ok, balances} = PayService.get_balances()
expected_balances = [
%{
"balance" => "0.00000000",
"holdAmount" => "0.00000000",
"productSymbol" => "USD"
}
]
assert expected_balances == balances
Mox.verify!(@http_client)
end
end
end
which works locally with the config/test.exs file that I provide. But I’m getting the following error on GitHub action:
- test pay_service get_balances returns a list of balances ( SenderService.PayServiceTest)
Error: test/sender_service/pay_service_test.exs:11
** (ArgumentError) construction of binary failed: segment 1 of type ‘binary’: expected a binary but got: nil
code: url = System.get_env(“PAY_URL”) <> “/v1/accounts/balances”
stacktrace:
test/sender_service/pay_service_test.exs:12: (test)
I attempted to add the environment variables to both the “Actions secrets and variables” on GitHub, but I’m still encountering the error mentioned above. Am I missing something? Below are the “.yml” files for the workflow:
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Elixir CI
on:
push:
jobs:
verify:
# Set up a Postgres DB service. By default, Phoenix applications
# use Postgres. This creates a database for running tests.
# Additional services can be defined here if required.
runs-on: ubuntu-latest
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.3] # Define the elixir version [required]
services:
db:
image: postgres:12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: sender_service_dev
ports: ['5432:5432']
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
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: deps-cache
uses: actions/cache@v3
env:
cache-name: cache-elixir-deps
with:
path: deps
key: ${{ runner.os }}-mix-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
# 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: build-cache
uses: actions/cache@v3
env:
cache-name: cache-compiled-build
with:
path: _build
key: ${{ runner.os }}-build-${{ matrix.otp }}-${{ matrix.elixir }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
# Step: Download project dependencies. If unchanged, uses
# the cached version.
- name: Install deps
run: |
mix deps.get
# Step: Check that the checked in code has already been formatted.
# This step fails if something was found unformatted.
- name: Check Formatting
run: mix format --check-formatted
# Step: Execute the tests
- name: Run tests
run: mix test
# deploy:
# # only run this job if the verify job succeeds
# needs: verify
# # only run this job if the workflow is running on the master branch
# if: github.ref == 'refs/heads/master'
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v2
# # actions/checkout@v2 only checks out the latest commit,
# # so we need to tell it to check out the entire master branch
# with:
# ref: master
# fetch-depth: 0
# # configure the gigalixir-actions with our credentials and app name
# - uses: mhanberg/gigalixir-action@v0.1.0
# with:
# GIGALIXIR_USERNAME: ${{ secrets.GIGALIXIR_USERNAME }}
# GIGALIXIR_PASSWORD: ${{ secrets.GIGALIXIR_PASSWORD }}
# GIGALIXIR_APP: ${{ secrets.GIGALIXIR_APP }}
# SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
Any help on this would be deeply appreciated, thanks!