Permalink
Browse files

changes after review

  • Loading branch information...
anicos committed Jul 17, 2017
2 parents af67f92 + 5feef78 commit f8bdad4ae436ad329ef2fcb1e330a593c32b749c
Showing with 4,116 additions and 3,668 deletions.
  1. +13 −0 .editorconfig
  2. +1 −0 .gitignore
  3. +1 −4 .travis.yml
  4. +100 −0 GETTING_STARTED.md
  5. +27 −18 README.md
  6. +6 −18 build.gradle
  7. +0 −1,300 docs/design/current-release-notes.md
  8. +0 −48 docs/design/new-release-notes.md
  9. +0 −71 docs/design/notable-release-notes.md
  10. +28 −0 docs/plugin-hierarchy.md
  11. +25 −0 docs/release-notes.md
  12. +5 −23 e2eTests/build.gradle
  13. +1 −1 pre-commit
  14. +10 −10 src/main/groovy/org/shipkit/gradle/BumpVersionFileTask.java
  15. +10 −38 src/main/groovy/org/shipkit/gradle/ReleaseConfiguration.java
  16. +24 −94 src/main/groovy/org/shipkit/gradle/ReleaseNeededTask.java
  17. +8 −2 src/main/groovy/org/shipkit/gradle/ReleaseNotesFetcherTask.java
  18. +28 −32 src/main/groovy/org/shipkit/gradle/UpdateReleaseNotesTask.java
  19. +0 −59 src/main/groovy/org/shipkit/gradle/exec/CompositeExecTask.java
  20. +23 −29 src/main/groovy/org/shipkit/gradle/exec/ExecCommand.java
  21. +39 −0 src/main/groovy/org/shipkit/gradle/exec/ShipkitExecTask.java
  22. +2 −5 src/main/groovy/org/shipkit/gradle/git/GitPushTask.java
  23. +30 −0 src/main/groovy/org/shipkit/gradle/init/InitShipkitFileTask.java
  24. +9 −11 src/main/groovy/org/shipkit/gradle/{ → init}/InitTravisTask.java
  25. +178 −0 src/main/groovy/org/shipkit/gradle/java/ComparePublicationsTask.java
  26. +83 −0 src/main/groovy/org/shipkit/gradle/java/DownloadPreviousPublicationsTask.java
  27. +15 −30 ...ipkit/{internal/gradle/AllContributorsFetcherTask.java → gradle/notes/FetchContributorsTask.java}
  28. +0 −87 src/main/groovy/org/shipkit/internal/comparison/DownloadPreviousReleaseArtifactsTask.java
  29. +2 −2 src/main/groovy/org/shipkit/internal/comparison/PomComparator.java
  30. +0 −143 src/main/groovy/org/shipkit/internal/comparison/PublicationsComparatorTask.java
  31. +7 −3 src/main/groovy/org/shipkit/internal/comparison/ZipComparator.java
  32. +2 −2 src/main/groovy/org/shipkit/internal/comparison/artifact/DefaultArtifactUrlResolverFactory.java
  33. +20 −7 src/main/groovy/org/shipkit/internal/exec/DefaultProcessRunner.java
  34. +50 −0 src/main/groovy/org/shipkit/internal/exec/ExternalProcessStream.java
  35. +0 −36 src/main/groovy/org/shipkit/internal/gradle/AutoReleaseNotesPlugin.java
  36. +0 −44 src/main/groovy/org/shipkit/internal/gradle/AutoVersioningPlugin.java
  37. +0 −61 src/main/groovy/org/shipkit/internal/gradle/CloneGitRepositoryTask.java
  38. +0 −102 src/main/groovy/org/shipkit/internal/gradle/E2ETestingPlugin.java
  39. +0 −34 src/main/groovy/org/shipkit/internal/gradle/GitCheckOutTask.java
  40. +0 −29 src/main/groovy/org/shipkit/internal/gradle/GradlePluginReleasingPlugin.java
  41. +0 −108 src/main/groovy/org/shipkit/internal/gradle/InitConfigFileTask.java
  42. +15 −16 src/main/groovy/org/shipkit/internal/gradle/ReleaseNotesPlugin.java
  43. +7 −10 src/main/groovy/org/shipkit/internal/gradle/{BintrayPlugin.java → ShipkitBintrayPlugin.java}
  44. +29 −7 src/main/groovy/org/shipkit/internal/gradle/ShipkitJavaPlugin.java
  45. +37 −37 src/main/groovy/org/shipkit/internal/gradle/TravisPlugin.java
  46. +226 −0 src/main/groovy/org/shipkit/internal/gradle/VersionUpgradeConsumerPlugin.java
  47. +20 −4 src/main/groovy/org/shipkit/internal/gradle/VersioningPlugin.java
  48. +9 −10 src/main/groovy/org/shipkit/internal/gradle/configuration/BasicValidator.java
  49. +18 −17 src/main/groovy/org/shipkit/internal/gradle/{ → configuration}/ReleaseConfigurationPlugin.java
  50. +15 −8 src/main/groovy/org/shipkit/internal/gradle/{ → contributors}/ContributorsPlugin.java
  51. +105 −0 src/main/groovy/org/shipkit/internal/gradle/e2e/E2ETestTask.java
  52. +31 −0 src/main/groovy/org/shipkit/internal/gradle/e2e/E2ETestingPlugin.java
  53. +43 −3 src/main/groovy/org/shipkit/internal/gradle/{ → e2e}/RunTestReleaseTask.java
  54. +51 −0 src/main/groovy/org/shipkit/internal/gradle/exec/ExecCommandFactory.java
  55. +38 −0 src/main/groovy/org/shipkit/internal/gradle/exec/ShipkitExec.java
  56. +122 −0 src/main/groovy/org/shipkit/internal/gradle/git/CloneGitRepositoryTask.java
  57. +80 −0 src/main/groovy/org/shipkit/internal/gradle/git/GitCheckOutTask.java
  58. +3 −3 src/main/groovy/org/shipkit/internal/gradle/{ → git}/GitCommitTask.java
  59. +7 −16 src/main/groovy/org/shipkit/internal/gradle/{ → git}/GitPlugin.java
  60. +10 −3 src/main/groovy/org/shipkit/internal/gradle/git/{GitPushArgs.java → GitPush.java}
  61. +5 −16 src/main/groovy/org/shipkit/internal/gradle/{ → git}/GitSetupPlugin.java
  62. +6 −3 src/main/groovy/org/shipkit/internal/gradle/{ → init}/InitPlugin.java
  63. +1 −1 src/main/groovy/org/shipkit/internal/gradle/{ → init}/InitVersioningTask.java
  64. +94 −0 src/main/groovy/org/shipkit/internal/gradle/init/tasks/InitShipkitFile.java
  65. +25 −0 src/main/groovy/org/shipkit/internal/gradle/init/tasks/InitTravis.java
  66. +35 −51 ...shipkit/internal/gradle/{PublicationsComparatorPlugin.java → java/ComparePublicationsPlugin.java}
  67. +10 −7 src/main/groovy/org/shipkit/internal/gradle/{JavaLibraryPlugin.java → java/JavaBintrayPlugin.java}
  68. +72 −0 src/main/groovy/org/shipkit/internal/gradle/java/JavaLibraryPlugin.java
  69. +14 −48 ...ain/groovy/org/shipkit/internal/gradle/{BaseJavaLibraryPlugin.java → java/JavaPublishPlugin.java}
  70. +21 −7 src/main/groovy/org/shipkit/internal/gradle/{ → java}/PomContributorsPlugin.java
  71. +66 −0 src/main/groovy/org/shipkit/internal/gradle/java/tasks/ComparePublications.java
  72. +31 −0 src/main/groovy/org/shipkit/internal/gradle/java/tasks/DownloadPreviousPublications.java
  73. +29 −0 src/main/groovy/org/shipkit/internal/gradle/notes/tasks/FetchContributors.java
  74. +1 −1 src/main/groovy/org/shipkit/internal/gradle/{ → plugin}/PluginDiscoveryPlugin.java
  75. +30 −0 src/main/groovy/org/shipkit/internal/gradle/plugin/ShipkitGradlePlugin.java
  76. +72 −0 src/main/groovy/org/shipkit/internal/gradle/release/BintrayReleasePlugin.java
  77. +33 −15 src/main/groovy/org/shipkit/internal/gradle/release/CiReleasePlugin.java
  78. +109 −0 src/main/groovy/org/shipkit/internal/gradle/release/GradlePortalReleasePlugin.java
  79. +0 −109 src/main/groovy/org/shipkit/internal/gradle/release/JavaReleasePlugin.java
  80. +10 −8 src/main/groovy/org/shipkit/internal/gradle/{ → release}/ReleaseNeededPlugin.java
  81. +19 −13 src/main/groovy/org/shipkit/internal/gradle/release/ReleasePlugin.java
  82. +50 −0 src/main/groovy/org/shipkit/internal/gradle/release/tasks/ComparisonResults.java
  83. +57 −0 src/main/groovy/org/shipkit/internal/gradle/release/tasks/ReleaseNeeded.java
  84. +1 −1 src/main/groovy/org/shipkit/internal/gradle/util/FileUtil.groovy
  85. +0 −2 src/main/groovy/org/shipkit/internal/gradle/util/GitUtil.java
  86. +8 −1 src/main/groovy/org/shipkit/internal/gradle/util/StringUtil.groovy
  87. +1 −5 src/main/groovy/org/shipkit/internal/gradle/util/TaskMaker.java
  88. +24 −0 src/main/groovy/org/shipkit/internal/gradle/util/TaskSuccessfulMessage.java
  89. +138 −0 src/main/groovy/org/shipkit/internal/gradle/versionupgrade/CreatePullRequestTask.java
  90. +82 −0 src/main/groovy/org/shipkit/internal/gradle/versionupgrade/ReplaceVersionTask.java
  91. +0 −25 src/main/groovy/org/shipkit/internal/notes/about/CounterExtractor.java
  92. +0 −28 src/main/groovy/org/shipkit/internal/notes/about/InformationAboutProvider.java
  93. +0 −19 src/main/groovy/org/shipkit/internal/notes/about/ReleaseNoteCounter.java
  94. +0 −18 src/main/groovy/org/shipkit/internal/notes/about/ReleaseNoteFileReader.java
  95. +1 −1 src/main/groovy/org/shipkit/internal/notes/contributors/AllContributorsFetcher.java
  96. +2 −2 src/main/groovy/org/shipkit/internal/notes/contributors/AllContributorsSerializer.java
  97. +0 −4 src/main/groovy/org/shipkit/internal/notes/contributors/ContributorsProvider.java
  98. +0 −5 src/main/groovy/org/shipkit/internal/notes/contributors/GitHubContributorsProvider.java
  99. +6 −6 src/main/groovy/org/shipkit/internal/notes/format/DetailedFormatter.java
  100. +2 −2 src/main/groovy/org/shipkit/internal/notes/format/NotableFormatter.java
  101. +2 −2 src/main/groovy/org/shipkit/internal/notes/format/ReleaseNotesFormatters.java
  102. +1 −1 src/main/groovy/org/shipkit/internal/notes/{about → header}/BufferedReaderWrapper.java
  103. +1 −1 src/main/groovy/org/shipkit/internal/notes/{about → header}/BufferedWriterWrapper.java
  104. +11 −0 src/main/groovy/org/shipkit/internal/notes/header/HeaderProvider.java
  105. +4 −4 src/main/groovy/org/shipkit/internal/notes/{about/InfoAboutRemover.java → header/HeaderRemover.java}
  106. +0 −66 src/main/groovy/org/shipkit/internal/notes/internal/DateFormat.java
  107. +3 −3 src/main/groovy/org/shipkit/internal/notes/util/GitHubListFetcher.java
  108. +3 −3 src/main/groovy/org/shipkit/internal/notes/util/GitHubObjectFetcher.java
  109. +1 −1 src/main/groovy/org/shipkit/internal/notes/util/IOUtil.java
  110. +2 −2 src/main/groovy/org/shipkit/internal/notes/vcs/DefaultReleasedVersionsProvider.java
  111. +1 −1 src/main/groovy/org/shipkit/internal/notes/vcs/RevisionDateProvider.java
  112. +53 −0 src/main/groovy/org/shipkit/internal/util/DateUtil.java
  113. +20 −1 src/main/groovy/org/shipkit/internal/util/EnvVariables.java
  114. +56 −0 src/main/groovy/org/shipkit/internal/util/GitHubApi.java
  115. +1 −3 src/main/groovy/org/shipkit/internal/{gradle → util}/TemplateResolver.java
  116. +1 −3 src/main/groovy/org/shipkit/internal/version/Version.java
  117. +0 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.auto-release-notes.properties
  118. +0 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.auto-versioning.properties
  119. +0 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.base-java-library.properties
  120. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.bintray-release.properties
  121. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.bintray.properties
  122. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.ci-release.properties
  123. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.compare-publications.properties
  124. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.contributors.properties
  125. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.e2e-test.properties
  126. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.gradle-plugin.properties
  127. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.java-bintray.properties
  128. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.java-library.properties
  129. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.java-publish.properties
  130. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.pom-contributors.properties
  131. +0 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.publications-comparator.properties
  132. +1 −1 src/main/resources/META-INF/gradle-plugins/org.shipkit.release-needed.properties
  133. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.release.properties
  134. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.travis.properties
  135. +1 −0 src/main/resources/META-INF/gradle-plugins/org.shipkit.version-upgrade-consumer.properties
  136. +8 −7 src/main/resources/template.travis.yml
  137. +15 −1 src/test/groovy/org/shipkit/gradle/BumpVersionFileTaskTest.groovy
  138. +33 −74 src/test/groovy/org/shipkit/gradle/ReleaseNeededTaskTest.groovy
  139. +46 −0 src/test/groovy/org/shipkit/gradle/ShipkitGradlePluginIntegTest.groovy
  140. +5 −5 src/test/groovy/org/shipkit/gradle/{ShipkitJavaPluginIntegTest.groovy → ShipkitJavaIntegTest.groovy}
  141. +4 −42 src/test/groovy/org/shipkit/gradle/UpdateReleaseNotesTaskTest.groovy
  142. +25 −0 src/test/groovy/org/shipkit/gradle/exec/ShipkitExecTaskTest.groovy
  143. +2 −2 ...test/groovy/org/shipkit/internal/comparison/artifact/DefaultArtifactUrlResolverFactoryTest.groovy
  144. +8 −0 src/test/groovy/org/shipkit/internal/exec/DefaultProcessRunnerTest.groovy
  145. +18 −0 src/test/groovy/org/shipkit/internal/exec/ExternalProcessStreamTest.groovy
  146. +0 −11 src/test/groovy/org/shipkit/internal/gradle/AutoReleaseNotesPluginTest.groovy
  147. +0 −12 src/test/groovy/org/shipkit/internal/gradle/AutoVersioningPluginTest.groovy
  148. +0 −11 src/test/groovy/org/shipkit/internal/gradle/BaseJavaLibraryPluginTest.groovy
  149. +38 −0 src/test/groovy/org/shipkit/internal/gradle/CloneGitRepositoryTaskTest.groovy
  150. +0 −40 src/test/groovy/org/shipkit/internal/gradle/E2ETestingPluginTest.groovy
  151. +0 −81 src/test/groovy/org/shipkit/internal/gradle/InitConfigFileTaskTest.groovy
  152. +0 −14 src/test/groovy/org/shipkit/internal/gradle/JavaLibraryPluginTest.groovy
  153. +0 −15 src/test/groovy/org/shipkit/internal/gradle/PomContributorsPluginTest.groovy
  154. +64 −0 src/test/groovy/org/shipkit/internal/gradle/ReleaseConfigurationGettersAndSettersTest.groovy
  155. +0 −9 src/test/groovy/org/shipkit/internal/gradle/ReleaseConfigurationTest.groovy
  156. +2 −0 src/test/groovy/org/shipkit/internal/gradle/ReleaseNotesPluginTest.groovy
  157. +16 −1 ...t/groovy/org/shipkit/internal/gradle/{BintrayPluginTest.groovy → ShipkitBintrayPluginTest.groovy}
  158. +2 −0 src/test/groovy/org/shipkit/internal/gradle/TravisPluginTest.groovy
  159. +139 −0 src/test/groovy/org/shipkit/internal/gradle/VersionUpgradeConsumerPluginTest.groovy
  160. +28 −3 src/test/groovy/org/shipkit/internal/gradle/VersioningPluginTest.groovy
  161. +34 −0 src/test/groovy/org/shipkit/internal/gradle/configuration/BasicValidatorTest.groovy
  162. +3 −3 src/test/groovy/org/shipkit/internal/gradle/configuration/LazyConfigurationTest.groovy
  163. +9 −8 src/test/groovy/org/shipkit/internal/gradle/{ → configuration}/ReleaseConfigurationPluginTest.groovy
  164. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → contributors}/ContributorsPluginTest.groovy
  165. +32 −0 src/test/groovy/org/shipkit/internal/gradle/e2e/E2ETestTaskTest.groovy
  166. +18 −0 src/test/groovy/org/shipkit/internal/gradle/e2e/E2ETestingPluginTest.groovy
  167. +29 −0 src/test/groovy/org/shipkit/internal/gradle/exec/ExecCommandFactoryTest.groovy
  168. +37 −0 src/test/groovy/org/shipkit/internal/gradle/git/GitCheckOutTaskTest.groovy
  169. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → git}/GitCommitTaskTest.groovy
  170. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → git}/GitPluginTest.groovy
  171. +4 −4 src/test/groovy/org/shipkit/internal/gradle/git/{GitPushArgsTest.groovy → GitPushTest.groovy}
  172. +2 −2 src/test/groovy/org/shipkit/internal/gradle/{ → init}/InitPluginTest.groovy
  173. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → init}/InitVersioningTaskTest.groovy
  174. +70 −0 src/test/groovy/org/shipkit/internal/gradle/init/tasks/InitShipkitFileTest.groovy
  175. +59 −29 ...rnal/gradle/{PublicationsComparatorPluginTest.groovy → java/ComparePublicationsPluginTest.groovy}
  176. +11 −0 src/test/groovy/org/shipkit/internal/gradle/java/JavaBintrayPluginTest.groovy
  177. +14 −0 src/test/groovy/org/shipkit/internal/gradle/java/JavaLibraryPluginTest.groovy
  178. +11 −0 src/test/groovy/org/shipkit/internal/gradle/java/JavaPublishPluginTest.groovy
  179. +11 −0 src/test/groovy/org/shipkit/internal/gradle/java/PomContributorsPluginTest.groovy
  180. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → plugin}/PluginDiscoveryPluginTest.groovy
  181. +2 −2 .../internal/gradle/{GradlePluginReleasingPluginTest.groovy → plugin/ShipkitGradlePluginTest.groovy}
  182. +4 −3 .../shipkit/internal/gradle/release/{JavaReleasePluginTest.groovy → BintrayReleasePluginTest.groovy}
  183. +73 −0 src/test/groovy/org/shipkit/internal/gradle/release/GradlePortalReleasePluginTest.groovy
  184. +1 −1 src/test/groovy/org/shipkit/internal/gradle/{ → release}/ReleaseNeededPluginTest.groovy
  185. +37 −0 src/test/groovy/org/shipkit/internal/gradle/release/tasks/ComparisonResultsTest.groovy
  186. +22 −0 src/test/groovy/org/shipkit/internal/gradle/util/GitUtilTest.groovy
  187. +14 −0 src/test/groovy/org/shipkit/internal/gradle/util/StringUtilTest.groovy
  188. +31 −0 src/test/groovy/org/shipkit/internal/gradle/versionupgrade/CreatePullRequestTaskTest.groovy
  189. +32 −0 src/test/groovy/org/shipkit/internal/gradle/versionupgrade/ReplaceVersionTaskTest.groovy
  190. +0 −39 src/test/groovy/org/shipkit/internal/notes/about/CounterExtractorTest.groovy
  191. +0 −47 src/test/groovy/org/shipkit/internal/notes/about/InfoAboutRemoverTest.groovy
  192. +0 −57 src/test/groovy/org/shipkit/internal/notes/about/InformationAboutProviderTest.groovy
  193. +1 −1 src/test/groovy/org/shipkit/internal/notes/contributors/RecentContributorsFetcherTest.groovy
  194. +16 −0 src/test/groovy/org/shipkit/internal/notes/header/HeaderProviderTest.groovy
  195. +34 −0 src/test/groovy/org/shipkit/internal/notes/header/HeaderRemoverTest.groovy
  196. +0 −32 src/test/groovy/org/shipkit/internal/notes/internal/DateFormatTest.groovy
  197. +4 −4 src/test/groovy/org/shipkit/internal/notes/vcs/DefaultReleasedVersionsProviderTest.groovy
  198. +4 −4 src/test/groovy/org/shipkit/internal/notes/vcs/RevisionDateProviderTest.groovy
  199. +26 −1 src/test/groovy/org/shipkit/internal/util/DateUtilTest.groovy
  200. +11 −0 src/test/groovy/org/shipkit/internal/util/EnvVariablesTest.groovy
  201. +19 −0 src/test/groovy/org/shipkit/internal/util/GitHubApiTest.groovy
  202. +1 −1 src/test/groovy/org/shipkit/internal/{gradle → util}/TemplateResolverTest.groovy
  203. +2 −0 src/test/groovy/testutil/GradleSpecification.groovy
  204. +12 −11 src/test/groovy/testutil/PluginSpecification.groovy
  205. +123 −0 src/test/groovy/testutil/ReflectionUtil.groovy
  206. +2 −2 version.properties
