pekko/project/CopyrightHeader.scala

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

113 lines
4.1 KiB
Scala
Raw Normal View History

2022-11-16 14:02:29 +08:00
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* license agreements; and to You under the Apache License, version 2.0:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* This file is part of the Apache Pekko project, derived from Akka.
*/
/*
2022-02-04 12:36:44 +01:00
* Copyright (C) 2018-2022 Lightbend Inc. <https://www.lightbend.com>
*/
package org.apache.pekko
import org.apache.pekko.PekkoValidatePullRequest.additionalTasks
import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport._
2022-11-16 14:02:29 +08:00
import de.heikoseeberger.sbtheader.{ CommentCreator, HeaderPlugin, NewLine }
import com.typesafe.sbt.MultiJvmPlugin.MultiJvmKeys._
2022-11-16 14:02:29 +08:00
import org.apache.commons.lang3.StringUtils
import sbt.Keys._
import sbt._
trait CopyrightHeader extends AutoPlugin {
override def requires: Plugins = HeaderPlugin
override def trigger: PluginTrigger = allRequirements
protected def headerMappingSettings: Seq[Def.Setting[_]] =
Seq(Compile, Test, MultiJvm).flatMap { config =>
inConfig(config)(
Seq(
2022-11-16 14:02:29 +08:00
headerLicense := Some(HeaderLicense.Custom(apacheHeader)),
headerMappings := headerMappings.value ++ Map(
HeaderFileType.scala -> cStyleComment,
HeaderFileType.java -> cStyleComment,
HeaderFileType("template") -> cStyleComment)))
}
override def projectSettings: Seq[Def.Setting[_]] = Def.settings(headerMappingSettings, additional)
def additional: Seq[Def.Setting[_]] =
Def.settings(Compile / compile := {
(Compile / headerCreate).value
(Compile / compile).value
},
Test / compile := {
(Test / headerCreate).value
(Test / compile).value
})
def headerFor(year: String): String =
s"Copyright (C) $year Lightbend Inc. <https://www.lightbend.com>"
2022-11-16 14:02:29 +08:00
def apacheHeader: String =
"""Licensed to the Apache Software Foundation (ASF) under one or more
|license agreements; and to You under the Apache License, version 2.0:
|
| https://www.apache.org/licenses/LICENSE-2.0
|
|This file is part of the Apache Pekko project, derived from Akka.
|""".stripMargin
2022-11-16 14:02:29 +08:00
val cStyleComment = HeaderCommentStyle.cStyleBlockComment.copy(commentCreator = new CommentCreator() {
override def apply(text: String, existingText: Option[String]): String = {
val formatted = existingText match {
2022-11-16 14:02:29 +08:00
case Some(existedText) if isValidCopyRightAnnotated(existedText) =>
existedText
case Some(existedText) if isOnlyLightbendCopyRightAnnotated(existedText) =>
HeaderCommentStyle.cStyleBlockComment.commentCreator(text, existingText) + NewLine * 2 + existedText
case Some(existedText) =>
2022-11-16 14:02:29 +08:00
throw new IllegalStateException(s"Unable to detect copyright for header:[${existedText}]")
case None =>
HeaderCommentStyle.cStyleBlockComment.commentCreator(text, existingText)
}
formatted.trim
}
2022-11-16 14:02:29 +08:00
private def isApacheCopyRighted(text: String): Boolean =
StringUtils.containsIgnoreCase(text, "licensed to the apache software foundation (asf)") ||
StringUtils.containsIgnoreCase(text, "www.apache.org/licenses/license-2.0")
private def isLAMPCopyRighted(text: String): Boolean =
StringUtils.containsIgnoreCase(text, "lamp/epfl")
private def isLightbendCopyRighted(text: String): Boolean =
StringUtils.containsIgnoreCase(text, "lightbend inc.")
private def isDebianCopyRighted(text: String): Boolean =
StringUtils.containsIgnoreCase(text, "debian.org")
private def isValidCopyRightAnnotated(text: String): Boolean = {
isApacheCopyRighted(text) || isLAMPCopyRighted(text) || isDebianCopyRighted(text)
}
private def isOnlyLightbendCopyRightAnnotated(text: String): Boolean = {
isLightbendCopyRighted(text) && !(isApacheCopyRighted(text) || isLAMPCopyRighted(text) || isDebianCopyRighted(
text))
}
})
}
object CopyrightHeader extends CopyrightHeader
object CopyrightHeaderInPr extends CopyrightHeader {
override val additional =
Def.settings(additionalTasks += Compile / headerCheck, additionalTasks += Test / headerCheck)
}