Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 8 additions & 24 deletions scanner/laravel.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"os/exec"
"path/filepath"
"regexp"
"strconv"
"strings"

"github.com/blang/semver"
Expand Down Expand Up @@ -54,7 +53,7 @@ func configureLaravel(sourceDir string, config *ScannerConfig) (*SourceInfo, err
ConsoleCommand: "php /var/www/html/artisan tinker",
}

// Min PHP version to use generator
// Oldest PHP the dockerfile-laravel generator supports
minVersion, err := semver.Make("8.1.0")
if err != nil {
panic(err)
Expand All @@ -63,26 +62,23 @@ func configureLaravel(sourceDir string, config *ScannerConfig) (*SourceInfo, err
// The detected PHP version
phpVersion, err := extractPhpVersion()
if err != nil || phpVersion == "" {
// Fallback to 8.0, which has
// the broadest compatibility
phpVersion = "8.1"
}

phpNVersion, err := semver.Make(phpVersion + ".0")
if err != nil || phpNVersion.LT(minVersion) {
return nil, fmt.Errorf("Laravel apps on Fly.io need PHP 8.1 or newer; detected PHP %s. Update the php requirement in composer.json and run fly launch again", phpVersion)
}

s.Runtime = plan.RuntimeStruct{Language: "php", Version: phpVersion}

s.BuildArgs = map[string]string{
"PHP_VERSION": phpVersion,
"NODE_VERSION": "18",
}

// Use default scanner templates if < min version(8.1.0)
phpNVersion, err := semver.Make(phpVersion + ".0")
if err != nil || phpNVersion.LT(minVersion) {
s.Files = templates("templates/laravel")
} else {
// Else use dockerfile-laravel generator
s.Callback = LaravelCallback
}
// The Dockerfile comes from the dockerfile-laravel generator
s.Callback = LaravelCallback

// Extract DB, Redis config from dotenv
db, redis, skipDB := extractConnections(".env")
Expand Down Expand Up @@ -248,18 +244,6 @@ func extractPhpVersion() (string, error) {
}

if len(match) > 1 {
// If the PHP version is below 7.4, we won't have a
// container for it, so we'll use PHP 7.4
if match[1][0:1] == "7" {
vers, err := strconv.ParseFloat(match[1], 32)
if err != nil {
return "7.4", nil
}
if vers < 7.4 {
return "7.4", nil
}
}

return match[1], nil
}

Expand Down
51 changes: 51 additions & 0 deletions scanner/laravel_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package scanner

import (
"os"
"path/filepath"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func writeLaravelApp(t *testing.T, phpRequirement string) string {
t.Helper()
dir := t.TempDir()
require.NoError(t, os.WriteFile(filepath.Join(dir, "artisan"), []byte("#!/usr/bin/env php\n"), 0o755))
composer := `{"require": {"php": "` + phpRequirement + `"}}`
require.NoError(t, os.WriteFile(filepath.Join(dir, "composer.json"), []byte(composer), 0o644))

return dir
}

func TestConfigureLaravelRejectsPhpBelow81(t *testing.T) {
for _, requirement := range []string{"^7.4", "^8.0", "~8.0.2"} {
t.Run(requirement, func(t *testing.T) {
dir := writeLaravelApp(t, requirement)
t.Chdir(dir)

srcInfo, err := configureLaravel(dir, &ScannerConfig{})

require.Error(t, err)
assert.Nil(t, srcInfo)
assert.Contains(t, err.Error(), "PHP 8.1")
})
}
}

func TestConfigureLaravelUsesGeneratorFrom81(t *testing.T) {
for _, requirement := range []string{"^8.1", "^8.2", "^8.3"} {
t.Run(requirement, func(t *testing.T) {
dir := writeLaravelApp(t, requirement)
t.Chdir(dir)

srcInfo, err := configureLaravel(dir, &ScannerConfig{})

require.NoError(t, err)
require.NotNil(t, srcInfo)
assert.Empty(t, srcInfo.Files, "no Dockerfile template should be written; the generator produces it")
assert.NotNil(t, srcInfo.Callback)
})
}
}
28 changes: 0 additions & 28 deletions scanner/templates/laravel/.dockerignore

This file was deleted.

15 changes: 0 additions & 15 deletions scanner/templates/laravel/.fly/entrypoint.sh

This file was deleted.

Empty file.
5 changes: 0 additions & 5 deletions scanner/templates/laravel/.fly/scripts/caches.sh

This file was deleted.

101 changes: 0 additions & 101 deletions scanner/templates/laravel/Dockerfile

This file was deleted.

Loading