| /* |
| * 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); |
| } |
| } |
| } |