Merge "Generate build_number.txt only once" into main
This commit is contained in:
commit
b7dbc85485
3 changed files with 41 additions and 23 deletions
|
@ -15,11 +15,13 @@
|
||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sync"
|
"sync"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
"time"
|
||||||
|
|
||||||
"android/soong/ui/metrics"
|
"android/soong/ui/metrics"
|
||||||
)
|
)
|
||||||
|
@ -56,6 +58,31 @@ func SetupOutDir(ctx Context, config Config) {
|
||||||
} else {
|
} else {
|
||||||
ctx.Fatalln("Missing BUILD_DATETIME_FILE")
|
ctx.Fatalln("Missing BUILD_DATETIME_FILE")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BUILD_NUMBER should be set to the source control value that
|
||||||
|
// represents the current state of the source code. E.g., a
|
||||||
|
// perforce changelist number or a git hash. Can be an arbitrary string
|
||||||
|
// (to allow for source control that uses something other than numbers),
|
||||||
|
// but must be a single word and a valid file name.
|
||||||
|
//
|
||||||
|
// If no BUILD_NUMBER is set, create a useful "I am an engineering build
|
||||||
|
// from this date/time" value. Make it start with a non-digit so that
|
||||||
|
// anyone trying to parse it as an integer will probably get "0".
|
||||||
|
buildNumber, ok := config.environ.Get("BUILD_NUMBER")
|
||||||
|
if ok {
|
||||||
|
writeValueIfChanged(ctx, config, config.OutDir(), "file_name_tag.txt", buildNumber)
|
||||||
|
} else {
|
||||||
|
var username string
|
||||||
|
if username, ok = config.environ.Get("BUILD_USERNAME"); !ok {
|
||||||
|
ctx.Fatalln("Missing BUILD_USERNAME")
|
||||||
|
}
|
||||||
|
buildNumber = fmt.Sprintf("eng.%.6s.%s", username, time.Now().Format("20060102.150405" /* YYYYMMDD.HHMMSS */))
|
||||||
|
writeValueIfChanged(ctx, config, config.OutDir(), "file_name_tag.txt", username)
|
||||||
|
}
|
||||||
|
// Write the build number to a file so it can be read back in
|
||||||
|
// without changing the command line every time. Avoids rebuilds
|
||||||
|
// when using ninja.
|
||||||
|
writeValueIfChanged(ctx, config, config.SoongOutDir(), "build_number.txt", buildNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
var combinedBuildNinjaTemplate = template.Must(template.New("combined").Parse(`
|
var combinedBuildNinjaTemplate = template.Must(template.New("combined").Parse(`
|
||||||
|
|
|
@ -22,6 +22,7 @@ import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -455,6 +456,16 @@ func NewConfig(ctx Context, args ...string) Config {
|
||||||
|
|
||||||
ret.environ.Set("BUILD_DATETIME_FILE", buildDateTimeFile)
|
ret.environ.Set("BUILD_DATETIME_FILE", buildDateTimeFile)
|
||||||
|
|
||||||
|
if _, ok := ret.environ.Get("BUILD_USERNAME"); !ok {
|
||||||
|
username := "unknown"
|
||||||
|
if u, err := user.Current(); err == nil {
|
||||||
|
username = u.Username
|
||||||
|
} else {
|
||||||
|
ctx.Println("Failed to get current user:", err)
|
||||||
|
}
|
||||||
|
ret.environ.Set("BUILD_USERNAME", username)
|
||||||
|
}
|
||||||
|
|
||||||
if ret.UseRBE() {
|
if ret.UseRBE() {
|
||||||
for k, v := range getRBEVars(ctx, Config{ret}) {
|
for k, v := range getRBEVars(ctx, Config{ret}) {
|
||||||
ret.environ.Set(k, v)
|
ret.environ.Set(k, v)
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"android/soong/ui/metrics"
|
||||||
|
"android/soong/ui/status"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -22,10 +24,6 @@ import (
|
||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"android/soong/ui/metrics"
|
|
||||||
"android/soong/ui/status"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var spaceSlashReplacer = strings.NewReplacer("/", "_", " ", "_")
|
var spaceSlashReplacer = strings.NewReplacer("/", "_", " ", "_")
|
||||||
|
@ -198,32 +196,14 @@ func runKati(ctx Context, config Config, extraSuffix string, args []string, envF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writeValueIfChanged(ctx, config, config.SoongOutDir(), "build_hostname.txt", hostname)
|
writeValueIfChanged(ctx, config, config.SoongOutDir(), "build_hostname.txt", hostname)
|
||||||
|
_, ok = cmd.Environment.Get("BUILD_NUMBER")
|
||||||
// BUILD_NUMBER should be set to the source control value that
|
|
||||||
// represents the current state of the source code. E.g., a
|
|
||||||
// perforce changelist number or a git hash. Can be an arbitrary string
|
|
||||||
// (to allow for source control that uses something other than numbers),
|
|
||||||
// but must be a single word and a valid file name.
|
|
||||||
//
|
|
||||||
// If no BUILD_NUMBER is set, create a useful "I am an engineering build
|
|
||||||
// from this date/time" value. Make it start with a non-digit so that
|
|
||||||
// anyone trying to parse it as an integer will probably get "0".
|
|
||||||
cmd.Environment.Unset("HAS_BUILD_NUMBER")
|
|
||||||
buildNumber, ok := cmd.Environment.Get("BUILD_NUMBER")
|
|
||||||
// Unset BUILD_NUMBER during kati run to avoid kati rerun, kati will use BUILD_NUMBER from a file.
|
// Unset BUILD_NUMBER during kati run to avoid kati rerun, kati will use BUILD_NUMBER from a file.
|
||||||
cmd.Environment.Unset("BUILD_NUMBER")
|
cmd.Environment.Unset("BUILD_NUMBER")
|
||||||
if ok {
|
if ok {
|
||||||
cmd.Environment.Set("HAS_BUILD_NUMBER", "true")
|
cmd.Environment.Set("HAS_BUILD_NUMBER", "true")
|
||||||
writeValueIfChanged(ctx, config, config.OutDir(), "file_name_tag.txt", buildNumber)
|
|
||||||
} else {
|
} else {
|
||||||
buildNumber = fmt.Sprintf("eng.%.6s.%s", username, time.Now().Format("20060102.150405" /* YYYYMMDD.HHMMSS */))
|
|
||||||
cmd.Environment.Set("HAS_BUILD_NUMBER", "false")
|
cmd.Environment.Set("HAS_BUILD_NUMBER", "false")
|
||||||
writeValueIfChanged(ctx, config, config.OutDir(), "file_name_tag.txt", username)
|
|
||||||
}
|
}
|
||||||
// Write the build number to a file so it can be read back in
|
|
||||||
// without changing the command line every time. Avoids rebuilds
|
|
||||||
// when using ninja.
|
|
||||||
writeValueIfChanged(ctx, config, config.SoongOutDir(), "build_number.txt", buildNumber)
|
|
||||||
|
|
||||||
// Apply the caller's function closure to mutate the environment variables.
|
// Apply the caller's function closure to mutate the environment variables.
|
||||||
envFunc(cmd.Environment)
|
envFunc(cmd.Environment)
|
||||||
|
|
Loading…
Reference in a new issue