name: Elixir on: pull_request: branches: - "main" types: [opened, reopened, synchronize, labeled] push: branches: - "main" concurrency: group: ci-${{ github.head_ref || github.run_id }}-elixir cancel-in-progress: true jobs: test-matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 - name: Read file id: set-matrix run: | matrixStringifiedObject="$(jq -c . .github/elixir-test-matrix.json)" echo "matrix=$matrixStringifiedObject" >> $GITHUB_OUTPUT opentelemetry-dataloader: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_dataloader')) env: app: "opentelemetry_dataloader" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Dataloader test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} services: postgres: image: circleci/postgres:13.5-ram ports: ["5432:5432"] options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: opentelemetry_dataloader_test steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-ecto: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_ecto')) env: app: "opentelemetry_ecto" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Ecto test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} services: postgres: image: circleci/postgres:13.5-ram ports: ["5432:5432"] options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: opentelemetry_ecto_test steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-finch: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_finch')) env: app: "opentelemetry_finch" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Finch test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-httpoison: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_httpoison')) env: app: "opentelemetry_httpoison" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry HTTPoison test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-nebulex: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_nebulex')) env: app: "opentelemetry_nebulex" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Nebulex test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-oban: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_oban')) env: app: "opentelemetry_oban" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Oban test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} services: postgres: image: circleci/postgres:13.5-ram ports: ["5432:5432"] options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: opentelemetry_oban_test steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-phoenix: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_phoenix')) env: app: "opentelemetry_phoenix" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Phoenix test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-bandit: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_bandit')) env: app: "opentelemetry_bandit" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ${{ matrix.os }} name: Opentelemetry Bandit test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-redix: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_redix')) env: app: "opentelemetry_redix" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Redix test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} services: redis: image: redis:alpine ports: ["6379:6379"] steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-req: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_req')) env: app: "opentelemetry_req" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Req test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-telemetry: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_telemetry')) env: app: "opentelemetry_telemetry" defaults: run: working-directory: utilities/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Telemetry test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-process-propagator: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_process_propagator')) env: app: "opentelemetry_process_propagator" defaults: run: working-directory: propagators/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Process Propagator test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test opentelemetry-tesla: needs: [test-matrix] if: (contains(github.event.pull_request.labels.*.name, 'elixir') && contains(github.event.pull_request.labels.*.name, 'opentelemetry_tesla')) env: app: "opentelemetry_tesla" defaults: run: working-directory: instrumentation/${{ env.app }} runs-on: ubuntu-22.04 name: Opentelemetry Tesla test on Elixir ${{ matrix.elixir_version }} (OTP ${{ matrix.otp_version }}) strategy: fail-fast: false matrix: ${{ fromJson(needs.test-matrix.outputs.matrix) }} steps: - uses: actions/checkout@v4 - uses: erlef/setup-beam@v1 with: version-type: strict otp-version: ${{ matrix.otp_version }} elixir-version: ${{ matrix.elixir_version }} rebar3-version: ${{ matrix.rebar3_version }} - name: Cache uses: actions/cache@v4 with: path: | ~/deps ~/_build key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ matrix.elixir_version }}-v3-${{ hashFiles('**/mix.lock') }} - name: Fetch deps if: steps.deps-cache.outputs.cache-hit != 'true' run: mix deps.get - name: Compile project run: mix compile --warnings-as-errors - name: Check formatting run: mix format --check-formatted if: matrix.check_formatted - name: Test run: mix test