Skip to content

Commit

Permalink
Beschreibung und Verbesserung der lokalen Entwicklungsumgebung (#1005)
Browse files Browse the repository at this point in the history
  • Loading branch information
Philippluca authored Feb 8, 2024
2 parents 16a93a0 + e20fb41 commit dcfff6c
Show file tree
Hide file tree
Showing 11 changed files with 102 additions and 43 deletions.
22 changes: 0 additions & 22 deletions .devcontainer/devcontainer.json

This file was deleted.

4 changes: 0 additions & 4 deletions .devcontainer/docker-compose.yml

This file was deleted.

14 changes: 14 additions & 0 deletions BDMS.sln
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BDMS.Test", "tests\BDMS.Test.csproj", "{4981EB19-F2EE-4F45-A6DD-ED21B61CB3C6}"
EndProject
Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "BDMS.Client", "src\client\BDMS.Client.esproj", "{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}"
EndProject
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{2B4BC48D-B932-4CB4-B9D6-1336A9F64D79}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -27,6 +31,16 @@ Global
{4981EB19-F2EE-4F45-A6DD-ED21B61CB3C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4981EB19-F2EE-4F45-A6DD-ED21B61CB3C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4981EB19-F2EE-4F45-A6DD-ED21B61CB3C6}.Release|Any CPU.Build.0 = Release|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Release|Any CPU.Build.0 = Release|Any CPU
{7B75DD13-A7EF-4BDA-8AE7-33B240A9CBF0}.Release|Any CPU.Deploy.0 = Release|Any CPU
{2B4BC48D-B932-4CB4-B9D6-1336A9F64D79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B4BC48D-B932-4CB4-B9D6-1336A9F64D79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B4BC48D-B932-4CB4-B9D6-1336A9F64D79}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B4BC48D-B932-4CB4-B9D6-1336A9F64D79}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
41 changes: 25 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,40 @@ Folgende Komponenten müssen auf dem Entwicklungsrechner installiert sein:

