Skip to content

Releases: just-buildsystem/justbuild

Release 1.4.1

03 Dec 15:58
Compare
Choose a tag to compare

Bug fixes on top of 1.4.0.

Fixes

  • Fixes ensuring proper pointer life time and access check.
  • Git operations are now properly locked against each other, also
    between processes where necessary.
  • just traverse now exits unconditionally after traversal, also
    in case of failure.
  • Missing entries in the documentation have been added.

Release notes for 1.4.0 (2024-11-04)

A feature release on top of 1.3.0, backwards compatible with
respect to rule language, build description, repository description,
and wire protocols. However, the internal representation in local
build root has changed; it is therefore recommended to remove the
local build root on upgrade.

New features

  • just serve now also works together with a compatible remote-execution
    endpoint. This uses an extended version of the serve protocol, so
    both, just-mr and just serve need to be at the new version.
  • User-defined rules, as well as the built-in rule "generic" can
    now specify a subdirectory in which an action is to be executed.
  • just-mr now supports garbage collection for repository roots
    via the gc-repo subcommand. This follows the same two-generation
    approach as garbage collection for the cache-CAS pair; in
    other words, everything is cleaned up that was not used since
    the last call to gc-repo. To accommodate this, the layout in
    the local build root had to be changed. The directory git as
    well as *-map directories are now located in the subdirectory
    repositories/generation-0. On upgrade those have to be manually
    moved there if they should be continued to be used; removing the
    whole local build root is, of course, also a valid upgrade path,
    however losing the whole cache. Not doing anything on upgrade
    will not lead to an inconsistent state; however, the directories
    at the old location will not be used anymore while still using
    disk space.
  • The expression language has been extended to contain quote
    and quasi-quote expressions, as well as new built-in functions
    "from_subdir", "nub_left".

Fixes

  • The built-in rule "generic" now properly enforces that the
    obtained outputs form a well-formed artifact stage; a conflicting
    arrangement of artifacts was possilbe beforehand.
  • The built-in expression functions "join" and "join_cmd"
    now properly enforce that the argument is a list of strings.
    So far, they used to accept a single string, treating it as a
    singleton list.
  • A bug was fixed that cased just serve to fail with an internal
    error when building against ignore-special roots.
  • just now accurately reports internal errors that occurred on
    the serve endpoint.
  • Target-level cache entries are only written if all export targets
    depended upon are also written to or found in cache; previously,
    it was assumed that all export targets not analysed locally
    were local cache hits, an assumption that no longer holds in
    the presence of serve endpoints. This fixes a cache consistency
    problem if the same remote-execution endpoint is used both, with
    and without a serve endpoint.
  • A race condition in reconstructing executables from large CAS
    has been removed that could lead to an open file descriptor being
    kept alive for too long, resulting EBUSY failures of actions
    using this binary.
  • Internal code clean up, reducing memory footprint, in particular
    for simultaneous upload of a large number of blobs.
  • Avoidence of duplicate requests and performance improvements when
    synchronizing artifacts with another CAS.
  • Dependencies have been updated to also build with gcc 14.
  • Portability improvements of the code by not relying on implementation
    details of the compiler.
  • Local execution no longer has the requirement that there exist
    no more files with identical content than the hardlink limit of
    the underlying file system.
  • Inside action descriptions, paths are always normalized; this improves
    compatibility with existing remote-execution implementations.
  • The size of large object entries has been reduced. The cache
    and CAS must be cleaned up since stable versions before 1.4.0
    cannot use the new format.
  • The way of storing intermediate keys of the action cache has
    been changed. The cache must be cleaned up since stable versions
    before 1.4.0 cannot use the new format.
  • Various improvements to the tests: dispatching of the summary
    action is now possible, tests are independent of a .just-mrrc
    file the user might have in their home directory
  • Various improvements of the documentation.

Release 1.4.0

04 Nov 14:45
Compare
Choose a tag to compare

A feature release on top of 1.3.0, backwards compatible with
respect to rule language, build description, repository description,
and wire protocols. However, the internal representation in local
build root has changed; it is therefore recommended to remove the
local build root on upgrade.

New features

  • just serve now also works together with a compatible remote-execution
    endpoint. This uses an extended version of the serve protocol, so
    both, just-mr and just serve need to be at the new version.
  • User-defined rules, as well as the built-in rule "generic" can
    now specify a subdirectory in which an action is to be executed.
  • just-mr now supports garbage collection for repository roots
    via the gc-repo subcommand. This follows the same two-generation
    approach as garbage collection for the cache-CAS pair; in
    other words, everything is cleaned up that was not used since
    the last call to gc-repo. To accommodate this, the layout in
    the local build root had to be changed. The directory git as
    well as *-map directories are now located in the subdirectory
    repositories/generation-0. On upgrade those have to be manually
    moved there if they should be continued to be used; removing the
    whole local build root is, of course, also a valid upgrade path,
    however losing the whole cache. Not doing anything on upgrade
    will not lead to an inconsistent state; however, the directories
    at the old location will not be used anymore while still using
    disk space.
  • The expression language has been extended to contain quote
    and quasi-quote expressions, as well as new built-in functions
    "from_subdir", "nub_left".

