Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
5905fc6
phase 1 work
thanos Apr 19, 2026
212552a
Phase 2 complete: Elixir reference backend with flat maps, semantic t…
thanos Apr 20, 2026
23ec21f
Stop tracking <directory_name>
thanos Apr 20, 2026
31fdbd7
Fix semiring naming convention and normalize formatting
thanos Apr 20, 2026
da01a42
Phase 3: SuiteSparse native backend via Zigler NIFs - closed #9
thanos Apr 20, 2026
7c41502
Phase 4: Core Sparse Operations Parity and Semantic Validation - clos…
thanos Apr 20, 2026
195e55f
add masks, descriptors, and container manipulation (Phase 5)
thanos Apr 21, 2026
d81a09c
closed #26 - add benchmarks for masks and descriptors
thanos Apr 21, 2026
9006b82
Issues Closed
thanos Apr 21, 2026
186b9b1
All 10 credo issues resolved. Credo: 0 issues, 470 tests passing. clo…
thanos Apr 21, 2026
b38c97e
format fix
thanos Apr 21, 2026
88ddc10
Phase 8: hardening, backend dispatch fix, release preparation - close…
thanos Apr 22, 2026
5bf19ce
| Fix |File(s) | Change
thanos Apr 22, 2026
3e7a643
`backend/elixir.ex` — 19 new tests:
thanos Apr 22, 2026
7a8ab2b
Add CI/CD workflows and ZiglerPrecompiled support
thanos Apr 22, 2026
b0184f9
All dialyzer issues fixed. Summary:
thanos Apr 22, 2026
c1cef18
fixed missing zig setup in github flow
thanos Apr 22, 2026
6ed717f
fixed missing zig setup in github flow
thanos Apr 22, 2026
fdd60b7
The fix is to downgrade Zig to 0.13.0 in the workflows.
thanos Apr 22, 2026
46d402d
The fix is to downgrade Zig to 0.13.0 in the workflows.
thanos Apr 22, 2026
73c6a10
dropped zig
thanos Apr 23, 2026
eeb1ba2
yml format
thanos Apr 23, 2026
f76859a
added zig
thanos Apr 23, 2026
e12652f
Done. The workflows now:
thanos Apr 23, 2026
0ad5528
Now libgraphblas-dev will pull in the correct runtime library for wh…
thanos Apr 23, 2026
09958c2
CI will now build SuiteSparse:GraphBLAS v9.4.5 from source on Linux a…
thanos Apr 23, 2026
d5ac8d2
Now the workflow uses working-directory to ensure each step runs in t…
thanos Apr 23, 2026
cefc20a
closed #63
thanos Apr 23, 2026
1a43638
closed #64
thanos Apr 23, 2026
011ef11
ci: add Docker setup for local CI testing via test-ci-local.sh
thanos Apr 23, 2026
862e449
fix: use portable find syntax for graphblas.pc verification
thanos Apr 23, 2026
06a4735
fix: correct graphblas.pc path extraction logic
thanos Apr 23, 2026
43d6d7f
docs: add CI/CD and development guide
thanos Apr 23, 2026
50ff3e4
fix: combine PKG_CONFIG_PATH steps and simplify verification
thanos Apr 23, 2026
f5c32d1
updated case of lib
thanos Apr 23, 2026
9edece7
added elixir 1.20, 1.19
thanos Apr 23, 2026
4cdee85
testing lint
thanos Apr 23, 2026
cb8c4bd
turning off dialyzer
thanos Apr 23, 2026
239cb41
fixes to lint
thanos Apr 23, 2026
16c7651
added audit
thanos Apr 23, 2026
21a97de
added dialyzer back
thanos Apr 23, 2026
abd5ff4
Removed the separate dialyzer job entirely. Its logic is now folded i…
thanos Apr 23, 2026
2ab64f0
fixes to precompiled
thanos Apr 23, 2026
15aba2d
fixes to precompiled
thanos Apr 23, 2026
60f91a3
reducing the targets
thanos Apr 23, 2026
04370ec
fixed mix: command not found” error for x86_64-linux-gnu when you run…
thanos Apr 23, 2026
502ff6e
added prod.exs
thanos Apr 23, 2026
19ae4eb
This now:
thanos Apr 24, 2026
6321561
added all the targets
thanos Apr 24, 2026
c334bda
update documentation closed #67
thanos Apr 24, 2026
3601c96
What this fixes:
thanos Apr 24, 2026
d79d582
I updated the Verify GraphBLAS installation and set PKG_CONFIG_PATH s…
thanos Apr 24, 2026
6333c69
Summary
thanos Apr 24, 2026
ef468e2
Summary: Fixed GitHub Actions CI Failure
thanos Apr 24, 2026
9a3b737
1. PATH propagation: $GITHUB_PATH updates take effect in subsequent s…
thanos Apr 24, 2026
eea6748
The log gave us the answer directly:
thanos Apr 24, 2026
76b33ed
What changed:
thanos Apr 24, 2026
c905ce1
The URL format was wrong: zig-linux-x86_64-0.15.2 → zig-x86_64-linux-…
thanos Apr 24, 2026
8e5ec40
forced compile
thanos Apr 24, 2026
767926a
Two fixes applied:
thanos Apr 24, 2026
da96983
Two fixes:
thanos Apr 24, 2026
9800ca6
Changes in this rewrite:
thanos Apr 24, 2026
4754d65
Good. Now let me check one thing — the zig_code_path in the stub modu…
thanos Apr 24, 2026
647e455
Root cause: ZiglerPrecompiled tries to download precompiled NIFs at c…
thanos Apr 24, 2026
19020ec
Fixes applied:
thanos Apr 24, 2026
11665b1
added missed files
thanos Apr 24, 2026
86134e8
added missed files
thanos Apr 24, 2026
1cb2312
added elixir: "1.19.5"
thanos Apr 24, 2026
ea517c0
Thats it. The cache key was v5 — cached from a run before the ZigStub…
thanos Apr 25, 2026
bb02c5e
added elixir: "1.20.0"
thanos Apr 25, 2026
a36e6f7
Now the cache key includes source file hashes. When ZigStub files are…
thanos Apr 25, 2026
f08816b
Summary of changes:
thanos Apr 25, 2026
a793e05
added some badges
thanos Apr 25, 2026
052d78e
added some badges
thanos Apr 25, 2026
e00ab70
added some badges
thanos Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .credo.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
%{
configs: [
%{
name: "default",
strict: true,
checks: [
{Credo.Check.Consistency.TabsOrSpaces},
{Credo.Check.Consistency.SpaceInParentheses},
{Credo.Check.Consistency.SpaceAroundOperators},
{Credo.Check.Consistency.MultiAliasUnfold},
{Credo.Check.Consistency.ParameterPatternMatching},
{Credo.Check.Readability.ModuleDoc},
{Credo.Check.Readability.FunctionNames},
{Credo.Check.Readability.PredicateFunctionNames},
{Credo.Check.Readability.LargeNumbers},
{Credo.Check.Readability.SinglePipe},
{Credo.Check.Readability.StringSigils},
{Credo.Check.Readability.TrailingWhiteSpace},
{Credo.Check.Readability.ParenthesesOnZeroArityDefs},
{Credo.Check.Readability.AliasOrder},
{Credo.Check.Readability.PreferImplicitTry},
{Credo.Check.Readability.ModuleSpatialStructure},
{Credo.Check.Refactor.PipeChainStart, excluded_functions: ["from_coo", "to_coo", "new", "reduce", "resolve"]},
{Credo.Check.Refactor.CaseTrivialMatches},
{Credo.Check.Refactor.NegatedConditionsInUnless},
{Credo.Check.Refactor.NegatedConditions},
{Credo.Check.Refactor.FilterFilter},
{Credo.Check.Refactor.RejectReject},
{Credo.Check.Refactor.MapJoin},
{Credo.Check.Warning.IoInspect},
{Credo.Check.Warning.IExPry},
{Credo.Check.Warning.OperationOnSameValues},
{Credo.Check.Warning.BoolOperationOnSameValues},
{Credo.Check.Warning.ExpensiveEmptyEnumCheck},
{Credo.Check.Warning.DuplicatedErlangOption},
{Credo.Check.Warning.LazyLogging},
{Credo.Check.Warning.UnusedEnumOperation},
{Credo.Check.Warning.UnusedKeywordOperation},
{Credo.Check.Warning.UnusedListOperation},
{Credo.Check.Warning.UnusedStringOperation},
{Credo.Check.Warning.UnusedTupleOperation},
# Disable checks that conflict with GraphBLAS naming conventions
{Credo.Check.Readability.Specs, false},
{Credo.Check.Readability.MaxLineLength, max_length: 120}
]
}
]
}
67 changes: 67 additions & 0 deletions .github/workflows/elixir-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

