Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 54 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,16 @@
[![CircleCI](https://circleci.com/gh/softwareneedsyou/softwareneedsyou/tree/develop.svg?style=shield)](https://circleci.com/gh/softwareneedsyou/softwareneedsyou/tree/develop)

Ce depôt constitue la partie logiciel du projet [Software Needs You](https://github.com/softwareneedstou).
La partie serveur est accessible sur [ce dépôt github](https://github.com/softwareneedsyou/softwareneedsyou-server.git)
La partie serveur est accessible sur [ce dépôt github](https://github.com/softwareneedsyou/softwareneedsyou-server)

## Setup
Ce projet utilise [gradle](https://gradle.org/) comme système de build.

Pour compiler et lancer le programme une fois le dépôt cloné:
```bash
gradle build
gradle run
gradle build run
```

Le fichier executable `gradlew` est un wrapper générer automatiquement par gradle qui permet de télécharger le
version utilisée pour qu'elle soit utilisée en local.

Lors de modifications de gradle, vérifier la configuration avec la commande `gradle check` qui ne nécessite
aucune compilation.

Un documentation exhaustive est disponible sur [leur site](https://docs.gradle.org/3.4.1/userguide/userguide.html#gsc.tab=0).

## Git
Le workflow git est le suivant:
```bash
Expand All @@ -32,22 +23,63 @@ git checkout develop
git checkout -b <github_username>/<feature> #feature individuelle
git checkout -b feature/<feature> #feature commune
```
Une fois la feature complétée, le merge sur la branche develop se fait via une
[pull-request](https://github.com/softwareneedsyou/softwareneedsyou/pulls), et un membre de l'organisation
review les changemnets avant d'accepter le merge.
Une fois la feature complétée, le merge sur la branche develop se fait via une [pull-request](https://github.com/softwareneedsyou/softwareneedsyou/pulls), et un membre de l'organisation review les changements avant d'accepter le merge.

* Les merges sur la branches develop sont en fast-forward
* Les merges sur la branche master sont ponctuels et manuels. Se seront des commits de rebase, c'est à dire
qu'ils rassembleront tout les changements sous un seul commit. L'idéal est donc de les effectuer par
changement de version mineure.
* Les features sont discutées et décrites sur
[github](https://github.com/softwareneedsyou/softwareneedsyou/projects)
* Les merges sur la branche master sont ponctuels et manuels. Se seront des commits de rebase, c'est à dire qu'ils rassembleront tout les changements sous un seul commit.
L'idéal est donc de les effectuer par changement de version mineure.
* Les features sont discutées et décrites sur [github](https://github.com/softwareneedsyou/softwareneedsyou/projects)
* Chaque pull-request répond à une issue qui correspond à une feature

## Documentation
## Gradle
>Le fichier executable `gradlew` est un wrapper générer automatiquement par gradle qui permet de télécharger la
version utilisée lors de l'init pour qu'elle soit utilisée en local.

### Gradle : Lsite des projets/modules
Une documentation exhaustive est disponible sur [leur site](https://docs.gradle.org/3.4.1/userguide/userguide.html).

Globalement, Gradle s'utilise avec des "tâches" : `gradle <task>`.

### Configuration
Lors de modifications de gradle, vérifier la configuration avec la commande `gradle` ou `gradle help` qui ne nécessite
aucune compilation.

### Liste des projets/modules
Pour lister les projets ou moudles gradle : ```gradle projects```.

#### Gradle : libérer une release
### Libérer une release
Pour ```compile``` ou ```install``` une relase, il suffit d'ajouter ```release``` dans les tâches de gradle.
```bash
gradle <task(s)> release
```

### Tâches
Pour voir la liste de toutes les tâches possible avec gradle : `gradle tasks --all`.
Les tâches de la forme `sub:task` est une tâche s'appliquant qu'au sous-module du même nom.

#### Extra tasks Gradle
* Liste des jars du projet lors de la compilation : `gradle -q listJars`
* Debuggage : `gradle :<task> :taskTree` pour voir les dépendances des tâches.
Un graph au format dot est aussi généré lors de la tâche `build` dans `/build/reports/visteg.dot`.
*Utilisation d'un plugin pour avoir cette fonctionnalité.*

### Compilation
Pour compiler et tester le projet : `gradle build`, puis `gradle run` pour lancer l'application.

### Modification de gradle
Lors de modifications de gradle, vérifier la configuration avec `gradle` ou `gradle help` (aucune compilation).

## Documentation
### Javadoc
La génération de la javadoc se fait par les commandes : `gradle javadoc testJavadoc`.
L'emplacement de la documentation est déplacée dans `/docs` pour être utilisable directement avec *Github Pages*.

### Git Hook
Il est nécessaire de configurer son git lors du développement du projet pour automatiser certaines tâches et éviter les oublies.

#### Pré-commit
Il faut ajouter manuellement le(s) hook(s) dans git en local.
Pour cela, il suffit de lancer le script `install` dans le dossier `scripts` (`.bat` pour Windows et `.sh` pour Unix).
Le script est à lancer en tant qu'**administrateur** sous Windows.

Le `pre-commit` s'occupe de :
* générer la documentation et ajouter les modifications
115 changes: 112 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,35 @@
* user guide available at https://docs.gradle.org/3.4.1/userguide/tutorial_java_projects.html
*/

buildscript {
repositories {
jcenter()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.dorongold.plugins:task-tree:1.3"
}
}
plugins {
id "cz.malohlava" version "1.0.2"
}
apply plugin: "com.dorongold.task-tree"

project.group = 'fr.esgi.projet.softwareneedsyou'

//allprojects pour le projet actuel et les projets en dépendance
//subprojects pour tous les projets en dépendance
def CUSTOM_GROUP = 'Custom' //tasks ... on console

// pour le projet actuel et les projets en dépendance
allprojects {
configure(taskTree) {
group = CUSTOM_GROUP
description 'Affiche l\'arbre des dépendances de la commande qui suit'
}
}

// pour tous les projets en dépendance
subprojects {
// Apply the java plugin to add support for Java
apply plugin: 'java'
Expand All @@ -20,6 +44,12 @@ subprojects {
//tasks.eclipse.dependsOn cleanEclipse
//tasks.eclipseClasspath.dependsOn initProject
//apply plugin: 'idea'
/*idea {
project {
jdkName = jdkLevel
languageLevel = jdkLevel
}
}*/

// Plugins de test
apply plugin: 'findbugs'
Expand All @@ -32,6 +62,12 @@ subprojects {
// On spécifie la version de Java à utiliser
sourceCompatibility = JavaVersion.VERSION_1_8 //1.8
targetCompatibility = JavaVersion.VERSION_1_8 //1.8

tasks.withType(JavaCompile) {
//targetCompatibility = jdkLevel
//sourceCompatibility = jdkLevel
options.encoding = 'UTF-8'
}

// In this section you declare where to find the dependencies of your project
repositories {
Expand All @@ -42,6 +78,9 @@ subprojects {
}

ext {
docDir = "${rootProject.projectDir}/docs/${project.name}"

//General
lombockVersion = '1.16.+'

//Logging
Expand All @@ -59,6 +98,7 @@ subprojects {
testCompile "junit:junit:$junitVersion"

compileOnly "org.projectlombok:lombok:$lombockVersion"
//compile 'com.google.code.findbugs:annotations:3.0.1'
}

jar {
Expand All @@ -77,31 +117,92 @@ subprojects {
}

task testsJar(type: Jar, dependsOn: testClasses) {
group BasePlugin.BUILD_GROUP
description = 'Assembles a jar archive containing the test classes.'
classifier = 'tests'
//from sourceSets.test.classes
from sourceSets.test.output
}

task sourcesTestJar(type: Jar /*, dependsOn: testClasses*/) {
group = CUSTOM_GROUP
description = 'Assembles a jar archive containing the test source classes.'
classifier = 'test-sources'
from sourceSets.test.allSource
}

task sourcesJar(type: Jar /*, dependsOn: classes*/) {
group = CUSTOM_GROUP
description = 'Assembles a jar archive containing the main source classes.'
classifier = 'sources'
from sourceSets.main.allSource
}

task listJars {
group CUSTOM_GROUP
description 'Liste tout les jars attachés à la config de compilation.'
doLast {
configurations.compile.each { File file -> println file.name }
}
}

task javadocClean(type: Delete) {
group 'documentation'
description 'Deletes the (java)doc directory.'
delete docDir + "/javadoc"
//followSymlinks = true
}
javadoc.dependsOn javadocClean

javadoc.destinationDir = file(docDir + "/javadoc")
//${projectDir}/docs/javadoc

task testJavadocClean(type: Delete) {
group 'documentation'
description 'Deletes the test (java)doc directory.'
delete docDir + "/testjavadoc"
//followSymlinks = true
}

// creating javadoc task for test code
task testJavadoc(type: Javadoc, dependsOn: testJavadocClean) {
group 'documentation'
description 'Generates Javadoc API documentation for the test source code.'
source = sourceSets.test.allJava
classpath = sourceSets.test.compileClasspath
// if not changed the destinationDir, the javadoc for production code is overridden.
destinationDir = file(docDir + "/testjavadoc")
//options.linkSource true
//options.links("http://docs.oracle.com/javase/8/docs/api/")
//failOnError false
}

task javadocJar(type: Jar, dependsOn: javadoc) {
group 'documentation'
description 'Assembles a jar archive containing the main javadoc.'
classifier 'javadoc'
from javadoc.destinationDir
}

task testJavadocJar(type: Jar, dependsOn: testJavadoc) {
group 'documentation'
description 'Assembles a jar archive containing the test javadoc.'
classifier 'test-javadoc'
from testJavadoc.destinationDir
}

artifacts {
archives sourcesJar
archives javadocJar
archives testsJar
archives sourcesTestJar
archives testJavadocJar
}

task release(description: 'fige une version avant son déploiement') {}
task release {
group CUSTOM_GROUP
description 'fige une version avant son déploiement'
}

gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
Expand All @@ -120,6 +221,7 @@ subprojects {
}

tasks.withType(FindBugs) {
group = 'Reporting'
reports {
xml.enabled = false
html.enabled = true
Expand Down Expand Up @@ -152,4 +254,11 @@ subprojects {
})
}
}

task prepareGit {
group = CUSTOM_GROUP //BasePlugin.BUILD_GROUP // Or use 'build'
description = 'Prépare le dépôt git avant commit'
dependsOn javadoc
dependsOn testJavadoc
}
}
Empty file added docs/.keep
Empty file.
19 changes: 19 additions & 0 deletions docs/api/javadoc/allclasses-frame.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_112) on Sun Apr 09 22:47:39 CEST 2017 -->
<title>All Classes (api 0.0.1-SNAPSHOT API)</title>
<meta name="date" content="2017-04-09">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="fr/esgi/projet/softwareneedsyou/api/Tmp.html" title="class in fr.esgi.projet.softwareneedsyou.api" target="classFrame">Tmp</a></li>
</ul>
</div>
</body>
</html>
19 changes: 19 additions & 0 deletions docs/api/javadoc/allclasses-noframe.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (1.8.0_112) on Sun Apr 09 22:47:39 CEST 2017 -->
<title>All Classes (api 0.0.1-SNAPSHOT API)</title>
<meta name="date" content="2017-04-09">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
<li><a href="fr/esgi/projet/softwareneedsyou/api/Tmp.html" title="class in fr.esgi.projet.softwareneedsyou.api">Tmp</a></li>
</ul>
</div>
</body>
</html>
Loading