blob: 9819107039db04b16a36baef0e1f9e52095ce936 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 org.apache.sling.cli.impl.release;
import java.io.IOException;
import org.apache.sling.cli.impl.Command;
import org.apache.sling.cli.impl.jira.Version;
import org.apache.sling.cli.impl.jira.VersionFinder;
import org.apache.sling.cli.impl.nexus.StagingRepository;
import org.apache.sling.cli.impl.nexus.StagingRepositoryFinder;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(service = Command.class, property = {
Command.PROPERTY_NAME_COMMAND + "=release",
Command.PROPERTY_NAME_SUBCOMMAND + "=prepare-email",
Command.PROPERTY_NAME_SUMMARY + "=Prepares an email vote for the specified release." })
public class PrepareVoteEmailCommand implements Command {
// TODO - replace with file template
private static final String EMAIL_TEMPLATE ="To: \"Sling Developers List\" <dev@sling.apache.org>\n" +
"Subject: [VOTE] Release ##RELEASE_NAME##\n" +
"\n" +
"Hi,\n" +
"\n" +
"We solved ##FIXED_ISSUES_COUNT## issues in this release:\n" +
"https://issues.apache.org/jira/browse/SLING/fixforversion/##VERSION_ID##\n" +
"\n" +
"Staging repository:\n" +
"https://repository.apache.org/content/repositories/orgapachesling-##RELEASE_ID##/\n" +
"\n" +
"You can use this UNIX script to download the release and verify the signatures:\n" +
"https://gitbox.apache.org/repos/asf?p=sling-tooling-release.git;a=blob;f=check_staged_release.sh;hb=HEAD\n" +
"\n" +
"Usage:\n" +
"sh check_staged_release.sh ##RELEASE_ID## /tmp/sling-staging\n" +
"\n" +
"Please vote to approve this release:\n" +
"\n" +
" [ ] +1 Approve the release\n" +
" [ ] 0 Don't care\n" +
" [ ] -1 Don't release, because ...\n" +
"\n" +
"This majority vote is open for at least 72 hours.\n";
private final Logger logger = LoggerFactory.getLogger(getClass());
@Reference
private StagingRepositoryFinder repoFinder;
@Reference
private VersionFinder versionFinder;
@Override
public void execute(String target) {
try {
int repoId = Integer.parseInt(target);
StagingRepository repo = repoFinder.find(repoId);
Release release = Release.fromString(repo.getDescription());
Version version = versionFinder.find(release.getName());
String emailContents = EMAIL_TEMPLATE
.replace("##RELEASE_NAME##", release.getFullName())
.replace("##RELEASE_ID##", String.valueOf(repoId))
.replace("##VERSION_ID##", String.valueOf(version.getId()))
.replace("##FIXED_ISSUES_COUNT##", String.valueOf(version.getIssuesFixedCount()));
logger.info(emailContents);
} catch (IOException e) {
logger.warn("Failed executing command", e);
}
}
}