GithubHelp home page GithubHelp logo

Comments (1)

JakobDegen avatar JakobDegen commented on April 27, 2024 1

So buck2 mostly does this right. When defining actions, rules can specify some environment variables to set, and buck2 will use this information to decide when to rerun or not rerun an action. Rules can in turn expose this interface to users via an attribute, for example the env attribute in rust_library. This isn't available on all rules, but normally not too hard to add

That being said, in addition to the "tracked" environment that is actually expressed in the build graph, actions also inherit what you might consider a default environment. This part of the environment is not tracked by buck2 and will not result in rebuilds if changed.

When using remote execution, the default environment is fully determined by the backing RE implementation, so you'll have to consult their documentation for what that default environment looks like. #532 was an example of breakage caused by different RE implementations making different decisions here. The local environment on a users machine should never have any effect on the build in this case.

Local execution, on the other hand, is currently un-isolated in buck2. Specifically, the environment that local actions inherit will be the same one that was used to start the daemon. Just like how buck2 does not enforce that you declare all your inputs, it also does not enforce that you don't depend on untracked parts of the environment. The Rust rules try and protect against this by explicitly sanitizing the environment before invoking rustc - that behavior is what #466 is about.

Sanitizing the local environment would be an important part of an implementation of isolated local actions.

from buck2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.