Fixes

  • The built-in rule "generic" now properly enforces that the
    obtained outputs form a well-formed artifact stage; a conflicting
    arrangement of artifacts was possilbe beforehand.
  • The built-in expression functions "join" and "join_cmd"
    now properly enforce that the argument is a list of strings.
    So far, they used to accept a single string, treating it as a
    singleton list.
  • A bug was fixed that cased just serve to fail with an internal
    error when building against ignore-special roots.
  • just now accurately reports internal errors that occurred on
    the serve endpoint.
  • Target-level cache entries are only written if all export targets
    depended upon are also written to or found in cache; previously,
    it was assumed that all export targets not analysed locally
    were local cache hits, an assumption that no longer holds in
    the presence of serve endpoints. This fixes a cache consistency
    problem if the same remote-execution endpoint is used both, with
    and without a serve endpoint.
  • A race condition in reconstructing executables from large CAS
    has been removed that could lead to an open file descriptor being
    kept alive for too long, resulting EBUSY failures of actions
    using this binary.
  • Internal code clean up, reducing memory footprint, in particular
    for simultaneous upload of a large number of blobs.
  • Avoidence of duplicate requests and performance improvements when
    synchronizing artifacts with another CAS.
  • Dependencies have been updated to also build with gcc 14.
  • Portability improvements of the code by not relying on implementation
    details of the compiler.
  • Local execution no longer has the requirement that there exist
    no more files with identical content than the hardlink limit of
    the underlying file system.
  • Inside action descriptions, paths are always normalized; this improves
    compatibility with existing remote-execution implementations.
  • The size of large object entries has been reduced. The cache
    and CAS must be cleaned up since stable versions before 1.4.0
    cannot use the new format.
  • The way of storing intermediate keys of the action cache has
    been changed. The cache must be cleaned up since stable versions
    before 1.4.0 cannot use the new format.
  • Various improvements to the tests: dispatching of the summary
    action is now possible, tests are independent of a .just-mrrc
    file the user might have in their home directory
  • Various improvements of the documentation.

Release 14.0~beta1

30 Oct 17:09
Compare
Choose a tag to compare
Release 14.0~beta1 Pre-release
Pre-release

The first beta release for the upcoming 1.4.0 release

Release 1.4.0 will be a feature release on top of 1.3.0, backwards compatible with
respect to rule language, build description, repository description,
and wire protocols. However, the internal representation in local
build root has changed; it is therefore recommended to remove the
local build root on upgrade.

New features

  • just serve now also works together with a compatible remote-execution
    endpoint. This uses an extended version of the serve protocol, so
    both, just-mr and just serve need to be at the new version.
  • User-defined rules, as well as the built-in rule "generic" can
    now specify a subdirectory in which an action is to be executed.
  • just-mr now supports garbage collection for repository roots
    via the gc-repo subcommand. This follows the same two-generation
    approach as garbage collection for the cache-CAS pair; in
    other words, everything is cleaned up that was not used since
    the last call to gc-repo. To accommodate this, the layout in
    the local build root had to be changed. The directory git as
    well as *-map directories are now located in the subdirectory
    repositories/generation-0. On upgrade those have to be manually
    moved there if they should be continued to be used; removing the
    whole local build root is, of course, also a valid upgrade path,
    however losing the whole cache. Not doing anything on upgrade
    will not lead to an inconsistent state; however, the directories
    at the old location will not be used anymore while still using
    disk space.
  • The expression language has been extended to contain quote
    and quasi-quote expressions, as well as new built-in functions
    "from_subdir", "nub_left".

Fixes

  • The built-in rule "generic" now properly enforces that the
    obtained outputs form a well-formed artifact stage; a conflicting
    arrangement of artifacts was possilbe beforehand.
  • The built-in expression functions "join" and "join_cmd"
    now properly enforce that the argument is a list of strings.
    So far, they used to accept a single string, treating it as a
    singleton list.
  • A bug was fixed that cased just serve to fail with an internal
    error when building against ignore-special roots.
  • just now accurately reports internal errors that occurred on
    the serve endpoint.
  • Target-level cache entries are only written if all export targets
    depended upon are also written to or found in cache; previously,
    it was assumed that all export targets not analysed locally
    were local cache hits, an assumption that no longer holds in
    the presence of serve endpoints. This fixes a cache consistency
    problem if the same remote-execution endpoint is used both, with
    and without a serve endpoint.
  • A race condition in reconstructing executables from large CAS
    has been removed that could lead to an open file descriptor being
    kept alive for too long, resulting EBUSY failures of actions
    using this binary.
  • Internal code clean up, reducing memory footprint, in particular
    for simultaneous upload of a large number of blobs.
  • Avoidence of duplicate requests and performance improvements when
    synchronizing artifacts with another CAS.
  • Dependencies have been updated to also build with gcc 14.
  • Portability improvements of the code by not relying on implementation
    details of the compiler.
  • Local execution no longer has the requirement that there exist
    no more files with identical content than the hardlink limit of
    the underlying file system.
  • Inside action descriptions, paths are always normalized; this improves
    compatibility with existing remote-execution implementations.
  • The size of large object entries has been reduced. The cache
    and CAS must be cleaned up since stable versions before 1.4.0
    cannot use the new format.
  • The way of storing intermediate keys of the action cache has
    been changed. The cache must be cleaned up since stable versions
    before 1.4.0 cannot use the new format.
  • Various improvements to the tests: dispatching of the summary
    action is now possible, tests are independent of a .just-mrrc
    file the user might have in their home directory
  • Various improvements of the documentation.

