name: Tests
on:
workflow_dispatch:
push:
paths:
- 'src/**'
- 'tests/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'templates/**'
- '.github/workflows/test.yml'
pull_request:
paths:
- 'src/**'
- 'tests/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'templates/**'
- '.github/workflows/test.yml'
env:
CARGO_TERM_COLOR: always
jobs:
unit-tests:
name: Unit Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
golang:
name: Go
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Restore cached build
uses: actions/cache/restore@v3
with:
path: |
target
~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Generate Go code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/go/generated.go \
-t golang
- name: Build Docker image
run: docker build -t gotests -f tests/envs/go/Dockerfile .
- name: Run tests
run: docker run --rm gotests
python:
name: Python
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate Python code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/python/gen_dataclasses.py \
-t python-dataclass
cargo run convert \
-i tests/data/model.md \
-o tests/envs/python/gen_pydantic.py \
-t python-pydantic
cargo run convert \
-i tests/data/model.md \
-o tests/envs/python/gen_pydantic_xml.py \
-t python-pydantic-xml
- name: Build Docker image
run: docker build -t pythontests -f tests/envs/python/Dockerfile .
- name: Run tests
run: docker run --rm pythontests
typescript:
name: TypeScript Zod
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate TypeScript code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/typescript/generated.ts \
-t typescript-zod
- name: Build Docker image
run: docker build -t tstests -f tests/envs/typescript/Dockerfile .
- name: Run tests
run: docker run --rm tstests
julia:
name: Julia
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Restore cached build
uses: actions/cache/restore@v3
with:
path: |
target
~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Generate Julia code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/julia/generated.jl \
-t julia
- name: Setup Julia
uses: julia-actions/setup-julia@v1
with:
version: '1.9'
- name: Install dependencies
run: |
julia -e 'using Pkg; Pkg.add(["Test", "JSON3", "StructTypes"])'
- name: Run tests
run: |
cd tests/envs/julia
julia test.jl
rust:
name: Rust
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate Rust code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/rust/src/generated.rs \
-t rust
- name: Build Docker image
run: docker build -t rusttests -f tests/envs/rust/Dockerfile .
- name: Run tests
run: docker run --rm rusttests
rust-ld:
name: Rust (LD)
needs: unit-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate Rust code
run: |
cargo run convert \
-i tests/data/model.md \
-o tests/envs/rust-ld/src/generated.rs \
-O jsonld \
-t rust
- name: Build Docker image
run: docker build -t rusttests -f tests/envs/rust-ld/Dockerfile .
- name: Run tests
run: docker run --rm rusttests
bundler:
name: Bundler
needs: unit-tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: jetli/wasm-pack-action@v0.4.0
with:
version: 'latest'
- name: Build WASM for npm (bundle)
run: wasm-pack build --target bundler --features wasm --no-default-features
web:
name: Web
needs: unit-tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: jetli/wasm-pack-action@v0.4.0
with:
version: 'latest'
- name: Build WASM for npm (bundle)
run: wasm-pack build --features wasm --no-default-features