-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdetect.go
More file actions
85 lines (71 loc) · 2.38 KB
/
detect.go
File metadata and controls
85 lines (71 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// SPDX-FileCopyrightText: © 2025 Idiap Research Institute <contact@idiap.ch>
// SPDX-FileContributor: Samuel Gaist <samuel.gaist@idiap.ch>
//
// SPDX-License-Identifier: Apache-2.0
package pythonpackagers
import (
"path/filepath"
"github.com/paketo-buildpacks/packit/v2"
"github.com/paketo-buildpacks/packit/v2/fs"
"github.com/paketo-buildpacks/packit/v2/scribe"
conda "github.com/paketo-buildpacks/python-packagers/pkg/packagers/conda"
pipinstall "github.com/paketo-buildpacks/python-packagers/pkg/packagers/pip"
pipenvinstall "github.com/paketo-buildpacks/python-packagers/pkg/packagers/pipenv"
pixiinstall "github.com/paketo-buildpacks/python-packagers/pkg/packagers/pixi"
)
// Detect will return a packit.DetectFunc that will be invoked during the
// detect phase of the buildpack lifecycle.
//
// If this buildpack detects files that indicate your app is a Python project,
// it will pass detection.
func Detect(logger scribe.Emitter) packit.DetectFunc {
return func(context packit.DetectContext) (packit.DetectResult, error) {
logger.Title("Checking for pyproject.toml")
pyprojectPath := filepath.Join(context.WorkingDir, "pyproject.toml")
found, err := fs.Exists(pyprojectPath)
if err != nil {
return packit.DetectResult{}, err
}
if found {
parser := NewPyProjectHandler()
installer, err := parser.GetInstaller(context.WorkingDir)
if err != nil {
return packit.DetectResult{}, err
}
logger.Detail("Doing detection for: %s", installer)
return parser.Detect(installer, context)
}
logger.Title("Checking for pip")
pipResult, err := pipinstall.Detect()(context)
if err == nil {
return pipResult, nil
} else {
logger.Detail("%s", err)
}
logger.Title("Checking for pipenv")
pipenvResult, err := pipenvinstall.Detect(
pipenvinstall.NewPipfileParser(),
pipenvinstall.NewPipfileLockParser(),
)(context)
if err == nil {
return pipenvResult, nil
} else {
logger.Detail("%s", err)
}
logger.Title("Checking for pixi")
pixiResult, err := pixiinstall.Detect()(context)
if err == nil {
return pixiResult, nil
} else {
logger.Detail("%s", err)
}
logger.Title("Checking for conda")
condaResult, err := conda.Detect()(context)
if err == nil {
return condaResult, nil
} else {
logger.Detail("%s", err)
}
return packit.DetectResult{}, packit.Fail.WithMessage("No python packager manager related files found")
}
}