Compare commits
68 Commits
9c457b17f5
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
448ab1f2e7 | ||
| 4c1f5951b0 | |||
| d0e4e0eec1 | |||
|
|
ac6e5e5638 | ||
| 0cd966c316 | |||
| 26e860f3b9 | |||
|
|
57ff385b02 | ||
| 81c3910ff1 | |||
| 9f1b1eed7e | |||
|
|
cca6c95762 | ||
| 92ce9f948a | |||
|
|
a8e2103eed | ||
| 24d60a8467 | |||
| e521fed916 | |||
| 9e5582a577 | |||
|
|
fa54e54ac6 | ||
| 46275fae35 | |||
|
|
3935e10a99 | ||
| adfc921c21 | |||
|
|
c336fd9346 | ||
| c2a6607dec | |||
|
|
a11c8de7c1 | ||
| 98062bc2ea | |||
|
|
1874518ea2 | ||
| 2a02d81104 | |||
| 9956aa9731 | |||
|
|
a7cbc3aec7 | ||
| b55a682286 | |||
|
|
02e070f52e | ||
| 6daed93ed5 | |||
| db1649e8e3 | |||
|
|
d8b3510925 | ||
| 243d75f324 | |||
|
|
8ae2d13648 | ||
| d89023b17e | |||
| dbf5a0cd1c | |||
|
|
296ac3b9d0 | ||
| 7f6c894493 | |||
|
|
962aec2243 | ||
| e6972f91a2 | |||
|
|
3b7f452f3f | ||
| 78e687ff7c | |||
| 26831ec466 | |||
|
|
2ee0e53ab0 | ||
| a561fd47c2 | |||
|
|
118f4bd42a | ||
| ec5930099b | |||
|
|
e2cd6bc990 | ||
| 39efdd0dac | |||
| dd97dd291c | |||
|
|
169460d5c8 | ||
| 949617c18e | |||
| 597f134997 | |||
|
|
6d6a4b78e9 | ||
| 008fe7676b | |||
| 001b108888 | |||
|
|
49c3cb2364 | ||
| c7ca904caa | |||
|
|
7a7765c10b | ||
| b634a12c6a | |||
|
|
d7823fcebc | ||
| a147272655 | |||
| b7710390fa | |||
|
|
9702c54572 | ||
| 241b04e6ff | |||
| 1dc776d888 | |||
| 3802a3ce61 | |||
|
|
6688861a95 |
@@ -9,7 +9,7 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
if: github.actor != 'github-actions[bot]'
|
||||
runs-on: self-hosted
|
||||
#runs-on: self-hosted
|
||||
container:
|
||||
image: alpine:latest
|
||||
steps:
|
||||
@@ -65,10 +65,7 @@ jobs:
|
||||
|
||||
# Push les modifications
|
||||
git push origin master
|
||||
- name: Run Changelog CI
|
||||
uses: saadmk11/changelog-ci@v1.1.2
|
||||
with:
|
||||
release_version: ${{ steps.increment_version.outputs.new_version }}
|
||||
|
||||
|
||||
- name: Use server_config_default as primary
|
||||
run: mv /workspace/CLERC/Reskreen/config/server_config_default.py /workspace/CLERC/Reskreen/config/server_config.py
|
||||
@@ -91,10 +88,9 @@ jobs:
|
||||
docker push registry.resk-u.ch/clerc/reskreen:latest
|
||||
|
||||
|
||||
- name: Call webhook $ {{ vars.CLERC_PROD_WEBHOOK}}
|
||||
- name: Call webhook to maj stack
|
||||
run: |
|
||||
echo "Exécution de la commande: curl ${{ vars.CLERC_PROD_WEBHOOK }}"?repo=reskreen
|
||||
curl ${{ vars.CLERC_PROD_WEBHOOK }}?repo=reskreen
|
||||
curl -H "Authorization: Bearer ${{ secrets.WEBHOOK_TOKEN_RESKREEN }}" ${{ vars.CLERC_PROD_WEBHOOK }}/reskreen
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
test
|
||||
test 2
|
||||
test 3
|
||||
test 4
|
||||
@@ -19,6 +19,6 @@ RUN python -m venv venv \
|
||||
EXPOSE 8080
|
||||
|
||||
#CMD ["python", "manage.py", "runserver", "0.0.0.0:8080"]
|
||||
CMD ["sh", "-c", "source venv/bin/activate && python manage.py runserver 0.0.0.0:8080"]
|
||||
CMD ["sh", "-c", "source venv/bin/activate && python manage.py collectstatic && python manage.py runserver 0.0.0.0:8080"]
|
||||
#CMD ["./startup.sh"]
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ INSTALLED_APPS = [
|
||||
'studenteval.apps.StudentevalConfig',
|
||||
'comm_op.apps.CommOpConfig',
|
||||
'custom_admin.apps.CustomAdminConfig',
|
||||
'vsl.apps.VslConfig',
|
||||
'rangefilter',
|
||||
'django.contrib.admin',
|
||||
'carnet_rouge.apps.CarnetRougeConfig',
|
||||
@@ -88,8 +89,6 @@ REST_FRAMEWORK = {
|
||||
|
||||
LANGUAGE_CODE = 'fr-CH'
|
||||
|
||||
if not cfg_dev_mode:
|
||||
INSTALLED_APPS.append('nextcloud.apps.NextcloudConfig')
|
||||
|
||||
|
||||
MEDIA_URL = '/media/'
|
||||
|
||||
@@ -19,10 +19,15 @@ from django.urls import path, include
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
from django.views.generic import RedirectView
|
||||
from django.http import JsonResponse
|
||||
from . import views
|
||||
def healthcheck(request):
|
||||
return JsonResponse({'status': True})
|
||||
|
||||
urlpatterns = [
|
||||
path('', RedirectView.as_view(url='admin/login/', permanent=False), name='/'),
|
||||
path('admin/', admin.site.urls),
|
||||
path('robots.txt', views.robots_txt),
|
||||
path('accounts/', admin.site.urls),
|
||||
path('collabs/', include('collabs.urls')),
|
||||
path('vehicules/', include('vehicles.urls')),
|
||||
@@ -35,6 +40,7 @@ urlpatterns = [
|
||||
path('editor/', include('django_summernote.urls')),
|
||||
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
path('api/auth/', include('authapp.urls')),
|
||||
path('healthcheck/', healthcheck),
|
||||
|
||||
]
|
||||
|
||||
|
||||
4
Reskreen/views.py
Normal file
4
Reskreen/views.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from django.http import HttpResponse
|
||||
|
||||
def robots_txt(request):
|
||||
return HttpResponse("User-agent: *\nDisallow: /\n", content_type="text/plain")
|
||||
@@ -17,7 +17,7 @@ class CustomAuthToken(ObtainAuthToken):
|
||||
def post(self, request, *args, **kwargs):
|
||||
response = super().post(request, *args, **kwargs)
|
||||
token = Token.objects.get(key=response.data['token'])
|
||||
return Response({'token': token.key, 'user_id': token.user_id})
|
||||
return Response({'token': token.key, 'user_id': token.user_id, 'username': token.user.username})
|
||||
|
||||
class RegenerateTokenView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
from pathlib import Path
|
||||
import os
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
cfg_dev_mode = True
|
||||
cfg_dev_mode = False
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
#SECRET_KEY = 'django-prod-j4jd&+4j^t_=@zr(#q@n!8e*58vkql6&_6w-t14ju8pw%ei%^s'
|
||||
SECRET_KEY = 'django-insecure-j4jd&+4j^t_=@zr(#q@n!8e*58vkql6&_6w-t14ju8pw%ei%^s'
|
||||
|
||||
SECRET_KEY = 'django-insecure'
|
||||
|
||||
|
||||
cfg_status_badge = "https://status.resk-u.ch/api/badge/22/uptime/744"
|
||||
@@ -29,6 +27,7 @@ CORS_ALLOWED_ORIGINS = [
|
||||
"http://33.144.144.13:4173",
|
||||
"http://33.144.144.13:5173",
|
||||
"http://33.144.144.13:3000",
|
||||
"http://100.126.38.72:5173",
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
# Exécute la tâche cron toutes les heures
|
||||
# Exécute la tâche cron toutes les minutes
|
||||
* * * * * cd /app && python /app/manage.py runcrons > /var/log/runcrons.log
|
||||
* * * * * curl -s https://status.resk-u.ch/api/push/6zvssVZGQEkLTJACSfHbKoj3rgwArwtp?status=up\&msg=OK\&ping= > /dev/null 2>&1
|
||||
|
||||
@@ -2,8 +2,6 @@ version: '3.8'
|
||||
services:
|
||||
backend:
|
||||
image: registry.resk-u.ch/clerc/reskreen:latest
|
||||
labels:
|
||||
node.labels.reskreen-ready: 'true'
|
||||
|
||||
|
||||
volumes:
|
||||
@@ -32,19 +30,6 @@ services:
|
||||
- main-swarm-network
|
||||
logging:
|
||||
driver: json-file
|
||||
frontend:
|
||||
image: registry.resk-u.ch/clerc/clerc-frontend:latest
|
||||
labels:
|
||||
node.labels.reskreen-ready: 'true'
|
||||
|
||||
networks:
|
||||
- main-swarm-network
|
||||
configs:
|
||||
-
|
||||
source: env-reskreen-frontend
|
||||
target: /app/frontend-app/.env
|
||||
logging:
|
||||
driver: json-file
|
||||
deploy:
|
||||
update_config:
|
||||
delay: 10s
|
||||
@@ -54,8 +39,21 @@ services:
|
||||
placement:
|
||||
constraints:
|
||||
- node.labels.reskreen-ready==true
|
||||
frontend:
|
||||
image: registry.resk-u.ch/clerc/clerc-frontend:latest
|
||||
|
||||
|
||||
networks:
|
||||
- main-swarm-network
|
||||
configs:
|
||||
-
|
||||
source: env-reskreen-frontend
|
||||
target: /app/frontend-app/.env
|
||||
logging:
|
||||
driver: json-file
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/"]
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/healthcheck"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -67,11 +65,7 @@ networks:
|
||||
external: true
|
||||
volumes:
|
||||
reskreen-data:
|
||||
driver: local
|
||||
driver_opts:
|
||||
device: /home/prod/Reskreen
|
||||
o: bind
|
||||
type: none
|
||||
|
||||
configs:
|
||||
env-reskreen-frontend:
|
||||
external: true
|
||||
|
||||
@@ -204,9 +204,9 @@ class cls_caldav():
|
||||
if "$" in item.key:
|
||||
item.team_transfert = True
|
||||
item.key = item.key.replace("$","")
|
||||
if "Manif" in item.key:
|
||||
if "manif" in item.key.lower():
|
||||
item.team_manif = True
|
||||
item.key = item.key.replace("Manif", "")
|
||||
item.key = item.key.replace("manif", "").replace("Manif", "").replace("MANIF", "")
|
||||
item.name = arr[1]
|
||||
if "&" in item.name:
|
||||
arr = item.name.split("&")
|
||||
|
||||
@@ -198,7 +198,7 @@ def view_team_caldav(request):
|
||||
o_caldav = cls_caldav(url=caldav_cfg["team"])
|
||||
o_caldav.get_caldav_data(periode=3)
|
||||
template = loader.get_template("team/team_view.html")
|
||||
o_caldav.sort_array_by_key(True)
|
||||
o_caldav.sort_array_by_key(False)
|
||||
|
||||
response = formatResponseArray(o_caldav)
|
||||
additional_data = {
|
||||
|
||||
@@ -6,7 +6,7 @@ from vehicles.models import *
|
||||
|
||||
class _vhc_admin(admin.ModelAdmin):
|
||||
|
||||
list_display = ('sName', 'nBases', 'nStatus', "bLucas","bDrap")
|
||||
list_display = ('sName', 'nBases', 'nStatus', "bLucas","bDrap", "nOrder")
|
||||
ordering = ["nOrder"]
|
||||
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@ class cl_Vehicles_Serializer(serializers.ModelSerializer):
|
||||
fields = '__all__'
|
||||
|
||||
def get_technique_infos(self, obj):
|
||||
enabled_infos = Vehicles_infos.objects.filter(Vehicle=obj, bEnabled=True, nType=1)
|
||||
enabled_infos = Vehicles_infos.objects.filter(Vehicle=obj, bEnabled=True, nType=1).order_by('-dtCreated')
|
||||
return cl_Vehicles_infos_Serializer(enabled_infos, many=True).data
|
||||
def get_matos_infos(self, obj):
|
||||
enabled_infos = Vehicles_infos.objects.filter(Vehicle=obj, bEnabled=True, nType=2)
|
||||
enabled_infos = Vehicles_infos.objects.filter(Vehicle=obj, bEnabled=True, nType=2).order_by('-dtCreated')
|
||||
return cl_Vehicles_infos_Serializer(enabled_infos, many=True).data
|
||||
def get_perempt_infos_fixes(self, obj):
|
||||
enabled_infos = Vehicles_infos.objects.filter(Vehicle=obj, bEnabled=True, nType=3)[:3]
|
||||
|
||||
@@ -20,9 +20,12 @@ class VehicleViewset(viewsets.ModelViewSet):
|
||||
ordering = ['nType', 'nStatus', 'nOrder'] # Ordre par défaut
|
||||
|
||||
class VehicleInfosViewset(viewsets.ModelViewSet):
|
||||
queryset = Vehicles_infos.objects.all()
|
||||
queryset = Vehicles_infos.objects.all().order_by('-id')
|
||||
serializer_class = cl_Vehicles_infos_Serializer
|
||||
permission_classes = [CustomPermission_DjangoModel_based]
|
||||
ordering_fields = ['dtCreated']
|
||||
ordering = ['dtCreated']
|
||||
|
||||
|
||||
@xframe_options_exempt
|
||||
def view_vhc(request):
|
||||
|
||||
0
vsl/__init__.py
Normal file
0
vsl/__init__.py
Normal file
11
vsl/admin.py
Normal file
11
vsl/admin.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from django.contrib import admin
|
||||
from vsl.models import VslDest
|
||||
|
||||
|
||||
@admin.register(VslDest)
|
||||
class vsl_destAdmin(admin.ModelAdmin):
|
||||
list_display = ('id', 'name')
|
||||
|
||||
ordering = ('id',)
|
||||
list_per_page = 100
|
||||
search_fields = ('name',)
|
||||
6
vsl/apps.py
Normal file
6
vsl/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class VslConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'vsl'
|
||||
23
vsl/migrations/0001_initial.py
Normal file
23
vsl/migrations/0001_initial.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.0.10 on 2025-06-04 16:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='VslDest',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID du Suivi')),
|
||||
('name', models.CharField(max_length=255, verbose_name='Dénomination')),
|
||||
('date_creation', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
|
||||
('date_modification', models.DateTimeField(auto_now=True, verbose_name='Date de modification')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.0.10 on 2025-06-04 16:49
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vsl', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='vsldest',
|
||||
old_name='date_creation',
|
||||
new_name='dtCreate',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='vsldest',
|
||||
old_name='date_modification',
|
||||
new_name='dtUpdate',
|
||||
),
|
||||
]
|
||||
18
vsl/migrations/0003_rename_name_vsldest_dest.py
Normal file
18
vsl/migrations/0003_rename_name_vsldest_dest.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.10 on 2025-06-04 16:50
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vsl', '0002_rename_date_creation_vsldest_dtcreate_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='vsldest',
|
||||
old_name='name',
|
||||
new_name='dest',
|
||||
),
|
||||
]
|
||||
18
vsl/migrations/0004_rename_dest_vsldest_name.py
Normal file
18
vsl/migrations/0004_rename_dest_vsldest_name.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.10 on 2025-06-04 16:51
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vsl', '0003_rename_name_vsldest_dest'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='vsldest',
|
||||
old_name='dest',
|
||||
new_name='name',
|
||||
),
|
||||
]
|
||||
0
vsl/migrations/__init__.py
Normal file
0
vsl/migrations/__init__.py
Normal file
22
vsl/models.py
Normal file
22
vsl/models.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
class VslDest(models.Model):
|
||||
# ID auto-incrémenté par défaut
|
||||
id = models.AutoField("ID du Suivi", primary_key=True)
|
||||
|
||||
# Champ de chaîne de caractères avec une longueur maximale de 255 caractères
|
||||
name = models.CharField("Dénomination", max_length=255)
|
||||
|
||||
# Champ pour la date de création, automatiquement défini à la création
|
||||
dtCreate = models.DateTimeField("Date de création", auto_now_add=True)
|
||||
|
||||
# Champ pour la date de modification, automatiquement mis à jour à chaque modification
|
||||
dtUpdate = models.DateTimeField("Date de modification", auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
class Meta:
|
||||
verbose_name = "Destination VSL"
|
||||
verbose_name_plural = "Destinations VSL"
|
||||
ordering = ["id"]
|
||||
3
vsl/tests.py
Normal file
3
vsl/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
3
vsl/views.py
Normal file
3
vsl/views.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Reference in New Issue
Block a user