Skip to content

Commit 8c580ce

Browse files
2 parents 297bf9a + 475b822 commit 8c580ce

26 files changed

+362
-64
lines changed

.github/workflows/backend.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ jobs:
2929
working-directory: ./server
3030
env:
3131
GITLAB_ACCESS_TOKEN: ${{ secrets.GITLAB_ACCESS_TOKEN }}
32+
CONFIG_FILE: /home/runner/work/amos-ss2021-is-project-linter/amos-ss2021-is-project-linter/config.json
3233
run: ./gradlew test
3334

3435
- name: Log in to Docker Hub
468 KB
Loading
186 KB
Binary file not shown.
File renamed without changes.

docker-compose.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ services:
2626
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
2727
- GITLAB_ACCESS_TOKEN=${GITLAB_ACCESS_TOKEN}
2828
- server.port=8080
29+
- CONFIG_FILE=/home/amos/config.json
30+
volumes: # more like: load nginx configuration
31+
- ./config.json:/home/amos/config.json
2932
depends_on:
3033
- database
3134
expose:
@@ -37,15 +40,14 @@ services:
3740
# build: "./frontend"
3841
volumes: # more like: load nginx configuration
3942
- ./nginx.conf:/etc/nginx/templates/default.conf.template
40-
- ./server/src/main/resources/config.json:/config.json # FIXME just config.json nach dem rausziehen
43+
- ./config.json:/config.json
4144
environment:
4245
- PORT=${PORT}
4346
- HOST=${HOST}
4447
depends_on:
4548
- backend
4649
ports: # only connection to outside world
47-
- ${PORT}:80
48-
- 443:443
50+
- ${PORT}:80 # TODO https
4951
links:
5052
- backend
5153

docs/API.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
Die API ist prinzipiell unter `http://<HOST>/<PORT>/api` erreichtbar.
2+
3+
### GET - `/projects` - Übersicht aller Projekte
4+
* Body: nichts
5+
* Response: Json(List(ProjectSchema))
6+
7+
### POST - `/projects` - Linted ein einzelnes Repo
8+
* Body: url des zu lintenden Repos
9+
* Response: 'ok' falls ok, HTTP Fehlercode sonst
10+
11+
### GET - `/project/{Id}` - Ergebnisse für das Projekt mit der Id
12+
* Hinweis: Es handelt sich bei der Id um eine interne Benennung der Datenbank, nicht die GitLab Project-Id.
13+
* Body: nichts
14+
* Response: Json(ProjectSchema)
15+
16+
### GET - `/project/{Id}/lastMonth` - Lint Ergebnisse des Letzten Monats für ein Projekt
17+
* Body: nichts
18+
* Response: Json(ProjectSchema)
19+
20+
### GET - `/crawler` - aktuellen Crawler Status abfragen
21+
* Body: nichts
22+
* Response: Json(CrawlerStatusSchema)
23+
24+
### POST - `/crawler` - Crawler manuell anstoßen
25+
* Body: nichts
26+
* Response:
27+
* `Http:OK` falls crawler gestartet wurde
28+
* `Http:Too_Many_Requests` falls crawler bereits aktiv war, bevor der Aufruf ankam
29+
30+
### GET - `/export/csv` - Exportiert Ergebnisse Als CSV-Datei
31+
* Body: nichts
32+
* Response: Eine CSV Datei, direkt zum Download, also am besten per `<a download href="http://<HOST>/<PORT>/api/export/csv">download</a>` einbetten
33+
34+
35+
# Schemas
36+
#### CrawlerStatusSchema
37+
```jsonc
38+
{
39+
"status": "Linting the projects", // Der aktuelle Status des Crawlers
40+
"lastError": "", // Die letzte Errornachricht
41+
"errorTime": null, // Die Zeit, bei dem der letzte Fehler stattgefunden hat
42+
"crawlerActive": true, // Zeigt an, ob der crawler gerade aktiv ist oder nicht
43+
"size": 1024, // Anzahl aller gefundenen Projekte
44+
"lintingProgress": 128, // Anzahl bereits gelinteter Projekte
45+
"lintingTime": 0 // Anzahl der Sekunden, die während des letzen Crawlingvorgangs vergeangen sind
46+
}
47+
```
48+
49+
#### ProjectSchema
50+
```jsonc
51+
{
52+
"name": "Amos Test", // Der Name des Projekts
53+
"url": "https://gitlab.domain.de/user/amos-test", // Die URL zum Repository
54+
"gitlabProjectId": 4711, // Die Projekt-ID auf der GitLab Instanz
55+
"gitlabInstance": "https://gitlab.domain.de", // Die URL der GitLab Instanz
56+
"description": "", // Die Beschreibung des Projekts
57+
"forkCount": 1, // Anzahl der Forks des Projekts
58+
"lastCommit": "2021-05-29T00:10:11.411+00:00", // Zeitstempel der letzten Aktivität auf dem Projekt
59+
"lintingResults": [], // Array von LintingResultSchemas
60+
"id": 1 // Die ACIDIC-Interne ID
61+
}
62+
```
63+
64+
#### LintingResultSchema
65+
```jsonc
66+
{
67+
"lintTime": "2021-06-01T20:18:22.811963", // Zeitstempel, zu dem der Lint-Vorgang angestoßen wurde
68+
"checkResults": [], // Array von CheckResultSchemas
69+
"id": 2 // Die ACIDIC-Interne ID
70+
}
71+
```
72+
73+
#### CheckResultSchema
74+
```jsonc
75+
{
76+
"checkName": "checkReadmeExistence", // Name des Checks und der Methode, die die Überprüfung übernimmt
77+
"result": true, // Das Ergebnis des Checks
78+
"category": "file_checks", // Die Kategorie des Checks
79+
"severity": "HIGH", // Wie wichtig der Check ist
80+
"description": "Überprüft, ob eine README Datei existiert.", // Die Beschreibung des Checks
81+
"message": "Keine README Datei gefunden!", // Fehlermeldung, die angezeigt werden soll, falls Check fehlgeschlagen ist
82+
"fix": "Legen Sie eine README Datei in der Projektwurzel an.", // Vorgeschlagener Weg, den Fehlgeschlagenen Check zu beheben
83+
"tag": "Benutzerfreundlichkeit", // Tag, nach dem sortiert werden soll
84+
"priority": 100 // Priorität, nach der sortiert werden soll
85+
}
86+
```
87+
88+
89+
90+
91+