✔️ Git
✔️ Docker
✔️ Visual Studio Code mit der Erweiterung "Remote – Containers"
✔️ Visual Studio 2022
✔️ Node.js 20 LTS
✔️ Optional, um die Onlinehilfe zu erstellen: [MkDocs](https://www.mkdocs.org/)

Damit auf dem Entwicklungsrechner keine Frameworks (Python, .NET, Node) installiert werden müssen, kann die vorkonfigurierte containerbasierte Entwicklungsumgebung mit Visual Studio Code verwendet werden. Dazu einfach das Source-Code Repository klonen und im Visual Studio Code laden. Wenn die Erweiterung "Remote – Containers" installiert ist, wird unten rechts in einer Notification dazu aufgefordert das Projekt im Container neu zu laden (Reload in Container). Das erstmalige Starten dauert etwas länger, da die Container erstellt werden müssen und die Umgebung mit den erforderlichen Extensions konfiguriert wird. Anschliessend kann die Webanwendung mit _F5_ gestartet werden.
### Entwicklung mit Visual Studio 2022

Falls doch lokal gearbeitet werden soll, kann [nvm](https://github.com/coreybutler/nvm-windows/releases) installiert werden, um die Node Version zu verwalten. Anschliessend kann mit `nvm use` die im Projekt verwendete Node Version aktiviert werden. Aktuell verwenden wir Node 20.
Es wird eine lokale Installation von Node.js benötigt. Diese kann mit Visual Studio 2022 oder mit [nvm](https://github.com/coreybutler/nvm-windows/releases) installiert werden, um mehrere Node Version zu verwalten. Anschliessend kann mit `nvm use` die im Projekt verwendete Node Version aktiviert werden.

**Folgende Dienste/Anwendungen sind anschliessend wie folgt verfügbar**
In VS 2022 müssen mehrere Startup-Projects angewählt werden, um die komplette Applikation lauffähig zu haben. Unter _Configure Startup Projects..._ muss _Multiple startup projects_ ausgewählt und entsprechend konfiguriert werden:

| Project | Action |
| :------------- | :---------------------- |
| BDMS | Start |
| BDMS.Client | Start |
| BDMS.Test | None |
| docker-compose | Start without debugging |

| 🔖Dienst/Anwendung | 🔗Adresse | 🧞Benutzername | 🔐Passwort |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------- | :-------------- | :------------------------------- |
| Boreholes of Switzerland | [localhost:3000](http://localhost:3000/) | `admin` | `swissforages` |
| pgAdmin                                | [localhost:3001](http://localhost:3001/) | n/a | n/a |
| Tornado REST API (`v1`)[^1] | [localhost:8888](http://localhost:8888/) [localhost:3000/api/v1](http://localhost:3000/api/v1) | `Authorization` | `Basic YWRtaW46c3dpc3Nmb3JhZ2Vz` |
| .NET REST API (`v2`) | [localhost:5000](http://localhost:5000/) [localhost:3000/api/v2](http://localhost:3000/api/v2) | n/a | n/a |
### Entwicklung mit Docker

[^1]: Authentifizierung via `Authorization` Header und Basic Authentication, Benutzername und Passwort im Base64 Format
Mit `docker-compose up` kann eine funktionierende Infrastruktur hochgefahren werden. Sie unterstützt Hot-Reload und lädt den Code aus dem lokalen Verzeichnis. Unter Windows mit Docker-Desktop kann die Synchronisierung in den _mounted volumes_ zu Performance-Problemen führen.

**Folgende Dienste/Anwendungen sind anschliessend wie folgt verfügbar**

**Features (was funktioniert und was noch nicht)**
| 🔖 Dienst/Anwendung | 🔗Adresse | 🧞Benutzername | 🔐Passwort |
| :-------------------------- | :--------------------------------------------------------------------------------------------- | :------------- | :------------- |
| Boreholes of Switzerland | [localhost:3000](http://localhost:3000/) | `admin` | `swissforages` |
| pgAdmin | [localhost:3001](http://localhost:3001/) | n/a | n/a |
| Tornado REST API (`v1`)[^1] | [localhost:8888](http://localhost:8888/) [localhost:3000/api/v1](http://localhost:3000/api/v1) | n/a | n/a |
| .NET REST API (`v2`)[^1] | [localhost:5000](http://localhost:5000/) [localhost:3000/api/v2](http://localhost:3000/api/v2) | n/a | n/a |
| OIDC Server | [localhost:4011](http://localhost:4011/) | `admin` | `swissforages` |

🚀Hot Reload bei Änderungen im JavaScript Code der React Web-Applikation
🚀Hot Reload bei Änderungen im Python Code der Tornado REST API (`v1`)
🚀Hot Reload bei Änderungen im C# Code der .NET REST API (`v2`)
[^1]: Authentifizierung via `Authorization` Header mit Bearer-Token von OIDC Server. Login-Konfigurationen können in [config/oidc-mock-users.json](./config/oidc-mock-users.json) getätigt werden.

❌Der Debug Output der Tornado REST API ist aktuell in VSCode nicht sichtbar. Bitte vorerst den Container Log benutzen `docker compose logs api --follow`
❌Der Debug Output der Tornado REST API ist aktuell in Visual Studio nicht sichtbar. Bitte den Container-Log benutzen `docker compose logs api --follow` oder direkt in Visual Studio im _Containers_-Tab.

## Cypress Tests

Expand Down
12 changes: 12 additions & 0 deletions docker-compose.dcproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk">
<PropertyGroup Label="Globals">
<ProjectVersion>2.1</ProjectVersion>
<DockerTargetOS>Linux</DockerTargetOS>
<ProjectGuid>2b4bc48d-b932-4cb4-b9d6-1336a9f64d79</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<None Include="docker-compose.yml" />
<None Include=".dockerignore" />
</ItemGroup>
</Project>
4 changes: 4 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ services:
restart: unless-stopped
volumes:
- ./db:/docker-entrypoint-initdb.d
- postgis-data:/var/lib/postgresql/data
ports:
- 5432:5432
environment:
Expand Down Expand Up @@ -150,3 +151,6 @@ services:
volumes:
- ./config/oidc-mock-clients.json:/tmp/config/clients-config.json:ro
- ./config/oidc-mock-users.json:/tmp/config/users-config.json:ro

volumes:
postgis-data:
17 changes: 17 additions & 0 deletions launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"profiles": {
"Docker Compose": {
"commandName": "DockerCompose",
"commandVersion": "1.0",
"serviceActions": {
"db": "StartWithoutDebugging",
"minio": "StartWithoutDebugging",
"oidc-server": "StartWithoutDebugging",
"pgadmin": "StartWithoutDebugging",
"api-legacy": "StartWithoutDebugging",
"api": "DoNotStart",
"client": "DoNotStart"
}
}
}
}
2 changes: 1 addition & 1 deletion src/api/appsettings.Development.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
}
},
"ConnectionStrings": {
"BdmsContext": "Host=localhost;Username=SPAWNPLOW;Password=YELLOWSPATULA;Database=bdms;"
"BdmsContext": "Host=localhost;Username=SPAWNPLOW;Password=YELLOWSPATULA;Database=bdms;CommandTimeout=300;"
},
"S3": {
"ACCESS_KEY": "REDSQUIRREL",
Expand Down
1 change: 1 addition & 0 deletions src/client/.env
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
BROWSER=none
REACT_APP_PROXY_HOST_API=http://localhost:5000/
REACT_APP_VERSION=0.0.99+dev
19 changes: 19 additions & 0 deletions src/client/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "edge",
"request": "launch",
"name": "localhost (Edge)",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}"
},
{
"type": "chrome",
"request": "launch",
"name": "localhost (Chrome)",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}"
}
]
}
9 changes: 9 additions & 0 deletions src/client/BDMS.Client.esproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.VisualStudio.JavaScript.Sdk/0.5.401524-alpha">
<PropertyGroup>
<StartupCommand>npm run start</StartupCommand>
<!-- Allows the build (or compile) script located on package.json to run on Build -->
<ShouldRunBuildScript>false</ShouldRunBuildScript>
<!-- Folder where production build objects will be placed -->
<PublishAssetsDirectory>$(MSBuildProjectDirectory)\build</PublishAssetsDirectory>
</PropertyGroup>
</Project>

0 comments on commit dcfff6c

Please sign in to comment.