mirror of
https://github.com/theonedev/onedev.git
synced 2025-12-08 18:26:30 +00:00
chore: Add django support for build spec job suggestion
This commit is contained in:
parent
a90cb71704
commit
060892904e
2
pom.xml
2
pom.xml
@ -637,7 +637,7 @@
|
||||
</repositories>
|
||||
<properties>
|
||||
<commons.version>3.0.4</commons.version>
|
||||
<agent.version>2.1.8</agent.version>
|
||||
<agent.version>2.1.9</agent.version>
|
||||
<slf4j.version>2.0.9</slf4j.version>
|
||||
<logback.version>1.4.14</logback.version>
|
||||
<antlr.version>4.7.2</antlr.version>
|
||||
|
||||
@ -7,6 +7,13 @@
|
||||
<artifactId>server-plugin</artifactId>
|
||||
<version>11.0.9</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.onedev</groupId>
|
||||
<artifactId>server-plugin-report-junit</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<moduleClass>io.onedev.server.plugin.buildspec.python.PythonModule</moduleClass>
|
||||
</properties>
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package io.onedev.server.plugin.buildspec.python;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import io.onedev.k8shelper.ExecuteCondition;
|
||||
import io.onedev.server.buildspec.job.Job;
|
||||
import io.onedev.server.buildspec.job.JobSuggestion;
|
||||
import io.onedev.server.buildspec.job.trigger.BranchUpdateTrigger;
|
||||
@ -10,14 +11,26 @@ import io.onedev.server.buildspec.step.commandinterpreter.ShellInterpreter;
|
||||
import io.onedev.server.git.Blob;
|
||||
import io.onedev.server.git.BlobIdent;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.plugin.report.junit.PublishJUnitReportStep;
|
||||
import org.eclipse.jgit.lib.FileMode;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
public class PythonJobSuggestion implements JobSuggestion {
|
||||
|
||||
private PublishJUnitReportStep newUnitTestReportPublishStep() {
|
||||
var publishUnitTestReport = new PublishJUnitReportStep();
|
||||
publishUnitTestReport.setName("publish unit test report");
|
||||
publishUnitTestReport.setReportName("Unit Test");
|
||||
publishUnitTestReport.setFilePatterns("test-result.xml");
|
||||
publishUnitTestReport.setCondition(ExecuteCondition.ALWAYS);
|
||||
return publishUnitTestReport;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Job> suggestJobs(Project project, ObjectId commitId) {
|
||||
Collection<Job> jobs = new ArrayList<>();
|
||||
@ -45,10 +58,8 @@ public class PythonJobSuggestion implements JobSuggestion {
|
||||
|
||||
CommandStep detectBuildVersion = new CommandStep();
|
||||
detectBuildVersion.setName("detect build version");
|
||||
detectBuildVersion.setImage("alpine");
|
||||
detectBuildVersion.getInterpreter().setCommands("" +
|
||||
"apk add yq\n" +
|
||||
"yq '.tool.poetry.version' pyproject.toml > buildVersion\n");
|
||||
detectBuildVersion.setImage("1dev/yq:1.0.0");
|
||||
detectBuildVersion.getInterpreter().setCommands("yq '.tool.poetry.version' pyproject.toml > buildVersion");
|
||||
job.getSteps().add(detectBuildVersion);
|
||||
|
||||
SetBuildVersionStep setBuildVersion = new SetBuildVersionStep();
|
||||
@ -58,18 +69,17 @@ public class PythonJobSuggestion implements JobSuggestion {
|
||||
|
||||
CommandStep test = new CommandStep();
|
||||
test.setName("test");
|
||||
test.setImage("python");
|
||||
String commands = "" +
|
||||
"curl -sSL https://install.python-poetry.org | python\n" +
|
||||
"/root/.local/bin/poetry install\n";
|
||||
test.setImage("1dev/poetry:1.0.1");
|
||||
String commands = "poetry install\n";
|
||||
|
||||
if (blob.getText().getContent().contains("pytest"))
|
||||
commands += "/root/.local/bin/poetry run pytest";
|
||||
else
|
||||
commands += "/root/.local/bin/poetry run python -m unittest";
|
||||
test.getInterpreter().setCommands(commands);
|
||||
|
||||
job.getSteps().add(test);
|
||||
if (blob.getText().getContent().contains("\"pytest\"")) {
|
||||
test.getInterpreter().setCommands(commands + "poetry run pytest --junitxml=./test-result.xml");
|
||||
job.getSteps().add(test);
|
||||
job.getSteps().add(newUnitTestReportPublishStep());
|
||||
} else {
|
||||
test.getInterpreter().setCommands(commands + "poetry run python -m unittest");
|
||||
job.getSteps().add(test);
|
||||
}
|
||||
|
||||
job.getTriggers().add(new BranchUpdateTrigger());
|
||||
job.getTriggers().add(new PullRequestUpdateTrigger());
|
||||
@ -106,17 +116,68 @@ public class PythonJobSuggestion implements JobSuggestion {
|
||||
"source .venv/bin/activate\n" +
|
||||
"pip install -r requirements.txt\n";
|
||||
|
||||
if (blob.getText().getContent().contains("pytest"))
|
||||
commands += "pytest";
|
||||
else
|
||||
commands += "python -m unittest";
|
||||
interpreter.setCommands(commands);
|
||||
job.getSteps().add(test);
|
||||
var blobContent = blob.getText().getContent();
|
||||
if (blobContent.contains("pytest==")) {
|
||||
interpreter.setCommands(commands + "pytest --junitxml=./test-result.xml");
|
||||
job.getSteps().add(test);
|
||||
job.getSteps().add(newUnitTestReportPublishStep());
|
||||
} else if (blobContent.contains("Django==")) {
|
||||
interpreter.setCommands(commands + "python manage.py test");
|
||||
job.getSteps().add(test);
|
||||
} else {
|
||||
interpreter.setCommands(commands + "python -m unittest");
|
||||
job.getSteps().add(test);
|
||||
}
|
||||
|
||||
job.getTriggers().add(new BranchUpdateTrigger());
|
||||
job.getTriggers().add(new PullRequestUpdateTrigger());
|
||||
|
||||
jobs.add(job);
|
||||
} else if ((blob = project.getBlob(new BlobIdent(commitId.name(), "environment.yml", FileMode.TYPE_FILE), false)) != null) {
|
||||
Job job = new Job();
|
||||
job.setName("python ci");
|
||||
|
||||
CheckoutStep checkout = new CheckoutStep();
|
||||
checkout.setName("checkout code");
|
||||
job.getSteps().add(checkout);
|
||||
|
||||
var generateChecksum = new GenerateChecksumStep();
|
||||
generateChecksum.setName("generate environment checksum");
|
||||
generateChecksum.setFiles("environment.yml");
|
||||
generateChecksum.setTargetFile("checksum");
|
||||
job.getSteps().add(generateChecksum);
|
||||
|
||||
var setupCache = new SetupCacheStep();
|
||||
setupCache.setName("set up environment cache");
|
||||
setupCache.setKey("conda_cache_@file:checksum@");
|
||||
setupCache.setPaths(Lists.newArrayList("/root/miniconda3/envs"));
|
||||
setupCache.getLoadKeys().add("conda_cache");
|
||||
job.getSteps().add(setupCache);
|
||||
|
||||
var blobContent = blob.getText().getContent();
|
||||
Map<String, Object> environments = new Yaml().load(blobContent);
|
||||
CommandStep test = new CommandStep();
|
||||
test.setName("test");
|
||||
test.setImage("1dev/conda:1.0.4");
|
||||
test.setInterpreter(new ShellInterpreter());
|
||||
String commands = "" +
|
||||
"source /root/.bashrc\n" +
|
||||
"conda env update\n" +
|
||||
"conda activate " + environments.get("name") + "\n";
|
||||
|
||||
if (blobContent.contains("pytest")) {
|
||||
test.getInterpreter().setCommands(commands + "pytest --junitxml=./test-result.xml");
|
||||
job.getSteps().add(test);
|
||||
job.getSteps().add(newUnitTestReportPublishStep());
|
||||
} else {
|
||||
test.getInterpreter().setCommands(commands + "python -m unittest");
|
||||
job.getSteps().add(test);
|
||||
}
|
||||
|
||||
job.getTriggers().add(new BranchUpdateTrigger());
|
||||
job.getTriggers().add(new PullRequestUpdateTrigger());
|
||||
|
||||
jobs.add(job);
|
||||
}
|
||||
return jobs;
|
||||
}
|
||||
|
||||
@ -571,7 +571,7 @@ public class ServerDockerExecutor extends JobExecutor implements RegistryLoginAw
|
||||
|
||||
}, new ArrayList<>());
|
||||
|
||||
cacheHelper.buildFinished();
|
||||
cacheHelper.buildFinished(successful);
|
||||
|
||||
return successful;
|
||||
} finally {
|
||||
|
||||
@ -244,7 +244,7 @@ public class ServerShellExecutor extends JobExecutor implements Testable<TestDat
|
||||
|
||||
}, new ArrayList<>());
|
||||
|
||||
cacheHelper.buildFinished();
|
||||
cacheHelper.buildFinished(successful);
|
||||
|
||||
return successful;
|
||||
} finally {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user