Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Experiments supported only in alpha/dev builds #30948

Merged
merged 1 commit into from
Jun 17, 2022

Commits on Jun 17, 2022

  1. Experiments supported only in alpha/dev builds

    We originally introduced the idea of language experiments as a way to get
    early feedback on not-yet-proven feature ideas, ideally as part of the
    initial exploration of the solution space rather than only after a
    solution has become relatively clear.
    
    Unfortunately, our tradeoff of making them available in normal releases
    behind an explicit opt-in in order to make it easier to participate in the
    feedback process had the unintended side-effect of making it feel okay
    to use experiments in production and endure the warnings they generate.
    This in turn has made us reluctant to make use of the experiments feature
    lest experiments become de-facto production features which we then feel
    compelled to preserve even though we aren't yet ready to graduate them
    to stable features.
    
    In an attempt to tweak that compromise, here we make the availability of
    experiments _at all_ a build-time flag which will not be set by default,
    and therefore experiments will not be available in most release builds.
    
    The intent (not yet implemented in this PR) is for our release process to
    set this flag only when it knows it's building an alpha release or a
    development snapshot not destined for release at all, which will therefore
    allow us to still use the alpha releases as a vehicle for giving feedback
    participants access to a feature (without needing to install a Go
    toolchain) but will not encourage pretending that these features are
    production-ready before they graduate from experimental.
    
    Only language experiments have an explicit framework for dealing with them
    which outlives any particular experiment, so most of the changes here are
    to that generalized mechanism. However, the intent is that non-language
    experiments, such as experimental CLI commands, would also in future
    check Meta.AllowExperimentalFeatures and gate the use of those experiments
    too, so that we can be consistent that experimental features will never
    be available unless you explicitly choose to use an alpha release or
    a custom build from source code.
    
    Since there are already some experiments active at the time of this commit
    which were not previously subject to this restriction, we'll pragmatically
    leave those as exceptions that will remain generally available for now,
    and so this new approach will apply only to new experiments started in the
    future. Once those experiments have all concluded, we will be left with
    no more exceptions unless we explicitly choose to make an exception for
    some reason we've not imagined yet.
    
    It's important that we be able to write tests that rely on experiments
    either being available or not being available, so here we're using our
    typical approach of making "package main" deal with the global setting
    that applies to Terraform CLI executables while making the layers below
    all support fine-grain selection of this behavior so that tests with
    different needs can run concurrently without trampling on one another.
    
    As a compromise, the integration tests in the terraform package will
    run with experiments enabled _by default_ since we commonly need to
    exercise experiments in those tests, but they can selectively opt-out
    if they need to by overriding the loader setting back to false again.
    apparentlymart committed Jun 17, 2022
    Configuration menu
    Copy the full SHA
    5f77d9d View commit details
    Browse the repository at this point in the history