Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a job-level configuration parameter alwaysForceBuild. #1001

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ public class GitLabPushTrigger extends Trigger<Job<?, ?>> implements MergeReques
private boolean triggerOnAcceptedMergeRequest = false;
private boolean triggerOnClosedMergeRequest = false;
private boolean triggerOnApprovedMergeRequest = false;
private boolean alwaysForceBuild = false;
private TriggerOpenMergeRequest triggerOpenMergeRequestOnPush;
private boolean triggerOnNoteRequest = true;
private String noteRegex = "";
Expand Down Expand Up @@ -126,7 +127,7 @@ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerToBranchDeleteReq
boolean acceptMergeRequestOnSuccess, BranchFilterType branchFilterType,
String includeBranchesSpec, String excludeBranchesSpec, String sourceBranchRegex, String targetBranchRegex,
MergeRequestLabelFilterConfig mergeRequestLabelFilterConfig, String secretToken, boolean triggerOnPipelineEvent,
boolean triggerOnApprovedMergeRequest, String pendingBuildName, boolean cancelPendingBuildsOnUpdate) {
boolean triggerOnApprovedMergeRequest, String pendingBuildName, boolean cancelPendingBuildsOnUpdate, boolean alwaysForceBuild) {
this.triggerOnPush = triggerOnPush;
this.triggerToBranchDeleteRequest = triggerToBranchDeleteRequest;
this.triggerOnMergeRequest = triggerOnMergeRequest;
Expand All @@ -153,6 +154,7 @@ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerToBranchDeleteReq
this.triggerOnApprovedMergeRequest = triggerOnApprovedMergeRequest;
this.pendingBuildName = pendingBuildName;
this.cancelPendingBuildsOnUpdate = cancelPendingBuildsOnUpdate;
this.alwaysForceBuild = alwaysForceBuild;

initializeTriggerHandler();
initializeBranchFilter();
Expand Down Expand Up @@ -305,6 +307,8 @@ public boolean getCancelPendingBuildsOnUpdate() {
return this.cancelPendingBuildsOnUpdate;
}

public boolean getAlwaysForceBuild() { return this.alwaysForceBuild; }

@DataBoundSetter
public void setTriggerOnPush(boolean triggerOnPush) {
this.triggerOnPush = triggerOnPush;
Expand Down Expand Up @@ -440,6 +444,11 @@ public void setCancelPendingBuildsOnUpdate(boolean cancelPendingBuildsOnUpdate)
this.cancelPendingBuildsOnUpdate = cancelPendingBuildsOnUpdate;
}

@DataBoundSetter
public void setAlwaysForceBuild(boolean alwaysForceBuild) {
this.alwaysForceBuild = alwaysForceBuild;
}

// executes when the Trigger receives a push request
public void onPost(final PushHook hook) {
if (branchFilter == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface MergeRequestTriggerConfig {
boolean isSkipWorkInProgressMergeRequest();

boolean getCancelPendingBuildsOnUpdate();

boolean getAlwaysForceBuild();
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public static MergeRequestHookTriggerHandler newMergeRequestHookTriggerHandler(b
TriggerOpenMergeRequest triggerOpenMergeRequest,
boolean skipWorkInProgressMergeRequest,
boolean triggerOnApprovedMergeRequest,
boolean cancelPendingBuildsOnUpdate) {
boolean cancelPendingBuildsOnUpdate,
boolean alwaysForceBuild) {

TriggerConfigChain chain = new TriggerConfigChain();
chain
Expand All @@ -33,7 +34,7 @@ public static MergeRequestHookTriggerHandler newMergeRequestHookTriggerHandler(b
.acceptIf(triggerOpenMergeRequest != TriggerOpenMergeRequest.never, of(State.updated), null)
;

return new MergeRequestHookTriggerHandlerImpl(chain, skipWorkInProgressMergeRequest, cancelPendingBuildsOnUpdate);
return new MergeRequestHookTriggerHandlerImpl(chain, skipWorkInProgressMergeRequest, cancelPendingBuildsOnUpdate, alwaysForceBuild);
}

public static MergeRequestHookTriggerHandler newMergeRequestHookTriggerHandler(MergeRequestTriggerConfig config) {
Expand All @@ -43,7 +44,8 @@ public static MergeRequestHookTriggerHandler newMergeRequestHookTriggerHandler(M
config.getTriggerOpenMergeRequestOnPush(),
config.isSkipWorkInProgressMergeRequest(),
config.isTriggerOnApprovedMergeRequest(),
config.getCancelPendingBuildsOnUpdate());
config.getCancelPendingBuildsOnUpdate(),
config.getAlwaysForceBuild());
}

public static Config withConfig() {
Expand All @@ -58,6 +60,7 @@ public static class Config implements MergeRequestTriggerConfig {
private boolean skipWorkInProgressMergeRequest = false;
private boolean triggerOnApprovedMergeRequest = false;
private boolean cancelPendingBuildsOnUpdate = false;
private boolean alwaysForceBuild = false;

@Override
public boolean getTriggerOnMergeRequest() {
Expand Down Expand Up @@ -94,6 +97,9 @@ public boolean getCancelPendingBuildsOnUpdate() {
return cancelPendingBuildsOnUpdate;
}

@Override
public boolean getAlwaysForceBuild() { return alwaysForceBuild; }

public Config setTriggerOnMergeRequest(boolean triggerOnMergeRequest) {
this.triggerOnMergeRequest = triggerOnMergeRequest;
return this;
Expand Down Expand Up @@ -129,6 +135,11 @@ public Config setCancelPendingBuildsOnUpdate(boolean cancelPendingBuildsOnUpdate
return this;
}

public Config setAlwaysForceBuild(boolean alwaysForceBuild) {
this.alwaysForceBuild = alwaysForceBuild;
return this;
}

public MergeRequestHookTriggerHandler build() {
return newMergeRequestHookTriggerHandler(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
private final EnumSet<Action> skipBuiltYetCheckActions = EnumSet.of(Action.open, Action.approved);
private final EnumSet<Action> skipAllowedStateForActions = EnumSet.of(Action.approved);
private final boolean cancelPendingBuildsOnUpdate;
private final boolean alwaysForceBuild;

MergeRequestHookTriggerHandlerImpl(Collection<State> allowedStates, boolean skipWorkInProgressMergeRequest, boolean cancelPendingBuildsOnUpdate) {
this(allowedStates, EnumSet.noneOf(Action.class), skipWorkInProgressMergeRequest, cancelPendingBuildsOnUpdate);
Expand All @@ -53,13 +54,14 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
// any code using it should test it on higher level
@Deprecated
MergeRequestHookTriggerHandlerImpl(Collection<State> allowedStates, Collection<Action> allowedActions, boolean skipWorkInProgressMergeRequest, boolean cancelPendingBuildsOnUpdate) {
this(new TriggerConfigChain().add(allowedStates, null).add(null, allowedActions), skipWorkInProgressMergeRequest, cancelPendingBuildsOnUpdate);
this(new TriggerConfigChain().add(allowedStates, null).add(null, allowedActions), skipWorkInProgressMergeRequest, cancelPendingBuildsOnUpdate, false);
}

MergeRequestHookTriggerHandlerImpl(Predicate<MergeRequestObjectAttributes> triggerConfig, boolean skipWorkInProgressMergeRequest, boolean cancelPendingBuildsOnUpdate) {
MergeRequestHookTriggerHandlerImpl(Predicate<MergeRequestObjectAttributes> triggerConfig, boolean skipWorkInProgressMergeRequest, boolean cancelPendingBuildsOnUpdate, boolean alwaysForceBuild) {
this.triggerConfig = triggerConfig;
this.skipWorkInProgressMergeRequest = skipWorkInProgressMergeRequest;
this.cancelPendingBuildsOnUpdate = cancelPendingBuildsOnUpdate;
this.alwaysForceBuild = alwaysForceBuild;
}

@Override
Expand Down Expand Up @@ -190,6 +192,11 @@ private boolean isLastCommitNotYetBuild(Job<?, ?> project, MergeRequestHook hook
return true;
}

if(this.alwaysForceBuild == true) {
LOGGER.log(Level.INFO,"Job has alwaysForceBuild set, enforcing rebuild in isLastCommitNotYetBuild");
return true;
}

Action action = objectAttributes.getAction();
if (skipBuiltYetCheckActions.contains(action)) {
LOGGER.log(Level.FINEST, "Skipping LastCommitNotYetBuild check for {0} action", action);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
</table>
</f:entry>
<f:advanced>
<f:entry title="Always force build, even if the latest commit already has been built" field="alwaysForceBuild">
<f:checkbox default="false"/>
</f:entry>
<f:entry title="Enable [ci-skip]" field="ciSkip">
<f:checkbox default="true"/>
</f:entry>
Expand Down