Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions external/extension.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,14 @@ version. The first time the extension is evaluated, it can fetch this mapping
from the network, but on later evaluations it can use the mapping from `facts`
to avoid the network requests.

If you need to make a backwards-incompatible change to the schema of the values
your extension stores in `facts`, set the
[`facts_version`](/rules/lib/globals/bzl#module_extension.facts_version)
parameter on `module_extension` to a higher integer than its previous value.
Bazel persists `facts_version` in the lockfile alongside the facts and discards
any persisted facts when the recorded version differs from the current one,
making sure your extension only ever observes facts produced by the same schema.

### Specify dependence on operating system and architecture

If your extension relies on the operating system or its architecture type,
Expand Down
3 changes: 2 additions & 1 deletion rules/lib/globals/bzl.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Materializer targets are used to dynamically select dependencies at analysis tim
## module_extension

```
unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)
unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False, facts_version=0)
```

Creates a new module extension. Store it in a global value, so that it can be exported and used in a MODULE.bazel file with `use_extension`.
Expand All @@ -217,6 +217,7 @@ Creates a new module extension. Store it in a global value, so that it can be ex
| `environ` | [sequence](../core/list) of [string](../core/string)s; default is `[]` **Deprecated**. This parameter has been deprecated. Migrate to `module_ctx.getenv` instead. Provides a list of environment variable that this module extension depends on. If an environment variable in that list changes, the extension will be re-evaluated. See also `--experimental_strict_repo_env`. |
| `os_dependent` | [bool](../core/bool); default is `False` Indicates whether this extension is OS-dependent or not |
| `arch_dependent` | [bool](../core/bool); default is `False` Indicates whether this extension is architecture-dependent or not |
| `facts_version` | [int](../core/int); default is `0` The schema version of the `facts` dict returned by this extension's implementation function via `extension_metadata`. The version is persisted in the lockfile alongside the facts and compared against the current value before the extension runs: if they differ, the persisted facts are discarded and the extension is invoked with an empty `module_ctx.facts`. Increment this value whenever the extension changes the schema of the facts in a backwards-incompatible way so that older facts are not interpreted with the new schema. |

## provider

Expand Down
2 changes: 1 addition & 1 deletion upstream
Submodule upstream updated 77 files
+2 −0 .bazelci/postsubmit.yml
+2 −0 .bazelci/presubmit.yml
+11 −4 MODULE.bazel
+15 −2 MODULE.bazel.lock
+8 −0 docs/external/extension.mdx
+30 −4 scripts/bazel-lockfile-merge.jq
+70 −4 scripts/bazel_lockfile_merge_test.sh
+8 −0 site/en/external/extension.md
+3 −5 src/main/java/com/google/devtools/build/lib/analysis/ActionsProvider.java
+5 −0 src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+13 −10 src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
+8 −0 src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+3 −7 src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java
+44 −17 src/main/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapper.java
+1 −0 src/main/java/com/google/devtools/build/lib/analysis/config/BUILD
+2 −1 src/main/java/com/google/devtools/build/lib/analysis/config/CommonOptions.java
+2 −7 src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+3 −13 src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java
+47 −43 src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
+15 −0 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java
+23 −2 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileValue.java
+5 −0 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/InnateRunnableExtension.java
+4 −1 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtension.java
+5 −0 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/RegularRunnableExtension.java
+7 −0 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/RunnableExtension.java
+21 −6 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java
+2 −1 src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionValue.java
+3 −0 src/main/java/com/google/devtools/build/lib/bazel/repository/decompressor/PatchUtil.java
+25 −8 src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/DownloadManager.java
+4 −4 src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java
+7 −0 src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
+5 −2 src/main/java/com/google/devtools/build/lib/exec/SpawnInputExpander.java
+0 −9 src/main/java/com/google/devtools/build/lib/packages/Info.java
+0 −19 src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java
+6 −0 src/main/java/com/google/devtools/build/lib/packages/RuleClassProvider.java
+3 −17 src/main/java/com/google/devtools/build/lib/packages/StarlarkInfo.java
+9 −16 src/main/java/com/google/devtools/build/lib/packages/StarlarkInfoNoSchema.java
+3 −7 src/main/java/com/google/devtools/build/lib/packages/StarlarkInfoWithMessage.java
+437 −61 src/main/java/com/google/devtools/build/lib/packages/StarlarkInfoWithSchema.java
+4 −5 src/main/java/com/google/devtools/build/lib/packages/StarlarkProvider.java
+2 −3 src/main/java/com/google/devtools/build/lib/packages/StructProvider.java
+4 −0 src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
+1 −2 src/main/java/com/google/devtools/build/lib/rules/apple/ApplePlatform.java
+1 −4 src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesLib.java
+1 −0 src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+1 −0 src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
+18 −3 src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
+2 −0 src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+3 −1 src/main/java/com/google/devtools/build/lib/skyframe/SkyValueRetrieverUtils.java
+10 −110 src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetriever.java
+25 −11 src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/FrontierSerializer.java
+12 −1 src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCacheDeps.java
+2 −1 src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCacheFactory.java
+3 −0 ...va/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCacheReaderDepsProvider.java
+2 −0 ...om/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingDependenciesProvider.java
+2 −5 src/main/java/com/google/devtools/build/lib/starlarkbuildapi/TemplateVariableInfoApi.java
+1 −4 src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/StructApi.java
+2 −5 src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform/ToolchainInfoApi.java
+20 −1 src/main/java/com/google/devtools/build/lib/starlarkbuildapi/repository/RepositoryModuleApi.java
+76 −0 src/test/java/com/google/devtools/build/lib/analysis/actions/PathMappersTest.java
+4 −8 src/test/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfoTest.java
+8 −10 src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
+2 −1 src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java
+24 −0 src/test/java/com/google/devtools/build/lib/bazel/repository/decompressor/PatchUtilTest.java
+115 −0 src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpDownloaderTest.java
+9 −14 src/test/java/com/google/devtools/build/lib/packages/StarlarkInfoTest.java
+0 −3 src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
+3 −7 src/test/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+0 −1 src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoCodecTest.java
+3 −0 src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+47 −0 src/test/java/com/google/devtools/build/lib/skyframe/serialization/CoreOptionsSerializationTest.java
+58 −420 src/test/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetrieverTest.java
+2 −2 src/test/java/com/google/devtools/build/lib/skyframe/serialization/StarlarkInfoCodecTest.java
+1 −3 src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java
+133 −0 src/test/py/bazel/bzlmod/bazel_lockfile_test.py
+192 −0 src/test/shell/bazel/path_mapping_test.sh
+1 −1 src/test/tools/bzlmod/MODULE.bazel.lock