Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
58c710a
Add subprocess tests for fail() function
horsenuggets Jan 11, 2026
b017b5c
Add .spec suffix to test file headers
horsenuggets Jan 11, 2026
d542ed0
Add claude-md-luau submodule
horsenuggets Jan 12, 2026
679e448
Update copyright year to 2026
horsenuggets Jan 12, 2026
99229ca
Use lowercase project name in README
horsenuggets Jan 12, 2026
5a7619d
Add VS Code workspace configuration
horsenuggets Jan 12, 2026
289d9e0
Remove header from root init.luau
horsenuggets Jan 13, 2026
68ae248
Update claude-md-luau submodule
horsenuggets Jan 13, 2026
b55f317
Use luau-cicd submodule for CI/CD scripts
horsenuggets Jan 13, 2026
f1304d0
Bump version to 0.1.0
horsenuggets Jan 13, 2026
e829db5
Refactor CI/CD workflow for new release process (#15)
horsenuggets Jan 13, 2026
a744ab9
Remove unsupported block_newline_gaps from stylua config (#16)
horsenuggets Jan 13, 2026
5635f83
Remove diff-check from release workflow (#17)
horsenuggets Jan 13, 2026
882f06b
Add diff-check back to release workflow (#18)
horsenuggets Jan 14, 2026
006fe54
Update CHANGELOG.md to new format (#20)
horsenuggets Jan 16, 2026
148f77f
Update submodules to latest (#22)
horsenuggets Jan 19, 2026
af1ed57
Update submodules (#23)
horsenuggets Mar 18, 2026
9528440
Standardize CI workflows (#26)
horsenuggets Mar 27, 2026
455f10e
Capitalize Git as a proper noun (#24)
horsenuggets Mar 27, 2026
0ebd722
Bump toolchain versions and sync with luau-package-template (#27)
horsenuggets Mar 27, 2026
f314571
Add code coverage support and dictionary syntax for test roots (#28)
horsenuggets Mar 30, 2026
450e1d7
Add Roblox cloud E2E tests and fix Roblox compatibility (#30)
horsenuggets Mar 31, 2026
41cc362
Run Roblox cloud E2E tests in CI (#32)
horsenuggets Mar 31, 2026
a7af71a
Add coverage unit tests and bump to 1.0.0 (#33)
horsenuggets Mar 31, 2026
1ea9e21
Update submodules (#35)
horsenuggets Mar 31, 2026
dda2dcb
Use SSH URLs for submodules (#36)
horsenuggets Mar 31, 2026
c3ea6d9
Fix infinite loop on modules with __call metatables (#37)
horsenuggets Mar 31, 2026
ba6d6f7
Fix lint errors for dual-platform Roblox/Lune support (#39)
horsenuggets Mar 31, 2026
966cecf
Update submodules (#40)
horsenuggets Apr 1, 2026
0105583
Add file-level coverage via script instances (#41)
horsenuggets Apr 1, 2026
d8e4755
Bump version to 1.1.0 (#42)
horsenuggets Apr 1, 2026
425ac6a
Merge remote-tracking branch 'origin/release' into pre-release
horsenuggets Apr 1, 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
29 changes: 22 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
*.bak
*.gen.*
*.lock
# Build artifacts
*.rbxl
*.rbxlx
*.rbxm
*.rbxmx
/Build

# Dependencies
/DevPackages
/Packages
/ServerPackages

# Editor and environment
.claude
.DS_Store
.env
.local
.mcp.json
.vscode
Build
Packages
sourcemap.json

# Generated files
*.bak
*.gen.*
*.lock
/*sourcemap.json

# Legacy
aftman.toml

# Project
/TODO.md
Tools
25 changes: 2 additions & 23 deletions .luaurc
Original file line number Diff line number Diff line change
@@ -1,43 +1,22 @@
{
"aliases": {
"lune": "~/.lune/.typedefs/0.10.4-horse.14.2/"
"lune": "~/.lune/.typedefs/0.10.4-horse.14.4/"
},
"globals": [
"afterAll",
"afterEach",
"beforeAll",
"beforeEach",
"DebuggerManager",
"delay",
"describe",
"elapsedTime",
"Enum",
"expect",
"fail",
"fdescribe",
"fit",
"game",
"getfenv",
"it",
"plugin",
"PluginManager",
"printidentity",
"script",
"settings",
"shared",
"spawn",
"stats",
"task",
"tick",
"time",
"typeof",
"UserSettings",
"version",
"wait",
"warn",
"workspace",
"xdescribe",
"xit",
"ypcall"
"xit"
]
}
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 1.1.0
- Changed `CoverageRoots` to accept script instances instead of module tables for full-file coverage
- Added file-level coverage that includes local/unexported functions via `debug.getcoverage(script)`
- Added directory discovery for CoverageRoots using the filesystem API
- Added coverage test fixtures with `CoverageFixtures/SampleModule.luau`
- Changed Context from write-once to allow reassignment for beforeEach compatibility
- Fixed lifecycle tests that relied on sequential execution order

## 1.0.1
- Fixed infinite loop when collecting coverage on modules with `__call` metatables (e.g., chalk-luau)

Expand Down
32 changes: 4 additions & 28 deletions Scripts/Lint.luau
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,8 @@ Runs luau-lsp analyze to report type errors and deprecation warnings.

--]]

local process = require("@lune/process")
local Lint = require("../Submodules/luau-cicd/Scripts/Helpers/Lint")

local function lint()
local result = process.exec("luau-lsp", {
"analyze",
"--platform=lune",
"--no-flags-enabled",
"--enable-new-solver",
"--ignore=DevPackages/**",
"--ignore=Packages/**",
"--ignore=Submodules/**",
".",
})

if result.stdout ~= "" then
print(result.stdout)
end
if result.stderr ~= "" then
print(result.stderr)
end

if result.ok then
print("No lint errors found.")
else
process.exit(1)
end
end

lint()
Lint.run({
IgnorePatterns = { "Tests/RobloxCloud/**" },
})
6 changes: 3 additions & 3 deletions Source/Testable/Context.luau
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

Context

The Context object implements a write-once key-value store. It also allows for a new
Context object to inherit the entries from an existing one.
The Context object implements a key-value store for passing data between lifecycle hooks
and tests. It also allows for a new Context object to inherit the entries from an existing
one.

--]]
local Context = {}
Expand All @@ -26,7 +27,6 @@ function Context.new(parent: any?): any
end

function meta.__newindex(_obj, key, value)
assert(index[key] == nil, string.format("Cannot reassign %s in context", tostring(key)))
index[key] = value
end

Expand Down
Loading
Loading