Skip to content

Commit 4dc41fb

Browse files
committed
Create various helper structs and proxies for testing. Update tests.
1 parent bfb8073 commit 4dc41fb

30 files changed

+1711
-1798
lines changed

cmd/activate.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package cmd
22

33
import (
4-
"github.com/spf13/cobra"
4+
"github.com/spf13/cobra"
55
)
66

77
// activateCmd represents the activate command
88
var activateCmd = &cobra.Command{ //nolint:gochecknoglobals
9-
Use: "activate",
10-
Short: "Activate various bitrise plugins",
11-
Long: `Activate Gradle, Bazel, etc. Plugins
9+
Use: "activate",
10+
Short: "Activate various bitrise plugins",
11+
Long: `Activate Gradle, Bazel, etc. plugins
1212
Call the subcommands with the name of the tool you want to activate plugins for.`,
1313
}
1414

1515
func init() {
16-
rootCmd.AddCommand(activateCmd)
16+
rootCmd.AddCommand(activateCmd)
1717
}

cmd/activateForGradle.go

Lines changed: 83 additions & 206 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,20 @@
11
package cmd
22

33
import (
4-
"fmt"
5-
"os"
6-
"os/exec"
7-
"path/filepath"
8-
9-
"github.com/bitrise-io/bitrise-build-cache-cli/internal/config/common"
10-
gradleconfig "github.com/bitrise-io/bitrise-build-cache-cli/internal/config/gradle"
11-
"github.com/bitrise-io/bitrise-build-cache-cli/internal/stringmerge"
12-
"github.com/bitrise-io/go-utils/v2/log"
13-
"github.com/bitrise-io/go-utils/v2/pathutil"
14-
"github.com/spf13/cobra"
15-
)
16-
17-
type CacheParams struct {
18-
Enabled bool
19-
JustDependency bool
20-
PushEnabled bool
21-
ValidationLevel string
22-
Endpoint string
23-
}
24-
25-
type AnalyticsParams struct {
26-
Enabled bool
27-
JustDependency bool
28-
}
29-
30-
type TestDistroParams struct {
31-
Enabled bool
32-
JustDependency bool
33-
}
4+
"fmt"
5+
"os"
346

35-
type ActivateForGradleParams struct {
36-
Cache CacheParams
37-
Analytics AnalyticsParams
38-
TestDistro TestDistroParams
39-
}
40-
41-
//nolint:gochecknoglobals
42-
var activateForGradleParams = DefaultActivateForGradleParams()
43-
44-
func DefaultActivateForGradleParams() ActivateForGradleParams {
45-
return ActivateForGradleParams{
46-
Cache: CacheParams{
47-
Enabled: false,
48-
JustDependency: false,
49-
PushEnabled: false,
50-
ValidationLevel: "warning",
51-
},
52-
Analytics: AnalyticsParams{
53-
Enabled: true,
54-
JustDependency: false,
55-
},
56-
TestDistro: TestDistroParams{
57-
Enabled: false,
58-
JustDependency: false,
59-
},
60-
}
61-
}
7+
gradleconfig "github.com/bitrise-io/bitrise-build-cache-cli/internal/config/gradle"
8+
"github.com/bitrise-io/go-utils/v2/log"
9+
"github.com/bitrise-io/go-utils/v2/pathutil"
10+
"github.com/spf13/cobra"
11+
)
6212

6313
// activateForGradleCmd represents the `gradle` subcommand under `activate`
6414
var activateForGradleCmd = &cobra.Command{ //nolint:gochecknoglobals
65-
Use: "gradle",
66-
Short: "Activate Bitrise Plugins for Gradle",
67-
Long: `Activate Bitrise Plugins for Gradle.
15+
Use: "gradle",
16+
Short: "Activate Bitrise Plugins for Gradle",
17+
Long: `Activate Bitrise Plugins for Gradle.
6818
This command will:
6919
7020
- Create a ~/.gradle/init.d/bitrise-build-cache.init.gradle.kts file with the necessary configs. This file will be overwritten.
@@ -74,155 +24,82 @@ The gradle.properties file will be created if it doesn't exist.
7424
If it already exists a "# [start/end] generated-by-bitrise-build-cache" block will be added to the end of the file.
7525
If the "# [start/end] generated-by-bitrise-build-cache" block is already present in the file then only the block's content will be modified.
7626
`,
77-
SilenceUsage: true,
78-
RunE: func(_ *cobra.Command, _ []string) error {
79-
logger := log.NewLogger()
80-
logger.EnableDebugLog(isDebugLogMode)
81-
logger.TInfof("Activate Bitrise plugins for Gradle")
82-
83-
gradleHome, err := pathutil.NewPathModifier().AbsPath(gradleHomeNonExpanded)
84-
if err != nil {
85-
return fmt.Errorf("expand Gradle home path (%s), error: %w", gradleHome, err)
86-
}
87-
88-
if err := activateForGradleCmdFn(logger, gradleHome, os.Getenv); err != nil {
89-
return fmt.Errorf("activate plugins for Gradle: %w", err)
90-
}
91-
92-
logger.TInfof("✅ Bitrise plugins activated")
93-
94-
return nil
95-
},
27+
SilenceUsage: true,
28+
RunE: func(_ *cobra.Command, _ []string) error {
29+
logger := log.NewLogger()
30+
logger.EnableDebugLog(isDebugLogMode)
31+
logger.TInfof("Activate Bitrise plugins for Gradle")
32+
33+
gradleHome, err := pathutil.NewPathModifier().AbsPath(gradleHomeNonExpanded)
34+
if err != nil {
35+
return fmt.Errorf("expand Gradle home path (%s), error: %w", gradleHome, err)
36+
}
37+
38+
if err := activateForGradleCmdFn(
39+
logger,
40+
gradleHome,
41+
os.Getenv,
42+
activateForGradleParams.templateInventory,
43+
func(inventory gradleconfig.TemplateInventory,
44+
logger log.Logger,
45+
path string,
46+
osProxy gradleconfig.OsProxy,
47+
templateProxy gradleconfig.TemplateProxy,
48+
) error {
49+
return inventory.WriteToGradleInit(logger, path, osProxy, templateProxy)
50+
},
51+
defaultGradlePropertiesUpdater(),
52+
); err != nil {
53+
return fmt.Errorf("activate plugins for Gradle: %w", err)
54+
}
55+
56+
logger.TInfof("✅ Bitrise plugins activated")
57+
58+
return nil
59+
},
9660
}
9761

