|
| 1 | +## Harness Migration Report — 2026-07-29 |
| 2 | + |
| 3 | +**Repo:** splitio/elixir-thin-client |
| 4 | +**Language:** Elixir (versions: 1.14.0 / OTP 25, 1.19.4 / OTP 28) |
| 5 | +**Status:** ❌ FAILED |
| 6 | + |
| 7 | +### Steps |
| 8 | +| Step | Result | Notes | |
| 9 | +|------|--------|-------| |
| 10 | +| Detect context | ✅ | Elixir, elixir-thin-client | |
| 11 | +| Read GH workflow | ✅ | .github/workflows/ci.yml | |
| 12 | +| Generate Harness YAML | ✅ | Assumptions made: |
| 13 | +- Used mise to install both Erlang/OTP and Elixir versions (mirroring the erlef/setup-beam behavior from the GitHub Actions workflow), since no dedicated Elixir setup tool was specified in the rules. |
| 14 | +- Used a matrix `include` list with paired `elixirVersion`/`otpVersion` values (1.14.0/25 and 1.19.4/28) since Elixir and OTP versions must be paired together rather than combined as an unconstrained matrix. |
| 15 | +- SonarQube scanning and quality-gate posting were not present in the original GitHub Actions workflow; added them per the Harness constants/rules (sonar.sources=lib, sonar.tests=test), gated to run only on the latest version (1.19.4), following the ruby-client reference pattern. |
| 16 | +- No coverage report path was available for Elixir (no coverage tool specified in the workflow), so sonar.coverage.exclusions=test/** was set instead of a coverage report path. |
| 17 | +- mix.local.hex/mix local.rebar --force added before deps.get since mise-installed Elixir typically needs Hex/Rebar bootstrapped (not explicit in the original workflow but implied by erlef/setup-beam's default behavior). |
| 18 | +- Dialyzer step runs on every matrix entry (as in the original workflow) rather than only the latest version. |
| 19 | +- Input set file path: .harness/orgs/PROD/projects/Harness_Split/pipelines/elixirthinclient/input_sets/elixirthinclientinputset.yaml |
| 20 | +- Pipeline file path assumed: .harness/pipeline.yaml (not created/written to disk, only returned as YAML per instructions). | |
| 21 | +| Write pipeline file | ✅ | .harness/pipeline.yaml | |
| 22 | +| Create pipeline in Harness | ✅ | pipeline=success | |
| 23 | +| Create webhook trigger | ✅ | created, webhook=SUCCESS (id: 658672410) | |
| 24 | +| Dry-run | ❌ | https://harness0.harness.io/ng/account/l7B_kbSEQD2wjrM7PShm5w/all/orgs/PROD/projects/Harness_Split/pipelines/elixirthinclient/deployments/OhpqrNV5REeRmQvultOmug/pipeline | |
| 25 | + |
| 26 | +**Dry-run failed — PR not opened. Manual investigation required.** |
| 27 | + |
| 28 | +**Execution URL:** https://harness0.harness.io/ng/account/l7B_kbSEQD2wjrM7PShm5w/all/orgs/PROD/projects/Harness_Split/pipelines/elixirthinclient/deployments/OhpqrNV5REeRmQvultOmug/pipeline |
| 29 | + |
| 30 | +**Failure:** Both matrix stages (elixir 1.14.0/otp 25 and elixir 1.19.4/otp 28) failed in the "Install_Erlang_and_Elixir" step. The command `mise use --global erlang@null` / `elixir@null` used a literal "null" instead of the actual version numbers, causing: "mise ERROR Failed to install core:erlang@null: HTTP status client error (404 Not Found) for url (https://builds.hex.pm/builds/otp/amd64/ubuntu-22.04/OTP-null.tar.gz)". This indicates the pipeline step's shell command is not correctly interpolating the matrix variables (elixirVersion/otpVersion or similarly named erlang version) — check the pipeline YAML's variable expressions in the Install_Erlang_and_Elixir step (.harness/pipeline.yaml on branch harness-pipeline/2026-07-29). |
0 commit comments