nitrile


Package info
Description

A package manager and build tool for Clean.

Readme
# Nitrile This is the repository for Nitrile, the [Clean][] package manager. ## Documentation The documentation is a MkDocs project, and is hosted at https://clean-and-itasks.gitlab.io/nitrile. To work on the documentation, use the following: ```bash cd doc sudo pip3 install -r requirements.txt mkdocs serve ``` You can now open http://localhost:8000/nitrile in your browser. Alternatively, use `mkdocs build` to generate a static version. ## Maintainer & license This project is maintained by [Camil Staps][]. The following people have contributed: - Gijs Alberts - Dante van Gemert - Elroy Jumpertz - Mart Lubbers - Steffen Michels - Christian Rinderknecht This project is licensed under AGPL v3 with additional terms under section 7; see the [LICENSE](/LICENSE) file for details. The files in the `doc` directory are licensed under CC BY-NC-SA 4.0 instead; see https://creativecommons.org/licenses/by-nc-sa/4.0/ for details. The files `bin/libz3.dll` (on Windows) and `bin/libz3.nitrile.so` (on Linux) are licensed under the license in [LICENSE-z3](/LICENSE-z3). [Camil Staps]: https://camilstaps.nl [Clean]: https://clean-lang.org
Changelog
# Changelog #### v0.4.32 - Feature: add support for `--prefer-earliest` to the nitrile command `fetch`, so the earliest versions of dependencies that still satisfy the constraints are fetched. - Feature: add `nitrile adhoc build` to use globally installed packages to build Clean projects outside of a Nitrile project context. - Feature: add `--with-dependencies` option to `nitrile global install` to automatically install transitive dependencies. - Feature: add `nitrile global clean` command to remove automatically installed global packages that are no longer needed. - Feature: search for package file in parent directories. - Fix: it is now possible to add global options after `nitrile global`. #### v0.4.31 - Fix: fix runtime error when generating ctags for modules with an exported definitions of an abstract algebraic and record types. #### v0.4.30 - Fix: fix runtime error when generating ctags for modules with an exported definitions of an abstract algebraic and record types. #### v0.4.29 - Enhancement: print file paths that yield an error. - Enhancement: speed up dependency resolving in the common case that all dependencies are installed in `nitrile-packages`. - Enhancement: speed up projects with Nickel configuration files containing a list of projects. - Fix: terminate child processes (builds, tests, etc.) when nitrile is terminated. #### v0.4.28 - Feature: add support for `--locked` to the nitrile command `fetch`, so the lock file (JSON with exact versions) is used for fetching the dependencies. - Fix: fix bug in nitrile fetch when old dependencies are deleted but no new dependencies are installed. #### v0.4.27 - Feature: add mapping syntax for initial and maximum heap in nitrile.yml. - Change: the `--define` option does not apply to local dependencies. - Enhancement: improve performance and verbose output of `nitrile watch`. - Enhancement: emit a warning when a package name already exists in the registry but under a different URL. #### v0.4.26 - Enhancement: add support for multi-package configurations with Nickel. - Fix: add `nickel` to `/usr/local/bin` within the docker image to prevent the executable getting deleted when globally installing a package. #### v0.4.25 - Feature: add support for Nickel, allowing to specify project configuration in `nitrile.ncl` instead of `nitrile.yml`. #### v0.4.24 - Fix: fix parse errors when generating ctags for modules containing derivation imports which were added in base 3 (this happens e.g. when running `nitrile fetch`). #### v0.4.23 - Enhancement: refuse to parse nitrile.yml files when they use features that are only supported with a higher `format_version`. - Fix: set the correct default for `check_indices` in `clm_options` in a `rules` section. - Fix: fix `check_indices` migration for 0.4.22 for `build` scripts with shell commands. #### v0.4.22 - Enhancement: change default of the `check_indices` option to `True`. - Fix: fix error in dependency scanning when `nitrile-packages` contains non-package directories, like `.DS_STORE` created by the MacOS file finder. #### v0.4.21 - Enhancement: use HTTPS for all requests to the registry to increase security. #### v0.4.20 - Fix: added libz3.so to linux package to make it compatible with non debian/ubuntu distributions. #### v0.4.19 - Enhancement: `nitrile fetch` now outputs a list of dependencies that are not using the latest version. - Enhancement: ignore `*.tmp*` files with `nitrile watch`; these are sometimes generated as temporary files by system linkers. - Fix: exit with non-zero exit code if build specified with `--only` does not exist. #### v0.4.18 - Fix: fix error that base-clm could not be found when running compilation tests for some packages. #### v0.4.17 - Fix: include `scope: Test` dependencies when running `script` tests. #### v0.4.16 - Fix: only test directories with `scope: Use` in compilation tests. #### v0.4.15 - Change: only test directories with `scope: Use` in compilation tests. - Enhancement: parallelize downloads when running `nitrile fetch`. - Fix: only use dependencies with `scope: Use` in compilation tests. #### v0.4.14 - Fix: fixes an issue where `PATH` and other environment variables were not set correctly for `script` tests, so that e.g. `clm` jobs would not execute correctly. #### v0.4.13 - Feature: add `except_modules` and `only_modules` to compilation test configuration. - Feature: add shorthand syntax for dependency lists in nitrile.yml. - Enhancement: add error when `required_dependencies` mentions a dependency that is not marked as optional. - Fix: fix incorrect error when using `compilation` tests and clm is not installed. #### v0.4.12 - Chore: on Windows, don't check for experimental feature `PSNativeCommandErrorActionPreference` on PowerShell >= 7.4, in which this feature has become stable. #### v0.4.11 - Feature: add `required_dependencies` field to `build` and `tests` in nitrile.yml to require optional dependencies for certain jobs. - Change: `nitrile fetch` now downloads optional dependencies by default. This can be prevented with `--no-optional`. - Enhancement: write `typedef` extension field to ctags with a full representation of type definitions. - Enhancement: write the lowest compatible `format_version` in `nitrile init`, instead of the current version. #### v0.4.10 - Feature: add `undecidable_instances` to `clm_options` in `nitrile.yml`. #### v0.4.9 - Feature: add `actions` setting and `nitrile do` subcommand. - Feature: add `--list` option to `nitrile build` and `nitrile test`. - Feature: add `--no-header` global option. - Enhancement: improve error when the dependencies of a local dependency cannot be found. - Fix: only accept `--clm-linker=lld` on x64; this linker throws errors on x86. #### v0.4.8 - Fix: on Windows, correctly strip the BOM from files used in `expected_result` tests. #### v0.4.7 - Feature: add global configuration file `~/.nitrile/nitrile-settings.yml` for default values of `--parallel-jobs` and `--clm-linker`. - Feature: add global option `--clm-linker`. - Feature: add global option `--parallel-jobs`. - Enhancement: write a `format_version` when using `nitrile init` (the current Nitrile version) to avoid warnings when the new package is used. - Fix: on Windows, catch non-zero exit codes of native commands in `build` (and test) scripts. This requires the user to have run `pwsh.exe -Command 'Enable-ExperimentalFeature PSNativeCommandErrorActionPreference'`. - Fix: `nitrile init` now writes a trailing newline. #### v0.4.6 - Fix: do not print legal header when using `nitrile run` so that only output of the child process is printed to stdout. - Fix: replace Nitrile process with child process in `nitrile run` so that stdin is passed correctly. #### v0.4.5 - Feature: add `nitrile global install PACKAGE [VERSION]`, `nitrile global list` and `nitrile global remove PACKAGE VERSION` commands. - Feature: add `nitrile run PACKAGE BINARY [ARGS]` command. - Feature: add `nitrile help` command. - Fix: also watch paths of dependencies and local dependencies in `nitrile watch`. - Fix: lockfiles are now written with a trailing newline. #### v0.4.4 - Feature: add `optional` configuration option for dependencies. - Feature: add `nr-of-tests` option to `property-tester-options` to specify a maximum number of tests to execute per property. - Enhancement: delete old dependencies that are not needed any more on `nitrile fetch`. - Enhancement: add `format_version` field to `nitrile.yml`. - Enhancement: ignore `*.dcl~` and `*.icl~` in `nitrile watch`, which are automatically generated by Vim if `writebackup` is set. - Fix: `nitrile fetch` now looks at the actually installed versions of packages to see what has to be updated, instead of at the lockfile. - Fix: take actually installed versions of packages into account when resolving dependencies, instead of looking at the lockfile. #### v0.4.3 - Feature: add `--except` option to `nitrile test`. #### v0.4.2 - Enhancement: make `contact_email`, `description`, `license`, `maintainer`, `name`, `url`, `version` optional (except when they are needed in `nitrile package` and/or `nitrile publish`). - Enhancement: add `version` field to `.nitrile.json` (created by `nitrile package`). #### v0.4.1 - Feature: add `--property-tester-options` option to `nitrile test` with possible options `compile-only`, `no-regenerate`, and `only`. - Feature: add `--test-runner-options` option to `nitrile test` with option `parallel`. - Enhancement: added documentation on versioning. ## v0.4 - Changed: the default `scope` for `dependencies` is now `Build` for packages with `type: Application`. - Removed: removed `build_dependencies` and `test_dependencies`, which can now be specified using `scope: Build` and `scope: Test` in `dependencies`. - Removed: removed `test_src`, which can now be specified using `scope: Test` in `src`. - Removed: removed the `publish-0.2` alias for `nitrile publish`. #### v0.3.3 - Change: `build_dependencies` and `test_dependencies` are deprecated. You can now specify these in regular dependencies, e.g.: ```yml dependencies: base: ^1.0 property-tester: version: ^3.0 scope: Test ``` Possible values for `scope` are `Build`, `Test`, and `Use`. The default scope is `Build` for applications and `Use` for libraries and miscellaneous packages. - Change: `test_src` is deprecated. You can now specify these directories in `src` with a `Test` scope, e.g.: ```yml src: - src - path: test scope: Test ``` For possible values of `scope`, see above. `Use` is not allowed in applications. - Change: the constraint sets stored in `~/.nitrile` now include a boolean indicating whether dependencies are optional or not. Run `nitrile update` once to avoid the error "Failed to parse constraint set.". - Fix: do not include test dependencies when building. - Fix: disallow `--local-dependency` with `nitrile fetch`, as it is not clear what the behaviour should be. #### v0.3.2 - Fix: fix adding of `git_ref` to generated package files in GitLab CI if `git` is not installed; use environment variables `CI_COMMIT_TAG` and `CI_COMMIT_SHA` instead. #### v0.3.1 - Feature: add `git_ref` key to (i) `.nitrile.json` in package tarballs and (ii) `nitrile-metadata.json` in GitLab packages. It contains a reference to the git commit from which the package was built. - Enhancement: improve errors reported by `nitrile fetch` in case of unsatisfiable dependencies. - Fix: fix importing modules from the dependencies of a `--local-dependency`. ## v0.3 - Chore: move to https://clean-lang.org. - Feature: add `list_types` field to `clm_options`. - Enhancement: be more informative when resolving dependency fails. - Fix: give a correct 'unsatisfiable core' of dependencies if constraint resolving fails; previously the first few dependencies would be listed. - Fix: allow constraint solving to succeed when a package has broken versions, if there is at least one version that is not broken. #### v0.2.23 - Feature: add `nitrile watch` subcommand to rebuild/retest when source files change. Requires [Watchman](https://facebook.github.io/watchman/). Also adds a global `watch` key to `nitrile.yml`. - Enhancement: enable parallel jobs in `clm` when available. - Enhancement: print short program name instead of full path in legal header on Windows. - Fix: don't print legal header in `nitrile env` as newlines will be discarded by bash ``eval `...` ``. #### v0.2.22 - Robustness: retry download/upload in `nitrile fetch` and `nitrile publish`. - Fix: print legal header as comments in `nitrile env`. - Fix: don't show warnings for `_system` and `_startup*` modules in `base-rts` and `base-stdenv` on `nitrile fetch`. #### v0.2.21 - Fix: allow `nitrile build` without preceding `nitrile update` if there are no dependencies. #### v0.2.20 - Feature: add `nitrile generate-tags` subcommand to generate `.nitrile-tags`, for use by editors. - Feature: on `nitrile fetch`, an extended ctags file is now written to each package's `lib/.nitrile-tags` file, for use by editors. - Feature: add option `--local-dependency` to develop multiple packages at the same time. - Feature: add option `--verbose`. - Feature: add `nitrile terms` subcommand. - Enhancement: more detailed error information in `nitrile package`. - Robustness: let `curl` follow redirects (needed when the GitLab handle has changed, or uses different capitalization). - Fix: set modification time of dependencies to time of `nitrile fetch`, so that modules are recompiled when needed. #### v0.2.19 - Fix: issue where destination paths in packages lost the first character of some path parts, depending on whether a trailing slash was used or not. - Fix: use `nitrile-tmp` instead of `nitrile-tmp-0`. #### v0.2.18 - Enhancement: add pattern support to `package.include`. Add asterisk patterns to both `package.exclude` and `package.include`. - Fix: when `nitrile-tmp` already exists, use `nitrile-tmp-1` (etc.) instead. Fixes a "Failed to create `../nitrile-tmp`" error when nitrile is used in a nitrile build step. #### v0.2.17 - Feature: add `env` subcommand. #### v0.2.16 - Fix: write build scripts to a file in the temporary directory instead of passing them as an argument to `powershell`. This fixes long build scripts (>= 32768 characters) and scripts with funny characters. #### v0.2.15 - Enhancement: add output on `nitrile update`. - Fix: on Windows, append `.exe` to the `compiler` `clm` option if needed (again, fix in v0.2.14 was faulty in some cases). - Fix: on Windows, append `.exe` to the `post_link` `clm` option if needed. #### v0.2.14 - Fix: include applications (icl modules without dcl) in `compilation` tests. - Fix: on Windows, append `.exe` to the `compiler` `clm` option if needed. #### v0.2.13 - Feature: add `extra_tests` field to rule settings. - Feature: add global `clm_options` setting. #### v0.2.12 - Change: `expected_result` tests now convert Windows line endings to `\n` before checking the result. #### v0.2.11 - Enhancement: when `nitrile fetch` cannot satisfy version constraints, it now outputs a set of packages of which the constraints are irreconcilable. - Enhancement: flush stdout after logging, to improve relative positioning of messages on stdout and stderr in CI. - Fix: when a dependency is mentioned in at least two of `dependencies`, `build_dependencies`, and `test_dependencies`, the constraints are combined when running `nitrile fetch` (instead of picking one of the constraints semi-at-random). - Fix: avoid powershell exception when a build step has an empty script. - Fix: translate paths in `package.exclude` on Windows platforms. - Fix: error as soon as a script step fails on Windows (as on UNIX). #### v0.2.10 - Fix: close pipes after we're done with them. #### v0.2.9 - Fix: fix `compiler_options` clm option on Windows (commas have to be escaped in PowerShell). #### v0.2.8 - Feature: add `clm` option `post_link` for the iTasks web resource collector. - Change: package names must now match the regular expression `[a-z]([a-z0-9-]*[a-z0-9])?`. #### v0.2.7 - Change: do not enable fusion by default, as this seems to be buggy. - Fix: fix cycle in spine in `fetch` by disabling fusion. #### v0.2.6 - Feature: add `clm` options `compiler`, `partial_functions`, `profiling`, and `fusion`. - Change: fusion of normal functions is enabled by default in `clm` builds. - Change: the `stack_tracing` option for `clm` is now incorporated in the new `profiling` option. - Change: `.nitrile.json` in package tarballs now always uses `/` as a directory separator for consistency. #### v0.2.5 - Feature: add `tests:compilation` for testing that all modules in `src` and `test_src` compile, as a very crude test for libraries. - Change: `.nitrile.json` now contains a `fileinfo` key instead of `file_sources`. This key is a record with an entry for each path in the package. Entries can contain more information than the source file, in particular whether a module is a 'core' module or not (to be used by Cloogle). - Fix: "No such file or directory" error when running a `clm` build without `target`. #### v0.2.4 - Feature: add `.nitrile.json` to generated package tarballs, with a source map that Cloogle can use to generate URLs to the GitLab blame view. #### v0.2.3 - Feature: add support for property tests with [property-tester](https://clean-lang.org/pkg/property-tester). - Change: use pseudoterminals for running builds and tests on POSIX. This means nitrile won't pass the output to `stdout` and `stderr` (because pseudoterminals don't distinguish these), but the advantage is that `stdout` is now line-buffered so that the order is as expected. - Change: more readable parse stack in case nitrile.yml cannot be parsed. #### v0.2.2 - Fix: on Windows force UTF-8 encoding of `expected_result` tests (by default, PowerShell would use UTF-16). #### v0.2.1 - Feature: allow multiple packages in one nitrile.yml; add `--name` option to select a different one than the first. - Fix: output of `init` subcommand used the `gitlab` key instead of `url`. ## v0.2 - Feature: add support for packages for `any` platform and/or architecture. - Feature: add `extra_dependencies` option in `rules`. - Change: the `publish` subcommand now has the semantics of `publish-0.2`. - Removed: the `install` alias for the `fetch` subcommand. - Removed: old-style notation of builds and tests in nitrile.yml. #### v0.1.16 - Feature: new `publish-0.2` subcommand which publishes packages for all targets at once. #### v0.1.15 - Feature: add `clm` option `wait_for_key_press`. - Feature: add Windows support. #### v0.1.14 - Feature: add `package:exclude` option. - Feature: add `nitrile init` subcommand. #### v0.1.13 - Feature: add `test_dependencies`. - Feature: add support for [test-runner](https://clean-lang.org/pkg/test-runner) tests. #### v0.1.12 - Feature: add `clm` options `generate_descriptors`, `export_local_labels`, `strip`. - Fix: `clm` bytecode options where not used correctly. - Fix: last command of `expected_result` tests now runs in the same shell so that it has the same directory, access to environment variables, etc. #### v0.1.11 - Feature: add `clm` option `compiler_options`. #### v0.1.10 - Feature: add `clm` option `src`. - Feature: `tests` that just run a series of shell commands. - Feature: give builds and tests names; add `depends` option. - Feature: add `--only` CLI option for `build` and `test` subcommands. - Change: rename `nitrile install` to `nitrile fetch`; `install` is an alias. - Enhancement: build `script`s are now optional (useful for meta-goals). - Enhancement: always run `clm` with support for dynamics. - Enhancement: allow directories in `package:extra_files` #### v0.1.9 - Feature: add `test` subcommand and `tests` options. - Feature: add `clm` options `stack_tracing` and `print_constructors`. #### v0.1.8 - Fix: fix include paths when dependencies of dependencies are used. #### v0.1.7 - Feature: add `license` field to nitrile.yml. #### v0.1.6 - Feature: add `clm` options `warnings`, `garbage_collector`, `check_indices`, and `link`. #### v0.1.5 - Fix: packages mentioned in the lockfile but not present in `nitrile-packages` are now installed when running `fetch`. #### v0.1.4 - Feature: add central directory with binaries of dependencies; use this directory when running `clm` builds. - Removed: library sources (e.g. `lib: Platform`); these should now be dependencies. - Robustness: ignore unparseable packages in the registry when running `update`. #### v0.1.3 - Feature: add options to build/package/test for a target different than the current one. - Feature: add `Miscellaneous` package type, e.g. for `base`. - Enhancement: add lockfile. - Robustness: allow broken packages in the index when running `fetch`, as long as they are not relevant to us. #### v0.1.2 First tagged version.
Versions