Fix issue #1242 - Validate tag name to avoid invalid chars in create tag step

This commit is contained in:
Robin Shen 2023-03-01 14:50:25 +08:00
parent 5f09036754
commit 52dca1aab9
603 changed files with 5849 additions and 5787 deletions

View File

@ -210,7 +210,7 @@ import io.onedev.server.util.jackson.hibernate.HibernateObjectMapperConfigurator
import io.onedev.server.util.schedule.DefaultTaskScheduler;
import io.onedev.server.util.schedule.TaskScheduler;
import io.onedev.server.util.ScriptContribution;
import io.onedev.server.util.validation.ValidatorProvider;
import io.onedev.server.validation.ValidatorProvider;
import io.onedev.server.util.xstream.CollectionConverter;
import io.onedev.server.util.xstream.HibernateProxyConverter;
import io.onedev.server.util.xstream.MapConverter;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.AgentQueryValidator;
import io.onedev.server.validation.validator.AgentQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.AttributeNameValidator;
import io.onedev.server.validation.validator.AttributeNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.BuildQueryValidator;
import io.onedev.server.validation.validator.BuildQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@ -9,7 +9,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ClassValidatingValidator;
import io.onedev.server.validation.validator.ClassValidatingValidator;
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -6,7 +6,7 @@
*
* Revision: $Id: Multiline.java 1209 2008-07-28 00:16:18Z robin $
*/
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -16,7 +16,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CodeValidator;
import io.onedev.server.validation.validator.CodeValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CodeCommentQueryValidator;
import io.onedev.server.validation.validator.CodeCommentQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CommitHashValidator;
import io.onedev.server.validation.validator.CommitHashValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CommitQueryValidator;
import io.onedev.server.validation.validator.CommitQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -5,7 +5,7 @@
*
* Revision: $Id: PathElement.java 1209 2008-07-28 00:16:18Z robin $
*/
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -15,7 +15,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CronExpressionValidator;
import io.onedev.server.validation.validator.CronExpressionValidator;
/**
* @author robin

View File

@ -5,7 +5,7 @@
*
* Revision: $Id: PathElement.java 1209 2008-07-28 00:16:18Z robin $
*/
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -15,7 +15,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.CurrentPasswordValidator;
import io.onedev.server.validation.validator.CurrentPasswordValidator;
/**
* @author robin

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.DirectoryValidator;
import io.onedev.server.validation.validator.DirectoryValidator;
/**
* @author robin

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.DnsNameValidator;
import io.onedev.server.validation.validator.DnsNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.EnvironmentNameValidator;
import io.onedev.server.validation.validator.EnvironmentNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.FieldNameValidator;
import io.onedev.server.validation.validator.FieldNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.GroupNameValidator;
import io.onedev.server.validation.validator.GroupNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.InterpolativeValidator;
import io.onedev.server.validation.validator.InterpolativeValidator;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.IssueQueryValidator;
import io.onedev.server.validation.validator.IssueQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.JobMatchValidator;
import io.onedev.server.validation.validator.JobMatchValidator;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

View File

@ -6,7 +6,7 @@
*
* Revision: $Id: Multiline.java 1209 2008-07-28 00:16:18Z robin $
*/
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ProjectNameValidator;
import io.onedev.server.validation.validator.ProjectNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -6,7 +6,7 @@
*
* Revision: $Id: Multiline.java 1209 2008-07-28 00:16:18Z robin $
*/
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.NotificationReceiverValidator;
import io.onedev.server.validation.validator.NotificationReceiverValidator;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.NumericValidator;
import io.onedev.server.validation.validator.NumericValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ParamNameValidator;
import io.onedev.server.validation.validator.ParamNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,26 +1,26 @@
package io.onedev.server.util.validation.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.PathSegmentValidator;
/**
* @author robin
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=PathSegmentValidator.class)
public @interface PathSegment {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.validation.validator.PathSegmentValidator;
/**
* @author robin
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=PathSegmentValidator.class)
public @interface PathSegment {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.PatternsValidator;
import io.onedev.server.validation.validator.PatternsValidator;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ProjectNameValidator;
import io.onedev.server.validation.validator.ProjectNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ProjectPathValidator;
import io.onedev.server.validation.validator.ProjectPathValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ProjectQueryValidator;
import io.onedev.server.validation.validator.ProjectQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.PullRequestQueryValidator;
import io.onedev.server.validation.validator.PullRequestQueryValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.RegExValidator;
import io.onedev.server.validation.validator.RegExValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.ReviewRequirementValidator;
import io.onedev.server.validation.validator.ReviewRequirementValidator;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.RoleNameValidator;
import io.onedev.server.validation.validator.RoleNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.SafePathValidator;
import io.onedev.server.validation.validator.SafePathValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.SecretNameValidator;
import io.onedev.server.validation.validator.SecretNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -0,0 +1,22 @@
package io.onedev.server.annotation;
import io.onedev.server.validation.validator.TagNameValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TagNameValidator.class)
public @interface TagName {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.UrlPathValidator;
import io.onedev.server.validation.validator.UrlPathValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.UrlSegmentValidator;
import io.onedev.server.validation.validator.UrlSegmentValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,6 +1,6 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import io.onedev.server.util.validation.UserMatchValidator;
import io.onedev.server.validation.validator.UserMatchValidator;
import javax.validation.Constraint;
import javax.validation.Payload;

View File

@ -1,4 +1,4 @@
package io.onedev.server.util.validation.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,7 +8,7 @@ import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import io.onedev.server.util.validation.UserNameValidator;
import io.onedev.server.validation.validator.UserNameValidator;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package io.onedev.server.web.editable.annotation;
package io.onedev.server.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -27,9 +27,9 @@ import io.onedev.server.model.Project;
import io.onedev.server.model.support.build.JobProperty;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.validation.Validatable;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.Editable;
import io.onedev.server.web.page.project.blob.ProjectBlobPage;
import io.onedev.server.web.util.SuggestionUtils;
import io.onedev.server.web.util.WicketUtils;

View File

@ -17,11 +17,11 @@ import io.onedev.server.security.permission.ProjectPermission;
import io.onedev.server.security.permission.ReadCode;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.facade.ProjectCache;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.validation.Validatable;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.web.page.project.ProjectPage;
import io.onedev.server.web.util.SuggestionUtils;
import io.onedev.server.web.util.WicketUtils;

View File

@ -2,7 +2,7 @@ package io.onedev.server.buildspec;
import java.io.Serializable;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable
public interface NamedElement extends Serializable {

View File

@ -12,10 +12,10 @@ import io.onedev.commons.codeassist.InputCompletion;
import io.onedev.commons.codeassist.InputStatus;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.buildspec.job.EnvVar;
import io.onedev.server.util.validation.annotation.DnsName;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.web.editable.annotation.SuggestionProvider;
import io.onedev.server.annotation.DnsName;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.SuggestionProvider;
@Editable
public class Service implements NamedElement, Serializable {

View File

@ -1,74 +1,74 @@
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.List;
import javax.validation.ConstraintValidatorContext;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.commons.utils.PathUtils;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.util.validation.annotation.RegEx;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
@Editable
@ClassValidating
public class CacheSpec implements Serializable, Validatable {
private static final long serialVersionUID = 1L;
private String key;
private String path;
@Editable(order=100, description="Specify key of the cache. Caches with same key can be reused by different projects/jobs. "
+ "Embed project/job variable to prevent cross project/job reuse")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
@RegEx(pattern="[a-zA-Z0-9\\-_\\.]+", message="Can only contain alphanumeric, dash, dot and underscore")
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getNormalizedKey() {
return getKey().replaceAll("[^a-zA-Z0-9\\-_\\.]", "-");
}
@Editable(order=200, description="Specify path to cache. Non-absolute path is considered to be relative to job workspace. "
+ "Please note that shell executor only allows non-absolute path here")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@Override
public boolean isValid(ConstraintValidatorContext context) {
if (PathUtils.isCurrent(path)) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Invalid path").addPropertyNode("path").addConstraintViolation();
return false;
} else {
return true;
}
}
}
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.List;
import javax.validation.ConstraintValidatorContext;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.commons.utils.PathUtils;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.validation.Validatable;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.RegEx;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
@Editable
@ClassValidating
public class CacheSpec implements Serializable, Validatable {
private static final long serialVersionUID = 1L;
private String key;
private String path;
@Editable(order=100, description="Specify key of the cache. Caches with same key can be reused by different projects/jobs. "
+ "Embed project/job variable to prevent cross project/job reuse")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
@RegEx(pattern="[a-zA-Z0-9\\-_\\.]+", message="Can only contain alphanumeric, dash, dot and underscore")
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getNormalizedKey() {
return getKey().replaceAll("[^a-zA-Z0-9\\-_\\.]", "-");
}
@Editable(order=200, description="Specify path to cache. Non-absolute path is considered to be relative to job workspace. "
+ "Please note that shell executor only allows non-absolute path here")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@Override
public boolean isValid(ConstraintValidatorContext context) {
if (PathUtils.isCurrent(path)) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Invalid path").addPropertyNode("path").addConstraintViolation();
return false;
} else {
return true;
}
}
}

View File

@ -1,51 +1,51 @@
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.util.validation.annotation.EnvironmentName;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
@Editable
public class EnvVar implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String value;
@Editable(order=100, description="Specify name of the environment variable")
@Interpolative(variableSuggester="suggestVariables")
@EnvironmentName
@NotEmpty
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Editable(order=200, description="Specify value of the environment variable")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
}
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.annotation.EnvironmentName;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
@Editable
public class EnvVar implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String value;
@Editable(order=100, description="Specify name of the environment variable")
@Interpolative(variableSuggester="suggestVariables")
@EnvironmentName
@NotEmpty
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Editable(order=200, description="Specify value of the environment variable")
@Interpolative(variableSuggester="suggestVariables")
@NotEmpty
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
}

View File

@ -4,6 +4,7 @@ import io.onedev.commons.codeassist.InputCompletion;
import io.onedev.commons.codeassist.InputStatus;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.annotation.*;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.NamedElement;
@ -25,9 +26,7 @@ import io.onedev.server.security.SecurityUtils;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.criteria.Criteria;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.web.editable.annotation.*;
import io.onedev.server.validation.Validatable;
import io.onedev.server.web.page.project.blob.ProjectBlobPage;
import io.onedev.server.web.util.SuggestionUtils;
import io.onedev.server.web.util.WicketUtils;

View File

@ -1,129 +1,129 @@
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Component;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.param.spec.ParamSpec;
import io.onedev.server.buildspec.param.supply.ParamSupply;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.web.editable.annotation.OmitName;
import io.onedev.server.web.editable.annotation.ParamSpecProvider;
import io.onedev.server.web.editable.annotation.Patterns;
import io.onedev.server.web.editable.annotation.VariableOption;
import io.onedev.server.web.util.WicketUtils;
@Editable
public class JobDependency implements Serializable {
private static final long serialVersionUID = 1L;
private String jobName;
private boolean requireSuccessful = true;
private List<ParamSupply> jobParams = new ArrayList<>();
private String artifacts = "**";
private String destinationPath;
// change Named("jobName") also if change name of this property
@Editable(order=100, name="Job")
@ChoiceProvider("getJobChoices")
@NotEmpty
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
@Editable(order=150, description="Whether or not to require this dependency to be successful")
public boolean isRequireSuccessful() {
return requireSuccessful;
}
public void setRequireSuccessful(boolean requireSuccessful) {
this.requireSuccessful = requireSuccessful;
}
@Editable(order=200, name="Job Parameters")
@ParamSpecProvider("getParamSpecs")
@VariableOption(withBuildVersion=false, withDynamicVariables=false)
@OmitName
public List<ParamSupply> getJobParams() {
return jobParams;
}
public void setJobParams(List<ParamSupply> jobParams) {
this.jobParams = jobParams;
}
@Editable(order=300, name="Artifacts to Retrieve", placeholder="Do not retrieve", description=""
+ "Optionally specify artifacts to retrieve from the dependency into "
+ "<a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a>. "
+ "Only published artifacts (via artifact publish step) can be retrieved. Leave empty to not "
+ "retrieve any artifacts")
@Interpolative(variableSuggester="suggestVariables")
@Patterns(path=true)
public String getArtifacts() {
return artifacts;
}
public void setArtifacts(String artifacts) {
this.artifacts = artifacts;
}
@Editable(order=400, placeholder="Job workspace", description=""
+ "Optionally specify a path relative to <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a> "
+ "to put retrieved artifacts. Leave empty to use job workspace itself")
@Interpolative(variableSuggester="suggestVariables")
public String getDestinationPath() {
return destinationPath;
}
public void setDestinationPath(String destinationPath) {
this.destinationPath = destinationPath;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@SuppressWarnings("unused")
private static List<String> getJobChoices() {
return Job.getChoices();
}
@SuppressWarnings("unused")
private static List<ParamSpec> getParamSpecs() {
String jobName = (String) EditContext.get().getInputValue("jobName");
if (jobName != null) {
Component component = ComponentContext.get().getComponent();
BuildSpecAware buildSpecAware = WicketUtils.findInnermost(component, BuildSpecAware.class);
if (buildSpecAware != null) {
BuildSpec buildSpec = buildSpecAware.getBuildSpec();
if (buildSpec != null) {
Job job = buildSpec.getJobMap().get(jobName);
if (job != null)
return job.getParamSpecs();
}
}
}
return new ArrayList<>();
}
}
package io.onedev.server.buildspec.job;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Component;
import javax.validation.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.param.spec.ParamSpec;
import io.onedev.server.buildspec.param.supply.ParamSupply;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.annotation.ParamSpecProvider;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.VariableOption;
import io.onedev.server.web.util.WicketUtils;
@Editable
public class JobDependency implements Serializable {
private static final long serialVersionUID = 1L;
private String jobName;
private boolean requireSuccessful = true;
private List<ParamSupply> jobParams = new ArrayList<>();
private String artifacts = "**";
private String destinationPath;
// change Named("jobName") also if change name of this property
@Editable(order=100, name="Job")
@ChoiceProvider("getJobChoices")
@NotEmpty
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
@Editable(order=150, description="Whether or not to require this dependency to be successful")
public boolean isRequireSuccessful() {
return requireSuccessful;
}
public void setRequireSuccessful(boolean requireSuccessful) {
this.requireSuccessful = requireSuccessful;
}
@Editable(order=200, name="Job Parameters")
@ParamSpecProvider("getParamSpecs")
@VariableOption(withBuildVersion=false, withDynamicVariables=false)
@OmitName
public List<ParamSupply> getJobParams() {
return jobParams;
}
public void setJobParams(List<ParamSupply> jobParams) {
this.jobParams = jobParams;
}
@Editable(order=300, name="Artifacts to Retrieve", placeholder="Do not retrieve", description=""
+ "Optionally specify artifacts to retrieve from the dependency into "
+ "<a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a>. "
+ "Only published artifacts (via artifact publish step) can be retrieved. Leave empty to not "
+ "retrieve any artifacts")
@Interpolative(variableSuggester="suggestVariables")
@Patterns(path=true)
public String getArtifacts() {
return artifacts;
}
public void setArtifacts(String artifacts) {
this.artifacts = artifacts;
}
@Editable(order=400, placeholder="Job workspace", description=""
+ "Optionally specify a path relative to <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a> "
+ "to put retrieved artifacts. Leave empty to use job workspace itself")
@Interpolative(variableSuggester="suggestVariables")
public String getDestinationPath() {
return destinationPath;
}
public void setDestinationPath(String destinationPath) {
this.destinationPath = destinationPath;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@SuppressWarnings("unused")
private static List<String> getJobChoices() {
return Job.getChoices();
}
@SuppressWarnings("unused")
private static List<ParamSpec> getParamSpecs() {
String jobName = (String) EditContext.get().getInputValue("jobName");
if (jobName != null) {
Component component = ComponentContext.get().getComponent();
BuildSpecAware buildSpecAware = WicketUtils.findInnermost(component, BuildSpecAware.class);
if (buildSpecAware != null) {
BuildSpec buildSpec = buildSpecAware.getBuildSpec();
if (buildSpec != null) {
Job job = buildSpec.getJobMap().get(jobName);
if (job != null)
return job.getParamSpecs();
}
}
}
return new ArrayList<>();
}
}

View File

@ -23,11 +23,11 @@ import io.onedev.server.model.support.issue.field.FieldUtils;
import io.onedev.server.model.support.issue.field.supply.FieldSupply;
import io.onedev.server.persistence.TransactionManager;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.FieldNamesProvider;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.web.editable.annotation.Multiline;
import io.onedev.server.web.editable.annotation.OmitName;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.FieldNamesProvider;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Multiline;
import io.onedev.server.annotation.OmitName;
@Editable(name="Create issue", order=300)
public class CreateIssueAction extends PostBuildAction {

View File

@ -1,39 +1,39 @@
package io.onedev.server.buildspec.job.action;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.model.Build;
import io.onedev.server.web.editable.annotation.ActionCondition;
import io.onedev.server.web.editable.annotation.Editable;
@Editable
public abstract class PostBuildAction implements Serializable {
private static final long serialVersionUID = 1L;
private String condition;
@Editable(order=100, description="Specify the condition current build must satisfy to execute this action")
@ActionCondition
@NotEmpty
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public abstract void execute(Build build);
public abstract String getDescription();
public void validateWith(BuildSpec buildSpec, Job job) {
io.onedev.server.buildspec.job.action.condition.ActionCondition.parse(job, condition);
}
}
package io.onedev.server.buildspec.job.action;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.model.Build;
import io.onedev.server.annotation.ActionCondition;
import io.onedev.server.annotation.Editable;
@Editable
public abstract class PostBuildAction implements Serializable {
private static final long serialVersionUID = 1L;
private String condition;
@Editable(order=100, description="Specify the condition current build must satisfy to execute this action")
@ActionCondition
@NotEmpty
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public abstract void execute(Build build);
public abstract String getDescription();
public void validateWith(BuildSpec buildSpec, Job job) {
io.onedev.server.buildspec.job.action.condition.ActionCondition.parse(job, condition);
}
}

View File

@ -1,6 +1,7 @@
package io.onedev.server.buildspec.job.action;
import io.onedev.server.OneDev;
import io.onedev.server.annotation.*;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.BuildSpecAware;
import io.onedev.server.buildspec.job.Job;
@ -12,7 +13,6 @@ import io.onedev.server.model.Build;
import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.MatrixRunner;
import io.onedev.server.web.editable.annotation.*;
import io.onedev.server.web.util.WicketUtils;
import org.apache.wicket.Component;

View File

@ -6,8 +6,8 @@ import io.onedev.server.OneDev;
import io.onedev.server.event.project.build.BuildFinished;
import io.onedev.server.model.Build;
import io.onedev.server.notification.BuildNotificationManager;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.NotificationReceiver;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.NotificationReceiver;
@Editable(name="Send notification", order=200)
public class SendNotificationAction extends PostBuildAction {

View File

@ -5,7 +5,7 @@ import io.onedev.k8shelper.DefaultCloneInfo;
import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UrlManager;
import io.onedev.server.model.Build;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable(name="Default", order=100)
public class DefaultCredential implements GitCredential {

View File

@ -4,7 +4,7 @@ import java.io.Serializable;
import io.onedev.k8shelper.CloneInfo;
import io.onedev.server.model.Build;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable
public interface GitCredential extends Serializable {

View File

@ -13,10 +13,10 @@ import io.onedev.server.OneDev;
import io.onedev.server.entitymanager.UrlManager;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.validation.Validatable;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
@Editable(name="HTTP(S)", order=200)
@ClassValidating

View File

@ -20,10 +20,10 @@ import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.model.support.administration.SshSetting;
import io.onedev.server.model.support.administration.SystemSetting;
import io.onedev.server.util.validation.Validatable;
import io.onedev.server.util.validation.annotation.ClassValidating;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.validation.Validatable;
import io.onedev.server.annotation.ClassValidating;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
@Editable(name="SSH", order=300)
@ClassValidating

View File

@ -6,7 +6,7 @@ import javax.annotation.Nullable;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable
public interface BuildProvider extends Serializable {

View File

@ -11,9 +11,9 @@ import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.util.EditContext;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.OmitName;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.OmitName;
@Editable(order=100, name="Last Finished of Specified Job")
public class LastFinishedBuild implements BuildProvider {

View File

@ -1,144 +1,144 @@
package io.onedev.server.buildspec.job.projectdependency;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.permission.AccessProject;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.facade.ProjectCache;
import io.onedev.server.web.editable.annotation.ChoiceProvider;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.web.editable.annotation.Patterns;
import io.onedev.server.web.page.project.ProjectPage;
import io.onedev.server.web.util.WicketUtils;
@Editable
public class ProjectDependency implements Serializable {
private static final long serialVersionUID = 1L;
private String projectPath;
private BuildProvider buildProvider = new LastFinishedBuild();
private String artifacts = "**";
private String destinationPath;
private String accessTokenSecret;
// change Named("projectPath") also if change name of this property
@Editable(order=200, name="Project", description="Specify project to retrieve artifacts from")
@ChoiceProvider("getProjectChoices")
@NotEmpty
public String getProjectPath() {
return projectPath;
}
public void setProjectPath(String projectPath) {
this.projectPath = projectPath;
}
@SuppressWarnings("unused")
private static List<String> getProjectChoices() {
List<String> choices = new ArrayList<>();
Project currentProject = ((ProjectPage)WicketUtils.getPage()).getProject();
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class);
ProjectCache cache = projectManager.cloneCache();
for (Project project: projectManager.getPermittedProjects(new AccessProject())) {
if (!project.equals(currentProject))
choices.add(cache.get(project.getId()).getPath());
}
Collections.sort(choices);
return choices;
}
@Editable(order=300, name="Build")
@NotNull
public BuildProvider getBuildProvider() {
return buildProvider;
}
public void setBuildProvider(BuildProvider buildProvider) {
this.buildProvider = buildProvider;
}
@Nullable
static Project getInputProject(EditContext editContext) {
String projectPath = (String) editContext.getInputValue("projectPath");
if (projectPath != null) {
Project project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
if (project != null && SecurityUtils.canReadCode(project))
return project;
}
return null;
}
@Editable(order=400, name="Artifacts to Retrieve", description="Specify artifacts to retrieve into <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a>. "
+ "Only published artifacts (via artifact publish step) can be retrieved.")
@Interpolative(variableSuggester="suggestVariables")
@Patterns(path=true)
@NotEmpty
public String getArtifacts() {
return artifacts;
}
public void setArtifacts(String artifacts) {
this.artifacts = artifacts;
}
@Editable(order=500, placeholder="Job workspace", description=""
+ "Optionally specify a path relative to <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a> "
+ "to put retrieved artifacts. Leave empty to use job workspace itself")
@Interpolative(variableSuggester="suggestVariables")
public String getDestinationPath() {
return destinationPath;
}
public void setDestinationPath(String destinationPath) {
this.destinationPath = destinationPath;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@Editable(order=500, placeholder="Access Anonymously", description="Specify a secret to be used as "
+ "access token to retrieve artifacts from above project. If not specified, project "
+ "artifacts will be accessed anonymously")
@ChoiceProvider("getAccessTokenSecretChoices")
@Nullable
public String getAccessTokenSecret() {
return accessTokenSecret;
}
public void setAccessTokenSecret(String accessTokenSecret) {
this.accessTokenSecret = accessTokenSecret;
}
@SuppressWarnings("unused")
private static List<String> getAccessTokenSecretChoices() {
return Project.get().getHierarchyJobSecrets()
.stream().map(it->it.getName()).collect(Collectors.toList());
}
}
package io.onedev.server.buildspec.job.projectdependency;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.model.Project;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.permission.AccessProject;
import io.onedev.server.util.EditContext;
import io.onedev.server.util.facade.ProjectCache;
import io.onedev.server.annotation.ChoiceProvider;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.web.page.project.ProjectPage;
import io.onedev.server.web.util.WicketUtils;
@Editable
public class ProjectDependency implements Serializable {
private static final long serialVersionUID = 1L;
private String projectPath;
private BuildProvider buildProvider = new LastFinishedBuild();
private String artifacts = "**";
private String destinationPath;
private String accessTokenSecret;
// change Named("projectPath") also if change name of this property
@Editable(order=200, name="Project", description="Specify project to retrieve artifacts from")
@ChoiceProvider("getProjectChoices")
@NotEmpty
public String getProjectPath() {
return projectPath;
}
public void setProjectPath(String projectPath) {
this.projectPath = projectPath;
}
@SuppressWarnings("unused")
private static List<String> getProjectChoices() {
List<String> choices = new ArrayList<>();
Project currentProject = ((ProjectPage)WicketUtils.getPage()).getProject();
ProjectManager projectManager = OneDev.getInstance(ProjectManager.class);
ProjectCache cache = projectManager.cloneCache();
for (Project project: projectManager.getPermittedProjects(new AccessProject())) {
if (!project.equals(currentProject))
choices.add(cache.get(project.getId()).getPath());
}
Collections.sort(choices);
return choices;
}
@Editable(order=300, name="Build")
@NotNull
public BuildProvider getBuildProvider() {
return buildProvider;
}
public void setBuildProvider(BuildProvider buildProvider) {
this.buildProvider = buildProvider;
}
@Nullable
static Project getInputProject(EditContext editContext) {
String projectPath = (String) editContext.getInputValue("projectPath");
if (projectPath != null) {
Project project = OneDev.getInstance(ProjectManager.class).findByPath(projectPath);
if (project != null && SecurityUtils.canReadCode(project))
return project;
}
return null;
}
@Editable(order=400, name="Artifacts to Retrieve", description="Specify artifacts to retrieve into <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a>. "
+ "Only published artifacts (via artifact publish step) can be retrieved.")
@Interpolative(variableSuggester="suggestVariables")
@Patterns(path=true)
@NotEmpty
public String getArtifacts() {
return artifacts;
}
public void setArtifacts(String artifacts) {
this.artifacts = artifacts;
}
@Editable(order=500, placeholder="Job workspace", description=""
+ "Optionally specify a path relative to <a href='https://docs.onedev.io/concepts#job-workspace'>job workspace</a> "
+ "to put retrieved artifacts. Leave empty to use job workspace itself")
@Interpolative(variableSuggester="suggestVariables")
public String getDestinationPath() {
return destinationPath;
}
public void setDestinationPath(String destinationPath) {
this.destinationPath = destinationPath;
}
@SuppressWarnings("unused")
private static List<InputSuggestion> suggestVariables(String matchWith) {
return BuildSpec.suggestVariables(matchWith, false, false, false);
}
@Editable(order=500, placeholder="Access Anonymously", description="Specify a secret to be used as "
+ "access token to retrieve artifacts from above project. If not specified, project "
+ "artifacts will be accessed anonymously")
@ChoiceProvider("getAccessTokenSecretChoices")
@Nullable
public String getAccessTokenSecret() {
return accessTokenSecret;
}
public void setAccessTokenSecret(String accessTokenSecret) {
this.accessTokenSecret = accessTokenSecret;
}
@SuppressWarnings("unused")
private static List<String> getAccessTokenSecretChoices() {
return Project.get().getHierarchyJobSecrets()
.stream().map(it->it.getName()).collect(Collectors.toList());
}
}

View File

@ -13,9 +13,9 @@ import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
import io.onedev.server.util.EditContext;
import io.onedev.server.web.behavior.inputassist.InputAssistBehavior;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Interpolative;
import io.onedev.server.web.editable.annotation.OmitName;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Interpolative;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.web.util.SuggestionUtils;
@Editable(order=200, name="Specify by Build Number")

View File

@ -12,8 +12,8 @@ import io.onedev.server.model.Project;
import io.onedev.server.util.match.Matcher;
import io.onedev.server.util.match.PathMatcher;
import io.onedev.server.util.patternset.PatternSet;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Patterns;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.web.util.SuggestionUtils;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;

View File

@ -8,7 +8,7 @@ import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.build.BuildFinished;
import io.onedev.server.model.Build;
import io.onedev.server.model.Build.Status;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
import java.util.List;

View File

@ -22,11 +22,11 @@ import io.onedev.server.util.ComponentContext;
import io.onedev.server.util.match.Matcher;
import io.onedev.server.util.match.PathMatcher;
import io.onedev.server.util.patternset.PatternSet;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.OmitName;
import io.onedev.server.web.editable.annotation.ParamSpecProvider;
import io.onedev.server.web.editable.annotation.Patterns;
import io.onedev.server.web.editable.annotation.VariableOption;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.OmitName;
import io.onedev.server.annotation.ParamSpecProvider;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.annotation.VariableOption;
import io.onedev.server.web.util.SuggestionUtils;
import io.onedev.server.web.util.WicketUtils;

View File

@ -5,7 +5,7 @@ import io.onedev.server.buildspec.job.TriggerMatch;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.pullrequest.PullRequestChanged;
import io.onedev.server.model.support.pullrequest.changedata.PullRequestDiscardData;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable(order=320, name="Pull request discard", description="Job will run on head commit of target branch")
public class PullRequestDiscardTrigger extends PullRequestTrigger {

View File

@ -5,7 +5,7 @@ import io.onedev.server.buildspec.job.TriggerMatch;
import io.onedev.server.event.project.ProjectEvent;
import io.onedev.server.event.project.pullrequest.PullRequestChanged;
import io.onedev.server.model.support.pullrequest.changedata.PullRequestMergeData;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.annotation.Editable;
@Editable(order=310, name="Pull request merge", description="Job will run on merge commit of target branch and source branch")
public class PullRequestMergeTrigger extends PullRequestTrigger {

View File

@ -10,8 +10,8 @@ import io.onedev.server.model.PullRequest;
import io.onedev.server.util.match.Matcher;
import io.onedev.server.util.match.PathMatcher;
import io.onedev.server.util.patternset.PatternSet;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.Patterns;
import io.onedev.server.annotation.Editable;
import io.onedev.server.annotation.Patterns;
import io.onedev.server.web.util.SuggestionUtils;
import org.eclipse.jgit.lib.Repository;

Some files were not shown because too many files have changed in this diff Show More