docs/Architektur.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
## Softwarearchitektur
3+
4+
Die Full-Stack Architektur der Software ist implementiert durch:
5+
* Spring Boot im backend
6+
* Angular im Frontend
7+
* PostgreSQL als Datenbank
8+
* Als Docker-Images gepackt
9+
10+
![Softwarearchitektur](https://github.com/amosproj/amos-ss2021-is-project-linter/raw/main/assets/architektur.png)
11+
12+
# Datenbankschema
13+
![Datenbankschema](https://github.com/amosproj/amos-ss2021-is-project-linter/raw/main/assets/database.png)

docs/Checks.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
Alle verfügbaren Checks:
2+
3+
Einstellungen die Standardmäßig verfügar sind: `enable`, `severity`, `tag`
4+
5+
| CheckName | Category | Description | Error Message | Fix |
6+
| ------------------------------ | --------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
7+
| checkReadmeExistence | file_checks | Überprüft, ob eine README Datei existiert. | Keine README Datei gefunden! | Legen Sie eine README Datei in der Projektwurzel an. |
8+
| checkContributingExistence | file_checks | Überprüft, ob eine CONTRIBUTING Datei existiert. | Keine CONTRIBUTING Datei gefunden! | Legen Sie eine CONTRIBUTING Datei in der Projektwurzel an. |
9+
| checkMaintainersExistence | file_checks | Überprüft, ob eine MAINTAINERS Datei existiert. | Keine MAINTAINERS Datei gefunden! | Legen Sie eine MAINTAINERS Datei in der Projektwurzel an. |
10+
| hasMergeRequestEnabled | settings_checks | Überprüft, ob Merge Requests erlaubt sind. | Merge requests sind nicht erlaubt! | Ändern Sie die Einstellungen des Repositories um Merge Requests zu erlauben. |
11+
| hasIssuesEnabled | settings_checks | Überprüft, ob Issues aktiviert sind. | Issues sind nicht aktiviert! | Ändern Sie die Einstellungen des Repositories um Issues zu aktivieren. |
12+
| isPublic | settings_checks | Überprüft, ob das Repository öffentlich ist. | Das Repository ist nicht öffentlich! | Ändern Sie die Einstellungen des Repositories um es öffentlich zu machen. |
13+
| gitlabWikiDisabled | settings_checks | Überprüft, ob das Repository Wiki Pages nutzt. | Das Repository nutzt Wiki Pages! | Ändern Sie die Einstellungen des Repositories um Wiki Pages zu deaktivieren. |
14+
| hasForkingEnabled | settings_checks | Überprüft, ob Forks erlaubt sind. | Das Repository erlaubt keine Forks! | Ändern Sie die Einstellungen des Repositories um Forks zu erlauben. |
15+
| hasAvatar | settings_checks | Überprüft, ob das Repository ein Avatar (Bild) hat. | Das Repository hat keinen Avatar! | Fügen Sie einen Avatar hinzu. |
16+
| hasDescription | settings_checks | Überprüft, ob das Repository eine Beschreibung hat. | Das Repository hat keine Beschreibung! | Fügen Sie eine Beschreibung hinzu. |
17+
| hasSquashingEnabled | settings_checks | Überprüft, ob squashing commits erlaubt ist | Squashing commits sind erlaubt | Ändern Sie die Einstellungen des Repositories um squash commits zu verbieten. |
18+
| guestRoleEnabled | role_checks | Überprüft, ob die Guest Rolle aktiviert ist. | Das Repository hat die Guest Rolle deaktiviert! | Ändern Sie die Einstellungen des Repositories um Guests zu erlauben. |
19+
| developerRoleEnabled | role_checks | Überprüft, ob die Developer Rolle aktiviert ist. | Das Repository hat die Developer Rolle deaktiviert! | Ändern Sie die Einstellugen des Repositories um Developers zu erlauben. |
20+
| hasBadges | settings_checks | Überprüft, ob das Projekt 'Badges' verwendet. | Im Repository wurden keine Badges gefunden! | Fügen Sie Badges für z. B. den Build status in den Projekteigenschaften hinzu. |
21+
| checkReadmeHasLinks | file_checks | Überprüft, ob in der Readme eine Verlinkung zu Confluence oder anderen Dokus eingetragen ist. | Keine Verlinkung zu Confluence oder online.bk.datev.de/documentation gefunden! | Fügen Sie die benötigte Verlinkung in die Readme ein. |
22+
| checkNoContributingChain | file_checks | Überprüft, dass sich in der CONTRIBUTING-Datei keine links auf andere CONTRIBUTING-Dateien befinden. | Es wurde ein Link zu einer andere CONTRIBUTING.MD gefunden! | Entfernen Sie die Verlinkung zu der anderen CONTRIBUTING.MD. |
23+
| hasServiceDeskDisabled | settings_checks | Überprüft, ob der Service Desk deaktiviert ist oder nicht. | Service Desk ist aktiviert! | Deaktivieren Sie Service Desk in ihrem Projekt. |
24+
| eitherOwnersOrMaintainersExist | file_checks | Überprüft, ob eine MAINTAINERS.md oder OWNERS.md Datei existiert. | Keine MAINTAINERS.md oder OWNERS.md Datei gefunden! | Legen Sie eine MAINTAINERS.md oder OWNERS.md Datei in der Projektwurzel an. |
25+
| notDefaultReadme | file_checks | Überprüft, ob die README Datei die Default-Readme ist. | Die Readme ist die Default-Readme! | Legen Sie eine README Datei in der Projektwurzel an, die nicht automatisch generiert wurde. |

docs/Config-File.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
**Einstellungsdatei**. Befindet sich momentan in `server/src/main/resources/config.json`
2+
3+
## Settings
4+
* `gitLabHost`: Base Url der GitLab Instanz (z.B "https://gitlab.com")
5+
* `readMeLinks`: Array mit Links, die in der Readme vorkommen sollen
6+
* `crawler`: Alle Settings, die mit dem Crawler zusammen hängen, sind hier zu finden
7+
* `scheduler`: CRON Ausdruck, der angibt, wie oft der scheduler ausgeführt werden soll. Format: `sec min h d m wochentag` |
8+
**ACHTUNG**: Der Prozess dauert 1-3 Sekunden pro Repository. Bei 2000 Projekten also etwa eine Stunde. Prozess also besser nicht öfter als alle 2 Stunden laufen lassen.
9+
* `status`: Die Statusmeldungen des Crawlers
10+
* `init`: Der Status, der während des Initialisierens (also holen der Projekte) angezeigt wird
11+
* `active`: Der Status, der angezeigt wird, während der Crawler läuft
12+
* `inactive`: Der Status, der angezeigt wird, wenn der Crawlingprozess abgeschlossen wurde
13+
* `maxProjects`: Die Maximale Anzahl der Projekte, die beim Crawlingprozess gelintet werden sollen.
14+
15+
## Checks
16+
Jedes Check Objekt hat folgende Parameter:
17+
* `name`: Name des Checks (als Key)
18+
* `enabled`: Soll der Check ausgeführt werden?
19+
* `severity`: Wie schwerwiegend ist der Check (HIGH | MEDIUM | LOW)
20+
* `category`: interne Kategorie, die nur für die Ausführung relevant ist
21+
* `tag`: Bezeichner des Checks für Gruppierung (ein Wort)
22+
* `description`: Beschreibung des Checks
23+
* `message`: Nachricht im Fehlerfall
24+
* `fix`: Tipp zur Behebung des Fehlers
25+
* `priority`: Gewichtung für Sortierung im FrontEnd
26+
27+
## Beispieldatei
28+
```json
29+
{
30+
"settings": {
31+
"gitLabHost": "https://gitlab.domain.de",
32+
"readMeLinks": [
33+
"https://this.website.com/doesntexist",
34+
"https://that.doesnt.either"
35+
],
36+
"crawler": {
37+
"scheduler": "0 0 0 * * ?",
38+
"status": {
39+
"init": "GitLab API wird angefragt",
40+
"active": "Crawler läuft",
41+
"inactive": "Crawler ist inaktiv"
42+
},
43+
"maxProjects": 10
44+
}
45+
},
46+
"checks": {
47+
"checkReadmeExistence": {
48+
"category": "file_checks",
49+
"enabled": true,
50+
"severity": "HIGH",
51+
"description": "Überprüft, ob eine README Datei existiert.",
52+
"message": "Keine README Datei gefunden!",
53+
"fix": "Legen Sie eine README Datei in der Projektwurzel an.",
54+
"tag": "Benutzerfreundlichkeit",
55+
"priority": 100
56+
},
57+
"checkContributingExistence": {
58+
"category": "file_checks",
59+
"enabled": true,
60+
"severity": "MEDIUM",
61+
"description": "Überprüft, ob eine CONTRIBUTING Datei existiert.",
62+
"message": "Keine CONTRIBUTING Datei gefunden!",
63+
"fix": "Legen Sie eine CONTRIBUTING Datei in der Projektwurzel an.",
64+
"tag": "Benutzerfreundlichkeit",
65+
"priority": 100
66+
}
67+
}
68+
```

docs/Docker-Deployment.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## Abhängigkeiten
2+
Docker, Docker-Compose
3+
- Windows: Installieren Sie am besten [Docker Desktop](https://docs.docker.com/docker-for-windows/install/) (beinhaltet docker und docker-compose)
4+
- Linux: Hier müssen Sie docker und docker-compose seperat installieren. Folgen Sie den jeweiligen Anweisungen für Ihre Distribution: [Docker](https://docs.docker.com/engine/install/), [Docker-Compose](https://docs.docker.com/compose/install/).
5+
6+
7+
## Docker Images
8+
Überlicherweise werden die Docker Images automatisch von unserem [DockerHub](https://hub.docker.com/u/amoslinter/) gepullt.
9+
Wollen Sie jedoch selbst bauen, schauen Sie sich folgende Anleitungen an:
10+
* [Für das FrontEnd Image](https://github.com/amosproj/amos-ss2021-is-project-linter/blob/main/frontend/README.md)
11+
* [Für das BackEnd Image](https://github.com/amosproj/amos-ss2021-is-project-linter/blob/main/server/README.md)
12+
13+
## Ausführen (mit docker-compose)
14+
[Konfiguration](Konfiguration.md) durchführen und die wie im vorherigen Kapitel einsetzen.
15+
16+
Gesamte Software-Architektur starten:
17+
```shell
18+
docker-compose pull # für die neuesten Images (optional)
19+
docker-compose --env-file .env up
20+
```
21+
22+
## Zugriff
23+
Folgende Endpoints sind nun erreichbar:
24+
* FrontEnd Website: `http://localhost:<PORT>/*`
25+
* BackEnd Rest-API: `http://localhost:<PORT>/api/*`
26+
27+
Die Api Endpoints finden sie [hier](API.md)

0 commit comments

Comments
 (0)