9862
func init() {
99-
activateCmd.AddCommand(activateForGradleCmd)
100-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.Enabled, "cache", activateForGradleParams.Cache.Enabled, "Activate cache plugin. Will override cache-dep.")
101-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.JustDependency, "cache-dep", activateForGradleParams.Cache.JustDependency, "Add cache plugin as a dependency only.")
102-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.PushEnabled, "cache-push", activateForGradleParams.Cache.PushEnabled, "Push enabled/disabled. Enabled means the build can also write new entries to the remote cache. Disabled means the build can only read from the remote cache.")
103-
activateForGradleCmd.Flags().StringVar(&activateForGradleParams.Cache.ValidationLevel, "cache-validation", activateForGradleParams.Cache.ValidationLevel, "Level of cache entry validation for both uploads and downloads. Possible values: none, warning, error")
104-
activateForGradleCmd.Flags().StringVar(&activateForGradleParams.Cache.Endpoint, "cache-endpoint", activateForGradleParams.Cache.Endpoint, "The endpoint can be manually provided here for caching operations.")
105-
106-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Analytics.Enabled, "analytics", activateForGradleParams.Analytics.Enabled, "Activate analytics plugin. Will override analytics-dep.")
107-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Analytics.JustDependency, "analytics-dep", activateForGradleParams.Analytics.JustDependency, "Add analytics plugin as a dependency only.")
108-
109-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.TestDistro.Enabled, "test-distribution", activateForGradleParams.TestDistro.Enabled, "Activate test distribution plugin for the provided app slug. Will override test-distribution-dep.")
110-
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.TestDistro.JustDependency, "test-distribution-dep", activateForGradleParams.TestDistro.JustDependency, "Add test distribution plugin as a dependency only.")
63+
activateCmd.AddCommand(activateForGradleCmd)
64+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.Enabled, "cache", activateForGradleParams.Cache.Enabled, "Activate cache plugin. Will override cache-dep.")
65+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.JustDependency, "cache-dep", activateForGradleParams.Cache.JustDependency, "Add cache plugin as a dependency only.")
66+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Cache.PushEnabled, "cache-push", activateForGradleParams.Cache.PushEnabled, "Push enabled/disabled. Enabled means the build can also write new entries to the remote cache. Disabled means the build can only read from the remote cache.")
67+
activateForGradleCmd.Flags().StringVar(&activateForGradleParams.Cache.ValidationLevel, "cache-validation", activateForGradleParams.Cache.ValidationLevel, "Level of cache entry validation for both uploads and downloads. Possible values: none, warning, error")
68+
activateForGradleCmd.Flags().StringVar(&activateForGradleParams.Cache.Endpoint, "cache-endpoint", activateForGradleParams.Cache.Endpoint, "The endpoint can be manually provided here for caching operations.")
69+
70+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Analytics.Enabled, "analytics", activateForGradleParams.Analytics.Enabled, "Activate analytics plugin. Will override analytics-dep.")
71+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.Analytics.JustDependency, "analytics-dep", activateForGradleParams.Analytics.JustDependency, "Add analytics plugin as a dependency only.")
72+
73+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.TestDistro.Enabled, "test-distribution", activateForGradleParams.TestDistro.Enabled, "Activate test distribution plugin for the provided app slug. Will override test-distribution-dep.")
74+
activateForGradleCmd.Flags().BoolVar(&activateForGradleParams.TestDistro.JustDependency, "test-distribution-dep", activateForGradleParams.TestDistro.JustDependency, "Add test distribution plugin as a dependency only.")
11175
}
11276

