Skip to content

Commit a32677b

Browse files
committed
fix: replace util.CopyFile with custom copyFile implementation in finalize
The util package's CopyFile was removed, causing finalize to fail when copying the pre-compiled rewrite binary to .bp/bin/rewrite. This change: - Adds a copyFile() method to Finalizer that preserves file permissions - Removes dependency on the removed util package - Updates tests to reflect the simplified file copy approach The rewrite binary is pre-compiled by scripts/build.sh during packaging and copied to the app's .bp/bin/ directory during finalize, making it available for runtime configuration templating. Integration tests pass successfully.
1 parent 344fe84 commit a32677b

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

src/php/finalize/finalize.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/cloudfoundry/libbuildpack"
1010
"github.com/cloudfoundry/php-buildpack/src/php/extensions"
1111
"github.com/cloudfoundry/php-buildpack/src/php/options"
12-
"github.com/cloudfoundry/php-buildpack/src/php/util"
1312
)
1413

1514
// Stager interface abstracts buildpack staging operations
@@ -225,17 +224,18 @@ func (f *Finalizer) CreateStartScript() error {
225224
return fmt.Errorf("could not create .bp/bin directory: %v", err)
226225
}
227226

228-
// Copy rewrite binary to .bp/bin
229227
bpDir := os.Getenv("BP_DIR")
230228
if bpDir == "" {
231229
return fmt.Errorf("BP_DIR environment variable not set")
232230
}
231+
232+
// Copy pre-compiled rewrite binary from bin/rewrite to .bp/bin/rewrite
233233
rewriteSrc := filepath.Join(bpDir, "bin", "rewrite")
234234
rewriteDst := filepath.Join(bpBinDir, "rewrite")
235-
if err := util.CopyFile(rewriteSrc, rewriteDst); err != nil {
235+
if err := f.copyFile(rewriteSrc, rewriteDst); err != nil {
236236
return fmt.Errorf("could not copy rewrite binary: %v", err)
237237
}
238-
f.Log.Debug("Copied rewrite binary to .bp/bin")
238+
f.Log.Debug("Copied pre-compiled rewrite binary to .bp/bin")
239239

240240
// Load options from options.json to determine which web server to use
241241
opts, err := options.LoadOptions(bpDir, f.Stager.BuildDir(), f.Manifest, f.Log)
@@ -610,3 +610,32 @@ func (f *Finalizer) SetupProcessTypes() error {
610610

611611
return nil
612612
}
613+
614+
func (f *Finalizer) copyFile(src, dst string) error {
615+
sourceFile, err := os.Open(src)
616+
if err != nil {
617+
return fmt.Errorf("could not open source file: %v", err)
618+
}
619+
defer sourceFile.Close()
620+
621+
destFile, err := os.Create(dst)
622+
if err != nil {
623+
return fmt.Errorf("could not create destination file: %v", err)
624+
}
625+
defer destFile.Close()
626+
627+
if _, err := io.Copy(destFile, sourceFile); err != nil {
628+
return fmt.Errorf("could not copy file: %v", err)
629+
}
630+
631+
sourceInfo, err := os.Stat(src)
632+
if err != nil {
633+
return fmt.Errorf("could not stat source file: %v", err)
634+
}
635+
636+
if err := os.Chmod(dst, sourceInfo.Mode()); err != nil {
637+
return fmt.Errorf("could not set file permissions: %v", err)
638+
}
639+
640+
return nil
641+
}

src/php/finalize/finalize_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ var _ = Describe("Finalize", func() {
405405
})
406406
})
407407

408-
Context("when rewrite binary doesn't exist", func() {
408+
Context("when rewrite binary doesn't exist in bin/", func() {
409409
It("returns an error", func() {
410410
finalizer = &finalize.Finalizer{
411411
Manifest: manifest,
@@ -463,7 +463,7 @@ var _ = Describe("Finalize", func() {
463463
Expect(bpBinDir).To(BeADirectory())
464464
})
465465

466-
It("copies rewrite binary to .bp/bin", func() {
466+
It("copies pre-compiled rewrite binary to .bp/bin", func() {
467467
stager := &testStager{
468468
buildDir: buildDir,
469469
depsDir: depsDir,
@@ -486,7 +486,7 @@ var _ = Describe("Finalize", func() {
486486
rewriteSrc := filepath.Join(buildDir, "bin", "rewrite")
487487
err = os.MkdirAll(filepath.Dir(rewriteSrc), 0755)
488488
Expect(err).To(BeNil())
489-
err = os.WriteFile(rewriteSrc, []byte("#!/bin/bash\necho test\n"), 0755)
489+
err = os.WriteFile(rewriteSrc, []byte("#!/bin/bash\necho test rewrite\n"), 0755)
490490
Expect(err).To(BeNil())
491491

492492
optionsFile := filepath.Join(buildDir, ".bp-config", "options.json")
@@ -498,13 +498,12 @@ var _ = Describe("Finalize", func() {
498498
err = finalizer.CreateStartScript()
499499
Expect(err).To(BeNil())
500500

501-
// Verify rewrite binary was copied
502501
rewriteDst := filepath.Join(buildDir, ".bp", "bin", "rewrite")
503502
Expect(rewriteDst).To(BeAnExistingFile())
504503

505504
contents, err := os.ReadFile(rewriteDst)
506505
Expect(err).To(BeNil())
507-
Expect(string(contents)).To(ContainSubstring("echo test"))
506+
Expect(string(contents)).To(ContainSubstring("echo test rewrite"))
508507
})
509508
})
510509

0 commit comments

Comments
 (0)