View
@@ -0,0 +1,13 @@
# EditorConfig: http://EditorConfig.org
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.json]
indent_size = 2
View
@@ -1,6 +1,7 @@
.gradle
build/
classes/
out/
# Ignore Gradle GUI config
gradle-app.setting
View
@@ -22,7 +22,4 @@ install:
- true
script:
- ./gradlew build -PcheckJava6Compatibility -s -i
after_success:
- ./gradlew assertReleaseNeeded && ./gradlew ciReleasePrepare && ./gradlew travisRelease -s
- ./gradlew build -PcheckJava6Compatibility -s -i && ./gradlew ciPerformRelease
View
@@ -0,0 +1,100 @@
## How Shipkit works?
### Version bumps
Yesterday version is already old.
Frequent, automated releases need some way to manage incrementing versions.
Welcome to continuous delivery!
#### Intro
Shipkit needs to be able to automatically use the right version when building and publishing.
This way, you don't need to deal with changing/updating the version for every release.
Every release will produce n+1 version.
There are multiple options how to deal with version bumps.
Some projects automatically infer the version of the next release by looking at the nearest tag in git.
This approach is interesting but it gets complicated when you want to release specific version (like 1.0).
Shipkit uses a simple ```version.properties``` file that contains the version number.
#### Nitty gritty
Every release, the version file is automatically updated with a new version number.
The next version after "1.0.0" is "1.0.1", then "1.0.2", etc.
If you need to release a specific version, like "1.1.0" or "2.0.0" just update ```version.properties``` file manually and include that in your pull request.
We received feedback that using version file clutters git history with version bump commits.
Since we need to commit changes to release notes / changelog file to the repository, version bumps actually don't introduce any extra commits.
There is already a commit for every release.
Also, we find it useful to see the progression of releases when reviewing git log.
When debugging, learning the codebase, we usually review git history for specific source file.
Therefore, high volume of changes to ```version.properties``` is not really troublesome.
Shipkit uses ```version.properties``` file also for other version related information, like the version of previous release.
It is used for automated generation of release notes.
#### User guide
Shipkit will automatically update the version file on every release so you don't really need to do anything.
Occasionally, you might need to release a more notable version like new major version.
In this case, just update the file manually and commit that change.
Shipkit will build and release the version as specified in the file.
What do you think? Start discussion by opening a ticket in GitHub!
### Release notes
Your users need to know what they are getting when upgrading versions.
You want to build great software? Have a great changelog.
You want to build community? Have every contributor listed by name in the release notes.
#### Intro
Shipkit will automatically generate high quality, human readable, well formatted release notes markdown file.
You only need to include #id of the GitHub ticket number in commit messages.
That happens automatically, if you follow the GitHub pull request model.
Shipkit will motivate you to work in your project with higher craftsmanship:
- the better descriptions of your GitHub tickets / pull requests -> the better the release notes
- the more disciplined the team is around using pull requests on daily basis -> the more content in release notes
#### Nitty gritty
During the release, Shipkit loads git log and looks for GitHub ticket numbers in commit messages.
For every ticket found, we reach out to GitHub REST endpoint to get the issue/pull request data.
Using that data we format and create the release notes.
At the moment, we only load GitHub "pull requests" and ignore GitHub "issues".
This way we can avoid duplication in release notes.
Showing both: the issue closed and the pull request that fixed the issue introduces noise.
Using pull requests will also push teams towards building higher quality software.
We strongly recommend to be disciplined, use pull requests for every change and benefit from peer review and knowledge sharing.
To talk to GitHub REST API Shipkit needs GitHub read-only auth token.
It is very easy and quick to generate on GitHub website.
Then, you only need to configure it in ```shipkit.gradle``` file.
#### User guide
When you made your first release, you will notice where Shipkit puts the release notes by default.
You can configure the location/name of the release notes file:
```gradle
//shipkit.gradle
shipkit {
releaseNotes.file = "CHANGELOG.md"
}
```
Use pull requests for all code changes!
This builds stronger team, with high visibility of changes and constant peer review.
When merging pull request in GitHub, the default commit message will have #id of the PR.
This is perfect of Shipkit because we can pick up the id from commit message during release notes generation.
How does it sound? Start discussion by opening a ticket in GitHub!
### Automated releases
### Avoiding unnecessary releases
### Publishing Java libraries
View
@@ -4,19 +4,29 @@
## Imagine
Imagine the world where you call pull in a new version of some Open Source library and not worry if it breaks compatibility. Imagine that you can submit a pull request to some project, have it reviewed timely, and have the new version with your fix available to you in minutes after your PR is merged. Imagine that for any dependency you consider upgrading, you can view its neatly and consistently maintained release notes. Imagine that you can set up practical Continuous Delivery automation in your project in minutes, by using a well behaving and documented Gradle plugin. Imagine that you can focus on code and features while the release management, versioning, publishing, release notes generation is taken care for you automagically.
You will be more productive if your releases are fully automated and happen on every change.
You will build great product if you can focus on code & features, but not on the release overhead.
Shipkit will make it happen.
Shipkit is a toolkit for shipping it.
This is the goal of "Shipkit project". The project started in November 2016 and is currently in progress.
Fully automated releases are only the first part of the journey...
## True North Star
Imagine the world where you call pull in a new version of some Open Source library and not worry if it breaks compatibility.
Imagine that you can submit a pull request to some project, have it reviewed timely, and have the new version with your fix available to you in minutes after your PR is merged.
Imagine that for any dependency you consider upgrading, you can view its neatly and consistently maintained release notes.
Imagine that you can set up practical Continuous Delivery automation in your project in minutes, by using a well behaving and documented Gradle plugin.
Imagine that you can focus on code and features while the release management, versioning, publishing, release notes generation is taken care for you automagically.
The goal of the Shipkit project is to provide easy-to-setup Continuous Delivery tooling. We would like other teams to take advantage of rapid development, frictionless releases and semantic versioning just like [we do it in Mockito](https://github.com/mockito/mockito/wiki/Continuous-Delivery-Overview). We plan to make Shipkit generic and neatly documented. It will be a set of libraries and Gradle plugins that greatly simplify enabling Continuous Delivery for Java libraries.
This is the goal of "Shipkit" project.
The project started in November 2016 and is currently in progress.
We already use this project to drive [Continuous Delivery](https://github.com/mockito/mockito/wiki/Continuous-Delivery-Overview) of Mockito Java library
and automatically publish new versions to
### True North Star
Every team should be empowered to develop with rapid velocity, frictionless releases and semantic versioning just like [we do it in Mockito](https://github.com/mockito/mockito/wiki/Continuous-Delivery-Overview).
Shipkit enables Mockito to automatically publish new versions to
[2M Mockito users](https://github.com/mockito/mockito/wiki/Mockito-Popularity-and-User-Base)!
## We need help!
### We need help!
If the vision of the project connects with you help us!!!
@@ -26,7 +36,7 @@ If the vision of the project connects with you help us!!!
- If you like emails, join the [mailing list](https://groups.google.com/forum/#!forum/shipkit), but be warned that we rarely use emails, and much more prefer GitHub tickets.
- Spread the word about Shipkit, let us know about other projects with similar goals.
## History
### History
- 2014, August - we set up automated [continuous delivery for Mockito](http://blog.mockito.org/2014/08/ready-for-continuous-deployment.html) project, every merged pull requested produced release notes and new version in Maven Central.
We [still do it today](https://github.com/mockito/mockito/wiki/Continuous-Delivery-Overview) in Mockito!
@@ -37,23 +47,22 @@ As much as useful the toolkit was to drive Mockito releases, we needed to make i
- 2017, March - [Wojtek Wilk](https://github.com/wwilk) joins the team, implements release avoidance when binaries aren't changed in comparison to previous release, starts driving [API compatibility](https://github.com/mockito/shipkit/issues/105) validation and Shipkit dogfooding.
- 2017, April - we found a neat name for our project: "Shipit", a toolkit for shipping it! We registered the domain: http://shipkit.org
- 2017, May - there are 5 contributors in total, we expanded the vision of the project, and currently working on killer features like: automated e2e testing with library consumers + automated pushes of version upgrades [#85](https://github.com/mockito/shipkit/issues/85), [A/B testing](https://github.com/mockito/shipkit/issues/113) of build results when upgrading dependencies.
- 2017, June - "Ship every change to production!" presentation at Software Architecture conference in Santa Clara ([details](https://github.com/mockito/shipkit/wiki/Conferences-and-Meetups)).
- 2017, June - "Ship every change to production!" presentation at Software Architecture conference in Santa Clara, CA ([details](https://github.com/mockito/shipkit/wiki/Conferences-and-Meetups)).
- 2017, June - Szczepan includes information about Shipkit in his presentation at Gradle Summit conference in Palo Alto, CA.
## Plans
### Plans
- 2017, June - we plan to release [1.0 of Shipkit](https://github.com/mockito/shipkit/issues/116) library during [Gradle Summit Conference](https://summit.gradle.com) 22-23th of June 2017, Palo Alto, CA. Core features offered by 1.0:
- 2017, July - we will be present at [Confitura '17 conference](https://2017.confitura.pl) in Warsaw, PL, on 1st of July.
- 2017, August - we plan to release [1.0-milestone-1 of Shipkit](https://github.com/mockito/shipkit/issues/116) in July 2017.
Core features offered by 1.0:
- version management
- automatic publication of binaries to well known public repositories
- release notes generation based on Git log and the issue tracker links
- avoiding releases when binaries are the same
- pulling information about contributors and including it in release notes and pom.xml files
- pulling information about contributors and including it in the release notes and pom.xml files
- and all that in a sweet little package, fully integrated, neatly automated, easy to roll out
- 2017, July - we will be present at [Confitura '17 conference](https://2017.confitura.pl) in Warsaw, PL, on 1st of July.
- our presentation was accepted!
## Future
The roadmap is comming soon!
- 2017, September - 1.0 release.
- 2017, Q4 - helping community adopt Shipkit and writing great features on the way!
## Development guide
View
@@ -5,24 +5,22 @@ buildscript {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "com.gradle.publish:plugin-publish-plugin:0.9.6"
classpath "org.shipkit:shipkit:0.8.109"
classpath "org.shipkit:shipkit:0.9.1"
classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.3.0'
}
}
apply plugin: 'maven'
apply plugin: 'idea'
apply plugin: 'groovy'
apply plugin: 'com.gradle.plugin-publish'
apply plugin: 'checkstyle'
apply plugin: 'codenarc'
apply plugin: 'org.shipkit.gradle-plugin'
apply plugin: 'org.shipkit.release-needed'
apply from: 'gradle/java6-compatibility.gradle'
apply from: 'gradle/precommit.gradle'
apply plugin: 'org.shipkit.gradle-plugin'
sourceCompatibility = 1.6
targetCompatibility = 1.6
@@ -44,7 +42,8 @@ dependencies {
testCompile("org.spockframework:spock-core:1.1-groovy-2.4") {
exclude module: "groovy-all"
}
testCompile "cglib:cglib-nodep:2.2.2"
testCompile "net.bytebuddy:byte-buddy:1.7.1"
testCompile "org.objenesis:objenesis:2.5"
testCompile "commons-lang:commons-lang:2.4"
testCompile gradleTestKit()
@@ -62,18 +61,6 @@ pluginBundle {
}
}
task travisRelease {
doLast {
logger.lifecycle("{} - Publishing to Gradle Plugin Portal...", path)
exec {
commandLine "./gradlew", "publishPlugins", "performVersionBump",
"-Pshipkit.dryRun=false", //TODO remove when #236 is fixed
"-Pgradle.publish.key=${System.getenv('GRADLE_PUBLISH_KEY')}",
"-Pgradle.publish.secret=${System.getenv('GRADLE_PUBLISH_SECRET')}"
}
}
}
task fastInstall { Task t ->
description = "Fast installation for quick local testing."
t.dependsOn install
@@ -84,4 +71,5 @@ task fastInstall { Task t ->
tasks.groovydoc.enabled = false
}
}
t.doLast { println " Shipkit $version installed to local maven repo" }
}
Oops, something went wrong.

0 comments on commit f8bdad4

Please sign in to comment.