/*
* Copyright 2005-2016 Red Hat, Inc.
*
* Red Hat licenses this file to you under the Apache License, version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package io.fabric8.maven;
import io.fabric8.devops.connector.DevOpsConnector;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.letschat.LetsChatKubernetes;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.io.File;
/**
* Uses the <a href="https://github.com/fabric8io/fabric8/tree/master/components/fabric8-devops-connector">DevOps Connector</a>
* and an optional `fabric8.yml` file in the project to update the DevOps resources
* like chat room, issue tracker, jenkins builds and Kubernetes/OpenShift resources.
*/
@Mojo(name = "devops", requiresProject = false)
public class DevOpsMojo extends AbstractNamespacedMojo {
/**
* the current folder
*/
@Parameter(defaultValue = "${basedir}")
protected File basedir;
/**
* the gogs user name to use
*/
@Parameter(property = "fabric8.gogsUsername")
protected String username;
/**
* the gogs password
*/
@Parameter(property = "fabric8.gogsPassword")
protected String password;
/**
* the gogs branch to find the fabric8.yml if this goal is run outside of the source code
*/
@Parameter(property = "fabric8.gogsBranch", defaultValue = "master")
protected String branch;
/**
*
*/
@Parameter(property = "fabric8.repoName", defaultValue = "${project.artifactId}")
protected String repoName;
/**
*
*/
@Parameter(property = "fabric8.fullName")
protected String fullName;
/**
*
*/
@Parameter(property = "fabric8.gitUrl")
protected String gitUrl;
/**
*
*/
@Parameter(property = "fabric8.localGitUrl")
protected String localGitUrl;
/**
* The webhook secret used for generic and github webhooks
*/
@Parameter(property = "fabric8.webhookSecret", defaultValue = "secret101")
protected String secret;
/**
* the build image stream name
*/
@Parameter(property = "fabric8.buildImageStream", defaultValue = "triggerJenkins")
protected String buildImageStream;
/**
* the build image stream tag
*/
@Parameter(property = "fabric8.buildImageTag", defaultValue = "latest")
protected String buildImageTag;
/**
* The name of the jenkins job to link to as the first job in the pipeline
*/
@Parameter(property = "fabric8.jenkinsJob")
protected String jenkinsJob;
/**
* The name of the jenkins monitor view
*/
@Parameter(property = "fabric8.jenkinsMonitorView")
protected String jenkinsMonitorView;
/**
* The name of the jenkins pipline view
*/
@Parameter(property = "fabric8.jenkinsPipelineView")
protected String jenkinsPipelineView;
/**
* The name of the taiga project name to use
*/
@Parameter(property = "fabric8.tagiaProjectName", defaultValue = "${fabric8.repoName}")
protected String taigaProjectName;
/**
* The slug name of the project in Taiga or will be auto-generated from the user and project name if not configured
*/
@Parameter(property = "fabric8.taigaProjectSlug")
protected String taigaProjectSlug;
/**
* The project page to link to
*/
@Parameter(property = "fabric8.taigaProjectLinkPage", defaultValue = "backlog")
protected String taigaProjectLinkPage;
/**
* The label for the issue tracker/kanban/scrum taiga project link
*/
@Parameter(property = "fabric8.taigaProjectLinkLabel", defaultValue = "Backlog")
protected String taigaProjectLinkLabel;
/**
* The team page to link to
*/
@Parameter(property = "fabric8.taigaTeamLinkPage", defaultValue = "team")
protected String taigaTeamLinkPage;
/**
* The label for the team page
*/
@Parameter(property = "fabric8.taigaTeamLinkLabel", defaultValue = "Team")
protected String taigaTeamLinkLabel;
/**
* Should we auto-create projects in taiga if they are missing?
*/
@Parameter(property = "fabric8.taigaAutoCreate", defaultValue = "true")
protected boolean taigaAutoCreate;
/**
* Should we enable Taiga integration
*/
@Parameter(property = "fabric8.taigaEnabled", defaultValue = "true")
protected boolean taigaEnabled;
/**
* Should we enable LetsChat integration if the
* {@link LetsChatKubernetes#LETSCHAT_HUBOT_TOKEN} environment variable is enabled
*/
@Parameter(property = "fabric8.letschatEnabled", defaultValue = "true")
protected boolean letschatEnabled;
/**
* The label for the chat room page
*/
@Parameter(property = "fabric8.letschatRoomLinkLabel", defaultValue = "Room")
protected String letschatRoomLinkLabel;
/**
* The expression used to define the room name for this project; using expressions like
* <code>${namespace}</code> or <code>${repoName}</code> to replace project specific values
*
*/
@Parameter(property = "fabric8.letschatRoomLinkLabel", defaultValue = "fabric8_${namespace}")
protected String letschatRoomExpression;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
KubernetesClient kubernetes = getKubernetes();
DevOpsConnector connector = new DevOpsConnector();
connector.setKubernetes(kubernetes);
connector.setUsername(username);
connector.setPassword(password);
connector.setBranch(branch);
connector.setBasedir(basedir);
connector.setRepoName(repoName);
connector.setFullName(fullName);
connector.setGitUrl(gitUrl);
connector.setLocalGitUrl(localGitUrl);
connector.setSecret(secret);
connector.setBuildImageStream(buildImageStream);
connector.setBuildImageTag(buildImageTag);
connector.setJenkinsJob(jenkinsJob);
connector.setJenkinsMonitorView(jenkinsMonitorView);
connector.setJenkinsPipelineView(jenkinsPipelineView);
connector.setTaigaProjectName(taigaProjectName);
connector.setTaigaProjectSlug(taigaProjectSlug);
connector.setTaigaProjectLinkPage(taigaProjectLinkPage);
connector.setTaigaProjectLinkLabel(taigaProjectLinkLabel);
connector.setTaigaTeamLinkPage(taigaTeamLinkPage);
connector.setTaigaTeamLinkLabel(taigaTeamLinkLabel);
connector.setTaigaAutoCreate(taigaAutoCreate);
connector.setTaigaEnabled(taigaEnabled);
connector.setLetschatEnabled(letschatEnabled);
connector.setLetschatRoomLinkLabel(letschatRoomLinkLabel);
connector.setLetschatRoomExpression(letschatRoomExpression);
getLog().debug("Using connector: " + connector);
try {
connector.execute();
} catch (Exception e) {
getLog().error("Failed to update DevOps resources: " + e, e);
throw new MojoExecutionException("Failed to update DevOps resources: " + e, e);
}
}
}