113-
func activateForGradleCmdFn(logger log.Logger, gradleHomePath string, envProvider func(string) string) error {
114-
logger.Infof("(i) Checking parameters")
115-
logger.Infof("(i) Debug mode and verbose logs: %t", isDebugLogMode)
116-
117-
// Required configs
118-
logger.Infof("(i) Check Auth Config")
119-
authConfig, err := common.ReadAuthConfigFromEnvironments(envProvider)
120-
if err != nil {
121-
return fmt.Errorf("read auth config from environment variables: %w", err)
122-
}
123-
authToken := authConfig.TokenInGradleFormat()
124-
125-
appSlug := envProvider("BITRISE_APP_SLUG")
126-
127-
cacheUsageLevel := gradleconfig.UsageLevelNone
128-
if activateForGradleParams.Cache.JustDependency {
129-
cacheUsageLevel = gradleconfig.UsageLevelDependency
130-
}
131-
if activateForGradleParams.Cache.Enabled {
132-
cacheUsageLevel = gradleconfig.UsageLevelEnabled
133-
}
134-
logger.Infof("(i) Cache plugin usage: %+v", cacheUsageLevel)
135-
136-
cacheEndpointURL := ""
137-
cacheConfigMetadata := common.CacheConfigMetadata{}
138-
if cacheUsageLevel == gradleconfig.UsageLevelEnabled {
139-
// Optional configs
140-
// EndpointURL
141-
cacheEndpointURL = common.SelectCacheEndpointURL(activateForGradleParams.Cache.Endpoint, envProvider)
142-
logger.Infof("(i) Build Cache Endpoint URL: %s", cacheEndpointURL)
143-
logger.Infof("(i) Push new cache entries: %t", activateForGradleParams.Cache.PushEnabled)
144-
logger.Infof("(i) Cache entry validation level: %s", activateForGradleParams.Cache.ValidationLevel)
145-
146-
if activateForGradleParams.Cache.ValidationLevel != string(gradleconfig.CacheValidationLevelNone) &&
147-
activateForGradleParams.Cache.ValidationLevel != string(gradleconfig.CacheValidationLevelWarning) &&
148-
activateForGradleParams.Cache.ValidationLevel != string(gradleconfig.CacheValidationLevelError) {
149-
logger.Errorf("Invalid validation level: '%s'", activateForGradleParams.Cache.ValidationLevel)
150-
151-
return errInvalidCacheLevel
152-
}
153-
// Metadata
154-
cacheConfigMetadata = common.NewCacheConfigMetadata(envProvider,
155-
func(name string, v ...string) (string, error) {
156-
output, err := exec.Command(name, v...).Output()
157-
158-
return string(output), err
159-
}, logger)
160-
logger.Infof("(i) Cache Config Metadata: %+v", cacheConfigMetadata)
161-
}
162-
163-
analyticsUsageLevel := gradleconfig.UsageLevelNone
164-
if activateForGradleParams.Analytics.JustDependency {
165-
analyticsUsageLevel = gradleconfig.UsageLevelDependency
166-
}
167-
if activateForGradleParams.Analytics.Enabled {
168-
analyticsUsageLevel = gradleconfig.UsageLevelEnabled
169-
}
170-
logger.Infof("(i) Analytics plugin usage: %+v", analyticsUsageLevel)
171-
172-
testDistroUsageLevel := gradleconfig.UsageLevelNone
173-
if activateForGradleParams.TestDistro.JustDependency {
174-
testDistroUsageLevel = gradleconfig.UsageLevelDependency
175-
}
176-
if activateForGradleParams.TestDistro.Enabled {
177-
testDistroUsageLevel = gradleconfig.UsageLevelEnabled
178-
}
179-
logger.Infof("(i) Test distribution plugin usage: %+v", testDistroUsageLevel)
180-
181-
prefs := gradleconfig.Preferences{
182-
IsDebugEnabled: isDebugLogMode,
183-
AuthToken: authToken,
184-
AppSlug: appSlug,
185-
Cache: gradleconfig.CachePreferences{
186-
Usage: cacheUsageLevel,
187-
EndpointURL: cacheEndpointURL,
188-
IsPushEnabled: activateForGradleParams.Cache.PushEnabled,
189-
CacheLevelValidation: gradleconfig.CacheValidationLevel(activateForGradleParams.Cache.ValidationLevel),
190-
Metadata: cacheConfigMetadata,
191-
},
192-
Analytics: gradleconfig.AnalyticsPreferences{
193-
Usage: analyticsUsageLevel,
194-
},
195-
TestDistro: gradleconfig.TestDistroPreferences{
196-
Usage: testDistroUsageLevel,
197-
},
198-
}
199-
200-
if err := writeGradleInit(logger, gradleHomePath, prefs); err != nil {
201-
return err
202-
}
203-
204-
if prefs.Cache.Usage == gradleconfig.UsageLevelEnabled {
205-
logger.Infof("(i) Write ~/.gradle/gradle.properties")
206-
207-
gradlePropertiesPath := filepath.Join(gradleHomePath, "gradle.properties")
208-
currentGradlePropsFileContent, isGradlePropsExists, err := readFileIfExists(gradlePropertiesPath)
209-
if err != nil {
210-
return fmt.Errorf("check if gradle.properties exists at %s, error: %w", gradlePropertiesPath, err)
211-
}
212-
logger.Debugf("isGradlePropsExists: %t", isGradlePropsExists)
213-
214-
gradlePropertiesContent := stringmerge.ChangeContentInBlock(
215-
currentGradlePropsFileContent,
216-
"# [start] generated-by-bitrise-build-cache",
217-
"# [end] generated-by-bitrise-build-cache",
218-
"org.gradle.caching=true",
219-
)
220-
221-
err = os.WriteFile(gradlePropertiesPath, []byte(gradlePropertiesContent), 0755) //nolint:gosec,gomnd,mnd
222-
if err != nil {
223-
return fmt.Errorf("write gradle.properties to %s, error: %w", gradlePropertiesPath, err)
224-
}
225-
}
226-
227-
return nil
77+
func activateForGradleCmdFn(
78+
logger log.Logger,
79+
gradleHomePath string,
80+
envProvider func(string) string,
81+
templateInventoryProvider func(log.Logger, func(string) string) (gradleconfig.TemplateInventory, error),
82+
templateWriter func(gradleconfig.TemplateInventory, log.Logger, string, gradleconfig.OsProxy, gradleconfig.TemplateProxy) error,
83+
updater gradlePropertiesUpdater,
84+
) error {
85+
templateInventory, err := templateInventoryProvider(logger, envProvider)
86+
if err != nil {
87+
return err
88+
}
89+
90+
if err := templateWriter(
91+
templateInventory,
92+
logger,
93+
gradleHomePath,
94+
gradleconfig.DefaultOsProxy(),
95+
gradleconfig.DefaultTemplateProxy(),
96+
); err != nil {
97+
return err
98+
}
99+
100+
if err := updater.updateGradleProps(activateForGradleParams, logger, gradleHomePath); err != nil {
101+
return err
102+
}
103+
104+
return nil
228105
}

0 commit comments

Comments
 (0)