Release 1.3.2

09 Sep 16:32
Compare
Choose a tag to compare

Bug fixes on top of 1.3.1.

Fixes

  • Portability improvements of the code by not relying on implementation
    details of the compiler.
  • Target-level cache entries are only written if all export targets
    depended upon are also written to or found in cache; previously,
    it was assumed that all export targets not analysed locally
    were local cache hits, an assumption that no longer holds in
    the presence of serve endpoints. This fixes a cache consistency
    problem if the same remote-execution endpoint is used both, with
    and without a serve endpoint.
  • A race condition in reconstructing executables from large CAS
    has been removed that could lead to an open file descriptor being
    kept alive for too long, resulting EBUSY failures of actions
    using this binary.
  • Inside action descriptions, paths are always normalized; this improves
    compatibility with existing remote-execution implementations.
  • just-mr --help now returns exit code 0
  • Missing output directories of actions are now reported properly.

Release notes for 1.3.1 (2024-05-22)

Bug fixes on top of 1.3.0.

Fixes

  • A bug was fixed that cased just serve to fail with an internal
    error when building against ignore-special roots.
  • just now accurately reports internal errors that occured on
    the serve endpoint.
  • Dependencies have been updated to also build with gcc 14.

Release notes for 1.3.0 (2024-05-08)

A feature release on top of 1.2.0, backwards compatible.

Major new features

  • New subcommand just serve to start a target-level caching service,
    as described in the corresponding design document.
  • just-mr is able to back up and retrieve distribution files
    from a remote execution endpoint. This simplifies usage in an
    environment with restricted internet access.
  • just execute now supports blob splitting as new RPC call.
    just install uses this call to reduce traffic if the remote-execution
    endpoint supports blob splitting and the --remember option is given.
    In this way, traffic from the remote-execution endpoint can be reduced
    when subsequently installing artifacts with only small local
    differences.

Other changes

  • New script just-deduplicate-repos to avoid blow up of the
    repos.json in the case of chained imports with common dependencies.
  • New subcommand add-to-cas to add files and directories to the local
    CAS and optionally also copy them to the remote-execution endpoint.
  • The built-in "generic" rule now supports an argument "sh -c",
    allowing to specify the invocation of the shell (defaulting to
    ["sh", "-c"]).
  • just describe also shows the values of the implicit dependencies.
  • just-mr supports a new form of root, called "foreign file".
  • When just-mr executes the action to generate the desired tree of a
    "git tree" repository, it can be specified that certain variables
    of the environment can be inherited.
  • The just-mr rc file now supports a field "rc files" to include
    other rc files given by location objects; in particular, it is
    possible to include rc files committed to the workspace.
  • Support for fetching archives from FTP and TFTP was added to just-mr
    if it was built with bundled curl. For package builds, libcurl has
    enabled whatever the distro considers suitable.
  • The gc subcommand supports an option --no-rotate to carry
    out only local clean up. Part of that local clean up, that is
    also done as part of a full gc, is splitting large files. Note
    that stable versions before 1.3.0 cannot use those split files.
    Hence a downgrade after a gc with 1.3.0 (or higher) requires
    cleaning of cache and CAS.
  • The expression language has been extended and, in particular,
    allows indexed access to an array (basically using it as a tuple)
    and a generic form of assertion (to report user errors).
  • The analyse subcommand supports a new flag --dump-result to dump
    the analysis result to a file or stdout (if - is given).

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Garbage collection now honors the dependencies of target-level
    caches entries on one another. When upgrading in place, this only
    applies for target-level cache entries written initially after
    the upgrade.
  • The taintedness of "configure" targets is now propagated
    correctly in analysis.
  • It is no longer incorrectly assumed that every git URL not
    starting with ssh://, http://, nor https:// is a file on the
    local disk. Now, only URLs starting with /, ./, or file://
    are considered file URLs. File URLs, as well as URLs starting
    with git://, http://, or https://, are handled by just-mr
    using libgit2; for every other URL, just-mr shells out to
    git for fetching and the URL is passed to git unchanged.
  • Improved portability and update of the bundled dependencies.
  • Various minor improvements and typo fixes in the documentation.
  • Fixed a race condition in the task queue that could cause (with
    probability roughly 1e-5) a premature termination of the queue
    resulting in spurious analysis failures without explanation (despite
    "failed to analyse target").
  • Fixed a race condition in an internal cache of just execute
    used for keeping track of running operations.
  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.
  • The format for target-cache shards was changed to a canonical form.
    The new and old formats do not overlap, therefore the correctness
    of the builds is not affected. In particular, no special care has
    to be taken on upgrading or downgrading. However, some target-level
    cache entries will not be used leading potentially to rebuilding of
    some targets.
  • The expression "disjoint_map_union" did not verify disjointness
    in all cases; this is fixed now.
  • The command line option "--remote-execution-property" can be
    repeated multiple times to list all the properties, but only the
    last one was retained. This is fixed now.

