Product proposal · Scripting language
Scripts that just work.
A tiny, task-oriented scripting language for build, clean, install, and deploy scripts. Declare a few
tasks; Fresh turns each into a subcommand, auto-generates --help,
and runs the plain commands and file operations you list. No argument parsers. No
mkdir -p guards. No chmod. Ever.
Every DEF becomes a subcommand. help is generated for free.
Destinations auto-create their folders. Fail-fast by default. No permission fixes.
v0.1 runs a command and moves a file. Power grows in phases, never taxing the simple case.
build() {
if [[ "$@" =~ "help" ]]; then
echo "Build the extension."; return 0
fi
if [[ $@ =~ --name[[:space:]]*=?[[:space:]]*([^ ]+) ]]; then
EXTENSION_NAME="${BASH_REMATCH[1]}"
fi
[[ -z "$EXTENSION_NAME" ]] && { echo "ERROR --name"; exit 1; }
mkdir -p out/staging
rm $EXTENSION_NAME/target/*.jar
mvn package
cp $EXTENSION_NAME/target/*.jar out/staging/
}
# ...plus a hand-written help() and dispatcher...
COMMAND=$1; shift; $COMMAND $@
#!/usr/bin/env fresh
NAME Dtracker Extension Tool
HELP_DESCRIPTION Build and deploy an extension.
EXTENSION_NAME = dtracker
STAGING_DIR = out/staging
DEF build
HELP Build the extension.
REMOVE $EXTENSION_NAME/target/*.jar
RUN mvn package
COPY $EXTENSION_NAME/target/*.jar $STAGING_DIR/
Same result. STAGING_DIR is created automatically, help and the build subcommand are generated, and there is no chmod to remember.
v0.1
Spark
Run a command, move a file, auto-help.
v1.0
Toolbelt
mkdir, remove, globs, cd, dry-run.
v1.5
Dials
Params & flags — no more arg parsers.
v2.0
Assembly
Compose, conditionals, remote deploy.
v2.5
Fan-out
Matrix builds & parallelism.
v3.0
Ecosystem
Includes, stdlib, formatter, LSP.
Rendered from the markdown sources in this folder.
Raw sources: ConceptOverview.md · SystemCapabilityAnalysis.md · LanguageSpecification.md · PhasedRoadmap.md · ReadMe.md