2 Commits

Author SHA1 Message Date
b2db5b35ad prepare second dockerfile
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-07-15 14:33:07 +02:00
b21bd408f7 there is still an error
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-07-14 23:13:30 +02:00
3 changed files with 51 additions and 36 deletions

View File

@@ -68,7 +68,7 @@ generate-defectdojo-api:
-o defectdojo-client \ -o defectdojo-client \
--package-name defectdojo_api --package-name defectdojo_api
dockerize: .dockerize:
stage: build stage: build
image: devnexus.krohne.com:18079/repository/docker-krohne/krohnedockerbash:0.5 image: devnexus.krohne.com:18079/repository/docker-krohne/krohnedockerbash:0.5
tags: tags:
@@ -83,44 +83,16 @@ dockerize:
--tag $IMAGE_NAME:latest --tag $IMAGE_NAME:latest
--tag $IMAGE_NAME:$CI_COMMIT_SHA --tag $IMAGE_NAME:$CI_COMMIT_SHA
--tag $IMAGE_NAME:$CI_COMMIT_TAG --tag $IMAGE_NAME:$CI_COMMIT_TAG
-f $DOCKERFILE
. .
- docker login -u $NEXUS_USER -p $NEXUS_PASSWORD $REGISTRY - docker login -u $NEXUS_USER -p $NEXUS_PASSWORD $REGISTRY
- docker push $IMAGE_NAME:latest - docker push $IMAGE_NAME:latest
- docker push $IMAGE_NAME:$CI_COMMIT_SHA - docker push $IMAGE_NAME:$CI_COMMIT_SHA
- docker push $IMAGE_NAME:$CI_COMMIT_TAG - docker push $IMAGE_NAME:$CI_COMMIT_TAG
build-windows-binary: dockerize-cli:
stage: build extends: .dockerize
tags: variables:
- windows DOCKERFILE: dockerize-cli
- pwsh
- python3.13
rules:
- if: '$CI_COMMIT_TAG'
artifacts:
paths:
- sbom-dt-dd.exe
script:
- |
cd src
mv ..\dependencytrack-client .
mv ..\defectdojo-client .
& 'C:\Program Files\Python313\python.exe' -m venv venv
.\venv\Scripts\pip.exe install --upgrade pip
.\venv\Scripts\pip.exe install -r requirements.txt
.\venv\Scripts\pip.exe install -r dependencytrack-client\requirements.txt
.\venv\Scripts\pip.exe install -r defectdojo-client\requirements.txt
.\venv\Scripts\pip.exe install pyinstaller
.\venv\Scripts\pyinstaller.exe --onefile `
--add-data "dependencytrack-client;dependencytrack-client" `
--add-data "defectdojo-client;defectdojo-client" `
--hidden-import pydantic `
--hidden-import dateutil.parser `
--hidden-import urllib3 `
--hidden-import regex `
--collect-data cyclonedx `
--collect-data license_experssion `
sbom-dt-dd.py
mv dist\sbom-dt-dd.exe ..

View File

@@ -1,4 +1,6 @@
import os import os
import json
import yaml
from loguru import logger from loguru import logger
from fastapi import FastAPI, UploadFile, File, Form, HTTPException from fastapi import FastAPI, UploadFile, File, Form, HTTPException
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
@@ -56,17 +58,58 @@ async def uploadMinimalSBOM(
""" """
Endpoint to upload a minimal SBOM definition Endpoint to upload a minimal SBOM definition
""" """
sbom = await file.read()
try: try:
sbom = await file.read()
logger.info("Start converting from minimal format into cyclonedx") logger.info("Start converting from minimal format into cyclonedx")
(sbom, projectName, projectVersion, projectClassifier, projectDescription) = minimalSbomFormatConverter(sbom) (sbom, projectName, projectVersion, projectClassifier, projectDescription) = minimalSbomFormatConverter(sbom)
logger.info("Converted") logger.info("Converted")
loadToDTrackAndDefectDojo(app.state.config, projectName, projectVersion, projectClassifier, projectDescription, 1, sbom, reimport) loadToDTrackAndDefectDojo(app.state.config, projectName, projectVersion, projectClassifier, projectDescription, 1, sbom, reimport)
logger.info("Done.") logger.info("Done.")
except yaml.scanner.ScannerError as e:
logger.warning(f"uploadMinimalSBOM, yaml ScannerError: {e.context=}, {e.context_mark=}, {e.problem=}, {e.problem_mark=}, {e.note=}")
raise HTTPException(status_code=400, detail=f"yaml ScannerError: {e.context=}, {e.context_mark=}, {e.problem=}, {e.problem_mark=}, {e.note=}")
except ApiException as e: except ApiException as e:
logger.warning(f"uploadMinimalSBOM, ApiException: {e.status=}, {e.reason=}, {e.body=}")
raise HTTPException(status_code=e.status, detail=f"{e.reason=}, {e.body=}, {e.data=}") raise HTTPException(status_code=e.status, detail=f"{e.reason=}, {e.body=}, {e.data=}")
except Exception as e:
logger.warning(f"uploadMinimalSBOM, Exception: {type(e)=}, {str(e)=}, {e.msg=}")
raise HTTPException(status_code=500, detail=f"Exception: {type(e)=}, {str(e)=}, {e.msg=}")
return JSONResponse(content={
"message": "Upload successful!"
})
@app.post("/uploadSBOM/")
async def uploadSBOM(
file: UploadFile = File(...),
projectName: str = Form(...),
projectVersion: str = Form(...),
projectClassifier: str = Form(...),
projectDescription: str = Form(...),
reimport: bool = Form(...)
):
"""
Endpoint to upload a CycloneDX SBOM
"""
sbom = await file.read()
try:
sbomJson = json.loads(sbom)
sbom = json.dumps(sbomJson)
loadToDTrackAndDefectDojo(app.state.config, projectName, projectVersion, projectClassifier, projectDescription, 1, str(sbom), reimport)
logger.info("Done.")
except json.decoder.JSONDecodeError as e:
logger.warning(f"uploadSBOM, JSONDecodeError: {e.msg=}")
raise HTTPException(status_code=400, detail=f"JSON decoding error: {e.msg=}, {e.doc=}, {e.pos=}, {e.lineno=}, {e.colno=}")
except ApiException as e:
logger.warning(f"uploadSBOM, ApiException: {e.status=}, {e.reason=}, {e.body=}")
raise HTTPException(status_code=e.status, detail=f"{e.reason=}, {e.body=}, {e.data=}")
except Exception as e:
logger.warning(f"uploadSBOM, Exception: {type(e)=}, {str(e)=}, {e.msg=}")
raise HTTPException(status_code=500, detail=f"Exception: {type(e)=}, {str(e)=}, {e.msg=}")
return JSONResponse(content={ return JSONResponse(content={
"message": "Upload successful!" "message": "Upload successful!"