|
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit introduces the generation of Software Bill of Materials (SBOMs) for the project, enhancing supply chain security and transparency. By providing a comprehensive list of all direct and transitive dependencies, we can more effectively identify and mitigate potential vulnerabilities, comply with regulatory requirements, and improve overall software integrity. - Added kiwimix.cdx.json, a CycloneDX 1.5 format SBOM generated by Trivy 0.47.0, detailing Go module dependencies and their licenses. - Added kiwimix.spdx, an SPDX 2.3 format SBOM generated by Trivy 0.47.0, providing an alternative representation of the project's software components and their relationships. Signed-off-by: Glenn Y. Rolland <glenux@glenux.net> |
||
|---|---|---|
| cmd | ||
| docs | ||
| pkg | ||
| .drone.yml | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| go.work | ||
| go.work.sum | ||
| kiwimix.cdx.json | ||
| kiwimix.spdx | ||
| Makefile | ||
| README.md | ||
Kiwimix
Stack-based CLI for building and transforming calendars.
Kiwimix operates on a calendar stack. Each operator maps to an operation, popping
and pushing calendars as it runs. Use @ to chain operators in a single run.
Features
- Stack-based execution with preflight validation.
- Chain operators with
@in one CLI call. - Works with
.icscalendars; supportsICSandJSONformats. - stdin/stdout support via
-forloadandsave.
Usage
Quick start
Merge and anonymize a calendar:
kiwimix load alice.ics \
@ filter --merge \
@ filter --anonymize \
@ save alice-public.ics
Union by occupied time ranges:
kiwimix load alice.ics \
@ load bob.ics \
@ union --ranges \
@ save busy.ics
Compute free time slots by ranges:
kiwimix load alice.ics \
@ load bob.ics \
@ union --ranges \
@ substract --ranges \
@ save free-time.ics
Find free time:
kiwimix \
generate --from-date XXX --to-date YYY --from-time 9:00 --to-time 19:00 \
@ load agenda.ics \
@ substract --ranges \
@ save free.ics
Find free time for a meeting:
kiwimix \
generate --from-date XXX --to-date YYY --from-time 9:00 --to-time 19:00 \
@ load alice.ics \
@ load bob.ics \
@ union --ranges \
@ substract --ranges \
@ save free.ics
Rewrite events:
kiwimix load alice.ics \
@ filter --merge \
@ filter --anonymize \
@ save alice-public.ics
Stack chain example (formerly noted as V2):
kiwimix generate --from-date XXX --to-date YYY --from-time 9:00 --to-time 19:00 \
@ load alice.ics \
@ filter --merge \
@ filter --anonymize \
@ load bob.ics \
@ filter --merge \
@ filter --anonymize \
@ union --ranges \
@ substract --ranges \
@ save result.ics
CLI model
- The stack holds calendars in memory.
- Operators pop one or two calendars and push the result back.
swapanddroponly operate on the stack (no files).- Preflight validation enforces that the pipeline ends with an empty stack.
Operator reference
- Overview: `[docs/overview.md]
Format conventions
- Dates:
YYYY-MM-DD - Times:
H:MMorHH:MM(24h) - For
loadandsave,-means stdin/stdout. - Supported formats:
ICS(default),JSON(case-insensitive). - If
--formatis omitted, the format is inferred from the file extension. - When using stdin/stdout (
-), the format defaults toICSunless specified.
Installation
Build and install from source:
make prepare
make build
make install
Install with Go directly:
go install ./...
Build and test
Build binaries and templates:
make build
Run tests:
make test
Install JS dependencies for template generation:
make npm
References
Contributing
FIXME: Contributing guidelines are not yet documented. Please open an issue to discuss changes or submit a PR with context and tests where applicable.
License
FIXME: License file not yet added. Until then, assume all rights reserved.