From 89f82018e6dc9c4fbc032741430b65b6edb78976 Mon Sep 17 00:00:00 2001 From: Jake Runzer Date: Mon, 3 Mar 2025 22:39:59 -0500 Subject: [PATCH] check php docker image is available --- core/generate/image_step_builder.go | 4 ++++ core/providers/php/php.go | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/generate/image_step_builder.go b/core/generate/image_step_builder.go index 37049c9..8b29ed1 100644 --- a/core/generate/image_step_builder.go +++ b/core/generate/image_step_builder.go @@ -41,6 +41,10 @@ func (b *ImageStepBuilder) Version(name resolver.PackageRef, version string, sou b.Resolver.Version(name, version, source) } +func (b *ImageStepBuilder) SetVersionAvailable(ref resolver.PackageRef, isVersionAvailable func(version string) bool) { + b.Resolver.SetVersionAvailable(ref, isVersionAvailable) +} + func (b *ImageStepBuilder) Name() string { return b.DisplayName } diff --git a/core/providers/php/php.go b/core/providers/php/php.go index 4a30cc1..0958087 100644 --- a/core/providers/php/php.go +++ b/core/providers/php/php.go @@ -2,6 +2,7 @@ package php import ( "fmt" + "net/http" "strings" "github.com/railwayapp/railpack/core/generate" @@ -220,11 +221,23 @@ func (p *PhpProvider) phpImagePackage(ctx *generate.GenerateContext) (*generate. } } + // Ensure that the version is available on Docker Hub + imageStep.SetVersionAvailable(php, func(version string) bool { + image := getPhpImage(version) + url := fmt.Sprintf("https://registry.hub.docker.com/v2/repositories/library/php/tags/%s", strings.TrimPrefix(image, "php:")) + resp, err := http.Get(url) + if err != nil { + return false + } + defer resp.Body.Close() + return resp.StatusCode == http.StatusOK + }) + return imageStep, nil } func getPhpImage(phpVersion string) string { - return fmt.Sprintf("php:%s-fpm", phpVersion) + return fmt.Sprintf("php:%s-fpm-bookworm", phpVersion) } func (p *PhpProvider) readComposerJson(ctx *generate.GenerateContext) (map[string]interface{}, error) {