Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
cd03290
fix: add missing SemanticVersioning module
line0 May 23, 2026
f147a45
fix: broken script type handling in update feeds
line0 May 23, 2026
bf66595
fix: module loader running depctrl initializer hooks on already initi…
line0 May 23, 2026
f2e1fa8
fix: update failing due to unsupported string index in capitalization…
line0 May 23, 2026
977f37a
test: add first test
line0 May 23, 2026
75b6c43
ci: enforce LF + EOF newline for consistent hash calculation
line0 May 23, 2026
7f2530a
build: bump version; update feed
line0 May 23, 2026
ff8495a
fix: typo in ModuleLoader breaking optional module presence checks
line0 May 23, 2026
d0cbeee
refactor: tighten version number validation in updater
line0 May 23, 2026
d16fd64
fix: broken version number display in version errors
line0 May 23, 2026
167d427
fix: typos
line0 May 23, 2026
a1fc3f8
fix: semver parsers allowing invalid values
line0 May 23, 2026
5bc3f45
fix: semantic version toString roundtrip exception when invalid semve…
line0 May 23, 2026
c08a79c
fix: update errors missing information about whether or not a record …
line0 May 24, 2026
80ead7c
fix: broken skip lists in module loader
line0 May 24, 2026
c86e07e
feat: port Logger improvements from sqlite branch
line0 May 26, 2026
5a582f0
fix: nil dereference crash in feed template variable expansion
line0 May 26, 2026
4383018
refactor: add basic type annotations
line0 May 26, 2026
d55348e
refactor: port over FileOps improvements from sqlite branch
line0 May 26, 2026
12e426c
refactor port new ConfigHandler/ConfigView from sqlite branch
line0 May 26, 2026
723259a
refactor: add unit tests and extend testing framework (WIP)
line0 May 27, 2026
4991aa8
refactor: remove dependency on aegisub.re and aegisub.util
line0 May 28, 2026
bd881f9
refactor: lift dependency on PreciseTimer
line0 May 28, 2026
de992fc
feat: provide an alternative to BadMutex that only uses OS APIs
line0 May 28, 2026
bfa1b6c
feat: provide an alternative to DownloadManager that uses only OS API…
line0 May 29, 2026
e421b5c
feat: allow modules to provide import aliases; ship a copy of dkjson …
line0 May 30, 2026
57d0617
feat: CLI/CI test runner (WIP)
line0 May 31, 2026
56d2265
fix: logger trying to clean log files when the log dir doesn't exist …
line0 May 31, 2026
ffccc58
fix: broken home directory expansion on linux
line0 May 31, 2026
baaa8f4
fix: stall detection and concurrent connection limit for downloader
line0 Jun 1, 2026
326a4e9
feat: new FileOps.writeFile() method
line0 Jun 1, 2026
0e9d281
test: add downloader integration tests; allow unit test to be conditi…
line0 Jun 1, 2026
ae701fe
refactor: TerribleMutex [squash]
line0 Jun 2, 2026
879c05e
test: add additional tests for FileOps.validateFullPath and Common.va…
line0 Jun 2, 2026
ca7aeb0
docs: add JSON schema for the DepCtrl feed
line0 Jun 2, 2026
d9156dc
docs: update README.md
line0 Jun 2, 2026
bf2fdab
build: add cspell settings and dictionaries
line0 Jun 2, 2026
8569373
feat: add bundler script; CLI zip archiver bindings
line0 Jun 4, 2026
401f918
refactor: add namespace to module paths in repo
line0 Jun 4, 2026
b53dc05
feat: CLI deploy command; CLI commands work for external repos; CLI t…
line0 Jun 6, 2026
4ebefec
fix: feed schema inaccuracies
line0 Jun 6, 2026
3be04c0
feat: update hashes and package metadata in feeds; JSON Schema Validator
line0 Jun 7, 2026
e51fbe3
fix: FileOps.move not recursively creating dirs; wrong error messages
line0 Jun 7, 2026
6e46357
feat: aegisub shim adds ?user directory to lua/moon search path
line0 Jun 7, 2026
86d9552
fix: downloader not creating target file directory structure recursively
line0 Jun 7, 2026
36892e2
fix: wrong DepCtrl-related file names, log tags and other inconsisten…
line0 Jun 7, 2026
ea6179b
fix: inaccurate path length limit detection in FileOps
line0 Jun 8, 2026
f5962f2
refactor: move scheduled updates and test registration for modules to…
line0 Jun 8, 2026
3a183c0
fix: potential package path corruption when existing package.path doe…
line0 Jun 8, 2026
9c16949
fix: CI test runner now actually works on automation script tests
line0 Jun 8, 2026
51c5cee
test: clean up record registry pollution after tests complete
line0 Jun 8, 2026
174cdaa
fix: multiple issues
line0 Jun 9, 2026
2b2c4a6
refactor: make DepCtrl itself always use internal alternatives to BM…
line0 Jun 13, 2026
f8dd356
test: fix mock server reporting ready before copas starts dispatching…
line0 Jun 13, 2026
69259af
docs: convert all annotations to luals/LuaCATS format
line0 Jun 14, 2026
d611a7c
fix: typo in toolbox breaking an error path
line0 Jun 14, 2026
9e52806
fix: Record.checkVersion ignoring precision argument
line0 Jun 14, 2026
db4ac6f
fix: FileOps.createTempDir() error missing details
line0 Jun 14, 2026
c83fab2
fix: missing error message in FileOps.rmdir if specified path doesn't…
line0 Jun 14, 2026
0110e76
refactor: don't shadow packages installed to the aegisub ?data automa…
line0 Jun 15, 2026
47a1b28
test: split remaining tests into separate files
line0 Jun 15, 2026
4287e50
feat(updater): trust-ranked package source selection with provider fa…
line0 Jun 20, 2026
2b1195a
feat: support npm-style version ranges for `provides` module aliases
line0 Jun 20, 2026
ff02057
feat(updater): interactive trust flows & persistent package-source ch…
line0 Jun 22, 2026
26efca3
refactor: miscellaneous cleanup
line0 Jun 26, 2026
ec6802e
fix(tests): honor assertContains case-insensitivity and emit a proper…
line0 Jun 27, 2026
557ed14
fix(tests): don't abort the whole run on a test-class setup failure
line0 Jun 27, 2026
3263ec1
fix(tests): correct assertNegative failure message
line0 Jun 27, 2026
364ced3
fix(updater): clean up the temp download dir after install
line0 Jun 27, 2026
2a6fba2
fix(fileops): don't report mkdir success when creation failed
line0 Jun 27, 2026
ff5f292
fix(logger): warm up the RNG after seeding
line0 Jun 27, 2026
7c6146a
fix(logger): fill the progress bar incrementally
line0 Jun 27, 2026
2030812
refactor: make private method consistent across the codebase
line0 Jun 27, 2026
6f9fbce
refactor(Updater): improve test coverage
line0 Jun 27, 2026
6b95e77
refactor(Updater): enum for update status codes
line0 Jun 27, 2026
9803f00
test(FileLock,NamedSemaphore): initial coverage
line0 Jun 27, 2026
8d63bd7
fix(ConfigView): deprecation notices on methods that aren't actually …
line0 Jun 27, 2026
46cd484
refactor: centralize feed trust logic in a separate class
line0 Jun 28, 2026
e94cc15
feat(FeedTrust): methods for removing feed from trusted, blocked, ext…
line0 Jul 4, 2026
966b136
refactor(FeedTrust): make block list entries an object; add exact mat…
line0 Jul 4, 2026
34145c4
feat: add `Host` class, DNS resolver binding and private host checks
line0 Jul 4, 2026
4933fe7
feat(Updater): block feed/package downloads to private hosts (SSRF)
line0 Jul 4, 2026
ca21acc
fix: depctrl CLI using wrong config file name
line0 Jul 5, 2026
98ed3fd
fix(UpdateFeed): deployment didn't consider `delete` flag on files
line0 Jul 5, 2026
81b826d
feat(Common): method to check if running headlessly/in CLI
line0 Jul 5, 2026
c3900e1
refactor(Record): automation script unit tests receive the registered…
line0 Jul 5, 2026
43f2b09
fix: feed JSON schema missing the object form for file base templates
line0 Jul 5, 2026
e9e27dc
feat(Toolbox): feed management macro/UI
line0 Jul 5, 2026
2db6347
test(Toolbox): initial test plumbing for toolbox
line0 Jul 5, 2026
a6c1b02
feat: persistent feed cache and untrusted-feed fetch policy
line0 Jul 5, 2026
bf058c7
fix(Record): actually call writeConfig when persisting a new record
line0 Jul 8, 2026
8d2b333
fix(Record): restore getVersionNumber/getVersionString as instance me…
line0 Jul 8, 2026
71f3a0c
fix(ConfigView): stop default-wrapping from wiping populated sections…
line0 Jul 8, 2026
c687f8f
fix(Updater): pass the record (not its namespace) to loadModule on th…
line0 Jul 8, 2026
eb72a16
fix(UpdateTask): reference the real recordType field in performUpdate
line0 Jul 8, 2026
d262e8b
fix(FileOps): joinPath no longer drops segments after an empty one
line0 Jul 8, 2026
9b83e81
fix(FileOps): remove() no longer recurses into directories by default
line0 Jul 8, 2026
9236601
fix(FeedInventory): gate crawl root feeds by the fetch policy
line0 Jul 8, 2026
67027cc
fix(Logger): degrade gracefully when the log file can't be opened
line0 Jul 8, 2026
4dbafa1
fix(ScriptUpdateRecord): skip malformed changelog version keys instea…
line0 Jul 8, 2026
98598d2
fix(Common): compare cyclic tables correctly in equals
line0 Jul 8, 2026
0efeb73
fix(Common): itemsEqual matches duplicate items by count
line0 Jul 8, 2026
d969dcd
fix(UpdateFeed): keep fetched-feed temp files inside the trimmed cach…
line0 Jul 8, 2026
0155bd3
fix(ConfigHandler): look up the handler cache by the validated path
line0 Jul 8, 2026
a855322
fix(ConfigView): register the view with its handler on setFile/unsetFile
line0 Jul 8, 2026
663179e
fix(NamedSemaphore): defer POSIX unlink to state teardown, not per-in…
line0 Jul 10, 2026
b5c5a27
fix(FeedTrust): validate block matchMode and dedup blocks case-insens…
line0 Jul 10, 2026
1e9439f
fix(FeedTrust): don't cache a failed official-feed load
line0 Jul 10, 2026
1a9d24a
docs: correct stale/incorrect annotations before the 0.7 API freeze
line0 Jul 10, 2026
965cf4e
fix(Record): persist recordType (not the stale unmanaged flag) and mi…
line0 Jul 10, 2026
5408c77
fix(UnitTestSuite): measure test durations with a wall clock
line0 Jul 10, 2026
8ec2b81
doc(UpdateTask): run acquires the global updater lock and leaves rele…
line0 Jul 10, 2026
ec225e8
refactor(config-schema): own the pre-0.7 unmanaged->recordType migration
line0 Jul 10, 2026
b0717cf
refactor(UnitTestSuite): manual _order is no longer required; add fun…
line0 Jul 10, 2026
2a70204
refactor: rename SemanticVersioning to SemanticVersion
line0 Jul 11, 2026
0a47822
feat(SemanticVersion): instantiable version value with comparison and…
line0 Jul 11, 2026
a2305f2
feat(Accessors): standardized metatable-backed computed properties
line0 Jul 11, 2026
b3109d6
feat(Record): back the version with a SemanticVersion instance
line0 Jul 11, 2026
84099d7
feat(Accessors): surface computed properties in pairs(instance)
line0 Jul 11, 2026
900f964
docs: add agent guidelines (AGENTS.md)
line0 Jul 11, 2026
9c245f0
docs(Toolbox): drop redundant grouping comments
line0 Jul 11, 2026
f877e92
refactor: back cheap no-arg getters with Accessor computed properties
line0 Jul 11, 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
22 changes: 22 additions & 0 deletions .cspell/domain-specific.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Aegisub
BadMutex
copas
CPATH
CTRF
DLUAJIT
DepCtrl
dkjson
FileOps
headlessly
leafo
libaegisub
luafilesystem
luajit
luarocks
luasocket
mimetypes
moonbase
moonc
moonpath
pegasus
PreciseTimer
35 changes: 35 additions & 0 deletions .cspell/ffi.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
CONNECTTIMEOUT
CURLINFO
CURLMOPT
CURLMSG
CURLOPT
ENOENT
ENOTDIR
errornum
FAILONERROR
fclose
FOLLOWLOCATION
fopen
getinfo
gettime
getpid
nfds
NOPROGRESS
nsec
numfds
oflag
O_CREAT
pollfd
setopt
setx
strerror
syscall
timespec
trywait
uintptr
usec
usleep
USERAGENT
wchar
WinINet
WRITEDATA
34 changes: 34 additions & 0 deletions .cspell/lua.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
__newindex
addserver
addthread
chdir
collectgarbage
currentdir
finalizers
cdef
getenv
getmetatable
getsockname
gmatch
gsub
ipairs
lshift
luafilesystem
luajit
luajson
luarocks
metatable
metatables
newproxy
pcall
pcalls
randomseed
rawget
rshift
setmetatable
settimeout
setvbuf
tonumber
tostring
varargs
xpcall
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
61 changes: 61 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Tests

