@@ -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
1714func 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
2825type OakRun struct {
2926 vendorManager * VendorManager
30-
31- DownloadURL string
32- StorePath string
27+ DownloadURL string
28+ LocalJar string
29+ StorePath string
3330}
3431
3532type OakRunLock struct {
3633 DownloadURL string `yaml:"download_url"`
34+ LocalJar string `yaml:"local_jar"`
3735}
3836
3937func (or OakRun ) Dir () string {
4038 return or .vendorManager .aem .baseOpts .ToolDir + "/oak-run"
4139}
4240
4341func (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
4750func (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
7174func (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
7582func (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