Release 1.3.1

22 May 12:50
Compare
Choose a tag to compare

Bug fixes on top of 1.3.0.

Fixes

  • A bug was fixed that cased just serve to fail with an internal
    error when building against ignore-special roots.
  • just now accurately reports internal errors that occured on
    the serve endpoint.
  • Dependencies have been updated to also build with gcc 14.

Release notes for 1.3.0 (2024-05-08)

A feature release on top of 1.2.0, backwards compatible.

Major new features

  • New subcommand just serve to start a target-level caching service,
    as described in the corresponding design document.
  • just-mr is able to back up and retrieve distribution files
    from a remote execution endpoint. This simplifies usage in an
    environment with restricted internet access.
  • just execute now supports blob splitting as new RPC call.
    just install uses this call to reduce traffic if the remote-execution
    endpoint supports blob splitting and the --remember option is given.
    In this way, traffic from the remote-execution endpoint can be reduced
    when subsequently installing artifacts with only small local
    differences.

Other changes

  • New script just-deduplicate-repos to avoid blow up of the
    repos.json in the case of chained imports with common dependencies.
  • New subcommand add-to-cas to add files and directories to the local
    CAS and optionally also copy them to the remote-execution endpoint.
  • The built-in "generic" rule now supports an argument "sh -c",
    allowing to specify the invocation of the shell (defaulting to
    ["sh", "-c"]).
  • just describe also shows the values of the implicit dependencies.
  • just-mr supports a new form of root, called "foreign file".
  • When just-mr executes the action to generate the desired tree of a
    "git tree" repository, it can be specified that certain variables
    of the environment can be inherited.
  • The just-mr rc file now supports a field "rc files" to include
    other rc files given by location objects; in particular, it is
    possible to include rc files committed to the workspace.
  • Support for fetching archives from FTP and TFTP was added to just-mr
    if it was built with bundled curl. For package builds, libcurl has
    enabled whatever the distro considers suitable.
  • The gc subcommand supports an option --no-rotate to carry
    out only local clean up. Part of that local clean up, that is
    also done as part of a full gc, is splitting large files. Note
    that stable versions before 1.3.0 cannot use those split files.
    Hence a downgrade after a gc with 1.3.0 (or higher) requires
    cleaning of cache and CAS.
  • The expression language has been extended and, in particular,
    allows indexed access to an array (basically using it as a tuple)
    and a generic form of assertion (to report user errors).
  • The analyse subcommand supports a new flag --dump-result to dump
    the analysis result to a file or stdout (if - is given).

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Garbage collection now honors the dependencies of target-level
    caches entries on one another. When upgrading in place, this only
    applies for target-level cache entries written initially after
    the upgrade.
  • The taintedness of "configure" targets is now propagated
    correctly in analysis.
  • It is no longer incorrectly assumed that every git URL not
    starting with ssh://, http://, nor https:// is a file on the
    local disk. Now, only URLs starting with /, ./, or file://
    are considered file URLs. File URLs, as well as URLs starting
    with git://, http://, or https://, are handled by just-mr
    using libgit2; for every other URL, just-mr shells out to
    git for fetching and the URL is passed to git unchanged.
  • Improved portability and update of the bundled dependencies.
  • Various minor improvements and typo fixes in the documentation.
  • Fixed a race condition in the task queue that could cause (with
    probability roughly 1e-5) a premature termination of the queue
    resulting in spurious analysis failures without explanation (despite
    "failed to analyse target").
  • Fixed a race condition in an internal cache of just execute
    used for keeping track of running operations.
  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.
  • The format for target-cache shards was changed to a canonical form.
    The new and old formats do not overlap, therefore the correctness
    of the builds is not affected. In particular, no special care has
    to be taken on upgrading or downgrading. However, some target-level
    cache entries will not be used leading potentially to rebuilding of
    some targets.
  • The expression "disjoint_map_union" did not verify disjointness
    in all cases; this is fixed now.
  • The command line option "--remote-execution-property" can be
    repeated multiple times to list all the properties, but only the
    last one was retained. This is fixed now.

Release 1.3.0

08 May 11:01
Compare
Choose a tag to compare