on:
pull_request:
branches:
- 'master'
workflow_dispatch:
inputs:
ref:
description: 'Release tag or branch to scan.'
required: true
default: 'master'

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.ref || github.ref }}

- uses: leafo/gh-actions-lua@v13
with:
luaVersion: "luajit-2.1.0-beta3"
# DepCtrl relies on Lua 5.2 features (table.unpack, __pairs/__len)
luaCompileFlags: "XCFLAGS=-DLUAJIT_ENABLE_LUA52COMPAT"

- uses: leafo/gh-actions-luarocks@v6
# moonscript loader
- run: luarocks install moonscript
# lfs (Aegisub provides an internal copy)
- run: luarocks install luafilesystem
# CLI argument parsing
- run: luarocks install argparse
# mock HTTP server dependencies
- run: luarocks install luasocket
- run: luarocks install copas
- run: luarocks install pegasus
# json schema validation
- run: luarocks install lua-schema
- run: luarocks install lpeg

- name: Run tests
timeout-minutes: 5
run: lua depctrl.lua test

- name: Publish test report
uses: ctrf-io/github-test-reporter@v1
if: ${{ !cancelled() }}
with:
report-path: ./ctrf/*.json
pull-request: ${{ github.event_name == 'pull_request' && true || false }}
overwrite-comment: ${{ github.event_name == 'pull_request' && true || false }}
annotate: false
use-suite-name: true
status-check: true
summary-report: true
failed-report: true
upload-artifact: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/ctrf/*.json
/dist/
/DependencyControl-*.zip
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"files.insertFinalNewline": true
}
194 changes: 194 additions & 0 deletions AGENTS.md

Large diffs are not rendered by default.

Loading
Loading