table of contents
JPM(1) | General Commands Manual | JPM(1) |
NAME¶
jpm - the Janet Project Manager, a build tool for Janet
SYNOPSIS¶
jpm [--flag ...] [--option=value ...] command args...
DESCRIPTION¶
jpm is the build tool that ships with a standard Janet install. It is used for building Janet projects, installing dependencies, installing projects, building native modules, and exporting your Janet project to a standalone executable. Although not required for working with Janet, it removes much of the boilerplate with installing dependencies and building native modules. jpm requires only Janet to run, and uses git to install dependencies (jpm will work without git installed).
DOCUMENTATION¶
jpm has several subcommands, each used for managing either a single Janet project or all Janet modules installed on the system. Global commands, those that manage modules at the system level, do things like install and uninstall packages, as well as clear the cache. More interesting are the local commands. For more information on jpm usage, see https://janet-lang.org/docs/index.html
For information on flags, see the usage documentation in the tool.
COMMANDS¶
- help
- Shows the usage text and exits immediately.
- build
- Builds all artifacts specified in the project.janet file in the current directory. Artifacts will be created in the ./build/ directory.
- configure[path]
- Create a directory for out-of-tree builds, and also set project options. While jpm does not require an explicit configure step, this can be used to avoid needing to set the same options repeatedly. Out of tree builds are also a convenient way to have multiple configurations at the same time, such as a relase build and a debug build.
- install [repo...]
- When run with no arguments, installs all installable artifacts in the current project to the current JANET_MODPATH for modules and JANET_BINPATH for executables and scripts. Can also take an optional git repository URL and will install all artifacts in that repository instead. When run with an argument, install does not need to be run from a jpm project directory. Will also install multiple dependencies in one command.
- update-installed
- Update to the latest version of all installed packges. Will do this by reinstalling from source control with latest available tag for each bundle. May overwrite any bundles that have been installed to a specific tag.
- uninstall [name...]
- Uninstall a project installed with install. uninstall expects the name of the project, not the repository url, path to installed file, or executable name. The name of the project must be specified at the top of the project.janet file in the declare-project form. If no name is given, uninstalls the current project if installed. Will also uninstall multiple packages in one command.
- clean
- Remove all artifacts created by jpm. This just deletes the build folder.
- test
- Runs jpm tests. jpm will run all janet source files in the test directory as tests. A test is considered failing if it exits with a non-zero exit code.
- deps
- Install all dependencies that this project requires recursively. jpm does not resolve dependency issues, like conflicting versions of the same module are required, or different modules with the same name. Dependencies are installed with git, so deps requires git to be on the PATH.
- clear-cache
- jpm caches git repositories that are needed to install modules from a remote source in a global cache ($JANET_PATH/.cache). If these dependencies are out of date or too large, clear-cache will remove the cache and jpm will rebuild it when needed. clear-cache is a global command, so a project.janet is not required.
- list-installed
- List all installed packages in the current syspath.
- list-pkgs [search]
- List all package aliases in the current package listing that contain the given search string. If no search string is given, prints the entire listing.
- clear-manifest
- jpm creates a manifest directory that contains a list of all installed files. By deleting this directory, jpm will think that nothing is installed and will try reinstalling everything on the jpm deps or jpm load-lockfile commands. Be careful with this command, as it may leave extra files on your system and shouldn't be needed most of the time in a healthy install.
- run [rule]
- Run a given rule defined in project.janet. Project definitions files (project.janet) usually contain a few artifact declarations, which set up rules that jpm can then resolve, or execute. A project.janet can also create custom rules to create arbitrary files or run arbitrary code, much like make. run will run a single rule or build a single file.
- rules
- List all rules that can be run via run. This is useful for exploring rules in the project.
- rule-tree [root] [depth]
- Show rule dependency tree in a pretty format. Optionally provide a rule to use as the tree root, as well as a max depth to print. By default, prints the full tree for all rules. This can be quite long, so it is recommended to give a root rule.
- show-paths
- Show all of the paths used when installing and building artifacts.
- update-pkgs
- Update the package listing by installing the 'pkgs' package. Same as jpm install pkgs
- quickbin [entry] [executable]
- Create a standalone, statically linked executable from a Janet source file that contains a main function. The main function is the entry point of the program and will receive command line arguments as function arguments. The entry file can import other modules, including native C modules, and jpm will attempt to include the dependencies into the generated executable.
- repl
- Run a repl in the same environment as the test environment. Allows you to use built natives without installing them.
- debug-repl
- Load the current project.janet file and start a repl in it's environment. This lets a user better debug the project file, as well as run rules manually.
- make-lockfile [filename]
- Create a lockfile. A lockfile is a record that describes what dependencies were installed at the time of the lockfile's creation, including exact versions. A lockfile can then be later used to set up that environment on a different machine via load-lockfile. By default, the lockfile is created at lockfile.jdn, although any path can be used.
- load-lockfile [filename]
- Install dependencies from a lockfile previously created with make-lockfile. By default, will look for a lockfile at lockfile.jdn, although any path can be used.
ENVIRONMENT¶
JANET_TREE
JANET_PATH
JANET_MODPATH
JANET_HEADERPATH
JANET_LIBPATH
JANET_BINPATH
JANET_BUILDPATH
JANET_PKGLIST
JANET_GIT
JANET_JPM_CONFIG
AUTHOR¶
Written by Calvin Rose <calsrose@gmail.com>