[Scons-users] Detecting changed targets
Mark Terrel
mark at unbounded.systems
Wed Jan 11 12:10:53 EST 2017
Hi SCons folks,
Now that the holidays are over, I was hoping someone might give me feedback
on my proposal. Any thoughts?
Thanks,
Mark
On Wed, Dec 28, 2016 at 3:01 PM, Mark Terrel <mark at unbounded.systems> wrote:
> Hi SCons gurus!
>
> I've been a user of SCons since 2010 (at a previous company) and am using
> it for a new project at a new company now. We're doing all builds and
> development in containers, so I've created a SCons builder to build Docker
> images. (I'm happy to share that once it's had more testing.) That's
> working great so far, except for one issue that I'd like to solve.
>
> The issue stems from the fact that Docker images are not stored in the
> filesystem; they're stored in a common object store repository and are
> tagged with a name. So while a typical user of SCons has a reasonable
> expectation that no one is going to come modify their build output
> directory contents, it now becomes much more likely that Developer A builds
> a Docker image with tag "production_container" and Developer B could build
> a different image and overwrite (actually move the tag)
> "production_container" to point to a different Docker image. This makes it
> harder to ensure correctness of builds because SCons does not currently
> rebuild a target if the signature of the target changes.
>
> I found this exchange
> <http://scons-users.scons.narkive.com/7BJnwEox/corrupted-objects-are-not-rebuilt-as-one-might-expect>
> on the scons-users list from ages ago, where Steven Knight suggested a new
> ValidateTargets option that would detect if a target was changed (or had
> been corrupted) unbeknownst to SCons and would then rebuild that target.
> So I took a shot at implementing that feature and would love some feedback
> on whether this is a good approach and whether, after it meets the dev
> team's approval, you might be willing to incorporate it.
>
> This commit
> <https://bitbucket.org/mterrel/scons/commits/1b0c0f22d13596f709b6e3ca64a8f2ef41fd4c11>contains
> the proposed feature as a proof of concept. It has two new user-facing
> functions:
>
> *ValidateTargets('none' | 'content')*
>
> Sets the global default behavior for all target nodes.
> 'none' is the default and is the same as SCons' current behavior, which is
> to not check the signatures for nodes that are only targets.
>
> 'content' uses the existing content signatures to check whether a target
> node has been modified outside of SCons' knowledge.
>
> *env.ValidateTarget(target_list, 'none' | 'content')*
>
> Sets the validation behavior for specific node(s), overriding the global
> default behavior for those nodes. Options 'none' and 'content' behave the
> same as above.
>
>
> I think this new behavior contributes toward one of SCons' goals of
> correctness of builds. I think it would also be particularly useful for
> other kinds of targets that might be in shared storage, such as AWS S3 or
> other object storage. Those types of output storage are becoming more and
> more common as developers start distributing and testing builds across
> cloud environments.
>
> So please take a look at the proposal and give me any feedback or ideas
> and let me know if this is something I should try to move forward on.
>
> Thanks!
> Mark
>
> P.S. I tested this on top of 2.5.1 and am running regression tests now on
> tip.
>
> --
> Mark Terrel | *Unbounded Systems*
>
--
Mark Terrel | *Unbounded Systems*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20170111/4743dc1f/attachment.html>
More information about the Scons-users
mailing list