Skip to content

Commit 134475e

Browse files
committed
Add separate field in oak-run to indicate use of local jar-file
1 parent 7ab18b9 commit 134475e

File tree

1 file changed

+29
-47
lines changed

1 file changed

+29
-47
lines changed

pkg/oak_run.go

Lines changed: 29 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,43 @@ import (
88
"github.com/wttech/aemc/pkg/common/pathx"
99
"github.com/wttech/aemc/pkg/common/tplx"
1010
"github.com/wttech/aemc/pkg/instance"
11-
"io"
12-
"os"
1311
"path/filepath"
14-
"strings"
1512
)
1613

1714
func NewOakRun(vendorManager *VendorManager) *OakRun {
1815
cv := vendorManager.aem.Config().Values()
1916

2017
return &OakRun{
2118
vendorManager: vendorManager,
22-
23-
DownloadURL: cv.GetString("vendor.oak_run.download_url"),
24-
StorePath: cv.GetString("vendor.oak_run.store_path"),
19+
DownloadURL: cv.GetString("vendor.oak_run.download_url"),
20+
LocalJar: cv.GetString("vendor.oak_run.local_jar"),
21+
StorePath: cv.GetString("vendor.oak_run.store_path"),
2522
}
2623
}
2724

2825
type OakRun struct {
2926
vendorManager *VendorManager
30-
31-
DownloadURL string
32-
StorePath string
27+
DownloadURL string
28+
LocalJar string
29+
StorePath string
3330
}
3431

3532
type OakRunLock struct {
3633
DownloadURL string `yaml:"download_url"`
34+
LocalJar string `yaml:"local_jar"`
3735
}
3836

3937
func (or OakRun) Dir() string {
4038
return or.vendorManager.aem.baseOpts.ToolDir + "/oak-run"
4139
}
4240

4341
func (or OakRun) lock() osx.Lock[OakRunLock] {
44-
return osx.NewLock(or.Dir()+"/lock/create.yml", func() (OakRunLock, error) { return OakRunLock{DownloadURL: or.DownloadURL}, nil })
42+
return osx.NewLock(or.Dir()+"/lock/create.yml", func() (OakRunLock, error) {
43+
return OakRunLock{
44+
DownloadURL: or.DownloadURL,
45+
LocalJar: or.LocalJar,
46+
}, nil
47+
})
4548
}
4649

4750
func (or OakRun) PrepareWithChanged() (bool, error) {
@@ -51,10 +54,10 @@ func (or OakRun) PrepareWithChanged() (bool, error) {
5154
return false, err
5255
}
5356
if check.UpToDate {
54-
log.Debugf("existing OakRun '%s' is up-to-date", or.DownloadURL)
57+
log.Debugf("existing OakRun (url: '%s', local: '%s') is up-to-date", or.DownloadURL, or.LocalJar)
5558
return false, nil
5659
}
57-
log.Infof("preparing new OakRun '%s'", or.DownloadURL)
60+
log.Infof("preparing new OakRun (url: '%s', local: '%s')", or.DownloadURL, or.LocalJar)
5861
err = or.prepare()
5962
if err != nil {
6063
return false, err
@@ -63,55 +66,34 @@ func (or OakRun) PrepareWithChanged() (bool, error) {
6366
if err != nil {
6467
return false, err
6568
}
66-
log.Infof("prepared new OakRun '%s'", or.DownloadURL)
69+
log.Infof("prepared new OakRun (url: '%s', local: '%s')", or.DownloadURL, or.LocalJar)
6770

6871
return true, nil
6972
}
7073

7174
func (or OakRun) JarFile() string {
72-
return pathx.Canonical(fmt.Sprintf("%s/%s", or.Dir(), filepath.Base(or.DownloadURL)))
75+
if or.LocalJar != "" {
76+
return pathx.Canonical(or.LocalJar)
77+
}
78+
base := or.DownloadURL
79+
return pathx.Canonical(fmt.Sprintf("%s/%s", or.Dir(), filepath.Base(base)))
7380
}
7481

7582
func (or OakRun) prepare() error {
83+
if or.LocalJar != "" {
84+
// No preparation needed if using a local JAR
85+
log.Infof("using Oak Run JAR from local file '%s'", or.LocalJar)
86+
return nil
87+
}
7688
if err := pathx.DeleteIfExists(or.Dir()); err != nil {
7789
return err
7890
}
7991
jarFile := or.JarFile()
80-
downloadURL := or.DownloadURL
81-
82-
// Check if DownloadURL is a local file path (absolute or file://)
83-
isLocal := strings.HasPrefix(downloadURL, "/") || strings.HasPrefix(downloadURL, "file://")
84-
if isLocal {
85-
localPath := downloadURL
86-
if strings.HasPrefix(localPath, "file://") {
87-
localPath = strings.TrimPrefix(localPath, "file://")
88-
}
89-
log.Infof("copying Oak Run JAR from local file '%s' to '%s'", localPath, jarFile)
90-
if err := pathx.Ensure(filepath.Dir(jarFile)); err != nil {
91-
return err
92-
}
93-
src, err := os.Open(localPath)
94-
if err != nil {
95-
return fmt.Errorf("cannot open local Oak Run JAR '%s': %w", localPath, err)
96-
}
97-
defer src.Close()
98-
dst, err := os.Create(jarFile)
99-
if err != nil {
100-
return fmt.Errorf("cannot create destination Oak Run JAR '%s': %w", jarFile, err)
101-
}
102-
defer dst.Close()
103-
if _, err := io.Copy(dst, src); err != nil {
104-
return fmt.Errorf("cannot copy Oak Run JAR from '%s' to '%s': %w", localPath, jarFile, err)
105-
}
106-
log.Infof("copied Oak Run JAR from local file '%s' to '%s'", localPath, jarFile)
107-
return nil
108-
}
109-
110-
log.Infof("downloading Oak Run JAR from URL '%s' to file '%s'", downloadURL, jarFile)
111-
if err := httpx.DownloadOnce(downloadURL, jarFile); err != nil {
92+
log.Infof("downloading Oak Run JAR from URL '%s' to file '%s'", or.DownloadURL, jarFile)
93+
if err := httpx.DownloadOnce(or.DownloadURL, jarFile); err != nil {
11294
return err
11395
}
114-
log.Infof("downloaded Oak Run JAR from URL '%s' to file '%s'", downloadURL, jarFile)
96+
log.Infof("downloaded Oak Run JAR from URL '%s' to file '%s'", or.DownloadURL, jarFile)
11597
return nil
11698
}
11799

0 commit comments

Comments
 (0)