env:
MIX_ENV: test

jobs:
test:
name: Test -- Elixir ${{ matrix.elixir }} / OTP ${{ matrix.otp }}
runs-on: ubuntu-22.04

strategy:
fail-fast: false
matrix:
include:
# - elixir: "1.17.3"
# otp: "26"
- elixir: "1.20.0-rc.3"
otp: "28.4.1"
# Latest stable versions
- elixir: "1.19.5"
otp: "28.4.1"
coverage: true
# Previous versions for compatibility
- elixir: "1.18.4"
otp: "27.3"

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}

- name: Cache Mix dependencies
uses: actions/cache@v4
with:
path: deps
key: ${{ runner.os }}-test-${{ matrix.elixir }}-${{ matrix.otp }}-v1-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-test-${{ matrix.elixir }}-${{ matrix.otp }}-v1-

- name: Install dependencies
run: mix deps.get

- name: Install Zig
run: |
ZIG_VERSION="0.15.2"
curl -fsSL "https://ziglang.org/download/${ZIG_VERSION}/zig-x86_64-linux-${ZIG_VERSION}.tar.xz" -o zig.tar.xz
tar -xf zig.tar.xz
ZIG_DIR="${PWD}/zig-x86_64-linux-${ZIG_VERSION}"
echo "${ZIG_DIR}" >> "$GITHUB_PATH"
"${ZIG_DIR}/zig" version