A feature release on top of 1.2.0, backwards compatible.

Major new features

  • New subcommand just serve to start a target-level caching service,
    as described in the corresponding design document.
  • just-mr is able to back up and retrieve distribution files
    from a remote execution endpoint. This simplifies usage in an
    environment with restricted internet access.
  • just execute now supports blob splitting as new RPC call.
    just install uses this call to reduce traffic if the remote-execution
    endpoint supports blob splitting and the --remember option is given.
    In this way, traffic from the remote-execution endpoint can be reduced
    when subsequently installing artifacts with only small local
    differences.

Other changes

  • New script just-deduplicate-repos to avoid blow up of the
    repos.json in the case of chained imports with common dependencies.
  • New subcommand add-to-cas to add files and directories to the local
    CAS and optionally also copy them to the remote-execution endpoint.
  • The built-in "generic" rule now supports an argument "sh -c",
    allowing to specify the invocation of the shell (defaulting to
    ["sh", "-c"]).
  • just describe also shows the values of the implicit dependencies.
  • just-mr supports a new form of root, called "foreign file".
  • When just-mr executes the action to generate the desired tree of a
    "git tree" repository, it can be specified that certain variables
    of the environment can be inherited.
  • The just-mr rc file now supports a field "rc files" to include
    other rc files given by location objects; in particular, it is
    possible to include rc files committed to the workspace.
  • Support for fetching archives from FTP and TFTP was added to just-mr
    if it was built with bundled curl. For package builds, libcurl has
    enabled whatever the distro considers suitable.
  • The gc subcommand supports an option --no-rotate to carry
    out only local clean up. Part of that local clean up, that is
    also done as part of a full gc, is splitting large files. Note
    that stable versions before 1.3.0 cannot use those split files.
    Hence a downgrade after a gc with 1.3.0 (or higher) requires
    cleaning of cache and CAS.
  • The expression language has been extended and, in particular,
    allows indexed access to an array (basically using it as a tuple)
    and a generic form of assertion (to report user errors).
  • The analyse subcommand supports a new flag --dump-result to dump
    the analysis result to a file or stdout (if - is given).

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Garbage collection now honors the dependencies of target-level
    caches entries on one another. When upgrading in place, this only
    applies for target-level cache entries written initially after
    the upgrade.
  • The taintedness of "configure" targets is now propagated
    correctly in analysis.
  • It is no longer incorrectly assumed that every git URL not
    starting with ssh://, http://, nor https:// is a file on the
    local disk. Now, only URLs starting with /, ./, or file://
    are considered file URLs. File URLs, as well as URLs starting
    with git://, http://, or https://, are handled by just-mr
    using libgit2; for every other URL, just-mr shells out to
    git for fetching and the URL is passed to git unchanged.
  • Improved portability and update of the bundled dependencies.
  • Various minor improvements and typo fixes in the documentation.
  • Fixed a race condition in the task queue that could cause (with
    probability roughly 1e-5) a premature termination of the queue
    resulting in spurious analysis failures without explanation (despite
    "failed to analyse target").
  • Fixed a race condition in an internal cache of just execute
    used for keeping track of running operations.
  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.
  • The format for target-cache shards was changed to a canonical form.
    The new and old formats do not overlap, therefore the correctness
    of the builds is not affected. In particular, no special care has
    to be taken on upgrading or downgrading. However, some target-level
    cache entries will not be used leading potentially to rebuilding of
    some targets.
  • The expression "disjoint_map_union" did not verify disjointness
    in all cases; this is fixed now.
  • The command line option "--remote-execution-property" can be
    repeated multiple times to list all the properties, but only the
    last one was retained. This is fixed now.

Changes since 1.3.0~beta1

  • The ["CC/pkgconfig", "system_library"] rule now propagates
    ENV correctly, fixing the build on systems where the default
    paths pulled in by env do not contain cat.
  • In case of a build failure, the description of the failing action
    in the error message is now more verbose, including the environment.
  • Various minor fixes in the documentation.

Release 1.3.0~beta1

02 May 13:11
Compare
Choose a tag to compare
Release 1.3.0~beta1 Pre-release
Pre-release

The first beta release for the upcoming 1.3.0 release.

Release 1.3.0 will be a feature release on top of 1.2.0, backwards compatible.

Major new features

  • New subcommand just serve to start a target-level caching service,
    as described in the corresponding design document.
  • just-mr is able to back up and retrieve distribution files
    from a remote execution endpoint. This simplifies usage in an
    environment with restricted internet access.
  • just execute now supports blob splitting as new RPC call.
    just install uses this call to reduce traffic if the remote-execution
    endpoint supports blob splitting and the --remember option is given.
    In this way, traffic from the remote-execution endpoint can be reduced
    when subsequently installing artifacts with only small local
    differences.

