Github Actions Env variables not being read from os::env

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:

  1. 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! :smiley: