Skip to content

Commit

Permalink
Merge pull request #1002 from MTES-MCT/build-only-changed-projects
Browse files Browse the repository at this point in the history
Test only changed projects
  • Loading branch information
Falinor authored Nov 13, 2024
2 parents bf353d9 + df059a9 commit 0f09aff
Show file tree
Hide file tree
Showing 18 changed files with 3,407 additions and 411 deletions.
46 changes: 18 additions & 28 deletions .docker/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,31 @@
# Abort on error
set -e

if [ -z "$DATABASE_URL" ]; then
echo "Usage: DATABASE_URL=... bash setup.sh"
if [ -z "$DEV_DB" ] || [ -z "$TEST_DB" ]; then
echo "Usage: DEV_DB=... TEST_DB=... bash setup.sh"
exit 1
fi

# The default postgres user
POSTGRES_USER=postgres

docker-compose up -d
echo "Postgres started."
docker-compose exec -T db psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
DROP DATABASE IF EXISTS zlv;
DROP DATABASE IF EXISTS test_zlv;
CREATE DATABASE zlv;
CREATE DATABASE test_zlv;
dirname=$(dirname "$0")
config="$dirname"/docker-compose.yml
docker compose -f "$config" up -d

dev=$(echo "$DEV_DB" | grep -o '[^/]*$')
test=$(echo "$TEST_DB" | grep -o '[^/]*$')

docker compose -f "$config" exec -T db psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
DROP DATABASE IF EXISTS $dev;
DROP DATABASE IF EXISTS $test;
CREATE DATABASE $dev;
CREATE DATABASE $test;
EOSQL
echo "Databases created."

# Create database structure
cd ../server && yarn run migrate
echo "Migrated."

cd -
docker-compose exec -T -w /database db psql -v ON_ERROR_STOP=1 "$DATABASE_URL" -f scripts/001-load-establishments_com_epci_reg_dep.sql -v filePath=data/common/com_epci_dep_reg.csv
echo "EPCI loaded."
docker-compose exec -T -w /database db psql -v ON_ERROR_STOP=1 "$DATABASE_URL" -f scripts/002-load-establishments_direction_territoriale.sql -v filePath=data/common/direction_territoriale.csv
echo "Communes loaded."
docker-compose exec -T -w /database db psql -v ON_ERROR_STOP=1 "$DATABASE_URL" -f scripts/003-load-establishment_kinds.sql -v filePath=data/common/nature_juridique.csv
echo "Directions territoriales loaded."
docker-compose exec -T -w /database db psql -v ON_ERROR_STOP=1 "$DATABASE_URL" -f scripts/004-load-data.sql -v filePath=data/dummy/dummy_data.csv -v dateFormat="'MM/DD/YY'"
echo "Housings loaded."
docker-compose exec -T -w /database db psql -v ON_ERROR_STOP=1 "$DATABASE_URL" -f scripts/006-load-locality-taxes.sql -v filePath=data/common/taxe.csv
echo "Taxes loaded."

cd ../server
yarn seed
echo "Data loaded."
cd -
echo "Migrating..."
DATABASE_URL="$DEV_DB" yarn workspace @zerologementvacant/server migrate
echo "Seeding..."
DATABASE_URL="$DEV_DB" yarn workspace @zerologementvacant/server seed
2 changes: 1 addition & 1 deletion .github/workflows/github-actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
run: yarn lint

- name: Test
run: yarn test
run: yarn test --since --parallel --include-dependents
env:
LOG_LEVEL: fatal
REACT_APP_API_URL: http://localhost:3001
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

lerna-debug.log

# Misc
.DS_Store

Expand Down
134 changes: 56 additions & 78 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,136 +2,114 @@

[Fiche produit](https://beta.gouv.fr/startups/zero-logement-vacant.html)

## Développement
## Getting started en 5 minutes

### Prérequis

* node
* npm
* serveur Postgres (sur macOS, possible d'utiliser [postgresapp](https://postgresapp.com>))
* commande psql dans le PATH (pour le chargement des données)
* serveur mail (par exemple [mailDev](https://github.com/maildev/maildev))

### Base de données

Créer une base de données vide pour l'application (par exemple `zlv`) et une autre pour les tests (par exemple `test_zlv`).

La création des tables et autres structures SQL se fera automatiquement lors du lancement de l'application via les migrations [KnexJS](http://knexjs.org/#Migrations) contenues dans le répertoire `/database/migrations`

### Installation de Postgres avec Docker

Voici comment lancer Postgres avec l'extension PostGIS dans un conteneur Docker sur votre machine locale avec Docker:
### Installation de l'application

```bash
docker run --name zlv-postgres -e POSTGRES_PASSWORD=zlv -p 5432:5432 -d postgis/postgis
```

### Installation de mailDev avec Docker

MailDev est un outil de test SMTP simple pour les développeurs. Il permet de capturer et de visualiser les emails envoyés pendant le développement d'applications sans avoir besoin de les envoyer à un serveur de mail réel. Voici comment lancer MailDev dans un conteneur Docker sur votre machine locale avec Docker:
git clone https://github.com/MTES-MCT/zero-logement-vacant.git

```bash
docker run -p 1080:1080 -p 1025:1025 maildev/maildev
cd zero-logement-vacant && yarn
```

Les emails seront consultables sur `http://0.0.0.0:1080/#/`
### Lancement des dépendances

#### Avec Docker compose
Pour lancer les services, migrer et remplir la base de données en une seule
commande :

Nous utilisons Docker Compose pour configurer et lancer trois services essentiels : une base de données PostgreSQL avec l'extension PostGIS, un service de mail pour le développement avec MailDev, ainsi qu'Adminer, un outil de gestion de base de données via une interface web. Voici comment déployer ce conteneur en local:

```bash
cd .docker

DATABASE_URL=postgres://postgres@postgres@localhost/zlv bash setup.sh
```shell
export DEV_DB=postgres://postgres:postgres@localhost/dev
export TEST_DB=postgres://postgres:postgres@localhost/test
bash .docker/setup.sh
```

### Installation de l'application
Lancer **tous les services** :

```bash
git clone https://github.com/MTES-MCT/zero-logement-vacant.git
```shell
docker compose -f .docker/docker-compose.yml up -d
```

cd zero-logement-vacant
npm i
Lancer **un service spécifique** :

cd frontend
npm i
```shell
docker compose -f .docker/docker-compose.yml up -d <service>
```

### Variables d'environnement

Pour configurer votre environnement, commencez par créer un fichier nommé `.env` au sein du dossier `zero-logement-vacant`, en prenant exemple sur le contenu de `.env.example`.

Vous avez également la possibilité de personnaliser les valeurs des variables d'environnement déjà définies dans le fichier `/server/utils/config.ts` en les ajustant dans ce même fichier `.env`.

De plus, créez un fichier .env dans le sous-dossier `zero-logement-vacant/frontend`, en vous référant à nouveau à `zero-logement-vacant/frontend/.env.example` pour guider sa structure.
Chaque application peut définir ses propres variables d’environnement.
Des exemples sont disponibles comme ici pour l’API : [server/.env.example](server/.env.example).

### Chargement des données

**Développement / Staging**

Si vous avez choisi de ne pas charger les données via `docker compose`, vous
pouvez les charger manuellement :

```bash
yarn run migrate
cd src/infra/database/scripts
psql [DATABASE_URL] -f 001-load-establishments_com_epci_reg_dep.sql -v filePath=../data/common/com_epci_dep_reg.csv
psql [DATABASE_URL] -f 002-load-establishments_direction_territoriale.sql -v filePath=../data/common/direction_territoriale.csv
psql [DATABASE_URL] -f 003-load-establishment_kinds.sql -v filePath=../data/common/nature_juridique.csv
psql [DATABASE_URL] -f 004-load-data.sql -v filePath=../data/dummy/dummy_data.csv -v dateFormat="'MM/DD/YY'"
psql [DATABASE_URL] -f 006-load-locality-taxes.sql -v filePath=../data/common/taxe.csv
npm run seed
yarn workspace @zerologementvacant/server migrate
yarn workspace @zerologementvacant/server seed
```

**Note :** vous pouvez définir la variable d’environnement `DATABASE_URL`
pour utiliser une base de données spécifique.
Sinon une base de donnée locale sera utilisée par défaut.
La base de données **doit exister**.

Permet le chargement de données minimales pour faire fonctionner l'application avec des données anonymisées pour les collectivités suivantes :

- Eurométropole de Strasbourg
- CA Saint-Lô Agglo

et trois utilisateurs dont les mots de passes sont partagés sur https://vaultwarden.incubateur.net/:

- [email protected] => utilisateur avec des droits pour Eurométropole de Strasbourg
- [email protected] => utilisateur avec des droits pour Saint-Lô
- [email protected] => utilisateur avec des droits d'administration
- [email protected] => utilisateur lecture seule France entière

**Production**

Le chargement des données se fait à partir de fichier d'extractions de données au format csv.

```bash
cd database/scripts
psql [DATABASE_URL] -f 001-load-establishments_com_epci_reg_dep.sql -v filePath=../data/common/com_epci_dep_reg.csv
psql [DATABASE_URL] -f 002-load-establishments_direction_territoriale.sql -v filePath=../data/common/direction_territoriale.csv
psql [DATABASE_URL] -f 003-load-establishment_kinds.sql -v filePath=../data/common/nature_juridique.csv
psql [DATABASE_URL] -f 004-load-data.sql -v filePath=[DATA_CSV_FILE] -v dateFormat=[DATE_FORMAT]
psql [DATABASE_URL] -f 005-load-buildings.sql -v filePath=[BUILDING_CSV_FILE]
psql [DATABASE_URL] -f 006-load-locality-taxes.sql -v filePath=../data/common/taxe.csv
npm run seed
```

### Lancement de l'application en local

```bash
npm run start-local
Chaque application peut être lancée indépendamment.

```shell
yarn workspace @zerologementvacant/front dev # localhost:3000
yarn workspace @zerologementvacant/server dev # localhost:3001/api
```

L'application est accessible à l'adresse sur <http://localhost:3000> et il est possible de se connecter avec l'un des trois comptes utilisateurs cités plus haut.

### Lancement des tests

**Frontend**
Lancer tous les tests :

```bash
npm run frontend:test
```shell
yarn test
```

**Backend**
Lancer les tests d’un workspace en particulier :

```bash
npm run test
```shell
# Avec yarn
yarn workspace <workspace> test
# Avec lerna
yarn lerna run test --scope <workspace> [--include-dependents]

# Exemple
yarn workspace @zerologementvacant/server test
yarn lerna run test --scope @zerologementvacant/server --include-dependents
yarn test --scope @zerologementvacant/server --include-dependents
# yarn test == yarn lerna run test
```

La commande échoue si le package ne comporte pas de commande `test`, ou si un
test échoue.

## Démo

La version de démo de l'application est accessible à l'adresse <https://zerologementvacant-staging.incubateur.net>

## Production

La version de production de l'application est accessible à l'adresse <https://zerologementvacant.beta.gouv.fr>
La version de production de l'application est accessible à l'adresse <https://zerologementvacant.beta.gouv.fr>
1 change: 1 addition & 0 deletions e2e/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/e2e",
"version": "0.0.1",
"scripts": {
"dev": "dotenvx run -- cypress open",
"start": "dotenvx run -- cypress run"
Expand Down
1 change: 1 addition & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/front",
"version": "0.0.1",
"scripts": {
"clean": "rimraf build",
"icons": "only-include-used-icons",
Expand Down
5 changes: 5 additions & 0 deletions lerna.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "0.0.1",
"npmClient": "yarn"
}
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zero-logement-vacant",
"version": "1.0.0",
"version": "0.0.1",
"description": "Zéro Logement Vacant",
"engines": {
"node": "^20"
Expand All @@ -15,10 +15,10 @@
],
"scripts": {
"prepare": "husky",
"clean": "yarn workspaces foreach --exclude=. --exclude=@zerologementvacant/template -Api run clean",
"build": "yarn workspaces foreach --exclude=. --exclude=@zerologementvacant/template -Apit run build",
"clean": "lerna run clean",
"build": "lerna run build",
"lint": "eslint .",
"test": "yarn workspaces foreach --exclude=. -Ap run test"
"test": "lerna run test"
},
"keywords": [],
"author": "",
Expand All @@ -38,6 +38,7 @@
"husky": "^9.1.6",
"is-ci": "^3.0.1",
"jest": "^29.7.0",
"lerna": "^8.1.9",
"lint-staged": "^13.3.0",
"madr": "^3.0.0",
"node-talisman": "^1.29.11",
Expand Down
1 change: 1 addition & 0 deletions packages/api-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/api-sdk",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/draft/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/draft",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/draft/tsconfig.build.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"extends": "./tsconfig.json",
"references": [{ "path": "../utils/tsconfig.build.json" }],
"exclude": ["node_modules", "dist", "src/**/*.test.ts"]
}
1 change: 1 addition & 0 deletions packages/healthcheck/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/healthcheck",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/models/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/models",
"version": "0.0.1",
"exports": {
".": {
"import": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/schemas/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/schemas",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/template/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/template",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions packages/utils/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/utils",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
Expand Down
1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "@zerologementvacant/server",
"version": "0.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
Expand Down
Loading

0 comments on commit 0f09aff

Please sign in to comment.