Other changes

  • New script just-deduplicate-repos to avoid blow up of the
    repos.json in the case of chained imports with common dependencies.
  • New subcommand add-to-cas to add files and directories to the local
    CAS and optionally also copy them to the remote-execution endpoint.
  • The built-in "generic" rule now supports an argument "sh -c",
    allowing to specify the invocation of the shell (defaulting to
    ["sh", "-c"]).
  • just describe also shows the values of the implicit dependencies.
  • just-mr supports a new form of root, called "foreign file".
  • When just-mr executes the action to generate the desired tree of a
    "git tree" repository, it can be specified that certain variables
    of the environment can be inherited.
  • The just-mr rc file now supports a field "rc files" to include
    other rc files given by location objects; in particular, it is
    possible to include rc files committed to the workspace.
  • Support for fetching archives from FTP and TFTP was added to just-mr
    if it was built with bundled curl. For package builds, libcurl has
    enabled whatever the distro considers suitable.
  • The gc subcommand supports an option --no-rotate to carry out
    only local clean up.
  • The expression language has been extended and, in particular,
    allows indexed access to an arry (basically using it as a tuple)
    and a generic form of assertion (to report user errors).
  • The analyse subcommand supports a new flag --dump-result to dump
    the analysis result to a file or stdout (if - is given).

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Garbage collection now honors the dependencies of target-level
    caches entries on one another. When upgrading in place, this only
    applies for target-level cache entries written initially after
    the upgrade.
  • The taintedness of "configure" targets is now propagated
    correctly in analysis.
  • It is no longer incorrectly assumed that every git URL not
    starting with ssh://, http://, nor https:// is a file on the
    local disk. Now, only URLs starting with /, ./, or file://
    are considered file URLs. File URLs, as well as URLs starting
    with git://, http://, or https://, are handled by just-mr
    using libgit2; for every other URL, just-mr shells out to
    git for fetching and the URL is passed to git unchanged.
  • Improved portability and update of the bundled dependencies.
  • Various minor improvements and typo fixes in the documentation.
  • Fixed a race condition in the task queue that could cause (with
    probability roughly 1e-5) a premature termination of the queue
    resulting in spurious analysis failures without explanation (despite
    "failed to analyse target").
  • Fixed a race condition in an internal cache of just execute
    used for keeping track of running operations.
  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.
  • The format for target-cache shards was changed to a canonical form.
    The new and old formats do not overlap, therefore the correctness
    of the builds is not affected. In particular, no special care has
    to be taken on upgrading or downgrading. However, some target-level
    cache entries will not be used leading potentially to rebuilding of
    some targets.
  • The expression "disjoint_map_union" did not verify disjointness
    in all cases; this is fixed now.
  • The command line option "--remote-execution-property" can be
    repeated multiple times to list all the properties, but only the
    last one was retained. This is fixed now.

Release 1.2.5

10 Apr 16:27
Compare
Choose a tag to compare

Bug fixes on top of release 1.2.4.

Fixes

  • On errors reading expressions, the full import path is reported
    in the error message.
  • Child processes are now properly waited for in all circumstances.
  • Bootstrapping is now also supported if the build directory resides
    in the source tree.
  • just-mr now reports the name of the build tool correctly, even
    if not called just.
  • Taintedness of "configure" targets is now propagated correctly.
  • Missing atomic primitives added to the source code.
  • A staging conflict in the test setup was fixed.
  • The expression "disjoint_map_union" did not verify disjointness
    in all cases; this is fixed now.
  • The command line option "--remote-execution-property" can be
    repeated multiple times to list all the properties, but only the
    last one was retained. This is fixed now.

Release notes for 1.2.4 (2023-12-19)

Bug fixes on top of release 1.2.3.

Fixes

  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.

Release notes for 1.2.3 (2023-11-15)

Bug fixes on top of release 1.2.2.

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Fixed a race condition in an internal cache of just execute used for keeping
    track of running operations.
  • Also symlinks are properly unlinked before installing on that
    location.

Release notes for 1.2.2 (2023-10-17)

Bug fixes on top of release 1.2.1.

Fixes

  • Proper handling of fetch errors in just-mr
  • Portability improvements: bootstrapping with -Wno-pedantic,
    case-insensitive naming, fixed version ranges in conditionals

Release notes for 1.2.1 (2023-08-29)

Bug fixes on top of release 1.2.0.

Fixes

  • Portability improvements to support a wider range of
    system dependencies.
  • Portability improvement of the bundled absl version.
  • Typos in man pages fixed.

Release notes for 1.2.0 (2023-08-25)

A feature release on top of 1.1.0, backwards compatible.

Major new features

  • Actions can now define additional execution properties and in
    that way chose a specific remote execution image, as well as a
    factor to scale the time out. This also applies to the built-in
    generic rule. Additionally, the remote-execution endpoint can
    be dispatched based on the remote-execution properties using
    the --endpoint-configuration argument.
  • Relative non-upwards symbolic links are now treated as first-class
    objects. This introduces a new artifact type and allows the free use
    of such symbolic links throughout the build process.
  • just-mr can now optionally resolve symlinks contained in archives.

