mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-10-26 08:06:09 +01:00
Update readme to describe gradle build
This commit is contained in:
committed by
René Pfeuffer
parent
5fc1f705b1
commit
225e095c11
89
README.md
89
README.md
@@ -34,8 +34,97 @@ All news regarding SCM-Manager will be published in our [blog](https://www.scm-m
|
|||||||
[unsubscribe](mailto:scmmanager+unsubscribe@googlegroups.com)
|
[unsubscribe](mailto:scmmanager+unsubscribe@googlegroups.com)
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
You can find the complete documentation on our [homepage](https://www.scm-manager.org/docs/).
|
You can find the complete documentation on our [homepage](https://www.scm-manager.org/docs/).
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
The build of SCM-Manager requires the following installed packages:
|
||||||
|
|
||||||
|
* Git
|
||||||
|
* JDK 11
|
||||||
|
* Mercurial (required for tests)
|
||||||
|
* Docker (required for the docker package)
|
||||||
|
|
||||||
|
The build of SCM-Manager requires Java 11, but the target runtime platform is still Java 8.
|
||||||
|
|
||||||
|
### Tasks
|
||||||
|
|
||||||
|
SCM-Manager uses [Gradle](https://gradle.org/) for the build.
|
||||||
|
The build itself is organized in tasks, the tasks can be executed with the gradle wrapper:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# on linux
|
||||||
|
./gradlew taskname
|
||||||
|
|
||||||
|
# on windows
|
||||||
|
gradlew.bat taskname
|
||||||
|
```
|
||||||
|
|
||||||
|
This following tables describes some high level tasks,
|
||||||
|
which should cover most of the daily work.
|
||||||
|
|
||||||
|
| Name | Description |
|
||||||
|
| ---- | ----------- |
|
||||||
|
| run | Starts an SCM-Manager with enabled livereload for the ui |
|
||||||
|
| build | Executes all checks, tests and builds the smp inclusive javadoc and source jar |
|
||||||
|
| distribution | Builds all distribution packages of scm-packaging |
|
||||||
|
| check | Executes all registered checks and tests |
|
||||||
|
| test | Run all unit tests |
|
||||||
|
| integrationTest | Run all integration tests of scm-it |
|
||||||
|
| clean | Deletes the build directory |
|
||||||
|
|
||||||
|
The next table defines a few more tasks which are more relevant for CI servers.
|
||||||
|
|
||||||
|
| Name | Description |
|
||||||
|
| ---- | ----------- |
|
||||||
|
| publish | Publishes all artifacts and packages (required properties, see section 'Properties for publishing') |
|
||||||
|
| sonarqube | Executes a SonarQube analysis |
|
||||||
|
| setVersion | Sets the version to a new version |
|
||||||
|
| setVersionToNextSnapshot | Sets the version to the next snapshot version |
|
||||||
|
|
||||||
|
There many more tasks, which are executed as part of the high level tasks,
|
||||||
|
and it should rarely be necessary to call them individually.
|
||||||
|
To see the full list of available tasks, execute the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# on linux
|
||||||
|
./gradlew tasks
|
||||||
|
|
||||||
|
# on windows
|
||||||
|
gradlew.bat tasks
|
||||||
|
```
|
||||||
|
|
||||||
|
### Artifacts and reports
|
||||||
|
|
||||||
|
Artifacts and reports which are created from the tasks are stored in the build directory of each subproject.
|
||||||
|
|
||||||
|
### Debugging
|
||||||
|
|
||||||
|
If you want to debug the `run` task of SCM-Manager.
|
||||||
|
You can provide the `--debug-jvm` option, which starts the SCM-Manager jvm in debug mode.
|
||||||
|
Then you can attach a debugger on port 5005.
|
||||||
|
The port can be changed by using the `--debug-port` e.g.: `--debug-port=5006`.
|
||||||
|
If you want to wait until a debugger is attached, before SCM-Manager starts you can use the `--debug-wait` option.
|
||||||
|
|
||||||
|
### Properties for publishing
|
||||||
|
|
||||||
|
The publishing process requires the following properties for authentication and signing.
|
||||||
|
Those properties should be stored in `~/.gradle/gradle.properties`.
|
||||||
|
|
||||||
|
| Property | Description |
|
||||||
|
| -------- | ----------- |
|
||||||
|
| packagesScmManagerUsername | Username for [packages.scm-manager.org](https://packages.scm-manager.org) |
|
||||||
|
| packagesScmManagerPassword | Password for [packages.scm-manager.org](https://packages.scm-manager.org) |
|
||||||
|
| dockerUsername | Username for [Docker Hub](https://hub.docker.com/) |
|
||||||
|
| dockerPassword | Password or Api Token for [Docker Hub](https://hub.docker.com/) |
|
||||||
|
| gitHubApiToken | Api Token for [GitHub](https://github.com/) |
|
||||||
|
| npmEmail | Email of [NPM](https://www.npmjs.com/) account |
|
||||||
|
| npmToken | Access Token for [NPM](https://www.npmjs.com/) account |
|
||||||
|
| signing.keyId | Id of gpg secret key for signing |
|
||||||
|
| signing.password | Passphrase of gpg secret key |
|
||||||
|
| signing.secretKeyRingFile | Path to gpg secret key ring file |
|
||||||
|
|
||||||
## Need help?
|
## Need help?
|
||||||
|
|
||||||
Looking for more guidance? Full documentation lives on our [homepage](https://www.scm-manager.org/docs/) or the
|
Looking for more guidance? Full documentation lives on our [homepage](https://www.scm-manager.org/docs/) or the
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package com.cloudogu.scm
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.GradleException
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
import org.gradle.api.tasks.options.Option
|
||||||
|
import org.gradle.util.VersionNumber
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
|
class VersionTasks {
|
||||||
|
|
||||||
|
static void configure(Project project) {
|
||||||
|
project.tasks.register("setVersion", SetVersionTask) {
|
||||||
|
it.group = "help"
|
||||||
|
it.description = "Set version for the plugin e.g.: setVersion --newVersion=x.y.z)"
|
||||||
|
}
|
||||||
|
project.tasks.register("setVersionToNextSnapshot", SetVersionToNextSnapshot) {
|
||||||
|
it.group = "help"
|
||||||
|
it.description = "Set version of the plugin to the next snapshot version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setVersion(Project project, String newVersion) {
|
||||||
|
File propertiesFile = new File(project.rootDir, 'gradle.properties')
|
||||||
|
|
||||||
|
if (project.version == newVersion) {
|
||||||
|
println "project uses already version ${newVersion}"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UTF-8 is used since java 9, java 8 uses ISO-8859-1
|
||||||
|
// TODO do we have to implement something to support java 9
|
||||||
|
def lines = propertiesFile.readLines(StandardCharsets.UTF_8.toString())
|
||||||
|
def newLines = lines.collect{ line ->
|
||||||
|
if (line.trim().startsWith("version")) {
|
||||||
|
return "version = ${newVersion}"
|
||||||
|
}
|
||||||
|
return line
|
||||||
|
}
|
||||||
|
|
||||||
|
println "set version from ${project.version} to ${newVersion}"
|
||||||
|
propertiesFile.withWriter(StandardCharsets.UTF_8.toString()) {writer ->
|
||||||
|
newLines.forEach { line ->
|
||||||
|
writer.writeLine(line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class SetVersionTask extends DefaultTask {
|
||||||
|
|
||||||
|
@Input
|
||||||
|
@Option(option = "newVersion", description = "Sets new version for project")
|
||||||
|
String newVersion
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
void execute() {
|
||||||
|
if (!newVersion?.trim()) {
|
||||||
|
throw new GradleException("newVersion option is required e.g.: --newVersion=x.y.z")
|
||||||
|
}
|
||||||
|
setVersion(project, newVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class SetVersionToNextSnapshot extends DefaultTask {
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
void execute() {
|
||||||
|
VersionNumber v = VersionNumber.parse(project.version)
|
||||||
|
String version = "${v.major}.${v.minor}.${v.micro + 1}-SNAPSHOT"
|
||||||
|
setVersion(project, version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user