Files
modeling-app/public/kcl-samples
Jonathan Tran 69553fded7 test: Vendor kcl-samples and add simulation tests for them (#5460)
* Change to unzip

* Download kcl-samples as zip to public dir

* Fix fetch:samples, e2e electron still not working

* Change error message to be clearer

* Refactor so that input and output directories of sim tests can be different

* Add kcl samples test implementation

* Update output since adding kcl_samples tests

* Update kcl-samples branch

* Fix git-ignore pattern to only apply to the root

* Fix yarn install and yarn fetch:samples to work the first time

* Remove unneeded exists check

* Change to use kcl-samples in public directory

* Add kcl-samples

* Update output since updating kcl-samples

* Update output files

* Change to not fetch samples during yarn install

* Update output after merge

* Ignore kcl-samples in codespell

* WIP: Don't run e2e if only kcl-samples changed

* Conditionally run cargo tests

* Fix to round floating point values in program memory arrays

* Update output since merge and rounding numbers in memory

* Fix memory redaction for floating point to find more values

* Fix float redaction pattern

* Update output since rounding floating point numbers

* Add center to floating point pattern

* Fix trigger to use picomatch syntax

* Update output since rounding center

* Remove kcl-samples github workflows

* Enable Rust backtrace

* Update output after re-running

* Update output after changing order of post-extrude commands

* Fix to have deterministic order of commands

* Update output after reverting ordering changes

* Update kcl-samples

* Update output after updating samples

* Fix error messages to show the names of all samples that failed

* Change cargo test command to match current one

* Update kcl-samples

* Update output since updating kcl-samples

* Add generate manifest workflow and yarn script

* Fix error check to actually work

* Change util function to be what we actually need

* Move new files after merge

* Fix paths since directory move

* Add dependabot updates for kcl-samples

* Add GitHub workflow to make PR to kcl-samples repo

* Add GitHub workflow to check kcl-samples header comments

* Fix worfklow to change to the right directory

* Add auto-commit simulation test output changes

* Add permissions to workflows

* Fix to run git commit step

* Install just if needed

* Fix directory of justfile

* Add installation of cargo-insta

* Fix to use underscore

* Fix to allow just command failure

* Change to always install CLI tools and cache them

* Trying to fix overwrite failing

* Combine commands

* Change reviewer

* Change to PR targeting the next branch

* Change git commands to not do unnecessary fetch

* Comment out trigger for creating a PR

* Update kcl-samples from next branch

* Update outputs after kcl-samples change

* Fix to use bash pipefail

* Add rust backtrace

* Print full env from sim tests

* Change command to use long option name

* Fix to use ci profile even when calling through just

* Add INSTA_UPDATE=always

* Fix git push by using an app token on checkout

* Add comments

* Fix to use bash options

* Change to echo when no changes are found

* Fix so that kcl-samples updates don't trigger full run

* Fix paths to reflect new crate location

* Fix path detection

* Fix e2e job to ignore kcl_samples simulation test output

* Fix the fetch logic for the KCL samples after vendoring (#5661)

Fixes the last 2 E2E tests for #5460.

---------

Co-authored-by: Pierre Jacquier <pierre@zoo.dev>
Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com>
Co-authored-by: Frank Noirot <frank@zoo.dev>
2025-03-06 18:01:24 -05:00
..

kcl-samples

KittyCAD Language (KCL) is our language for defining geometry and working with our Geometry Engine efficiently.

This repository includes a mixture of simple and complex models demonstrating the features and syntax of KCL.

The samples can be browsed in our documentation at https://zoo.dev/docs/kcl-samples.

Guidelines for adding samples

Merge PRs to the next branch, not main. When we release Modeling App, we will merge this repo's next into main. This way, main is always compatible with the latest ZMA release.

KCL samples conform to a set of style guidelines to ensure consistency and readability.

  1. File Naming: Name your KCL files descriptively and concisely, using hyphens to separate words (e.g., flange.kcl, ball-bearing.kcl).

  2. File Header: Include a title comment at the top of each file, followed by a brief description explaining what the model is and its typical use cases.

  3. Inline Comments: Use inline comments to explain non-obvious parts of the code. Each major section should have a comment describing its purpose.

  4. Constants: Define constants at the beginning of your KCL files for any values that might change or need to be reused (e.g., dimensions, angles).

Snapshot and export

When you submit a PR to add or modify KCL samples, images and STEP files will be generated and added to the repository automatically.


3d-boaty (step) (screenshot)

3d-boaty

80-20-rail (step) (screenshot)

80-20-rail

a-parametric-bearing-pillow-block (step) (screenshot)

a-parametric-bearing-pillow-block

ball-bearing (step) (screenshot)

ball-bearing

bracket (step) (screenshot)

bracket

car-wheel-assembly (step) (screenshot)

car-wheel-assembly

color-cube (step) (screenshot)

color-cube

cycloidal-gear (step) (screenshot)

cycloidal-gear

dodecahedron (step) (screenshot)

dodecahedron

enclosure (step) (screenshot)

enclosure

exhaust-manifold (step) (screenshot)

exhaust-manifold

flange-with-patterns (step) (screenshot)

flange-with-patterns

flange-xy (step) (screenshot)

flange-xy

focusrite-scarlett-mounting-bracket (step) (screenshot)

focusrite-scarlett-mounting-bracket

food-service-spatula (step) (screenshot)

food-service-spatula

french-press (step) (screenshot)

french-press

gear-rack (step) (screenshot)

gear-rack

gear (step) (screenshot)

gear

gridfinity-baseplate-magnets (step) (screenshot)

gridfinity-baseplate-magnets

gridfinity-baseplate (step) (screenshot)

gridfinity-baseplate

gridfinity-bins-stacking-lip (step) (screenshot)

gridfinity-bins-stacking-lip

gridfinity-bins (step) (screenshot)

gridfinity-bins

hex-nut (step) (screenshot)

hex-nut

i-beam (step) (screenshot)

i-beam

kitt (step) (screenshot)

kitt

lego (step) (screenshot)

lego

mounting-plate (step) (screenshot)

mounting-plate

multi-axis-robot (step) (screenshot)

multi-axis-robot

pipe-flange-assembly (step) (screenshot)

pipe-flange-assembly

pipe-with-bend (step) (screenshot)

pipe-with-bend

pipe (step) (screenshot)

pipe

poopy-shoe (step) (screenshot)

poopy-shoe

router-template-cross-bar (step) (screenshot)

router-template-cross-bar

router-template-slate (step) (screenshot)

router-template-slate

sheet-metal-bracket (step) (screenshot)

sheet-metal-bracket

socket-head-cap-screw (step) (screenshot)

socket-head-cap-screw

walkie-talkie (step) (screenshot)

walkie-talkie

washer (step) (screenshot)

washer