Copy the out/soong/build_number.txt file into sdk snapshots

This change adds the build_number.txt file into the sdk snapshot to
make it easier to debug issues arising in partner builds caused by the
snapshots.

The file is added to the root of the snapshot and is called:
    snapshot-creation-build-number.txt

Bug: 201295663
Test: m nothing
      packages/modules/common/build/mainline_modules_sdks.sh
      # Check the contents of various snapshots.
Change-Id: Ib3ac0cea5c9315cad0b9a3c25d88759097e37163
This commit is contained in:
Paul Duffin
2022-04-06 12:48:09 +00:00
parent c7bb9d47d6
commit 51509a156b
2 changed files with 28 additions and 2 deletions

View File

@@ -25,6 +25,8 @@ import (
"android/soong/cc"
"android/soong/genrule"
"android/soong/java"
"github.com/google/blueprint/proptools"
)
// Prepare for running an sdk test with an apex.
@@ -81,6 +83,11 @@ var prepareForSdkTest = android.GroupFixturePreparers(
}
}),
// Add a build number file.
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
variables.BuildNumberFile = proptools.StringPtr(BUILD_NUMBER_FILE)
}),
// Make sure that every test provides all the source files.
android.PrepareForTestDisallowNonExistentPaths,
android.MockFS{
@@ -143,6 +150,8 @@ func getSdkSnapshotBuildInfo(t *testing.T, result *android.TestResult, sdk *sdk)
copyRules := &strings.Builder{}
otherCopyRules := &strings.Builder{}
snapshotDirPrefix := sdk.builderForTests.snapshotDir.String() + "/"
seenBuildNumberFile := false
for _, bp := range buildParams {
switch bp.Rule.String() {
case android.Cp.String():
@@ -152,8 +161,14 @@ func getSdkSnapshotBuildInfo(t *testing.T, result *android.TestResult, sdk *sdk)
src := android.NormalizePathForTesting(bp.Input)
// We differentiate between copy rules for the snapshot, and copy rules for the install file.
if strings.HasPrefix(output.String(), snapshotDirPrefix) {
// Get source relative to build directory.
_, _ = fmt.Fprintf(copyRules, "%s -> %s\n", src, dest)
// Don't include the build-number.txt file in the copy rules as that would break lots of
// tests, just verify that it is copied here as it should appear in every snapshot.
if output.Base() == BUILD_NUMBER_FILE {
seenBuildNumberFile = true
} else {
// Get source relative to build directory.
_, _ = fmt.Fprintf(copyRules, "%s -> %s\n", src, dest)
}
info.snapshotContents = append(info.snapshotContents, dest)
} else {
_, _ = fmt.Fprintf(otherCopyRules, "%s -> %s\n", src, dest)
@@ -189,6 +204,10 @@ func getSdkSnapshotBuildInfo(t *testing.T, result *android.TestResult, sdk *sdk)
}
}
if !seenBuildNumberFile {
panic(fmt.Sprintf("Every snapshot must include the %s file", BUILD_NUMBER_FILE))
}
info.copyRules = copyRules.String()
info.otherCopyRules = otherCopyRules.String()

View File

@@ -281,6 +281,10 @@ func appendUniqueVariants(variants []android.SdkAware, newVariant android.SdkAwa
return append(variants, newVariant)
}
// BUILD_NUMBER_FILE is the name of the file in the snapshot zip that will contain the number of
// the build from which the snapshot was produced.
const BUILD_NUMBER_FILE = "snapshot-creation-build-number.txt"
// SDK directory structure
// <sdk_root>/
// Android.bp : definition of a 'sdk' module is here. This is a hand-made one.
@@ -479,6 +483,9 @@ be unnecessary as every module in the sdk already has its own licenses property.
bp.build(pctx, ctx, nil)
// Copy the build number file into the snapshot.
builder.CopyToSnapshot(ctx.Config().BuildNumberFile(ctx), BUILD_NUMBER_FILE)
filesToZip := builder.filesToZip
// zip them all