Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 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
6cba8ee
refactor: add namespace to module paths in repo
line0 Jun 4, 2026
37adb31
feat: CLI deploy command; CLI commands work for external repos; CLI t…
line0 Jun 6, 2026
9de2afd
fix: feed schema inaccuracies
line0 Jun 6, 2026
59dea46
feat: update hashes and package metadata in feeds; JSON Schema Validator
line0 Jun 7, 2026
fdfe1aa
fix: FileOps.move not recursively creating dirs; wrong error messages
line0 Jun 7, 2026
27a5a56
feat: aegisub shim adds ?user directory to lua/moon search path
line0 Jun 7, 2026
23e3836
fix: downloader not creating target file directory structure recursively
line0 Jun 7, 2026
942ccf9
fix: wrong DepCtrl-related file names, log tags and other inconsisten…
line0 Jun 7, 2026
7b7e9e0
fix: inaccurate path length limit detection in FileOps
line0 Jun 8, 2026
d18b8e2
refactor: move scheduled updates and test registration for modules to…
line0 Jun 8, 2026
7c02278
fix: potential package path corruption when existing package.path doe…
line0 Jun 8, 2026
4391f77
fix: CI test runner now actually works on automation script tests
line0 Jun 8, 2026
cc24826
test: clean up record registry pollution after tests complete
line0 Jun 8, 2026
bf8004e
fix: multiple issues
line0 Jun 9, 2026
8ad939f
refactor: make DepCtrl itself always use internal alternatives to BM…
line0 Jun 13, 2026
0289c0e
test: fix mock server reporting ready before copas starts dispatching…
line0 Jun 13, 2026
2f494cb
docs: convert all annotations to luals/LuaCATS format
line0 Jun 14, 2026
7245171
fix: typo in toolbox breaking an error path
line0 Jun 14, 2026
53929c5
fix: Record.checkVersion ignoring precision argument
line0 Jun 14, 2026
d4c7557
fix: FileOps.createTempDir() error missing details
line0 Jun 14, 2026
cf4a977
fix: missing error message in FileOps.rmdir if specified path doesn't…
line0 Jun 14, 2026
457db94
refactor: don't shadow packages installed to the aegisub ?data automa…
line0 Jun 15, 2026
591db7c
test: split remaining tests into separate files
line0 Jun 15, 2026
3bf54ea
feat(updater): trust-ranked package source selection with provider fa…
line0 Jun 20, 2026
a635d73
feat: support npm-style version ranges for `provides` module aliases
line0 Jun 20, 2026
d2efd3b
feat(updater): interactive trust flows & persistent package-source ch…
line0 Jun 22, 2026
9744e91
refactor: miscellaneous cleanup
line0 Jun 26, 2026
3d2b2cc
fix(tests): honor assertContains case-insensitivity and emit a proper…
line0 Jun 27, 2026
4e8118d
fix(tests): don't abort the whole run on a test-class setup failure
line0 Jun 27, 2026
5359447
fix(tests): correct assertNegative failure message
line0 Jun 27, 2026
cd84bf0
fix(updater): clean up the temp download dir after install
line0 Jun 27, 2026
f1cf8c4
fix(fileops): don't report mkdir success when creation failed
line0 Jun 27, 2026
119fdb8
fix(logger): warm up the RNG after seeding
line0 Jun 27, 2026
785cbba
fix(logger): fill the progress bar incrementally
line0 Jun 27, 2026
3863105
refactor: make private method consistent across the codebase
line0 Jun 27, 2026
66404ed
refactor(Updater): improve test coverage
line0 Jun 27, 2026
407860a
refactor(Updater): enum for update status codes
line0 Jun 27, 2026
d880534
test(FileLock,NamedSemaphore): initial coverage
line0 Jun 27, 2026
e08e40b
fix(ConfigView): deprecation notices on methods that aren't actually …
line0 Jun 27, 2026
20b842a
refactor: centralize feed trust logic in a separate class
line0 Jun 28, 2026
37ffe18
feat(FeedTrust): methods for removing feed from trusted, blocked, ext…
line0 Jul 4, 2026
45fcecf
refactor(FeedTrust): make block list entries an object; add exact mat…
line0 Jul 4, 2026
72c4ba4
feat: add `Host` class, DNS resolver binding and private host checks
line0 Jul 4, 2026
482436e
feat(Updater): block feed/package downloads to private hosts (SSRF)
line0 Jul 4, 2026
079b57b
fix: depctrl CLI using wrong config file name
line0 Jul 5, 2026
6e3b239
fix(UpdateFeed): deployment didn't consider `delete` flag on files
line0 Jul 5, 2026
df8b052
feat(Common): method to check if running headlessly/in CLI
line0 Jul 5, 2026
140b0ec
refactor(Record): automation script unit tests receive the registered…
line0 Jul 5, 2026
a19bc0e
fix: feed JSON schema missing the object form for file base templates
line0 Jul 5, 2026
d0b90b7
feat(Toolbox): feed management macro/UI
line0 Jul 5, 2026
30a8aed
test(Toolbox): initial test plumbing for toolbox
line0 Jul 5, 2026
3bd491f
feat: persistent feed cache and untrusted-feed fetch policy
line0 Jul 5, 2026
fde4303
fix(Record): actually call writeConfig when persisting a new record
line0 Jul 8, 2026
c79a162
fix(Record): restore getVersionNumber/getVersionString as instance me…
line0 Jul 8, 2026
cceac44
fix(ConfigView): stop default-wrapping from wiping populated sections…
line0 Jul 8, 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
}
Loading
Loading