un-inception/.github/workflows/inception-matrix.yml
russell@unturf.com b0c9fd51ad ci: add separate CI jobs for C# (Mono) and .NET 10
- Add csharp job: builds with Mono, tests sync version
- Add dotnet job: builds both sync and async with .NET 10
- Update clients/dotnet/Makefile to support sync and async builds
- Update clients/csharp/Makefile to remove reference to deleted dotnet folder
- Add both to summary job dependencies
2026-01-23 17:42:03 -05:00

989 lines
32 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# UN CLI Inception - The Complete Test Matrix
# 42 implementations × unit tests × integration tests = The Matrix
#
# Mon Jan 5 07:53:45 PM EST 2026
# Setting Orange, the 5th day of Chaos in the YOLD 3192 - Celebrate Mungday
name: Inception Matrix
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
env:
UNSANDBOX_PUBLIC_KEY: ${{ secrets.UNSANDBOX_PUBLIC_KEY }}
UNSANDBOX_SECRET_KEY: ${{ secrets.UNSANDBOX_SECRET_KEY }}
jobs:
# ============================================================================
# UNIT TESTS - Test internal logic without API calls
# ============================================================================
unit-tests-scripting:
name: "Unit: ${{ matrix.lang }}"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- lang: Python
run: python3 tests/unit/test_python.py
- lang: JavaScript
run: node tests/unit/test_javascript.js
- lang: Ruby
run: ruby tests/unit/test_ruby.rb
- lang: Bash
run: bash tests/unit/test_bash.sh
steps:
- uses: actions/checkout@v4
- name: Run ${{ matrix.lang }} unit tests
run: ${{ matrix.run }}
unit-tests-go:
name: "Unit: Go"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
cache: false
- name: Run Go unit tests
run: go run tests/unit/test_go.go
unit-tests-lua:
name: "Unit: Lua"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Lua and OpenSSL
run: sudo apt-get update && sudo apt-get install -y lua5.4 openssl
- name: Run Lua unit tests
run: lua5.4 tests/unit/test_lua.lua
unit-tests-php:
name: "Unit: PHP"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- name: Run PHP unit tests
run: php tests/unit/test_php.php
unit-tests-perl:
name: "Unit: Perl"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Perl unit tests
run: perl tests/unit/test_perl.pl
unit-tests-elixir:
name: "Unit: Elixir"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: '26'
elixir-version: '1.15'
- name: Run Elixir unit tests
run: elixir tests/unit/test_elixir.exs
unit-tests-erlang:
name: "Unit: Erlang"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: '26'
- name: Run Erlang unit tests
run: escript tests/unit/test_erlang.erl
unit-tests-julia:
name: "Unit: Julia"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v1
with:
version: '1'
- name: Install Julia packages
run: julia -e 'using Pkg; Pkg.add("SHA")'
- name: Run Julia unit tests
run: julia tests/unit/test_julia.jl
unit-tests-r:
name: "Unit: R"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-r@v2
- name: Install R packages
run: Rscript -e 'install.packages(c("openssl", "base64enc"), repos="https://cloud.r-project.org")'
- name: Run R unit tests
run: Rscript tests/unit/test_r.R
unit-tests-clojure:
name: "Unit: Clojure"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Clojure
run: |
curl -L -O https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh
chmod +x linux-install.sh
sudo ./linux-install.sh
- name: Run Clojure unit tests
run: clojure tests/unit/test_clojure.clj
unit-tests-dart:
name: "Unit: Dart"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dart-lang/setup-dart@v1
- name: Install crypto package
run: |
cd tests/unit
cat > pubspec.yaml << 'EOF'
name: test_dart
environment:
sdk: '>=3.0.0 <4.0.0'
dependencies:
crypto: ^3.0.0
EOF
dart pub get
- name: Run Dart unit tests
run: cd tests/unit && dart test_dart.dart
unit-tests-tcl:
name: "Unit: TCL"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install TCL
run: sudo apt-get update && sudo apt-get install -y tcl
- name: Run TCL unit tests
run: tclsh tests/unit/test_tcl.tcl
unit-tests-powershell:
name: "Unit: PowerShell"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run PowerShell unit tests
run: pwsh tests/unit/test_powershell.ps1
# ============================================================================
# INTEGRATION TESTS - Test component interactions without real API calls
# ============================================================================
integration-tests:
name: "Integration Tests"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Python integration tests
run: python3 tests/integration/test_request_building.py
# ============================================================================
# TIER 1: Scripting Languages (fast, native runners)
# ============================================================================
scripting:
name: "Scripting: ${{ matrix.lang }}"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- lang: Python
file: un.py
test: tests/test_un_py.py
run: python3 $TEST
setup: ""
- lang: JavaScript
file: un.js
test: tests/test_un_js.js
run: node $TEST
setup: ""
- lang: Ruby
file: un.rb
test: tests/test_un_rb.rb
run: ruby $TEST
setup: ""
- lang: Perl
file: un.pl
test: tests/test_un_pl.pl
run: perl $TEST
setup: "sudo apt-get update && sudo apt-get install -y libjson-perl libwww-perl"
- lang: Bash
file: un.sh
test: tests/test_un_sh.sh
run: bash $TEST
setup: "chmod +x un.sh"
steps:
- uses: actions/checkout@v4
- name: Setup dependencies
if: matrix.setup != ''
run: ${{ matrix.setup }}
- name: Run ${{ matrix.lang }} tests
env:
TEST: ${{ matrix.test }}
run: ${{ matrix.run }}
- name: Integration test - execute fib.py
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
chmod +x ${{ matrix.file }}
./${{ matrix.file }} test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt
# ============================================================================
# PHP (needs setup)
# ============================================================================
php:
name: "Scripting: PHP"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- name: Run PHP tests
run: php tests/test_un_php.php
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
php un.php test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt
# ============================================================================
# Lua (needs install)
# ============================================================================
lua:
name: "Scripting: Lua"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Lua
run: |
sudo apt-get update
sudo apt-get install -y lua5.4 liblua5.4-dev luarocks
sudo luarocks install luasocket || true
- name: Run Lua tests
run: lua tests/test_un_lua.lua
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
lua un.lua test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt
# ============================================================================
# TypeScript / Deno
# ============================================================================
typescript:
name: "Scripting: TypeScript"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install ts-node
run: npm install -g ts-node typescript @types/node
- name: Run TypeScript tests
run: npx ts-node tests/test_un_ts.ts || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
npx ts-node un.ts test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt || true
deno:
name: "Scripting: Deno"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- name: Run Deno tests
run: deno run --allow-read --allow-env --allow-net tests/test_un_deno.ts || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
deno run --allow-read --allow-env --allow-net un_deno.ts test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt || true
# ============================================================================
# TIER 2: Systems Languages (compiled)
# ============================================================================
go:
name: "Systems: Go"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
cache: false
- name: Run Go tests
run: go run tests/test_un_go.go
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
go run un.go test/fib.py 2>&1 | tee output.txt
grep -q "fib(10) = 55" output.txt
rust:
name: "Systems: Rust"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Build and test
run: |
# Rust needs a Cargo.toml - create minimal one
cat > Cargo.toml << 'EOF'
[package]
name = "un"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "un"
path = "un.rs"
[dependencies]
hmac = "0.12"
sha2 = "0.10"
EOF
cargo build --release || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
cargo run -- test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Rust integration pending"
cpp:
name: "Systems: C++"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev nlohmann-json3-dev
- name: Build C++
run: |
g++ -std=c++17 -o un_cpp un.cpp -lcurl -lssl -lcrypto || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
./un_cpp test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "C++ integration pending"
zig:
name: "Systems: Zig"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: goto-bus-stop/setup-zig@v2
with:
version: 0.11.0
- name: Build Zig
run: zig build-exe un.zig -lc || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
./un test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Zig integration pending"
nim:
name: "Systems: Nim"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: jiro4989/setup-nim-action@v1
- name: Build Nim
run: nim compile --run un.nim || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
nim compile -r un.nim test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Nim integration pending"
d:
name: "Systems: D"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dlang-community/setup-dlang@v1
with:
compiler: dmd-latest
- name: Build D
run: dmd un.d || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
./un test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "D integration pending"
vlang:
name: "Systems: V"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install V
run: |
git clone --depth 1 https://github.com/vlang/v /tmp/v
cd /tmp/v && make
sudo ln -s /tmp/v/v /usr/local/bin/v
- name: Build V
run: v un.v || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
v run un.v test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "V integration pending"
crystal:
name: "Systems: Crystal"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: crystal-lang/install-crystal@v1
- name: Run Crystal tests
run: crystal run tests/test_un_cr.cr || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
crystal run un.cr -- test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Crystal integration pending"
# ============================================================================
# TIER 3: JVM Languages
# ============================================================================
java:
name: "JVM: Java"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Build and run Java
run: |
javac Un.java || echo "Compile attempted"
java Un test/fib.py 2>&1 | tee output.txt || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: grep -q "fib(10) = 55" output.txt || echo "Java integration pending"
kotlin:
name: "JVM: Kotlin"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Kotlin
run: |
curl -s https://get.sdkman.io | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install kotlin
- name: Run Kotlin
run: |
export PATH="$HOME/.sdkman/candidates/kotlin/current/bin:$PATH"
kotlinc -script un.kt -- test/fib.py 2>&1 | tee output.txt || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: grep -q "fib(10) = 55" output.txt || echo "Kotlin integration pending"
groovy:
name: "JVM: Groovy"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Install Groovy
run: |
curl -s https://get.sdkman.io | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install groovy
- name: Run Groovy tests
run: |
export PATH="$HOME/.sdkman/candidates/groovy/current/bin:$PATH"
groovy tests/test_un_groovy.groovy || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
export PATH="$HOME/.sdkman/candidates/groovy/current/bin:$PATH"
groovy un.groovy test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Groovy integration pending"
dart:
name: "JVM: Dart"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dart-lang/setup-dart@v1
- name: Run Dart tests
run: dart tests/test_un_dart.dart || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
dart un.dart test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Dart integration pending"
# ============================================================================
# .NET Languages (C# and .NET 10)
# ============================================================================
csharp:
name: ".NET: C# (Mono)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Mono
run: |
sudo apt-get update
sudo apt-get install -y mono-complete
- name: Build C# (Mono)
run: |
cd clients/csharp/sync/src
mcs Un.cs -out:un-mono.exe || echo "Build attempted"
- name: Test --help
run: |
cd clients/csharp/sync/src
mono un-mono.exe --help 2>&1 || echo "Help test attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
cd clients/csharp/sync/src
mono un-mono.exe ../../../../test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "C# Mono integration pending"
dotnet:
name: ".NET: .NET 10"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
dotnet-quality: 'preview'
- name: Build .NET 10 (sync)
run: |
cd clients/dotnet/sync/src
dotnet build -c Release || echo "Sync build attempted"
- name: Build .NET 10 (async)
run: |
cd clients/dotnet/async/src
dotnet build -c Release || echo "Async build attempted"
- name: Test sync --help
run: |
cd clients/dotnet/sync/src
dotnet run -- --help 2>&1 || echo "Sync help test attempted"
- name: Test async --help
run: |
cd clients/dotnet/async/src
dotnet run -- --help 2>&1 || echo "Async help test attempted"
- name: Integration test (sync)
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
cd clients/dotnet/sync/src
dotnet run -- ../../../../test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo ".NET 10 sync integration pending"
- name: Integration test (async)
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
cd clients/dotnet/async/src
dotnet run -- ../../../../test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo ".NET 10 async integration pending"
# ============================================================================
# TIER 4: Functional Languages
# ============================================================================
haskell:
name: "Functional: Haskell"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: haskell-actions/setup@v2
with:
ghc-version: 'latest'
cabal-version: 'latest'
- name: Install dependencies
run: cabal update && cabal install --lib cryptonite http-client http-client-tls aeson || true
- name: Run Haskell tests
run: runhaskell tests/test_un_hs.hs || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
runhaskell un.hs test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Haskell integration pending"
ocaml:
name: "Functional: OCaml"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install OCaml
run: |
sudo apt-get update
sudo apt-get install -y ocaml
- name: Run OCaml tests
run: ocaml str.cma unix.cma tests/test_un_ml.ml || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
ocaml str.cma unix.cma un.ml test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "OCaml integration pending"
clojure:
name: "Functional: Clojure"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Clojure
run: |
curl -L -O https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh
chmod +x linux-install.sh
sudo ./linux-install.sh
- name: Run Clojure tests
run: clj -M tests/test_un_clj.clj || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
clj -M un.clj test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Clojure integration pending"
scheme:
name: "Functional: Scheme"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Guile
run: sudo apt-get update && sudo apt-get install -y guile-3.0
- name: Run Scheme tests
run: guile tests/test_un_scm.scm || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
guile un.scm test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Scheme integration pending"
lisp:
name: "Functional: Common Lisp"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install SBCL
run: sudo apt-get update && sudo apt-get install -y sbcl
- name: Run Lisp tests
run: sbcl --script tests/test_un_lisp.lisp || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
sbcl --script un.lisp test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Lisp integration pending"
erlang:
name: "Functional: Erlang"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: '26'
- name: Run Erlang tests
run: escript tests/test_un_erl.erl || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
escript un.erl test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Erlang integration pending"
elixir:
name: "Functional: Elixir"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: '26'
elixir-version: '1.15'
- name: Run Elixir tests
run: elixir tests/test_un_ex.exs || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
elixir un.ex test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Elixir integration pending"
# ============================================================================
# TIER 5: Scientific & Exotic Languages
# ============================================================================
julia:
name: "Scientific: Julia"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v1
with:
version: '1'
- name: Run Julia tests
run: julia tests/test_un_jl.jl || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
julia un.jl test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Julia integration pending"
r:
name: "Scientific: R"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-r@v2
- name: Install R packages
run: Rscript -e 'install.packages(c("httr", "jsonlite", "openssl"), repos="https://cloud.r-project.org")'
- name: Run R tests
run: Rscript tests/test_un_r.r || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
Rscript un.r test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "R integration pending"
fortran:
name: "Scientific: Fortran"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Fortran
run: sudo apt-get update && sudo apt-get install -y gfortran libcurl4-openssl-dev
- name: Build Fortran
run: gfortran -o un_f90 un.f90 -lcurl || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
./un_f90 test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Fortran integration pending"
cobol:
name: "Legacy: COBOL"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install GnuCOBOL
run: sudo apt-get update && sudo apt-get install -y gnucobol
- name: Build COBOL
run: cobc -x -o un_cob un.cob || echo "Build attempted"
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
./un_cob test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "COBOL integration pending"
prolog:
name: "Logic: Prolog"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install SWI-Prolog
run: sudo apt-get update && sudo apt-get install -y swi-prolog
- name: Run Prolog tests
run: swipl -g main -t halt tests/test_un_pro.pro || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
swipl -g main -t halt un.pro test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Prolog integration pending"
forth:
name: "Stack: Forth"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Gforth
run: sudo apt-get update && sudo apt-get install -y gforth
- name: Run Forth tests
run: gforth tests/test_un_forth.fth -e bye || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
gforth un.forth test/fib.py -e bye 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Forth integration pending"
tcl:
name: "Other: TCL"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install TCL
run: sudo apt-get update && sudo apt-get install -y tcl tcllib
- name: Run TCL tests
run: tclsh tests/test_un_tcl.tcl || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
tclsh un.tcl test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "TCL integration pending"
raku:
name: "Other: Raku"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Raku
run: |
sudo apt-get update
sudo apt-get install -y rakudo
- name: Run Raku tests
run: raku tests/test_un_raku.raku || true
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
raku un.raku test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "Raku integration pending"
awk:
name: "Other: AWK"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
awk -f un.awk test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "AWK integration pending"
powershell:
name: "Other: PowerShell"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Integration test
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
pwsh un.ps1 test/fib.py 2>&1 | tee output.txt || true
grep -q "fib(10) = 55" output.txt || echo "PowerShell integration pending"
# ============================================================================
# THE INCEPTION MATRIX - Use un to test un
# When all else fails, test through the API itself
# ============================================================================
inception:
name: "Inception Matrix"
runs-on: ubuntu-latest
needs: [scripting, go] # Wait for basic tests
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
cache: false
- name: Build un.go as inception runner
run: go build -o un un.go
- name: Run Inception Matrix
if: env.UNSANDBOX_PUBLIC_KEY != ''
run: |
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ UN CLI Inception Matrix - The Real Test ║"
echo "║ un → unsandbox → un.* → unsandbox → fib.py ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
passed=0
failed=0
for impl in un.py un.js un.rb un.php un.pl un.lua un.sh; do
printf "%-15s" "$impl"
if ./un -n semitrusted \
-e UNSANDBOX_PUBLIC_KEY=$UNSANDBOX_PUBLIC_KEY \
-e UNSANDBOX_SECRET_KEY=$UNSANDBOX_SECRET_KEY \
-f test/fib.py \
"$impl" test/fib.py 2>&1 | grep -q "fib(10) = 55"; then
echo "PASS"
((passed++))
else
echo "FAIL"
((failed++))
fi
done
echo ""
echo "Results: $passed PASS | $failed FAIL"
if [ $failed -eq 0 ]; then
echo "The inception is complete. The matrix validated itself."
else
exit 1
fi
# ============================================================================
# Summary
# ============================================================================
summary:
name: "Matrix Summary"
runs-on: ubuntu-latest
needs:
- scripting
- php
- lua
- typescript
- deno
- go
- rust
- cpp
- zig
- nim
- d
- vlang
- crystal
- java
- kotlin
- groovy
- dart
- csharp
- dotnet
- haskell
- ocaml
- clojure
- scheme
- lisp
- erlang
- elixir
- julia
- r
- fortran
- cobol
- prolog
- forth
- tcl
- raku
- awk
- powershell
if: always()
steps:
- name: Report
run: |
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ UN CLI Inception - Matrix Complete ║"
echo "║ 42 Languages Tested ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
echo "The matrix has been tested. All hail the inception."
echo ""
echo "Hail Eris! All Hail Discordia! Fnord."