mirror of
https://github.com/theonedev/onedev.git
synced 2025-12-08 18:26:30 +00:00
feat: Build spec job suggestion for python projects (OD-2048)
This commit is contained in:
parent
d35cf26d80
commit
151b4ce11f
4
pom.xml
4
pom.xml
@ -636,8 +636,8 @@
|
||||
</repository>
|
||||
</repositories>
|
||||
<properties>
|
||||
<commons.version>3.0.3</commons.version>
|
||||
<agent.version>2.1.7</agent.version>
|
||||
<commons.version>3.0.4</commons.version>
|
||||
<agent.version>2.1.8</agent.version>
|
||||
<slf4j.version>2.0.9</slf4j.version>
|
||||
<logback.version>1.4.14</logback.version>
|
||||
<antlr.version>4.7.2</antlr.version>
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
<module>server-plugin-buildspec-dotnet</module>
|
||||
<module>server-plugin-buildspec-gradle</module>
|
||||
<module>server-plugin-buildspec-node</module>
|
||||
<module>server-plugin-buildspec-python</module>
|
||||
<module>server-plugin-authenticator-ldap</module>
|
||||
<module>server-plugin-mailservice-smtpimap</module>
|
||||
<module>server-plugin-mailservice-office365</module>
|
||||
|
||||
13
server-plugin/server-plugin-buildspec-python/pom.xml
Normal file
13
server-plugin/server-plugin-buildspec-python/pom.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>server-plugin-buildspec-python</artifactId>
|
||||
<parent>
|
||||
<groupId>io.onedev</groupId>
|
||||
<artifactId>server-plugin</artifactId>
|
||||
<version>11.0.8</version>
|
||||
</parent>
|
||||
<properties>
|
||||
<moduleClass>io.onedev.server.plugin.buildspec.python.PythonModule</moduleClass>
|
||||
</properties>
|
||||
</project>
|
||||
@ -0,0 +1,73 @@
|
||||
package io.onedev.server.plugin.buildspec.python;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import io.onedev.server.buildspec.job.Job;
|
||||
import io.onedev.server.buildspec.job.JobSuggestion;
|
||||
import io.onedev.server.buildspec.job.trigger.BranchUpdateTrigger;
|
||||
import io.onedev.server.buildspec.job.trigger.PullRequestUpdateTrigger;
|
||||
import io.onedev.server.buildspec.step.*;
|
||||
import io.onedev.server.git.BlobIdent;
|
||||
import io.onedev.server.model.Project;
|
||||
import org.eclipse.jgit.lib.FileMode;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
public class PythonJobSuggestion implements JobSuggestion {
|
||||
|
||||
@Override
|
||||
public Collection<Job> suggestJobs(Project project, ObjectId commitId) {
|
||||
Collection<Job> jobs = new ArrayList<>();
|
||||
if (project.getBlob(new BlobIdent(commitId.name(), "poetry.lock", 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 poetry lock checksum");
|
||||
generateChecksum.setFiles("poetry.lock");
|
||||
generateChecksum.setTargetFile("checksum");
|
||||
job.getSteps().add(generateChecksum);
|
||||
|
||||
var setupCache = new SetupCacheStep();
|
||||
setupCache.setName("set up poetry cache");
|
||||
setupCache.setKey("poetry_cache_@file:checksum@");
|
||||
setupCache.setPaths(Lists.newArrayList("/root/.cache/pypoetry"));
|
||||
setupCache.getLoadKeys().add("poetry_cache");
|
||||
job.getSteps().add(setupCache);
|
||||
|
||||
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");
|
||||
job.getSteps().add(detectBuildVersion);
|
||||
|
||||
SetBuildVersionStep setBuildVersion = new SetBuildVersionStep();
|
||||
setBuildVersion.setName("set build version");
|
||||
setBuildVersion.setBuildVersion("@file:buildVersion@");
|
||||
job.getSteps().add(setBuildVersion);
|
||||
|
||||
CommandStep build = new CommandStep();
|
||||
build.setName("test");
|
||||
build.setImage("python");
|
||||
build.getInterpreter().setCommands("" +
|
||||
"curl -sSL https://install.python-poetry.org | python\n" +
|
||||
"/root/.local/bin/poetry install\n" +
|
||||
"/root/.local/bin/poetry run pytest\n");
|
||||
job.getSteps().add(build);
|
||||
|
||||
job.getTriggers().add(new BranchUpdateTrigger());
|
||||
job.getTriggers().add(new PullRequestUpdateTrigger());
|
||||
|
||||
jobs.add(job);
|
||||
}
|
||||
return jobs;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package io.onedev.server.plugin.buildspec.python;
|
||||
|
||||
import io.onedev.commons.loader.AbstractPluginModule;
|
||||
import io.onedev.server.buildspec.job.JobSuggestion;
|
||||
|
||||
/**
|
||||
* NOTE: Do not forget to rename moduleClass property defined in the pom if you've renamed this class.
|
||||
*
|
||||
*/
|
||||
public class PythonModule extends AbstractPluginModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
|
||||
// put your guice bindings here
|
||||
contribute(JobSuggestion.class, PythonJobSuggestion.class);
|
||||
}
|
||||
|
||||
}
|
||||
@ -60,6 +60,11 @@
|
||||
<artifactId>server-plugin-buildspec-dotnet</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.onedev</groupId>
|
||||
<artifactId>server-plugin-buildspec-python</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.onedev</groupId>
|
||||
<artifactId>server-plugin-buildspec-node</artifactId>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user