aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/python.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-04-20 01:50:57 +0900
committerOphestra <cat@gensokyo.uk>2026-04-20 01:50:57 +0900
commit4648f98272e3b5f1705a87a0bb51e69d3653c7bb (patch)
treebe270a79a167e7c50483e29975a6500d451ba9b2 /internal/rosa/python.go
parent11d99439ac8909c3650911fafeafba17a186501f (diff)
internal/rosa/python: run tests via helper
Despite the lack of standards, pytest seems somewhat widely agreed upon. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/rosa/python.go')
-rw-r--r--internal/rosa/python.go90
1 files changed, 70 insertions, 20 deletions
diff --git a/internal/rosa/python.go b/internal/rosa/python.go
index 56d50330..f31eec7b 100644
--- a/internal/rosa/python.go
+++ b/internal/rosa/python.go
@@ -117,14 +117,23 @@ type PipHelper struct {
EnterSource bool
// Whether to install to build environment after install.
Install bool
+ // Whether to skip running tests.
+ SkipCheck bool
+ // Replaces pytest if non-empty.
+ Check string
// Runs after install.
Script string
}
var _ Helper = new(PipHelper)
-// extra returns python.
-func (*PipHelper) extra(int) P { return P{Python} }
+// extra returns python, or pytest if defaults are assumed.
+func (attr *PipHelper) extra(int) P {
+ if attr == nil || (!attr.SkipCheck && attr.Check == "") {
+ return P{PythonPyTest}
+ }
+ return P{Python}
+}
// wantsChmod returns true.
func (*PipHelper) wantsChmod() bool { return true }
@@ -154,18 +163,27 @@ func (attr *PipHelper) script(name string) string {
--no-build-isolation \`
}
- script := attr.Script
+ var script string
if attr.Install {
- script = `pip3 install \
+ script += `pip3 install \
--no-index \
--prefix=/system \
--no-build-isolation \
'` + sourcePath.String() + `'
-` + script
+`
}
if attr.EnterSource {
- script = "cd '/usr/src/" + name + "'\n" + script
+ script += "cd '/usr/src/" + name + "'\n"
}
+ if !attr.SkipCheck {
+ if attr.Check == "" {
+ // some test suites fall apart when ran out-of-tree
+ script += "(cd '" + sourcePath.String() + "' && pytest)\n"
+ } else {
+ script += attr.Check
+ }
+ }
+ script += attr.Script
return `
pip3 install \
@@ -263,7 +281,10 @@ func init() {
"pypa/setuptools",
"v"+version, checksum,
), nil, &PipHelper{
+ // error: invalid command 'dist_info'
BuildIsolation: true,
+ // pytest circular dependency
+ SkipCheck: true,
}, nil)
}
@@ -284,7 +305,10 @@ func init() {
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
},
}, &PipHelper{
+ // upstream is monorepo of two packages (setuptools-scm)
Append: []string{"vcs-versioning"},
+ // pytest circular dependency
+ SkipCheck: true,
}, nil,
PythonSetuptools,
PythonPackaging,
@@ -308,7 +332,10 @@ func init() {
"SETUPTOOLS_SCM_PRETEND_VERSION=" + version,
},
}, &PipHelper{
+ // upstream is monorepo of two packages
Append: []string{"setuptools-scm"},
+ // pytest circular dependency
+ SkipCheck: true,
}, nil,
PythonSetuptools,
PythonVCSVersioning,
@@ -328,7 +355,10 @@ func init() {
"pypa/flit",
version, checksum,
), nil, &PipHelper{
+ // upstream has other unused packages with many dependencies
Append: []string{"flit_core"},
+ // pytest circular dependency
+ SkipCheck: true,
}, nil,
)
}
@@ -345,7 +375,10 @@ func init() {
version, newFromGitHub(
"pypa/packaging",
version, checksum,
- ), nil, nil, P{PythonFlitCore},
+ ), nil, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonFlitCore},
)
}
@@ -361,7 +394,10 @@ func init() {
version, newFromGitHub(
"cpburnz/python-pathspec",
"v"+version, checksum,
- ), nil, nil, P{PythonFlitCore},
+ ), nil, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonFlitCore},
)
}
@@ -377,7 +413,10 @@ func init() {
version, newFromGitHub(
"pypa/trove-classifiers",
version, checksum,
- ), nil, nil, P{PythonSetuptools},
+ ), nil, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonSetuptools},
)
}
@@ -397,7 +436,10 @@ func init() {
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PLUGGY=" + version,
},
- }, nil, P{PythonSetuptoolsSCM},
+ }, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonSetuptoolsSCM},
)
}
@@ -414,7 +456,10 @@ func init() {
"pypa/hatch",
"hatch-v"+version, checksum,
), nil, &PipHelper{
+ // upstream has other unused packages with many dependencies
Append: []string{"backend"},
+ // pytest circular dependency
+ SkipCheck: true,
}, nil,
PythonPackaging,
PythonPathspec,
@@ -435,7 +480,10 @@ func init() {
version, newFromGitHub(
"pygments/pygments",
version, checksum,
- ), nil, nil, P{PythonHatchling},
+ ), nil, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonHatchling},
)
}
@@ -455,7 +503,10 @@ func init() {
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_INICONFIG=" + version,
},
- }, nil, P{PythonSetuptoolsSCM},
+ }, &PipHelper{
+ // pytest circular dependency
+ SkipCheck: true,
+ }, P{PythonSetuptoolsSCM},
)
}
@@ -475,7 +526,10 @@ func init() {
Env: []string{
"SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYTEST=" + version,
},
- }, nil, P{PythonSetuptoolsSCM},
+ }, &PipHelper{
+ // many dependencies
+ SkipCheck: true,
+ }, P{PythonSetuptoolsSCM},
PythonIniConfig,
PythonPackaging,
PythonPluggy,
@@ -496,13 +550,9 @@ func init() {
"pallets/markupsafe",
version, checksum,
), nil, &PipHelper{
- EnterSource: true,
- Install: true,
- Script: "pytest",
- }, P{
- PythonSetuptools,
- PythonPyTest,
- },
+ // ModuleNotFoundError: No module named 'markupsafe'
+ Install: true,
+ }, P{PythonSetuptools},
)
}