W7 done done
This commit is contained in:
parent
4f84ac544d
commit
b1a0df9c93
15
changelog/2022-01-21.log
Normal file
15
changelog/2022-01-21.log
Normal file
@ -0,0 +1,15 @@
|
||||
commit ad3d65cdacdcc5aed72fe12354f66190d7be454d
|
||||
Initial commit
|
||||
|
||||
commit c047927b189860220428b42400ed18942150882c
|
||||
initial import
|
||||
|
||||
|
||||
commit 3e8f0f1fa780da7836128fdbc39bbe8c2ba97de8
|
||||
initial import
|
||||
|
||||
|
||||
commit 939009f9a11d0934226c830375057491f088d362
|
||||
shell stuff, preprocessor directive
|
||||
|
||||
|
||||
4
changelog/2022-01-28.log
Normal file
4
changelog/2022-01-28.log
Normal file
@ -0,0 +1,4 @@
|
||||
commit 18ca2368bc1d4a5ef7e4c8470a9b3e32f496fc86
|
||||
VERY basic UTF8 parser
|
||||
|
||||
|
||||
12
changelog/2022-01-30.log
Normal file
12
changelog/2022-01-30.log
Normal file
@ -0,0 +1,12 @@
|
||||
commit 17336fe649c52c162a4541968c8d24c0c2ab3eb9
|
||||
Unicode stuff
|
||||
|
||||
|
||||
commit 5df52146be3f5a45759459d5716aec4ef8d3c33a
|
||||
split_space
|
||||
|
||||
|
||||
commit 3a9dfba86cb7dadb1268fcfd689b14066779e6aa
|
||||
fixed bug in #load
|
||||
|
||||
|
||||
4
changelog/2022-01-31.log
Normal file
4
changelog/2022-01-31.log
Normal file
@ -0,0 +1,4 @@
|
||||
commit 0a6ebc60f0b8aacf8b01e14bd9b6447c750edeb5
|
||||
precompile on startup
|
||||
|
||||
|
||||
14
changelog/2022-02-11.log
Normal file
14
changelog/2022-02-11.log
Normal file
@ -0,0 +1,14 @@
|
||||
commit 6f6919f3f01686175001251e2fca215bccc4806f
|
||||
backage builder
|
||||
|
||||
|
||||
commit defc628204f95d0cdd16c95c89ea30efe922b31a
|
||||
packaging
|
||||
|
||||
|
||||
commit 9e5b7d39e3b8be9f4ad537a134b1081564ae4abc
|
||||
Basic readme
|
||||
|
||||
commit 21fdeafb6c5b8bc80a9d93ed61c36e05fbe7b267
|
||||
Basic documentation
|
||||
|
||||
8
changelog/2022-04-18.log
Normal file
8
changelog/2022-04-18.log
Normal file
@ -0,0 +1,8 @@
|
||||
commit 364d83b199afa6a341173a80791060a42c169f0c
|
||||
doc update
|
||||
|
||||
|
||||
commit 392b7224b16e41198b0425c5ae04f46e014e78c7
|
||||
Merge branch 'main' of github.com:ThingamaNet/uce
|
||||
|
||||
|
||||
4
changelog/2022-12-22.log
Normal file
4
changelog/2022-12-22.log
Normal file
@ -0,0 +1,4 @@
|
||||
commit 984453f336a9b2ad47689d161c89d7020006f75a
|
||||
update sigh
|
||||
|
||||
|
||||
26
changelog/2026-04-18.log
Normal file
26
changelog/2026-04-18.log
Normal file
@ -0,0 +1,26 @@
|
||||
commit cd8f07aaa78fc488eba3b0e435350e5c2823e53e
|
||||
Refactor FastCGI server and compiler, enhance HTTP header parsing, and add WebSocket support
|
||||
|
||||
- Refactored FastCGIServer class to improve socket handling and added shutdown functionality.
|
||||
- Updated compiler functions to streamline HTML and text literal processing.
|
||||
- Enhanced split_kv function to support uppercase keys and added split_http_headers for better HTTP header parsing.
|
||||
- Introduced new session management functions to validate and handle session IDs.
|
||||
- Added WebSocket frame parsing and handling in the URI module.
|
||||
- Created systemd service scripts for easier deployment and management of the UCE FastCGI runtime.
|
||||
- Added new test cases for header handling, time parsing, and WebSocket functionality.
|
||||
|
||||
|
||||
commit 86dc93864e8eab9227ac50b16f1fc7f561383f5b
|
||||
Add WebSocket support and enhance chat functionality
|
||||
|
||||
- Implement WebSocket handling in the FastCGI server, allowing for real-time communication.
|
||||
- Introduce functions for managing WebSocket connections, broadcasting messages, and sending to specific connections.
|
||||
- Create a chat interface in the `websockets.ws.uce` file, including message handling and user notifications.
|
||||
- Refactor existing code to accommodate WebSocket integration, ensuring compatibility with HTTP requests.
|
||||
- Update documentation to reflect new features and usage instructions for WebSocket functionality.
|
||||
|
||||
|
||||
commit 46d98a092fb606c87ab4b9eef32fe68eeca2b2cb
|
||||
Enhance WebSocket support: add opcode handling, binary message support, and improve connection validation
|
||||
|
||||
|
||||
20
changelog/2026-04-19.log
Normal file
20
changelog/2026-04-19.log
Normal file
@ -0,0 +1,20 @@
|
||||
commit be514d63d6ed709a40441db9dc809837081d54f6
|
||||
trying to port web app starter from PHP
|
||||
|
||||
|
||||
commit 2b5586d7dfffc5c1c40cac97e6d4d0e1f86f151a
|
||||
decided in favor of dedicated COMPONENT() macro, updates to documentation
|
||||
|
||||
|
||||
commit d1167aec3b4d7870db0b289ee0ea690f8e7e5cc9
|
||||
getting closer to full port of web app starter
|
||||
|
||||
|
||||
commit af642c8167383f9acf99274d3b3c94017d860dcf
|
||||
getting closer to full port of web app starter
|
||||
|
||||
|
||||
commit dc05f9faa5eab980f1f1fd44cee06f811cc748ff
|
||||
PHP familiarity shortcuts
|
||||
|
||||
|
||||
9
changelog/2026-04-20.log
Normal file
9
changelog/2026-04-20.log
Normal file
@ -0,0 +1,9 @@
|
||||
commit b53eb6e4f1b5fa4e2a4907022f591eb9a1860c33
|
||||
Enhance template parser to handle C++ comments and refactor preprocessing logic
|
||||
|
||||
- Updated parser to correctly interpret C++ `//` and `/* ... */` comments within template code.
|
||||
- Split preprocessing implementation into separate files for better organization.
|
||||
- Added regression test for comment parsing in templates.
|
||||
- Adjusted CSS styles for improved layout and readability in documentation.
|
||||
|
||||
|
||||
16
changelog/2026-04-22.log
Normal file
16
changelog/2026-04-22.log
Normal file
@ -0,0 +1,16 @@
|
||||
commit 8223dcc6b3cb7f4d26c69097fac973c2671f0938
|
||||
I think I need to change the documentation format
|
||||
|
||||
|
||||
commit f7b066b374f1031d38e3d2b344f6680534c3a2b2
|
||||
changing doc format and HTML literals
|
||||
|
||||
|
||||
commit 14ebf10a229021bb5d0fb1eae42a69c042699318
|
||||
changing doc format and HTML literals
|
||||
|
||||
|
||||
commit 223cf4c6e1c7a205bf1a27bebdc6d04fd7557df0
|
||||
website with slop placeholders
|
||||
|
||||
|
||||
4
changelog/2026-04-28.log
Normal file
4
changelog/2026-04-28.log
Normal file
@ -0,0 +1,4 @@
|
||||
commit cd445f3c9b6aa079a969351d6eb742b8a4d24f6b
|
||||
some cleanup
|
||||
|
||||
|
||||
4
changelog/2026-04-29.log
Normal file
4
changelog/2026-04-29.log
Normal file
@ -0,0 +1,4 @@
|
||||
commit 9f7625c7fdd6a9d2a184dc2cdf9f8a719d219ec2
|
||||
working on documentation and more API functions
|
||||
|
||||
|
||||
24
changelog/2026-05-21.log
Normal file
24
changelog/2026-05-21.log
Normal file
@ -0,0 +1,24 @@
|
||||
commit 02e153a6a78bf8ded1c7380713023b4f9c3b656f
|
||||
Add archive helpers and harden task runtime
|
||||
|
||||
|
||||
commit d37517041de0c5ebe4dfd232093a78ff49cff383
|
||||
Add custom server API and runtime limits
|
||||
|
||||
|
||||
commit 0d8b74930c74cc8018cb1c0cfc7cfe6740b49cf6
|
||||
Harden HTTP path headers sessions and archives
|
||||
|
||||
|
||||
commit 41e9ca219fd684c75e78a5493e20c754c7899105
|
||||
Streamline hardening helpers and expand coverage
|
||||
|
||||
|
||||
commit 8b37e7ea1e58e36c97852f79ec121947a1ffea08
|
||||
Fix direct HTTP status sanitizer fallback
|
||||
|
||||
|
||||
commit 71ddcaf7d48ffd1343e597e4715b570c922a306c
|
||||
Consolidate config and base64 helpers
|
||||
|
||||
|
||||
12
changelog/2026-06-11.log
Normal file
12
changelog/2026-06-11.log
Normal file
@ -0,0 +1,12 @@
|
||||
commit 7f757654b658d049564f1725f54fde781575e304
|
||||
fix: harden UCE runtime and starter
|
||||
|
||||
|
||||
commit 20db6695890a3ac274217fd0ed9e0edf7c5eb093
|
||||
fix: stabilize runtime follow-up regressions
|
||||
|
||||
|
||||
commit b957a2373b8464ffcb7791cc6b0031c441d5b09c
|
||||
chore: ignore Python cache artifacts
|
||||
|
||||
|
||||
28
changelog/2026-06-12.log
Normal file
28
changelog/2026-06-12.log
Normal file
@ -0,0 +1,28 @@
|
||||
commit 941f5aea08941327eecbc43128d8f171a4064616
|
||||
feat: add configurable UCE error pages
|
||||
|
||||
|
||||
commit 7066da3cdef08b01dda64bca34caadc7000587b2
|
||||
refactor: rename DTree to DValue
|
||||
|
||||
|
||||
commit 7e2faf1472c84f302ce5b7f9674091a1a2b3930f
|
||||
spike: validate WASM phase 0
|
||||
|
||||
|
||||
commit 80285b7fb4acd15850218ee87c72ec8272332c05
|
||||
feat: implement WASM phase 1 DValue ABI
|
||||
|
||||
|
||||
commit 961df2d542ff6554e32da9ee28e73f5fc59b5975
|
||||
phase 5
|
||||
|
||||
|
||||
commit 89b5499c8f4e1a8acc8748e66c9dba9eb9679369
|
||||
fix: harden WASM phase 5 harness
|
||||
|
||||
|
||||
commit eb8f303f94f0f43699eca7cd6474eedaef1ed711
|
||||
docs: remove unsupported second-plane language roadmap
|
||||
|
||||
|
||||
36
changelog/2026-06-13.log
Normal file
36
changelog/2026-06-13.log
Normal file
@ -0,0 +1,36 @@
|
||||
commit 577aae076e3603137265332adfdded3c15cfa8f4
|
||||
W3
|
||||
|
||||
|
||||
commit afaa4dd7c0203f322d625593a0d1c96c37130005
|
||||
feat: cut over to WASM backend
|
||||
|
||||
|
||||
commit 5a56d4f39e4b30a9a4e43985d64906aa16a642e6
|
||||
W5
|
||||
|
||||
|
||||
commit c84fc86e6cdfe254a59d57b909f647e6c254ef76
|
||||
W6
|
||||
|
||||
|
||||
commit fe83c524118722c062295bc9575cb71eff64dacb
|
||||
feat: membrane remaining wasm host surfaces
|
||||
|
||||
|
||||
commit d6421cb8f3721e69e999b84335e9094ad96356e9
|
||||
feat: extend wasm backend entrypoints
|
||||
|
||||
|
||||
commit af6500d1343581abdac475dcb6855821afd8c8d0
|
||||
fix: harden wasm w7 entrypoint paths
|
||||
|
||||
|
||||
commit b1856c1725970b31027383a7ae79c2140a62a896
|
||||
chore: narrow wasm backend entrypoint API
|
||||
|
||||
|
||||
commit 6bb4f7f0ad801a0127956f49e54d2be722c6537f
|
||||
test: port network suite to uce cli runner
|
||||
|
||||
|
||||
111
changelog/2026-06-14.log
Normal file
111
changelog/2026-06-14.log
Normal file
@ -0,0 +1,111 @@
|
||||
commit 15e8d092bc13c425b5c7f7a19dfaf3c9728104f5
|
||||
W7+
|
||||
|
||||
|
||||
commit 8587fbc5aa0f38739182fa50383bb94c8d821ed7
|
||||
wasm runtime: central WS broker, unified handlers, W7d holdouts, membrane completeness
|
||||
|
||||
- WS: a dedicated broker process owns HTTP_PORT + every connection; it forwards
|
||||
renders to the worker pool over uce.sock (non-blocking) and applies ws_*
|
||||
command batches flushed back at workspace teardown. Removes the now-dead
|
||||
per-worker websocket executor (-509 lines).
|
||||
- Dispatch: unify CLI / WebSocket / serve_http / page render through one
|
||||
serve_via_wasm(entry_unit, handler) path; handler string -> __uce_<handler>
|
||||
export symbol.
|
||||
- W7d: rewrite zip.uce to the membrane return-value error contract (no C++
|
||||
try/catch), error-reporting.uce to genuine wasm traps instead of throw, and
|
||||
sharedunit.uce to unit_info(); empty the native-only token gate.
|
||||
- Membrane: wire ls / mkdir / file_mtime through new uce_host_file_list /
|
||||
uce_host_file_mkdir / uce_host_file_mtime hostcalls (resolve_guest_file gains
|
||||
directory support). Fixes /doc/index.uce listing nothing; adds a regression
|
||||
assertion that the index enumerates items.
|
||||
- Docs: add docs/wasm-runtime-architecture.md; record the W7e staged native-
|
||||
deletion plan in WASM-PROPOSAL.md.
|
||||
|
||||
|
||||
commit 2debd338040cf97e82bb8ccbb5ec09caee089c17
|
||||
W7e: wasm-preferred dispatch + compile-on-demand; harden unit ABI validator
|
||||
|
||||
- Dispatch (linux_fastcgi.cpp): route every request through wasm. On a
|
||||
cold/stale artifact, compile the unit on demand (get_shared_unit, forced) and
|
||||
serve wasm; native compiler_invoke* remains only as a fallback when wasm
|
||||
cannot be made ready (compile failure / backend disabled). Applies to the 4
|
||||
handle_complete branches and the CLI socket path.
|
||||
- backend.cpp: delete the now-vestigial native-only fallback token gate
|
||||
(wasm_backend_native_fallback_*), empty since W7d; should_handle now gates on
|
||||
config + current artifact + healthy worker only.
|
||||
- check_unit_wasm.py: skip the defense-in-depth llvm-nm allocator scan when
|
||||
llvm-nm SIGSEGVs on a degenerate-but-valid module (e.g. a unit with no
|
||||
exported handlers). Fixes site/demo/empty.uce, the last unit that could not
|
||||
produce a .wasm; forbidden allocator *exports* are still rejected.
|
||||
|
||||
A pi-assisted review caught that the compile-freshness check keys off the .so
|
||||
mtime only, so force_recompile is required to rebuild a missing/stale .wasm; a
|
||||
unit already cached in-process whose .wasm later vanished still uses native
|
||||
fallback (closed in W7e stage B). Native execution is otherwise bypassed for
|
||||
all real traffic.
|
||||
|
||||
|
||||
commit fb728d63bcd0d80bd5161537e81c30d27eb4df7b
|
||||
W7e stage B: factor the .wasm artifact into unit compile-freshness
|
||||
|
||||
inspect_shared_unit_filesystem() tracked only the .so mtime, so a missing or
|
||||
stale .wasm with a current .so never triggered a rebuild and the unit fell to
|
||||
native indefinitely (the in-process cache also never invalidated). Account for
|
||||
su->wasm_name when wasm unit compilation is enabled: a unit counts as compiled
|
||||
only as of the OLDER of the two artifacts; a missing .wasm forces a recompile.
|
||||
Closes the cached-vanished-.wasm gap noted in the stage A review.
|
||||
|
||||
|
||||
commit cf513368730e5f337e64a9c9f1456e6a64f49d9c
|
||||
W7e: delete the native unit pipeline (.so compile + dlopen execution)
|
||||
|
||||
Units now run exclusively on wasm; the native generated-C++ -> clang -> .so ->
|
||||
dlopen path and its request-time fallback are removed.
|
||||
|
||||
- Dispatch (linux_fastcgi.cpp): the 4 handle_complete branches + the CLI-socket
|
||||
path route every request through wasm (wasm_ready compiles cold/stale on
|
||||
demand); a wasm-unavailable unit now yields a clean error page
|
||||
(fail_wasm_unavailable / render_request_failure) instead of native execution.
|
||||
compiler_invoke / _cli / _websocket / _serve_http deleted.
|
||||
- compiler.cpp (-1274): removed the native .so compile (COMPILE_SCRIPT),
|
||||
load_shared_unit, dlopen/dlsym/dlclose, compiler_load_shared_unit, and the
|
||||
SharedUnit .so function-pointer fields (on_setup/on_render/on_component/
|
||||
on_websocket/on_cli/on_once/on_init) in types.h/types.cpp. compile_shared_unit
|
||||
now builds only the .wasm side-module; the .uce preprocessor/parser front-end
|
||||
is kept (it emits the C++ the wasm compile consumes).
|
||||
- unit_call()/component()/once/init now resolve across units through the wasm
|
||||
host component resolver (uce_host_component_resolve) instead of native dlsym;
|
||||
configured runtime error pages render through the wasm backend.
|
||||
- Dropped the WASM_BACKEND_ENABLED feature flag and dead COMPILE_SCRIPT /
|
||||
COMPILE_WASM_UNITS config; unit ABI freshness tied to UCE_UNIT_ABI_VERSION;
|
||||
guard against serving a stale .wasm for a deleted source; retired the obsolete
|
||||
W5 native-vs-wasm toggle script. Docs updated.
|
||||
|
||||
|
||||
commit bfd6d338299dd9001fe2d4a66f82bbc2b3b07ed9
|
||||
W7f: sweep dead/legacy/fallback leftovers after native-pipeline removal
|
||||
|
||||
Post-deletion cleanup (units run only on wasm):
|
||||
- types.h/compiler.cpp: drop the native-era SharedUnit fields so_name,
|
||||
bin_file_name, and the opt_so_optional cache-mode plumbing (no native
|
||||
optional .so path remains). The per-unit compile lock is re-keyed from
|
||||
so_name+.lock to wasm_name+.lock (still per-unit).
|
||||
- unit_info() and to_string(SharedUnit*) no longer expose .so artifact fields.
|
||||
- backend.h: drop the stale "+ fallback-token gate" comment.
|
||||
- Docs/comments corrected to wasm-only reality: README, tests/README,
|
||||
site/doc C++ preprocessor + error_pages + unit_info pages, site/info intro,
|
||||
site/demo/unit-browser artifact card; the Phase-5 native-vs-wasm benchmark
|
||||
harness (tests/wasm_benchmark.py) reframed for the wasm-only backend.
|
||||
|
||||
Audit confirmed no live references remain to so_handle, load_shared_unit,
|
||||
compiler_load_shared_unit, compiler_invoke*/_cli/_websocket/_serve_http,
|
||||
COMPILE_SCRIPT/COMPILE_WASM_UNITS, or the native export-symbol constants;
|
||||
request_ref_handler/dv_call_handler are kept (live wasm funcref casts).
|
||||
|
||||
Swept via the pi agent (delegated to a gpt-5.3-codex-spark sub-model);
|
||||
independently re-verified on the host: run_cli_tests --include-wasm-kill =>
|
||||
87 passed, 0 failed, 0 skipped.
|
||||
|
||||
|
||||
|
||||
58
changelog/2026-06-15.log
Normal file
58
changelog/2026-06-15.log
Normal file
@ -0,0 +1,58 @@
|
||||
commit 560290ca1d18d4d5a0d204bb187d1aa68c3b5ac7
|
||||
perf: cache the compiled core module so fresh workers deserialize, not recompile
|
||||
|
||||
Workers recycle every 8 requests (calls_until_termination=8). Each fresh worker
|
||||
ran wasmtime::Module::compile() on the 6.8MB bin/wasm/core.wasm — a ~1.3s
|
||||
Cranelift JIT — on its first request, so every ~8th request spiked to ~1.3s and
|
||||
dominated suite wall-clock.
|
||||
|
||||
Cache the compiled artifact: on worker core-module load, if bin/wasm/core.cwasm
|
||||
exists and is newer than core.wasm, load it via Module::deserialize_file() (mmap,
|
||||
~ms); otherwise Module::compile() as before and atomically (temp+rename) write
|
||||
the serialized artifact for the next worker. Deserialize failure / stale cache
|
||||
falls back to a normal compile, so it is self-healing; rebuilding core.wasm
|
||||
(newer mtime) invalidates the cache. Engine config (epoch_interruption,
|
||||
signals_based_traps(false)) is unchanged, which the serialized format requires.
|
||||
|
||||
|
||||
commit 83ab9e10f7c0f17805e40a9a3d2b4a3357e5280f
|
||||
perf: extend the compiled-module disk cache to per-unit modules
|
||||
|
||||
Follow-up to 560290c. Per-unit .wasm modules were still Cranelift-compiled per
|
||||
worker on first use (~40-70ms each), so with 8-call worker recycling fresh
|
||||
workers re-JIT every unit they touch.
|
||||
|
||||
Refactor the core cache logic into a shared WasmWorker helper:
|
||||
- cached_wasm_path(p): maps <...>.wasm -> <...>.cwasm.
|
||||
- load_or_compile_cached_module(engine, cached, wasm, bytes, err): deserialize_file
|
||||
the .cwasm when it is newer than the .wasm; otherwise Module::compile + serialize,
|
||||
written atomically (temp+rename); deserialize failure falls back to compile.
|
||||
Both the core module load and unit_module() now go through this helper, so unit
|
||||
artifacts get the same <unit>.uce.cwasm cache the core got.
|
||||
|
||||
|
||||
commit 4f84ac544d9c91a66d068d372055eec8e1723def
|
||||
feat: request_perf() worker-side timing hostcall; restore demo System Info
|
||||
|
||||
Units run in the wasm sandbox, so my_pid/parent_pid/context.server->request_count
|
||||
read as sandbox stubs — the demo System Info counters were broken, and there was
|
||||
no authoritative server-side request timing available to unit code (client-side
|
||||
measurement cannot see queue/dispatch latency).
|
||||
|
||||
Add a request_perf() unit API backed by a new uce_host_request_perf hostcall.
|
||||
The native worker answers it live, returning a DValue:
|
||||
worker_pid, parent_pid, request_count,
|
||||
accept_us = (time_start - time_init)*1e6 (entry -> dispatch wait),
|
||||
running_us = (now - time_start)*1e6 (since dispatch, live),
|
||||
total_us = (now - time_init)*1e6 (since the request entered UCE),
|
||||
workspace_birth_us.
|
||||
time_init is captured at request entry (handle_request, with a handle_complete
|
||||
fallback); a RequestPerfSnapshot {pids, request_count, time_init, time_start} is
|
||||
threaded from wasm_backend_serve through wasm_worker_serve onto the workspace,
|
||||
and the hostcall computes the live deltas at call time. Wired like uce_host_units
|
||||
(sized DValue hostcall): core_hostcalls.syms + sys.cpp/sys.h request_perf().
|
||||
|
||||
site/demo/index.uce System Info now uses request_perf() and shows the real worker
|
||||
PID, an incrementing per-worker request count, and the timing counters.
|
||||
|
||||
|
||||
21
scripts/git-changelog-by-date.sh
Executable file
21
scripts/git-changelog-by-date.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root=$(git rev-parse --show-toplevel)
|
||||
cd "$repo_root"
|
||||
|
||||
out_dir="${1:-changelog}"
|
||||
mkdir -p "$out_dir"
|
||||
rm -f "$out_dir"/*.log
|
||||
|
||||
while IFS= read -r commit; do
|
||||
commit_date=$(git show -s --format=%cs "$commit")
|
||||
out_file="$out_dir/$commit_date.log"
|
||||
{
|
||||
printf 'commit %s\n' "$commit"
|
||||
git show -s --format=%B "$commit"
|
||||
printf '\n'
|
||||
} >> "$out_file"
|
||||
done < <(git rev-list --reverse HEAD)
|
||||
|
||||
printf 'Wrote changelog files to %s\n' "$out_dir"
|
||||
Loading…
x
Reference in New Issue
Block a user