* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
packagejenkins.tasks;
importhudson.AbortException;
importhudson.Extension;
importhudson.FilePath;
importhudson.Launcher;
importhudson.model.AbstractBuild;
importhudson.model.AbstractProject;
importhudson.model.Action;
importhudson.model.BuildListener;
importhudson.model.InvisibleAction;
importhudson.model.Job;
importhudson.model.Run;
importhudson.model.TaskListener;
importhudson.tasks.BuildStep;
importhudson.tasks.BuildStepDescriptor;
importhudson.tasks.BuildStepMonitor;
importhudson.tasks.Builder;
importhudson.tasks.Publisher;
importjava.io.IOException;
importjava.util.Collection;
importjava.util.LinkedList;
importjava.util.List;
importjavax.annotation.Nonnull;
importjenkins.model.DependencyDeclarer;
importjenkins.model.RunAction2;
importjenkins.model.TransientActionFactory;
importorg.kohsuke.accmod.Restricted;
importorg.kohsuke.accmod.restrictions.DoNotUse;
/**
* A build step (like a {@link Builder} or {@link Publisher}) which may be called at an arbitrary time during a build (or multiple times), run, and be done.
* <p>Such a build step would typically be written according to some guidelines that ensure it makes few assumptions about how it is being used:
* <ul>
* <li>Do not implement {@link BuildStep#prebuild}, since this presupposes a particular execution order.
* <li>Do not implement {@link BuildStep#getProjectActions}, since this might never be called
* if the step is not part of the static configuration of a project; instead, add a {@link LastBuildAction} to a build when run.
* <li>Implement {@link BuildStep#getRequiredMonitorService} to be {@link BuildStepMonitor#NONE}, since this facility
* only makes sense for a step called exactly once per build.
* <li>Do not implement {@link DependencyDeclarer} since this would be limited to use in {@link AbstractProject}.
* <li>Return true unconditionally from {@link BuildStepDescriptor#isApplicable} (there is currently no filtering for other {@link Job} types).
* Marker for explicitly added build actions (as {@link Run#addAction}) which should imply a transient project action ({@link Job#getActions}) when present on the {@link Job#getLastSuccessfulBuild}.
* This can serve as a substitute for {@link BuildStep#getProjectActions} which does not assume that the project can enumerate the steps it would run before they are actually run.
* (Use {@link InvisibleAction} as a base class if you do not need to show anything in the build itself.)
*/
interfaceLastBuildActionextendsAction{
/**
* Optionally add some actions to the project owning this build.
* @return zero or more transient actions; if you need to know the {@link Job}, implement {@link RunAction2} and use {@link Run#getParent}
// TODO should there be an option to check lastCompletedBuild even if it failed?
// Not useful for, say, TestResultAction, since if you have a build that fails before recording test results, the job would then have no TestResultProjectAction.