- name: Compile (warnings as errors)
run: mix compile --warnings-as-errors

- name: Run tests
run: mix test
105 changes: 105 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Lint

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

env:
MIX_ENV: dev
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
lint:
name: Lint
runs-on: ubuntu-22.04

# Pin to the canonical lint version -- this is not the build matrix.
# The matrix for compatibility testing lives in elixir-build.yml.
env:
ELIXIR_VERSION: "1.19.5"
OTP_VERSION: "28.4.1"

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ env.ELIXIR_VERSION }}
otp-version: ${{ env.OTP_VERSION }}

- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-lint-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-lint-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-

- name: Install SuiteSparse:GraphBLAS
run: |
sudo apt-get update
sudo apt-get install -y libgraphblas-dev pkg-config

- name: Install dependencies
run: mix deps.get

- name: Download Zig (for Zigler)
run: mix zig.get

- name: Check formatting
run: mix format --check-formatted

- name: Compile (warnings as errors)
run: mix compile --warnings-as-errors
env:
MIX_ENV: dev
EX_GRAPHBLAS_BUILD: "1"

- name: Run Credo
run: mix credo --strict

- name: Check documentation compiles without warnings
run: |
mix docs 2>&1 | tee /tmp/docs_output.txt
if grep -i "warning" /tmp/docs_output.txt; then
echo "ExDoc produced warnings -- failing."
exit 1
fi
env:
MIX_ENV: dev

- name: Check for outdated dependencies
run: mix hex.outdated || true

- name: Check for unused locked dependencies
run: mix deps.unlock --check-unused

- name: Audit dependencies for known vulnerabilities
run: mix deps.audit

# Dialyzer (runs after lint, reusing the same setup)
- name: Cache PLT
uses: actions/cache@v4
id: plt-cache
with:
path: priv/plts
key: ${{ runner.os }}-plt-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-plt-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-

- name: Create PLT directory
if: steps.plt-cache.outputs.cache-hit != 'true'
run: mkdir -p priv/plts

- name: Build PLT
if: steps.plt-cache.outputs.cache-hit != 'true'
run: mix dialyzer --plt

- name: Run Dialyzer
run: mix dialyzer --format github
Loading
Loading