Other changes

  • just-import-git now supports an option --plain to import a
    repository without dependencies.
  • Minor changes to the layout of the local build root; in particular,
    left-over execution directories, as well as left-over temporary
    directories of just-mr, will eventually get cleaned up by
    garbage collection.
  • just-mr now supports unpacking tar archives compressed with
    bzip2, xz, lzip, and lzma.
  • The option -P of build and install-cas can be used to
    inspect parts of a tree.
  • just-mr now supports unpacking 7zip archives (with default
    compression) when provided as "zip" type repositories.
  • The configuration variable COMPILER_FAMILY is replaced by the more
    flexible TOOLCHAIN_CONFIG, an object which may contain the field
    FAMILY. From now on, this object is used to set the compiler family
    (e.g., for GNU, set {"TOOLCHAIN_CONFIG":{"FAMILY":"gnu"}}).

Fixes

  • Removed potential uses of malloc between fork and exec.
    This removes the risk of deadlocks on certain combinations of
    C++ standard library and libc.
  • The link flags for the final linking now can be set via the
    configuration variable FINAL_LDFLAGS; in particular, the stack
    size can easily be adapted. The default stack size is now set to
    8M, removing an overflow on systems where the default stack size
    was significantly lower.
  • The man pages are now provided as markdown files, allowing to
    potentially reduce the build dependencies to more standard ones.
  • just-mr now correctly performs a forced add in order to stage
    all entries in a Git repository. Previously it was possible for
    entries to be skipped inadvertently in, e.g., imported archives
    if gitignore files were present.
  • Temporary files generated by just execute are now created inside
    the local build root.
  • just install-cas now correctly handles --raw-tree also for
    remote-execution endpoints.
  • just install-cas now, like just install, removes an existing
    destination file before installing instead of overwriting.
  • Only actions with exit code 0 that generated all required outputs
    are taken from cache, instead of all actions with exit code 0.
    This only affects remote execution, as purely local build didn't
    cache actions with incomplete outputs.

Release 1.2.4

19 Dec 11:59
Compare
Choose a tag to compare

Bug fixes on top of release 1.2.3.

Fixes

  • The built-in rule "install" now properly enforces that the
    resulting stage is well-formed, i.e., without tree conflicts.
  • Local execution and just execute now correctly create empty
    directories if they are part of the action's input.
  • Fixed overwrite of existing symlinks in the output directory
    when using subcommands install and install-cas.

Release notes for 1.2.3 (2023-11-15)

Bug fixes on top of release 1.2.2.

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Fixed a race condition in an internal cache of just execute used for keeping
    track of running operations.
  • Also symlinks are properly unlinked before installing on that
    location.

Release notes for 1.2.2 (2023-10-17)

Bug fixes on top of release 1.2.1.

Fixes

  • Proper handling of fetch errors in just-mr
  • Portability improvements: bootstrapping with -Wno-pedantic,
    case-insensitive naming, fixed version ranges in conditionals

Release notes for 1.2.1 (2023-08-29)

Bug fixes on top of release 1.2.0.

Fixes

  • Portability improvements to support a wider range of
    system dependencies.
  • Portability improvement of the bundled absl version.
  • Typos in man pages fixed.

Release notes for 1.2.0 (2023-08-25)

A feature release on top of 1.1.0, backwards compatible.

Major new features

  • Actions can now define additional execution properties and in
    that way chose a specific remote execution image, as well as a
    factor to scale the time out. This also applies to the built-in
    generic rule. Additionally, the remote-execution endpoint can
    be dispatched based on the remote-execution properties using
    the --endpoint-configuration argument.
  • Relative non-upwards symbolic links are now treated as first-class
    objects. This introduces a new artifact type and allows the free use
    of such symbolic links throughout the build process.
  • just-mr can now optionally resolve symlinks contained in archives.

Other changes

  • just-import-git now supports an option --plain to import a
    repository without dependencies.
  • Minor changes to the layout of the local build root; in particular,
    left-over execution directories, as well as left-over temporary
    directories of just-mr, will eventually get cleaned up by
    garbage collection.
  • just-mr now supports unpacking tar archives compressed with
    bzip2, xz, lzip, and lzma.
  • The option -P of build and install-cas can be used to
    inspect parts of a tree.
  • just-mr now supports unpacking 7zip archives (with default
    compression) when provided as "zip" type repositories.
  • The configuration variable COMPILER_FAMILY is replaced by the more
    flexible TOOLCHAIN_CONFIG, an object which may contain the field
    FAMILY. From now on, this object is used to set the compiler family
    (e.g., for GNU, set {"TOOLCHAIN_CONFIG":{"FAMILY":"gnu"}}).

