From 48eb6d6c64a86e6321eaafc8f6c738d1a40abe07 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 23 Jan 2023 07:23:42 +0100 Subject: [PATCH 01/58] typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb590f0..5f3e4a8 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,14 @@ Only the clients need a connection to this service on configured port. # Setup (Service) -**System requirements**: +**System requirements** - 256mb ram - 4gb hdd Tested with Ubuntu 22.10 (from Proxmox templates), actually its consuming 100mb ram and 750mb hdd. -**Prepare your system**: +**Prepare your system** - Make sure your timezone is set correct on you fastapi-dls server and your client From 9ebff8d6ca2aeea1663592147343cedd3a8c914d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 23 Jan 2023 07:29:13 +0100 Subject: [PATCH 02/58] typos --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f3e4a8..8220259 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Only the clients need a connection to this service on configured port. - https://gitea.publichub.eu/oscar.krause/fastapi-dls - Docker Image `collinwebdesigns/fastapi-dls:latest` -*All other repositories are forks!* +*All other repositories are forks! (which is no bad - just for information and bug reports)* --- From 02276d5440cf328164fef94bd2167f48b1af5b80 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 23 Jan 2023 07:33:54 +0100 Subject: [PATCH 03/58] disabled openapi endpoints --- README.md | 4 ---- app/main.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 8220259..649b158 100644 --- a/README.md +++ b/README.md @@ -368,10 +368,6 @@ Shows current runtime environment variables and their values. HTML rendered README.md. -### `GET /-/docs`, `GET /-/redoc` - -OpenAPI specifications rendered from `GET /-/openapi.json`. - ### `GET /-/manage` Shows a very basic UI to delete origins or leases. diff --git a/app/main.py b/app/main.py index e9ed1dd..4b78253 100644 --- a/app/main.py +++ b/app/main.py @@ -28,7 +28,7 @@ TZ = datetime.now().astimezone().tzinfo VERSION, COMMIT, DEBUG = env('VERSION', 'unknown'), env('COMMIT', 'unknown'), bool(env('DEBUG', False)) -config = dict(openapi_url='/-/openapi.json', docs_url='/-/docs', redoc_url='/-/redoc') +config = dict(openapi_url=None, docs_url=None, redoc_url=None) # dict(openapi_url='/-/openapi.json', docs_url='/-/docs', redoc_url='/-/redoc') app = FastAPI(title='FastAPI-DLS', description='Minimal Delegated License Service (DLS).', version=VERSION, **config) db = create_engine(str(env('DATABASE', 'sqlite:///db.sqlite'))) db_init(db), migrate(db) From f12dc28c426e6feeef9af1c1688d235fb612c44c Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 26 Jan 2023 07:17:16 +0100 Subject: [PATCH 04/58] fixed overriding config file on update / reinstall --- .PKGBUILD/PKGBUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/.PKGBUILD/PKGBUILD b/.PKGBUILD/PKGBUILD index 97d3995..82d038d 100644 --- a/.PKGBUILD/PKGBUILD +++ b/.PKGBUILD/PKGBUILD @@ -11,6 +11,7 @@ license=('MIT') depends=('python' 'python-jose' 'python-starlette' 'python-httpx' 'python-fastapi' 'python-dotenv' 'python-dateutil' 'python-sqlalchemy' 'python-pycryptodome' 'uvicorn' 'python-markdown' 'openssl') provider=("$pkgname") install="$pkgname.install" +backup=('etc/default/fastapi-dls') source=('git+file:///builds/oscar.krause/fastapi-dls' # https://gitea.publichub.eu/oscar.krause/fastapi-dls.git "$pkgname.default" "$pkgname.service" From f30e9237a507ff5b33fb25f124333589b73117b1 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 26 Jan 2023 07:18:01 +0100 Subject: [PATCH 05/58] requirements.txt updated --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4c25d3f..61d00cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,4 @@ pycryptodome==3.16.0 python-dateutil==2.8.2 sqlalchemy==1.4.46 markdown==3.4.1 -python-dotenv==0.21.0 +python-dotenv==0.21.1 From 9edc93653e49aa669c93493d742507e9560250cc Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 26 Jan 2023 07:38:48 +0100 Subject: [PATCH 06/58] bump version to 1.3.4 --- version.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.env b/version.env index 93176fc..c7644ab 100644 --- a/version.env +++ b/version.env @@ -1 +1 @@ -VERSION=1.3.3 +VERSION=1.3.4 From 616e8fba5e983eded6bc45e893397d8df3137c7f Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 08:37:34 +0100 Subject: [PATCH 07/58] README - improvements --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 649b158..0da343b 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ version: '3.9' x-dls-variables: &dls-variables DLS_URL: localhost # REQUIRED, change to your ip or hostname DLS_PORT: 443 - LEASE_EXPIRE_DAYS: 90 + LEASE_EXPIRE_DAYS: 90 # 90 days is maximum DATABASE: sqlite:////app/database/db.sqlite services: @@ -85,7 +85,12 @@ services: volumes: - /opt/docker/fastapi-dls/cert:/app/cert - dls-db:/app/database - + logging: # optional, for those who do not need logs + driver: "json-file" + options: + max-file: 5 + max-size: 10m + volumes: dls-db: ``` @@ -135,6 +140,8 @@ This is only to test whether the service starts successfully. ```shell cd /opt/fastapi-dls/app su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" +# or +sudo -u www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" ``` **Create config file** From 70212e0edd7c327266e693f377d889a267c5adfd Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 09:18:57 +0100 Subject: [PATCH 08/58] improved docker-compose examples --- README.md | 2 ++ docker-compose.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 0da343b..86f1abe 100644 --- a/README.md +++ b/README.md @@ -69,10 +69,12 @@ Goto [`docker-compose.yml`](docker-compose.yml) for more advanced example (with version: '3.9' x-dls-variables: &dls-variables + TZ: Europe/Berlin # REQUIRED, set your timezone correctly on fastapi-dls AND YOUR CLIENTS !!! DLS_URL: localhost # REQUIRED, change to your ip or hostname DLS_PORT: 443 LEASE_EXPIRE_DAYS: 90 # 90 days is maximum DATABASE: sqlite:////app/database/db.sqlite + DEBUG: false services: dls: diff --git a/docker-compose.yml b/docker-compose.yml index b52a58a..3f02cdc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,7 @@ services: environment: <<: *dls-variables volumes: + - /etc/timezone:/etc/timezone:ro - /opt/docker/fastapi-dls/cert:/app/cert # instance.private.pem, instance.public.pem - db:/app/database entrypoint: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--app-dir", "/app", "--proxy-headers"] @@ -30,6 +31,7 @@ services: - "80:80" # for "/leasing/v1/lessor/shutdown" used by windows guests, can't be changed! - "443:443" # first part must match "DLS_PORT" volumes: + - /etc/timezone:/etc/timezone:ro - /opt/docker/fastapi-dls/cert:/opt/cert healthcheck: test: ["CMD", "curl", "--insecure", "--fail", "https://localhost/-/health"] From f540c4b25bc84866a782651c6b675fa893a0ab6b Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 09:19:03 +0100 Subject: [PATCH 09/58] requirements.txt updated --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 61d00cc..39bbfb9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ fastapi==0.89.1 uvicorn[standard]==0.20.0 python-jose==3.3.0 -pycryptodome==3.16.0 +pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==1.4.46 +sqlalchemy==2.0.0 markdown==3.4.1 python-dotenv==0.21.1 From 62d347510d589505ef7e29f25f9409682b7ea879 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 10:22:18 +0100 Subject: [PATCH 10/58] fixed - sqlalchemy.exc.ArgumentError: Textual SQL expression '\nCREATE TABLE origin (\n\to...' should be explicitly declared as text('\nCREATE TABLE origin (\n\to...') --- app/orm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/orm.py b/app/orm.py index 6f4858f..693a8a8 100644 --- a/app/orm.py +++ b/app/orm.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta -from sqlalchemy import Column, VARCHAR, CHAR, ForeignKey, DATETIME, update, and_, inspect +from sqlalchemy import Column, VARCHAR, CHAR, ForeignKey, DATETIME, update, and_, inspect, text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import Engine from sqlalchemy.orm import sessionmaker @@ -190,7 +190,7 @@ def init(engine: Engine): session = sessionmaker(bind=engine)() for table in tables: if not db.dialect.has_table(engine.connect(), table.__tablename__): - session.execute(str(table.create_statement(engine))) + session.execute(text(str(table.create_statement(engine)))) session.commit() session.close() From 59152f95e60fe19d92e3800674637cc5797b8310 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 10:23:09 +0100 Subject: [PATCH 11/58] fixed - The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base() --- app/orm.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/orm.py b/app/orm.py index 693a8a8..c78ca95 100644 --- a/app/orm.py +++ b/app/orm.py @@ -2,9 +2,8 @@ from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta from sqlalchemy import Column, VARCHAR, CHAR, ForeignKey, DATETIME, update, and_, inspect, text -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import Engine -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import sessionmaker, declarative_base Base = declarative_base() From a42b1c8cfb06de4040dfd9eda83173f4ec8b72e9 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 12:34:46 +0100 Subject: [PATCH 12/58] added note to be logged in as root using manual install method (git) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 86f1abe..3d66936 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ volumes: Tested on `Debian 11 (bullseye)`, Ubuntu may also work. +**Make sure you are logged in as root.** + **Install requirements** ```shell From b36b49df11262d61e942e09f5e5db1ea2bda93d4 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 30 Jan 2023 13:01:45 +0100 Subject: [PATCH 13/58] fixed missing mkdir for config file on manual installation method --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d66936..3801b4a 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ chown -R www-data:www-data $WORKING_DIR ```shell WORKING_DIR=/opt/fastapi-dls/app/cert -mkdir $WORKING_DIR +mkdir -p $WORKING_DIR cd $WORKING_DIR # create instance private and public key for singing JWT's openssl genrsa -out $WORKING_DIR/instance.private.pem 2048 @@ -151,6 +151,7 @@ sudo -u www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/f **Create config file** ```shell +mkdir /etc/fastapi-dls cat </etc/fastapi-dls/env DLS_URL=127.0.0.1 DLS_PORT=443 From 4b58fe6e203051cf4e2792a242d82ee86f9b0201 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 13 Feb 2023 08:09:01 +0100 Subject: [PATCH 14/58] added openSUSE Leap 15.4 support --- README.md | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3801b4a..a56ca7d 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,108 @@ EOF Now you have to run `systemctl daemon-reload`. After that you can start service with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`. +## openSUSE Leap (manual method using `git clone` and python virtual environment) + +Tested on `openSUSE Leap 15.4`, openSUSE Tumbleweed may also work. + +**Install requirements** + +```shell +zypper in -y python310 python3-virtualenv python3-pip +``` + +**Install FastAPI-DLS** + +```shell +BASE_DIR=/opt/fastapi-dls +SERVICE_USER=dls +mkdir -p ${BASE_DIR} +cd ${BASE_DIR} +git clone https://git.collinwebdesigns.de/oscar.krause/fastapi-dls . +python3.10 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +deactivate +useradd -r ${SERVICE_USER} -M -d /opt/fastapi-dls +chown -R ${SERVICE_USER} ${BASE_DIR} +``` + +**Create keypair and webserver certificate** + +```shell +CERT_DIR=${BASE_DIR}/app/cert +SERVICE_USER=dls +mkdir ${CERT_DIR} +cd ${CERT_DIR} +# create instance private and public key for singing JWT's +openssl genrsa -out ${CERT_DIR}/instance.private.pem 2048 +openssl rsa -in ${CERT_DIR}/instance.private.pem -outform PEM -pubout -out ${CERT_DIR}/instance.public.pem +# create ssl certificate for integrated webserver (uvicorn) - because clients rely on ssl +openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ${CERT_DIR}/webserver.key -out ${CERT_DIR}/webserver.crt +chown -R ${SERVICE_USER} ${CERT_DIR} +``` + +**Test Service** + +This is only to test whether the service starts successfully. + +```shell +BASE_DIR=/opt/fastapi-dls +SERVICE_USER=dls +cd ${BASE_DIR} +su - ${SERVICE_USER} -c "${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_DIR}/app" +``` + +**Create config file** + +```shell +BASE_DIR=/opt/fastapi-dls +cat </etc/fastapi-dls/env +# Adjust DSL_URL as needed (accessing from LAN won't work with 127.0.0.1) +DLS_URL=127.0.0.1 +DLS_PORT=443 +LEASE_EXPIRE_DAYS=90 +DATABASE=sqlite:///${BASE_DIR}/app/db.sqlite + +EOF +``` + +**Create service** + +```shell +BASE_DIR=/opt/fastapi-dls +SERVICE_USER=dls +cat </etc/systemd/system/fastapi-dls.service +[Unit] +Description=Service for fastapi-dls vGPU licensing service +After=network.target + +[Service] +User=${SERVICE_USER} +AmbientCapabilities=CAP_NET_BIND_SERVICE +WorkingDirectory=${BASE_DIR}/app +EnvironmentFile=/etc/fastapi-dls/env +ExecStart=${BASE_DIR}/venv/bin/uvicorn main:app \\ + --env-file /etc/fastapi-dls/env \\ + --host \$DLS_URL --port \$DLS_PORT \\ + --app-dir ${BASE_DIR}/app \\ + --ssl-keyfile ${BASE_DIR}/app/cert/webserver.key \\ + --ssl-certfile ${BASE_DIR}/app/cert/webserver.crt \\ + --proxy-headers +Restart=always +KillSignal=SIGQUIT +Type=simple +NotifyAccess=all + +[Install] +WantedBy=multi-user.target + +EOF +``` + +Now you have to run `systemctl daemon-reload`. After that you can start service +with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`. + ## Debian/Ubuntu (using `dpkg`) Packages are available here: @@ -564,5 +666,4 @@ The error message can safely be ignored (since we have no license limitation :P) Thanks to vGPU community and all who uses this project and report bugs. -Special thanks to @samicrusader who created build file for ArchLinux. - +Special thanks to @samicrusader who created build file for ArchLinux and @cyrus who wrote the section for openSUSE. From c1d541f7c636e10b3b36048a95d59046de958f30 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 13 Feb 2023 08:09:37 +0100 Subject: [PATCH 15/58] bump version to 1.3.5 --- version.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.env b/version.env index c7644ab..db1aeb8 100644 --- a/version.env +++ b/version.env @@ -1 +1 @@ -VERSION=1.3.4 +VERSION=1.3.5 From 210a36c07f3f85ace77b3b20a62197c5997779f6 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 12:59:12 +0100 Subject: [PATCH 16/58] added code-quality and test-coverage --- .gitlab-ci.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 89db932..cc91de8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,6 @@ +include: + - template: Jobs/Code-Quality.gitlab-ci.yml + cache: key: one-key-to-rule-them-all @@ -179,6 +182,30 @@ test:archlinux: - pacman -Sy - pacman -U --noconfirm *.pkg.tar.zst +code_quality: + rules: + - if: $CODE_QUALITY_DISABLED + when: never + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + +test_coverage: + extends: test + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + script: + - pip install pytest pytest-cov + - coverage run -m pytest + - coverage report + - coverage xml + coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' + artifacts: + reports: + coverage_report: + coverage_format: cobertura + path: '**/coverage.xml' + .deploy: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH From 4972f00822beebd410379ebe1bc7ee0a809375f2 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 13:37:25 +0100 Subject: [PATCH 17/58] fixes --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cc91de8..537ea96 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -191,12 +191,13 @@ code_quality: test_coverage: extends: test + allow_failure: true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - pip install pytest pytest-cov - - coverage run -m pytest + - coverage run -m pytest main.py - coverage report - coverage xml coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' From 1b9ebb48b10b73aa8e3f64c8d24d998a9bf37168 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 13:55:49 +0100 Subject: [PATCH 18/58] added secret detection --- .gitlab-ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 537ea96..8479291 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,6 @@ include: - template: Jobs/Code-Quality.gitlab-ci.yml + - template: Jobs/Secret-Detection.gitlab-ci.yml cache: key: one-key-to-rule-them-all @@ -189,6 +190,13 @@ code_quality: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +secret_detection: + rules: + - if: $SECRET_DETECTION_DISABLED + when: never + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + test_coverage: extends: test allow_failure: true From 938fc6bd600d8cc038aad1a8a632c17aca1f4182 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 14:50:21 +0100 Subject: [PATCH 19/58] added SAST --- .gitlab-ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8479291..c11b5fe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ include: - template: Jobs/Code-Quality.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml + - template: Jobs/SAST.gitlab-ci.yml cache: key: one-key-to-rule-them-all @@ -197,6 +198,13 @@ secret_detection: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +semgrep-sast: + rules: + - if: $SAST_DISABLED + when: never + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + test_coverage: extends: test allow_failure: true From 7af2e02627dd7ee5d31412ba9d8f78058c7a9e1a Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 15:14:19 +0100 Subject: [PATCH 20/58] improvements --- .gitlab-ci.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c11b5fe..92bf662 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,7 @@ include: - template: Jobs/Code-Quality.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml - template: Jobs/SAST.gitlab-ci.yml + - template: Jobs/Container-Scanning.gitlab-ci.yml cache: key: one-key-to-rule-them-all @@ -117,10 +118,11 @@ test: - openssl rsa -in app/cert/instance.private.pem -outform PEM -pubout -out app/cert/instance.public.pem - cd test script: - - pytest main.py + - python -m pytest main.py --junitxml=report.xml artifacts: reports: dotenv: version.env + junit: ['**/report.xml'] .test:linux: stage: test @@ -223,6 +225,14 @@ test_coverage: coverage_format: cobertura path: '**/coverage.xml' +container_scanning: + dependencies: [ build:docker ] + rules: + - if: $CONTAINER_SCANNING_DISABLED + when: never + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + .deploy: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH From 1d5d3b31fb749ab8534e5eeef2a99df6ef65d71b Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 15:32:32 +0100 Subject: [PATCH 21/58] dependency scanning --- .gitlab-ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92bf662..7b866e0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ include: - template: Jobs/Secret-Detection.gitlab-ci.yml - template: Jobs/SAST.gitlab-ci.yml - template: Jobs/Container-Scanning.gitlab-ci.yml + - template: Jobs/Dependency-Scanning.gitlab-ci.yml cache: key: one-key-to-rule-them-all @@ -233,6 +234,13 @@ container_scanning: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +dependency_scanning: + rules: + - if: $CONTAINER_SCANNING_DISABLED + when: never + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + .deploy: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH From 7ccb254cbf3df7392bf8dd3be1e09bcf20e9d7c9 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 15:48:49 +0100 Subject: [PATCH 22/58] dependency scanning --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7b866e0..ecd5f9d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -234,9 +234,9 @@ container_scanning: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -dependency_scanning: +gemnasium-python-dependency_scanning: rules: - - if: $CONTAINER_SCANNING_DISABLED + - if: $DEPENDENCY_SCANNING_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH From a7b4a4b6319e995b2bd5f820fa5eb36068e2ed95 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 14 Feb 2023 16:00:04 +0100 Subject: [PATCH 23/58] requirements.txt updated --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 39bbfb9..a1838b5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -fastapi==0.89.1 +fastapi==0.92.0 uvicorn[standard]==0.20.0 python-jose==3.3.0 pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==2.0.0 +sqlalchemy==2.0.3 markdown==3.4.1 python-dotenv==0.21.1 From 88c8fb98da6a76f3af4e183b2efbd12b5e630d38 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 27 Feb 2023 08:18:07 +0100 Subject: [PATCH 24/58] added some notes about included database drivers in docker image --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a56ca7d..f8174f5 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ Docker-Images are available here: - [Docker-Hub](https://hub.docker.com/repository/docker/collinwebdesigns/fastapi-dls): `collinwebdesigns/fastapi-dls:latest` - [GitLab-Registry](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/container_registry): `registry.git.collinwebdesigns.de/oscar.krause/fastapi-dls/main:latest` +The images include database drivers for `postgres`, `mysql`, `mariadb` and `sqlite`. + **Run this on the Docker-Host** ```shell @@ -388,9 +390,9 @@ After first success you have to replace `--issue` with `--renew`. every 4.8 hours. If network connectivity is lost, the loss of connectivity is detected during license renewal and the client has 19.2 hours in which to re-establish connectivity before its license expires. -\*2 Always use `https`, since guest-drivers only support secure connections! +\*3 Always use `https`, since guest-drivers only support secure connections! -\*3 If you recreate instance keys you need to **recreate client-token for each guest**! +\*4 If you recreate instance keys you need to **recreate client-token for each guest**! # Setup (Client) From 4ef041bb5458fbf7a9d3aee1f3dbd12f691e06a1 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 28 Feb 2023 13:08:34 +0100 Subject: [PATCH 25/58] styling --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f8174f5..add9f24 100644 --- a/README.md +++ b/README.md @@ -400,9 +400,14 @@ client has 19.2 hours in which to re-establish connectivity before its license e Successfully tested with this package versions: -- `14.3` (Linux-Host: `510.108.03`, Linux-Guest: `510.108.03`, Windows-Guest: `513.91`) -- `14.4` (Linux-Host: `510.108.03`, Linux-Guest: `510.108.03`, Windows-Guest: `514.08`) -- `15.0` (Linux-Host: `525.60.12`, Linux-Guest: `525.60.13`, Windows-Guest: `527.41`) +| vGPU Suftware | vGPU Manager | Linux Driver | Windows Driver | Release Date | +|---------------|--------------|--------------|----------------|---------------| +| `15.1` | `525.85.07` | `525.85.05` | `528.24` | January 2023 | +| `15.0` | `525.60.12` | `525.60.13` | `527.41` | December 2022 | +| `14.4` | `510.108.03` | `510.108.03` | `514.08` | December 2022 | +| `14.3` | `510.108.03` | `510.108.03` | `513.91` | November 2022 | + +- https://docs.nvidia.com/grid/index.html ## Linux From 71795cc7a27bf87a2abb4bcfc5518c8f6795727a Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 08:07:24 +0100 Subject: [PATCH 26/58] di improvements --- .gitlab-ci.yml | 76 ++++++++++++++++++++++---------------------------- version.env | 1 - 2 files changed, 33 insertions(+), 44 deletions(-) delete mode 100644 version.env diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ecd5f9d..e211808 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,26 +20,30 @@ build:docker: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' tags: [ docker ] before_script: - - echo "COMMIT=${CI_COMMIT_SHA}" >> version.env # COMMIT=`git rev-parse HEAD` + - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build . --tag ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${CI_BUILD_REF} - - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${CI_BUILD_REF} + - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF + - docker build . --tag $IMAGE + - docker push $IMAGE + - echo "CS_IMAGE=$IMAGE" > container_scanning.env + artifacts: + reports: + dotenv: container_scanning.env build:apt: image: debian:bookworm-slim interruptible: true stage: build rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH changes: - app/**/* - .DEBIAN/**/* - if: $CI_PIPELINE_SOURCE == 'merge_request_event' before_script: - - echo "COMMIT=${CI_COMMIT_SHA}" >> version.env - - source version.env + - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - apt-get update -qq && apt-get install -qq -y build-essential # create build directory for .deb sources @@ -60,8 +64,8 @@ build:apt: # cd into "build/" - cd build/ script: - # set version based on value in "$VERSION" (which is set above from version.env) - - sed -i -E 's/(Version\:\s)0.0/\1'"$VERSION"'/g' DEBIAN/control + # set version based on value in "$CI_BUILD_REF_NAME" + - sed -i -E 's/(Version\:\s)0.0/\1'"$CI_BUILD_REF_NAME"'/g' DEBIAN/control # build - dpkg -b . build.deb - dpkg -I build.deb @@ -82,7 +86,7 @@ build:pacman: - .PKGBUILD/**/* - if: $CI_PIPELINE_SOURCE == 'merge_request_event' before_script: - - echo "COMMIT=${CI_COMMIT_SHA}" >> version.env + - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - pacman -Syu --noconfirm git # create a build-user because "makepkg" don't like root user @@ -108,6 +112,7 @@ test: stage: test rules: - if: $CI_COMMIT_BRANCH + - if: $CI_COMMIT_TAG - if: $CI_PIPELINE_SOURCE == "merge_request_event" variables: DATABASE: sqlite:///../app/db.sqlite @@ -192,28 +197,24 @@ code_quality: - if: $CODE_QUALITY_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH secret_detection: rules: - if: $SECRET_DETECTION_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH semgrep-sast: rules: - if: $SAST_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH test_coverage: extends: test allow_failure: true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - pip install pytest pytest-cov - coverage run -m pytest main.py @@ -232,43 +233,36 @@ container_scanning: - if: $CONTAINER_SCANNING_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH gemnasium-python-dependency_scanning: rules: - if: $DEPENDENCY_SCANNING_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH .deploy: rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG - when: never deploy:docker: extends: .deploy stage: deploy - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH before_script: - - echo "COMMIT=${CI_COMMIT_SHA}" >> version.env - - source version.env - - echo "Building docker image for commit ${COMMIT} with version ${VERSION}" + - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env + - echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_BUILD_REF_NAME" script: - echo "GitLab-Registry" - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build . --tag ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${VERSION} - - docker build . --tag ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:latest - - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${VERSION} - - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:latest + - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME + - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest + - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME + - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest - echo "Docker-Hub" - docker login -u $PUBLIC_REGISTRY_USER -p $PUBLIC_REGISTRY_TOKEN - - docker build . --tag $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:${VERSION} - - docker build . --tag $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:latest - - docker push $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:${VERSION} - - docker push $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:latest + - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME + - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest + - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME + - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest deploy:apt: # doc: https://git.collinwebdesigns.de/help/user/packages/debian_repository/index.md#install-a-package @@ -276,7 +270,7 @@ deploy:apt: image: debian:bookworm-slim stage: deploy rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG needs: - job: build:apt artifacts: true @@ -317,7 +311,7 @@ deploy:pacman: image: archlinux:base-devel stage: deploy rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG needs: - job: build:pacman artifacts: true @@ -325,9 +319,9 @@ deploy:pacman: - source .PKGBUILD/PKGBUILD - source version.env # fastapi-dls-1.0-1-any.pkg.tar.zst - - BUILD_NAME=${pkgname}-${VERSION}-${pkgrel}-any.pkg.tar.zst + - BUILD_NAME=${pkgname}-${CI_BUILD_REF_NAME}-${pkgrel}-any.pkg.tar.zst - PACKAGE_NAME=${pkgname} - - PACKAGE_VERSION=${VERSION} + - PACKAGE_VERSION=${CI_BUILD_REF_NAME} - PACKAGE_ARCH=any - EXPORT_NAME=${BUILD_NAME} - 'echo "PACKAGE_NAME: ${PACKAGE_NAME}"' @@ -339,19 +333,15 @@ deploy:pacman: release: image: registry.gitlab.com/gitlab-org/release-cli:latest stage: .post - needs: - - job: test - artifacts: true + needs: [ test ] rules: - if: $CI_COMMIT_TAG - when: never - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - - echo "Running release-job for $VERSION" + - echo "Running release-job for $CI_COMMIT_TAG" release: - name: $CI_PROJECT_TITLE $VERSION - description: Release of $CI_PROJECT_TITLE version $VERSION - tag_name: $VERSION + name: $CI_PROJECT_TITLE $CI_COMMIT_TAG + description: Release of $CI_PROJECT_TITLE version $CI_COMMIT_TAG + tag_name: $CI_COMMIT_TAG ref: $CI_COMMIT_SHA assets: links: diff --git a/version.env b/version.env deleted file mode 100644 index db1aeb8..0000000 --- a/version.env +++ /dev/null @@ -1 +0,0 @@ -VERSION=1.3.5 From 86f703a36caced868b5cc776cd116aaf88c375d7 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 08:35:06 +0100 Subject: [PATCH 27/58] ci improvements --- .gitlab-ci.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e211808..7cf0208 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,13 +37,19 @@ build:apt: stage: build rules: - if: $CI_COMMIT_TAG + variables: + VERSION: $CI_BUILD_REF_NAME - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH changes: - app/**/* - .DEBIAN/**/* + variables: + VERSION: "0.0.1" - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + variables: + VERSION: "0.0.1" before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env + - echo -e "VERSION=$VERSION\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - apt-get update -qq && apt-get install -qq -y build-essential # create build directory for .deb sources @@ -79,12 +85,18 @@ build:pacman: interruptible: true stage: build rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_COMMIT_TAG + variables: + VERSION: $CI_BUILD_REF_NAME - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH changes: - app/**/* - .PKGBUILD/**/* + variables: + VERSION: "0.0.1" - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + variables: + VERSION: "0.0.1" before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies From e42dc6aa86591bcd4887d551ef81d3f1779537de Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 10:06:21 +0100 Subject: [PATCH 28/58] code styling --- app/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/main.py b/app/main.py index 4b78253..f5388c8 100644 --- a/app/main.py +++ b/app/main.py @@ -82,7 +82,7 @@ async def _index(): @app.get('/-/health', summary='* Health') -async def _health(request: Request): +async def _health(): return JSONr({'status': 'up'}) From a22b56edbeef93d2ad33f3dab55405d09b2f3183 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 10:09:50 +0100 Subject: [PATCH 29/58] fixes --- .PKGBUILD/PKGBUILD | 3 ++- .gitlab-ci.yml | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.PKGBUILD/PKGBUILD b/.PKGBUILD/PKGBUILD index 82d038d..3913360 100644 --- a/.PKGBUILD/PKGBUILD +++ b/.PKGBUILD/PKGBUILD @@ -22,8 +22,9 @@ sha256sums=('SKIP' '3dc60140c08122a8ec0e7fa7f0937eb8c1288058890ba09478420fc30ce9e30c') pkgver() { + echo -e "VERSION=$VERSION\nCOMMIT=$CI_COMMIT_SHA" > $srcdir/$pkgname/version.env source $srcdir/$pkgname/version.env - echo ${VERSION} + echo $VERSION } check() { diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7cf0208..395f4fb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,12 +43,14 @@ build:apt: changes: - app/**/* - .DEBIAN/**/* + - .gitlab-ci.yml variables: VERSION: "0.0.1" - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: VERSION: "0.0.1" before_script: + - echo $VERSION - echo -e "VERSION=$VERSION\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - apt-get update -qq && apt-get install -qq -y build-essential @@ -71,7 +73,7 @@ build:apt: - cd build/ script: # set version based on value in "$CI_BUILD_REF_NAME" - - sed -i -E 's/(Version\:\s)0.0/\1'"$CI_BUILD_REF_NAME"'/g' DEBIAN/control + - sed -i -E 's/(Version\:\s)0.0/\1'"$VERSION"'/g' DEBIAN/control # build - dpkg -b . build.deb - dpkg -I build.deb @@ -92,13 +94,14 @@ build:pacman: changes: - app/**/* - .PKGBUILD/**/* + - .gitlab-ci.yml variables: VERSION: "0.0.1" - if: $CI_PIPELINE_SOURCE == 'merge_request_event' variables: VERSION: "0.0.1" before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env + #- echo -e "VERSION=$VERSION\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - pacman -Syu --noconfirm git # create a build-user because "makepkg" don't like root user @@ -113,7 +116,7 @@ build:pacman: # download dependencies - source PKGBUILD && pacman -Syu --noconfirm --needed --asdeps "${makedepends[@]}" "${depends[@]}" # build - - sudo -u build makepkg -s + - sudo --preserve-env -u build makepkg -s artifacts: expire_in: 1 week paths: From 7cd4e6fde09ff586fddfc64c7c376a39838ad77f Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 14:51:54 +0100 Subject: [PATCH 30/58] fixes --- .gitlab-ci.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 395f4fb..93188ca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -50,7 +50,6 @@ build:apt: variables: VERSION: "0.0.1" before_script: - - echo $VERSION - echo -e "VERSION=$VERSION\nCOMMIT=$CI_COMMIT_SHA" > version.env # install build dependencies - apt-get update -qq && apt-get install -qq -y build-essential @@ -284,8 +283,6 @@ deploy:apt: extends: .deploy image: debian:bookworm-slim stage: deploy - rules: - - if: $CI_COMMIT_TAG needs: - job: build:apt artifacts: true @@ -325,8 +322,6 @@ deploy:pacman: extends: .deploy image: archlinux:base-devel stage: deploy - rules: - - if: $CI_COMMIT_TAG needs: - job: build:pacman artifacts: true From 87334fbfadf312f925294fe01521353ac41fa03b Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 20:21:02 +0100 Subject: [PATCH 31/58] added unraid section --- .UNRAID/FastAPI-DLS.xml | 48 +++++++++++++++++++++++++++++++++++++++++ README.md | 17 ++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 .UNRAID/FastAPI-DLS.xml diff --git a/.UNRAID/FastAPI-DLS.xml b/.UNRAID/FastAPI-DLS.xml new file mode 100644 index 0000000..f6bf52b --- /dev/null +++ b/.UNRAID/FastAPI-DLS.xml @@ -0,0 +1,48 @@ + + + FastAPI-DLS + collinwebdesigns/fastapi-dls:latest + https://hub.docker.com/r/collinwebdesigns/fastapi-dls + br0 + + sh + false + + + Source: +https://git.collinwebdesigns.de/oscar.krause/fastapi-dls#docker + +Make sure you create these certificates before starting the container for the first time: +``` +# Check https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/main/#docker for more information: +WORKING_DIR=/mnt/user/appdata/fastapi-dls/cert +mkdir -p $WORKING_DIR +cd $WORKING_DIR +# create instance private and public key for singing JWT's +openssl genrsa -out $WORKING_DIR/instance.private.pem 2048 +openssl rsa -in $WORKING_DIR/instance.private.pem -outform PEM -pubout -out $WORKING_DIR/instance.public.pem +# create ssl certificate for integrated webserver (uvicorn) - because clients rely on ssl +openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt +``` + + + https://[IP]:[PORT:443] + + https://git.collinwebdesigns.de/uploads/-/system/project/avatar/106/png-transparent-nvidia-grid-logo-business-nvidia-electronics-text-trademark.png?width=64 + --restart always + + + 1679161568 + + + + 443 + /mnt/user/appdata/fastapi-dls/cert + 443 + /mnt/user/appdata/fastapi-dls/data + + + sqlite:////app/database/db.sqlite + true + 90 + diff --git a/README.md b/README.md index add9f24..fe8fae4 100644 --- a/README.md +++ b/README.md @@ -352,6 +352,17 @@ pacman -U --noconfirm fastapi-dls.pkg.tar.zst Start with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`. +## unRAID + +1. Download [this xml file](.UNRAID/FastAPI-DLS.xml) +2. Put it in /boot/config/plugins/dockerMan/templates-user/ +3. Go to Docker page, scroll down to `Add Container`, click on Template list and choose `FastAPI-DLS` +4. Open terminal/ssh, follow the instructions in overview description +5. Setup your container `IP`, `Port`, `DLS_URL` and `DLS_PORT` +6. Apply and let it boot up + +*Unraid users must also make sure they have Host access to custom networks enabled if unraid is the vgpu guest*. + ## Let's Encrypt Certificate (optional) If you're using installation via docker, you can use `traefik`. Please refer to their documentation. @@ -673,4 +684,8 @@ The error message can safely be ignored (since we have no license limitation :P) Thanks to vGPU community and all who uses this project and report bugs. -Special thanks to @samicrusader who created build file for ArchLinux and @cyrus who wrote the section for openSUSE. +Special thanks to + +- @samicrusader who created build file for ArchLinux +- @cyrus who wrote the section for openSUSE +- @midi who wrote the section for unRAID From 1fc5ac83789e8f27bb8f41ac445250b36ecb08b4 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Wed, 22 Mar 2023 07:10:18 +0100 Subject: [PATCH 32/58] added setup_vgpu_license.sh script --- .UNRAID/setup_vgpu_license.sh | 197 ++++++++++++++++++++++++++++++++++ README.md | 15 +++ 2 files changed, 212 insertions(+) create mode 100644 .UNRAID/setup_vgpu_license.sh diff --git a/.UNRAID/setup_vgpu_license.sh b/.UNRAID/setup_vgpu_license.sh new file mode 100644 index 0000000..c3c93a0 --- /dev/null +++ b/.UNRAID/setup_vgpu_license.sh @@ -0,0 +1,197 @@ +#!/bin/bash + +# This script automates the licensing of the vGPU guest driver +# on Unraid boot. Set the Schedule to: "At Startup of Array". +# +# Relies on FastAPI-DLS for the licensing. +# It assumes FeatureType=1 (vGPU), change it as you see fit in line <114> +# +# Requires `eflutils` to be installed in the system for `nvidia-gridd` to run +# To Install it: +# 1) You might find it here: https://packages.slackware.com/ (choose the 64bit version of Slackware) +# 2) Download the package and put it in /boot/extra to be installed on boot +# 3) a. Reboot to install it, OR +# b. Run `upgradepkg --install-new /boot/extra/elfutils*` +# [i]: Make sure to have only one version of elfutils, otherwise you might run into issues + +# Sources and docs: +# https://docs.nvidia.com/grid/15.0/grid-vgpu-user-guide/index.html#configuring-nls-licensed-client-on-linux +# + +################################################ +# MAKE SURE YOU CHANGE THESE VARIABLES # +################################################ + +###### CHANGE ME! +# IP and PORT of FastAPI-DLS +DLS_IP=192.168.0.123 +DLS_PORT=443 +# Token folder, must be on a filesystem that supports +# linux filesystem permissions (eg: ext4,xfs,btrfs...) +TOKEN_PATH=/mnt/user/system/nvidia +PING=$(which ping) + +# Check if the License is applied +if [[ "$(nvidia-smi -q | grep "Expiry")" == *Expiry* ]]; then + echo " [i] Your vGPU Guest drivers are already licensed." + echo " [i] $(nvidia-smi -q | grep "Expiry")" + echo " [<] Exiting..." + exit 0 +fi + +# Check if the FastAPI-DLS server is reachable +# Check if the License is applied +MAX_RETRIES=30 +for i in $(seq 1 $MAX_RETRIES); do + echo -ne "\r [>] Attempt $i to connect to $DLS_IP." + if ping -c 1 $DLS_IP >/dev/null 2>&1; then + echo -e "\n [*] Connection successful." + break + fi + if [ $i -eq $MAX_RETRIES ]; then + echo -e "\n [!] Connection failed after $MAX_RETRIES attempts." + echo -e "\n [<] Exiting..." + exit 1 + fi + sleep 1 +done + +# Check if the token folder exists +if [ -d "${TOKEN_PATH}" ]; then + echo " [*] Token Folder exists. Proceeding..." +else + echo " [!] Token Folder does not exists or not ready yet. Exiting." + echo " [!] Token Folder Specified: ${TOKEN_PATH}" + exit 1 +fi + +# Check if elfutils are installed, otherwise nvidia-gridd service +# wont start +if [ "$(grep -R "elfutils" /var/log/packages/* | wc -l)" != 0 ]; then + echo " [*] Elfutils is installed, proceeding..." +else + echo " [!] Elfutils is not installed, downloading and installing..." + echo " [!] Downloading elfutils to /boot/extra" + echo " [i] This script will download elfutils from slackware64-15.0 repository." + echo " [i] If you have a different version of Unraid (6.11.5), you might want to" + echo " [i] download and install a suitable version manually from the slackware" + echo " [i] repository, and put it in /boot/extra to be install on boot." + echo " [i] You may also install it by running: " + echo " [i] upgradepkg --install-new /path/to/elfutils-*.txz" + echo "" + echo " [>] Downloading elfutils from slackware64-15.0 repository:" + wget -q -nc --show-progress --progress=bar:force:noscroll -P /boot/extra https://slackware.uk/slackware/slackware64-15.0/slackware64/l/elfutils-0.186-x86_64-1.txz 2>/dev/null \ + || { echo " [!] Error while downloading elfutils, please download it and install it manually."; exit 1; } + echo "" + if upgradepkg --install-new /boot/extra/elfutils-0.186-x86_64-1.txz + then + echo " [*] Elfutils installed and will be installed automatically on boot" + else + echo " [!] Error while installing, check logs..." + exit 1 + fi +fi + +echo " [~] Sleeping for 60 seconds before continuing..." +echo " [i] The script is waiting until the boot process settles down." + +for i in {60..1}; do + printf "\r [~] %d seconds remaining" "$i" + sleep 1 +done + +printf "\n" + +create_token () { + echo " [>] Creating new token..." + if ${PING} -c1 ${DLS_IP} > /dev/null 2>&1 + then + # curl --insecure -L -X GET https://${DLS_IP}:${DLS_PORT}/-/client-token -o ${TOKEN_PATH}/client_configuration_token_"$(date '+%d-%m-%Y-%H-%M-%S')".tok || { echo " [!] Could not get the token, please check the server."; exit 1;} + wget -q -nc -4c --no-check-certificate --show-progress --progress=bar:force:noscroll -O "${TOKEN_PATH}"/client_configuration_token_"$(date '+%d-%m-%Y-%H-%M-%S')".tok https://${DLS_IP}:${DLS_PORT}/-/client-token \ + || { echo " [!] Could not get the token, please check the server."; exit 1;} + chmod 744 "${TOKEN_PATH}"/*.tok || { echo " [!] Could not chmod the tokens."; exit 1; } + echo "" + echo " [*] Token downloaded and stored in ${TOKEN_PATH}." + else + echo " [!] Could not get token, DLS server unavailable ." + exit 1 + fi +} + +setup_run () { + echo " [>] Setting up gridd.conf" + cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf || { echo " [!] Error configuring gridd.conf, did you install the drivers correctly?"; exit 1; } + sed -i 's/FeatureType=0/FeatureType=1/g' /etc/nvidia/gridd.conf + echo "ClientConfigTokenPath=${TOKEN_PATH}" >> /etc/nvidia/gridd.conf + echo " [>] Creating /var/lib/nvidia folder structure" + mkdir -p /var/lib/nvidia/GridLicensing + echo " [>] Starting nvidia-gridd" + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [!] nvidia-gridd service is running. Closing." + sh /usr/lib/nvidia/sysv/nvidia-gridd stop + stop_exit_code=$? + if [ $stop_exit_code -eq 0 ]; then + echo " [*] nvidia-gridd service stopped successfully." + else + echo " [!] Error while stopping nvidia-gridd service." + exit 1 + fi + + # Kill the service if it does not close + if pgrep nvidia-gridd >/dev/null 2>&1; then + kill -9 "$(pgrep nvidia-gridd)" || { + echo " [!] Error while closing nvidia-gridd service" + exit 1 + } + fi + + echo " [*] Restarting nvidia-gridd service." + sh /usr/lib/nvidia/sysv/nvidia-gridd start + + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [*] Service started, PID: $(pgrep nvidia-gridd)" + else + echo -e " [!] Error while starting nvidia-gridd service. Use strace -f nvidia-gridd to debug.\n [i] Check if elfutils is installed.\n [i] strace is not installed by default." + exit 1 + fi + else + sh /usr/lib/nvidia/sysv/nvidia-gridd start + + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [*] Service started, PID: $(pgrep nvidia-gridd)" + else + echo -e " [!] Error while starting nvidia-gridd service. Use strace -f nvidia-gridd to debug.\n [i] Check if elfutils is installed.\n [i] strace is not installed by default." + exit 1 + fi + fi +} + +for token in "${TOKEN_PATH}"/*; do + if [ "${token: -4}" == ".tok" ] + then + echo " [*] Tokens found..." + setup_run + else + echo " [!] No Tokens found..." + create_token + setup_run + fi +done + +while true; do + if nvidia-smi -q | grep "Expiry" >/dev/null 2>&1; then + echo " [>] vGPU licensed!" + echo " [i] $(nvidia-smi -q | grep "Expiry")" + break + else + echo -ne " [>] vGPU not licensed yet... Checking again in 5 seconds\c" + for i in {1..5}; do + sleep 1 + echo -ne ".\c" + done + echo -ne "\r\c" + fi +done + +echo " [>] Done..." +exit 0 diff --git a/README.md b/README.md index fe8fae4..d12f5ff 100644 --- a/README.md +++ b/README.md @@ -363,6 +363,8 @@ Start with `systemctl start fastapi-dls.service` and enable autostart with `syst *Unraid users must also make sure they have Host access to custom networks enabled if unraid is the vgpu guest*. +Continue [here](#unraid-guest) for docker guest setup. + ## Let's Encrypt Certificate (optional) If you're using installation via docker, you can use `traefik`. Please refer to their documentation. @@ -482,6 +484,19 @@ vGPU Software Licensed Product Done. For more information check [troubleshoot section](#troubleshoot). +## unRAID Guest + +1. Make sure you create a folder in a linux filesystem (BTRFS/XFS/EXT4...), I recommend `/mnt/user/system/nvidia` (this is where docker and libvirt preferences are saved, so it's a good place to have that) +2. Edit the script to put your `DLS_IP`, `DLS_PORT` and `TOKEN_PATH`, properly +3. Install `User Scripts` plugin from *Community Apps* (the Apps page, or google User Scripts Unraid if you're not using CA) +4. Go to `Settings > Users Scripts > Add New Script` +5. Give it a name (the name must not contain spaces preferably) +6. Click on the *gear icon* to the left of the script name then edit script +7. Paste the script and save +8. Set schedule to `At First Array Start Only` +9. Click on Apply + + # Endpoints ### `GET /` From 6f11bc414c7fa8082a8241aed9e40a2183a1d9a1 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:11:57 +0100 Subject: [PATCH 33/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 93188ca..b6f8463 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,6 +8,7 @@ include: cache: key: one-key-to-rule-them-all +# https://docs.docker.com/build/building/multi-platform/ build:docker: image: docker:dind interruptible: true @@ -21,10 +22,12 @@ build:docker: tags: [ docker ] before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` + - docker buildx ls + - docker buildx inspect script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker build . --tag $IMAGE + - docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . --tag $IMAGE - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From c8e5676c01354987ae25118affe0afb1b8cb057c Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:17:31 +0100 Subject: [PATCH 34/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6f8463..2006868 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect + - docker buildx create –use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From c8e000eb3e81a25bd1d402a95218946d99ba298a Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:22:51 +0100 Subject: [PATCH 35/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2006868..b643d0d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,6 @@ include: cache: key: one-key-to-rule-them-all -# https://docs.docker.com/build/building/multi-platform/ build:docker: image: docker:dind interruptible: true @@ -24,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –use + - docker buildx create –use docker script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 6395214fa0fece014a25a4a407c4674f91bb6450 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:24:40 +0100 Subject: [PATCH 36/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b643d0d..01ccd9d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –use docker + - docker buildx create –-use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 89704bc2a1c4d6a6138e7fb29748a57189f18310 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:35:27 +0100 Subject: [PATCH 37/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 01ccd9d..30e95a6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –-use + - docker buildx create –-use tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 04ff36c94d96ba3c1fe749e4ebd5781950a4a9ba Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:36:34 +0100 Subject: [PATCH 38/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 30e95a6..aa8df78 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –-use tcp://docker:2375 + - docker buildx create --use tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From e200c84345bf2260b868ac69f8af1ab0609c1bab Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 11:10:53 +0100 Subject: [PATCH 39/58] improvements --- .gitlab-ci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa8df78..31492e5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,14 +21,13 @@ build:docker: tags: [ docker ] before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - - docker buildx ls - docker buildx inspect - - docker buildx create --use tcp://docker:2375 + - docker buildx create --use # tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . --tag $IMAGE - - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . +# - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From 995b94413583a62dabdfd7672ffb44478976bcb3 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 11:46:17 +0100 Subject: [PATCH 40/58] removed "linux/arm/v7" --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31492e5..c046d35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,11 +22,11 @@ build:docker: before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx inspect - - docker buildx create --use # tcp://docker:2375 + - docker buildx create --use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . # - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 3d9e3cb88fe782687083f40a54467212dc036158 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 07:48:35 +0100 Subject: [PATCH 41/58] set specific arm64 version to v8 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c046d35..80c0470 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE --push . # - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 593db0e78984b9bb663ccef3e3a4f7926563a1fa Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 08:43:29 +0100 Subject: [PATCH 42/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 80c0470..3a99f56 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,8 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE --push . -# - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE . # --push + - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From 76d8753f2892e854545911f9b72e2d5652e0a739 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:07:49 +0100 Subject: [PATCH 43/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3a99f56..108fa9b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,9 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE . # --push + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --output type=docker . # --push - docker push $IMAGE + - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From f72c0f7db3e170e7de452b9c7280ece646d719ea Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:11:26 +0100 Subject: [PATCH 44/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 108fa9b..007f8ca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --output type=docker . # --push - - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 7b7f14bd8231e9138de6103457c52844c7a33c4d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:31:27 +0100 Subject: [PATCH 45/58] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 007f8ca..e115cce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 9d1422cbdfe034ee02d87591b2ddcab4614c26e0 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 10:00:25 +0100 Subject: [PATCH 46/58] secret detection --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e115cce..843e12f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -219,6 +219,8 @@ secret_detection: - if: $SECRET_DETECTION_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" + before_script: + - git config --global --add safe.directory $CI_PROJECT_DIR semgrep-sast: rules: From 04a1ee0948408ddd580bccb6e469db13718b8329 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 14:28:44 +0100 Subject: [PATCH 47/58] added Roadmap --- README.md | 6 +++--- ROADMAP.md | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 ROADMAP.md diff --git a/README.md b/README.md index d12f5ff..009600f 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,9 @@ Only the clients need a connection to this service on configured port. **Official Links** -- https://git.collinwebdesigns.de/oscar.krause/fastapi-dls -- https://gitea.publichub.eu/oscar.krause/fastapi-dls -- Docker Image `collinwebdesigns/fastapi-dls:latest` +- https://git.collinwebdesigns.de/oscar.krause/fastapi-dls (Private Git) +- https://gitea.publichub.eu/oscar.krause/fastapi-dls (Public Git) +- https://hub.docker.com/r/collinwebdesigns/fastapi-dls (Docker-Hub `collinwebdesigns/fastapi-dls:latest`) *All other repositories are forks! (which is no bad - just for information and bug reports)* diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..0b3a5a6 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,25 @@ +# Roadmap + +I'am planning to implement the following features in future. + + +## HA - High Availability + +Support Failover-Mode (secondary ip address) as in official DLS. + +**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use Docker-Swarm with shared/cluster database (e.g. postgres). + +*See [ha branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ha) for current status.* + + +## UI - User Interface + +Add a user interface to manage origins and leases. + +*See [ui branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ui) for current status.* + + +## Config Database + +Instead of using environment variables, configuration files and manually create certificates, store cofigs and certificates in databse (like origins and leases). Also there sould be provided a startup assistand to prefill required attributes and create instance-certificates. +This is more user friendly and should improve setup. From d2e4042932e1ddbe938b5790148cb57ac360d92d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Sat, 1 Apr 2023 23:20:06 +0200 Subject: [PATCH 48/58] added 15.2 to supported versions --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 009600f..1bb4c15 100644 --- a/README.md +++ b/README.md @@ -415,6 +415,7 @@ Successfully tested with this package versions: | vGPU Suftware | vGPU Manager | Linux Driver | Windows Driver | Release Date | |---------------|--------------|--------------|----------------|---------------| +| `15.2` | `525.105.14` | `525.105.17` | `528.89` | March 2023 | | `15.1` | `525.85.07` | `525.85.05` | `528.24` | January 2023 | | `15.0` | `525.60.12` | `525.60.13` | `527.41` | December 2022 | | `14.4` | `510.108.03` | `510.108.03` | `514.08` | December 2022 | From b216dcb3dd21704108d33753f3a86a312326ebe2 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:35:08 +0200 Subject: [PATCH 49/58] fixed nvidia-smi path on windows --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bb4c15..49b2bcf 100644 --- a/README.md +++ b/README.md @@ -473,7 +473,7 @@ Restart-Service NVDisplay.ContainerLocalSystem Check licensing status: ```shell -& 'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe' -q | Select-String "License" +& 'nvidia-smi' -q | Select-String "License" ``` Output should be something like: From c9c73f6cf23fc39e3ddeeb89eb3afdd58e32a398 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:35:23 +0200 Subject: [PATCH 50/58] updated docker image requirements.txt --- requirements.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index a1838b5..626f31d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -fastapi==0.92.0 -uvicorn[standard]==0.20.0 +fastapi==0.95.1 +uvicorn[standard]==0.21.1 python-jose==3.3.0 pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==2.0.3 -markdown==3.4.1 -python-dotenv==0.21.1 +sqlalchemy==2.0.9 +markdown==3.4.3 +python-dotenv==1.0.0 From d1a77df0e1a8dc89c42cfa3d3d8bd1b1f1ca4ab0 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:58:25 +0200 Subject: [PATCH 51/58] updated sudo / su commands (list sudo fist instead of su) --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 49b2bcf..b972c92 100644 --- a/README.md +++ b/README.md @@ -145,9 +145,9 @@ This is only to test whether the service starts successfully. ```shell cd /opt/fastapi-dls/app -su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" +sudo -u www-data /opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app # or -sudo -u www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" +su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" ``` **Create config file** @@ -247,6 +247,8 @@ This is only to test whether the service starts successfully. BASE_DIR=/opt/fastapi-dls SERVICE_USER=dls cd ${BASE_DIR} +sudo -u ${SERVICE_USER} ${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_DIR}/app +# or su - ${SERVICE_USER} -c "${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_DIR}/app" ``` From 774a1c21a149d50a6f773878de87a843199c1949 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:57:03 +0200 Subject: [PATCH 52/58] improved docker build with "ARG" instead of using "version.env" which is not present on local builds (because it's created by ci-pipeline) --- .gitlab-ci.yml | 26 +++++++++++++------------- Dockerfile | 5 ++++- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 843e12f..69d8ba9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,13 +20,12 @@ build:docker: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' tags: [ docker ] before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx inspect - docker buildx create --use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: @@ -266,21 +265,22 @@ deploy:docker: extends: .deploy stage: deploy before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env - echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_BUILD_REF_NAME" script: - - echo "GitLab-Registry" + - echo "========== GitLab-Registry ==========" - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME - - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest - - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME - - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest - - echo "Docker-Hub" + - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_BUILD_REF_NAME + - docker push $IMAGE:latest + - echo "========== Docker-Hub ==========" - docker login -u $PUBLIC_REGISTRY_USER -p $PUBLIC_REGISTRY_TOKEN - - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME - - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest - - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME - - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest + - IMAGE=$PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_BUILD_REF_NAME + - docker push $IMAGE:latest deploy:apt: # doc: https://git.collinwebdesigns.de/help/user/packages/debian_repository/index.md#install-a-package diff --git a/Dockerfile b/Dockerfile index e92f5dc..99c76bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,9 @@ FROM python:3.11-alpine +ARG VERSION +ARG COMMIT="" +RUN echo -e "VERSION=$VERSION\nCOMMIT=$COMMIT" > /version.env + COPY requirements.txt /tmp/requirements.txt RUN apk update \ @@ -11,7 +15,6 @@ RUN apk update \ && apk del build-deps COPY app /app -COPY version.env /version.env COPY README.md /README.md HEALTHCHECK --start-period=30s --interval=10s --timeout=5s --retries=3 CMD curl --insecure --fail https://localhost/-/health || exit 1 From 6a5d3cb2f777d82d1a5a4fa5c1ee9712813f4e0d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:57:17 +0200 Subject: [PATCH 53/58] requirements.txt updated --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 626f31d..2aaec8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ fastapi==0.95.1 -uvicorn[standard]==0.21.1 +uvicorn[standard]==0.22.0 python-jose==3.3.0 pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==2.0.9 +sqlalchemy==2.0.12 markdown==3.4.3 python-dotenv==1.0.0 From 14cf6a953fc46f9cafbd9818214201f6248c58b8 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:58:51 +0200 Subject: [PATCH 54/58] typos --- ROADMAP.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0b3a5a6..60e0a87 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,13 +1,14 @@ # Roadmap -I'am planning to implement the following features in future. +I am planning to implement the following features in the future. ## HA - High Availability Support Failover-Mode (secondary ip address) as in official DLS. -**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use Docker-Swarm with shared/cluster database (e.g. postgres). +**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use +Docker-Swarm with shared/cluster database (e.g. postgres). *See [ha branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ha) for current status.* @@ -21,5 +22,6 @@ Add a user interface to manage origins and leases. ## Config Database -Instead of using environment variables, configuration files and manually create certificates, store cofigs and certificates in databse (like origins and leases). Also there sould be provided a startup assistand to prefill required attributes and create instance-certificates. -This is more user friendly and should improve setup. +Instead of using environment variables, configuration files and manually create certificates, store configs and +certificates in database (like origins and leases). Also, there should be provided a startup assistant to prefill +required attributes and create instance-certificates. This is more user-friendly and should improve fist setup. From 98da86fc2e9fa89b0ef0482c35a0103d7e3f170d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 12 Jun 2023 09:31:43 +0200 Subject: [PATCH 55/58] removed debian bookworm testing notes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b972c92..4d78b1e 100644 --- a/README.md +++ b/README.md @@ -310,7 +310,7 @@ Packages are available here: Successful tested with: -- Debian 12 (Bookworm) (works but not recommended because it is currently in *testing* state) +- Debian 12 (Bookworm) - Ubuntu 22.10 (Kinetic Kudu) Not working with: From 7e5f8b6c8a75ee3785d8dcfc40a7c76e501747ac Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 12 Jun 2023 10:48:00 +0200 Subject: [PATCH 56/58] implemented endpoint to remove expired leases --- app/main.py | 6 ++++++ app/orm.py | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/app/main.py b/app/main.py index f5388c8..45b53aa 100644 --- a/app/main.py +++ b/app/main.py @@ -186,6 +186,12 @@ async def _leases(request: Request, origin: bool = False): return JSONr(response) +@app.delete('/-/leases/expired', summary='* Leases') +async def _lease_delete_expired(request: Request): + Lease.delete_expired(db) + return Response(status_code=201) + + @app.delete('/-/lease/{lease_ref}', summary='* Lease') async def _lease_delete(request: Request, lease_ref: str): if Lease.delete(db, lease_ref) == 1: diff --git a/app/orm.py b/app/orm.py index c78ca95..0b19e92 100644 --- a/app/orm.py +++ b/app/orm.py @@ -160,6 +160,14 @@ class Lease(Base): session.close() return deletions + @staticmethod + def delete_expired(engine: Engine) -> int: + session = sessionmaker(bind=engine)() + deletions = session.query(Lease).filter(Lease.lease_expires <= datetime.utcnow()).delete() + session.commit() + session.close() + return deletions + @staticmethod def calculate_renewal(renewal_period: float, delta: timedelta) -> timedelta: """ From 801d1786efc624c59187df51fcd36551844b2d7b Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 12 Jun 2023 10:52:13 +0200 Subject: [PATCH 57/58] requirements.txt updated --- requirements.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index a1838b5..a460548 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -fastapi==0.92.0 -uvicorn[standard]==0.20.0 +fastapi==0.97.0 +uvicorn[standard]==0.22.0 python-jose==3.3.0 -pycryptodome==3.17 +pycryptodome==3.18.0 python-dateutil==2.8.2 -sqlalchemy==2.0.3 -markdown==3.4.1 -python-dotenv==0.21.1 +sqlalchemy==2.0.16 +markdown==3.4.3 +python-dotenv==1.0.0 From c79636b1c279c55e9f1158f5ce82053fbeac4fbd Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 12 Jun 2023 11:03:03 +0200 Subject: [PATCH 58/58] fixed .gitlab-ci.yml deprecated build-ref varialbes ref. https://gitlab.com/gitlab-org/gitlab/-/issues/352957 --- .gitlab-ci.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 69d8ba9..eac63af 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,8 +24,8 @@ build:docker: - docker buildx create --use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push . + - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: @@ -39,7 +39,7 @@ build:apt: rules: - if: $CI_COMMIT_TAG variables: - VERSION: $CI_BUILD_REF_NAME + VERSION: $CI_COMMIT_REF_NAME - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH changes: - app/**/* @@ -72,7 +72,7 @@ build:apt: # cd into "build/" - cd build/ script: - # set version based on value in "$CI_BUILD_REF_NAME" + # set version based on value in "$CI_COMMIT_REF_NAME" - sed -i -E 's/(Version\:\s)0.0/\1'"$VERSION"'/g' DEBIAN/control # build - dpkg -b . build.deb @@ -89,7 +89,7 @@ build:pacman: rules: - if: $CI_COMMIT_TAG variables: - VERSION: $CI_BUILD_REF_NAME + VERSION: $CI_COMMIT_REF_NAME - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH changes: - app/**/* @@ -265,21 +265,21 @@ deploy:docker: extends: .deploy stage: deploy before_script: - - echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_BUILD_REF_NAME" + - echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_COMMIT_REF_NAME" script: - echo "========== GitLab-Registry ==========" - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME - - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME - - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest - - docker push $IMAGE:$CI_BUILD_REF_NAME + - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_COMMIT_REF_NAME + - docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME + - docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_COMMIT_REF_NAME - docker push $IMAGE:latest - echo "========== Docker-Hub ==========" - docker login -u $PUBLIC_REGISTRY_USER -p $PUBLIC_REGISTRY_TOKEN - IMAGE=$PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME - - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME - - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest - - docker push $IMAGE:$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_COMMIT_REF_NAME + - docker build . --build-arg VERSION=$CI_COMMIT_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_COMMIT_REF_NAME - docker push $IMAGE:latest deploy:apt: @@ -333,9 +333,9 @@ deploy:pacman: - source .PKGBUILD/PKGBUILD - source version.env # fastapi-dls-1.0-1-any.pkg.tar.zst - - BUILD_NAME=${pkgname}-${CI_BUILD_REF_NAME}-${pkgrel}-any.pkg.tar.zst + - BUILD_NAME=${pkgname}-${CI_COMMIT_REF_NAME}-${pkgrel}-any.pkg.tar.zst - PACKAGE_NAME=${pkgname} - - PACKAGE_VERSION=${CI_BUILD_REF_NAME} + - PACKAGE_VERSION=${CI_COMMIT_REF_NAME} - PACKAGE_ARCH=any - EXPORT_NAME=${BUILD_NAME} - 'echo "PACKAGE_NAME: ${PACKAGE_NAME}"'