func buildFn()

in cmd/java/gradle/main.go [63:115]


func buildFn(ctx *gcp.Context) error {
	gradleCachedRepo, err := ctx.Layer(cacheLayer, gcp.CacheLayer, gcp.LaunchLayerIfDevMode)
	if err != nil {
		return fmt.Errorf("creating %v layer: %w", cacheLayer, err)
	}

	if err := java.CheckCacheExpiration(ctx, gradleCachedRepo); err != nil {
		return fmt.Errorf("validating the cache: %w", err)
	}

	homeGradle := filepath.Join(ctx.HomeDir(), ".gradle")
	// Symlink the gradle-cache layer into ~/.gradle. If ~/.gradle already exists, delete it first.
	// If it exists as a symlink, RemoveAll will remove the link, not anything it's linked to.
	if err := ctx.RemoveAll(homeGradle); err != nil {
		return err
	}
	if err := ctx.Symlink(gradleCachedRepo.Path, homeGradle); err != nil {
		return err
	}

	gradle, err := provisionOrDetectGradle(ctx)
	if err != nil {
		return err
	}

	command := []string{gradle, "clean", "assemble", "-x", "test", "--build-cache"}

	if buildArgs := os.Getenv(env.BuildArgs); buildArgs != "" {
		if strings.Contains(buildArgs, "project-cache-dir") {
			ctx.Warnf("Detected project-cache-dir property set in GOOGLE_BUILD_ARGS. Dependency caching may not work properly.")
		}
		command = append(command, buildArgs)
	}

	if gradleBuildArgs := os.Getenv(java.GradleBuildArgs); gradleBuildArgs != "" {
		command = append([]string{gradle}, strings.Fields(gradleBuildArgs)...)
	}

	if !ctx.Debug() && !devmode.Enabled(ctx) {
		command = append(command, "--quiet")
	}

	if _, err := ctx.Exec(command, gcp.WithUserAttribution); err != nil {
		return err
	}

	// Store the build steps in a script to be run on each file change.
	if devmode.Enabled(ctx) {
		devmode.WriteBuildScript(ctx, gradleCachedRepo.Path, "~/.gradle", command)
	}

	return nil
}