Fixes

  • Removed potential uses of malloc between fork and exec.
    This removes the risk of deadlocks on certain combinations of
    C++ standard library and libc.
  • The link flags for the final linking now can be set via the
    configuration variable FINAL_LDFLAGS; in particular, the stack
    size can easily be adapted. The default stack size is now set to
    8M, removing an overflow on systems where the default stack size
    was significantly lower.
  • The man pages are now provided as markdown files, allowing to
    potentially reduce the build dependencies to more standard ones.
  • just-mr now correctly performs a forced add in order to stage
    all entries in a Git repository. Previously it was possible for
    entries to be skipped inadvertently in, e.g., imported archives
    if gitignore files were present.
  • Temporary files generated by just execute are now created inside
    the local build root.
  • just install-cas now correctly handles --raw-tree also for
    remote-execution endpoints.
  • just install-cas now, like just install, removes an existing
    destination file before installing instead of overwriting.
  • Only actions with exit code 0 that generated all required outputs
    are taken from cache, instead of all actions with exit code 0.
    This only affects remote execution, as purely local build didn't
    cache actions with incomplete outputs.

Release 1.2.3

15 Nov 13:49
Compare
Choose a tag to compare

Bug fixes on top of release 1.2.2.

Fixes

  • The cache key used for an export target is now based on the
    export target itself rather than that of the exported target. The
    latter could lead to spurious cache hits, but only in the case
    where the exported target was an explicit file reference, and a
    regular target with the same name existed as well. Where the new
    cache keys would overlap with the old ones, they would refer to
    the same configured targets. However, we used the fact that we
    changed the target cache key to also clean up the serialization
    format to only contain the JSON object describing repository,
    target, and effective configuration, instead of a singleton list
    containing this object. Therefore, old and new cache keys do not
    overlap at all. In particular, no special care has to be taken
    on upgrading or downgrading. However, old target-level cache
    entries will not be used leading potentially to rebuilding of
    some targets.
  • Fixed a race condition in an internal cache of just execute used for keeping
    track of running operations.
  • Also symlinks are properly unlinked before installing on that
    location.

Release notes for 1.2.2 (2023-10-17)

Bug fixes on top of release 1.2.1.

Fixes

  • Proper handling of fetch errors in just-mr
  • Portability improvements: bootstrapping with -Wno-pedantic,
    case-insensitive naming, fixed version ranges in conditionals

Release notes for 1.2.1 (2023-08-29)

Bug fixes on top of release 1.2.0.

Fixes

  • Portability improvements to support a wider range of
    system dependencies.
  • Portability improvement of the bundled absl version.
  • Typos in man pages fixed.

Release notes for 1.2.0 (2023-08-25)

A feature release on top of 1.1.0, backwards compatible.

Major new features

  • Actions can now define additional execution properties and in
    that way chose a specific remote execution image, as well as a
    factor to scale the time out. This also applies to the built-in
    generic rule. Additionally, the remote-execution endpoint can
    be dispatched based on the remote-execution properties using
    the --endpoint-configuration argument.
  • Relative non-upwards symbolic links are now treated as first-class
    objects. This introduces a new artifact type and allows the free use
    of such symbolic links throughout the build process.
  • just-mr can now optionally resolve symlinks contained in archives.

Other changes

  • just-import-git now supports an option --plain to import a
    repository without dependencies.
  • Minor changes to the layout of the local build root; in particular,
    left-over execution directories, as well as left-over temporary
    directories of just-mr, will eventually get cleaned up by
    garbage collection.
  • just-mr now supports unpacking tar archives compressed with
    bzip2, xz, lzip, and lzma.
  • The option -P of build and install-cas can be used to
    inspect parts of a tree.
  • just-mr now supports unpacking 7zip archives (with default
    compression) when provided as "zip" type repositories.
  • The configuration variable COMPILER_FAMILY is replaced by the more
    flexible TOOLCHAIN_CONFIG, an object which may contain the field
    FAMILY. From now on, this object is used to set the compiler family
    (e.g., for GNU, set {"TOOLCHAIN_CONFIG":{"FAMILY":"gnu"}}).

Fixes

  • Removed potential uses of malloc between fork and exec.
    This removes the risk of deadlocks on certain combinations of
    C++ standard library and libc.
  • The link flags for the final linking now can be set via the
    configuration variable FINAL_LDFLAGS; in particular, the stack
    size can easily be adapted. The default stack size is now set to
    8M, removing an overflow on systems where the default stack size
    was significantly lower.
  • The man pages are now provided as markdown files, allowing to
    potentially reduce the build dependencies to more standard ones.
  • just-mr now correctly performs a forced add in order to stage
    all entries in a Git repository. Previously it was possible for
    entries to be skipped inadvertently in, e.g., imported archives
    if gitignore files were present.
  • Temporary files generated by just execute are now created inside
    the local build root.
  • just install-cas now correctly handles --raw-tree also for
    remote-execution endpoints.
  • just install-cas now, like just install, removes an existing
    destination file before installing instead of overwriting.
  • Only actions with exit code 0 that generated all required outputs
    are taken from cache, instead of all actions with exit code 0.
    This only affects remote execution, as purely local build didn't
    cache actions with incomplete outputs.