- Clojure: Use 'clojure' instead of 'clj -M' for standalone script - Dart: Add proper pubspec.yaml with SDK environment constraint - Julia: Install SHA package before running tests - Lua: Use lua5.4 explicitly, add awk for portable HMAC output parsing - Perl: Install libjson-perl and libwww-perl dependencies - Bash: Make un.sh executable before test - OCaml: Add str.cma and unix.cma for Str module support - OCaml unit test: Remove Str dependency with pure string search
924 lines
30 KiB
YAML
924 lines
30 KiB
YAML
# 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'
|
||
- 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'
|
||
- 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"
|
||
|
||
# ============================================================================
|
||
# 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
|
||
- uses: ocaml/setup-ocaml@v2
|
||
with:
|
||
ocaml-compiler: 5
|
||
- name: Install dependencies
|
||
run: |
|
||
opam install -y cohttp-lwt-unix yojson digestif || true
|
||
- name: Run OCaml tests
|
||
run: |
|
||
eval $(opam env)
|
||
ocaml str.cma unix.cma tests/test_un_ml.ml || true
|
||
- name: Integration test
|
||
if: env.UNSANDBOX_PUBLIC_KEY != ''
|
||
run: |
|
||
eval $(opam env)
|
||
ocaml 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'
|
||
|
||
- 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
|
||
- 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."
|