tentative to add ci pipeline
This commit is contained in:
parent
20f341a9a9
commit
3f563d8b70
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,6 @@
|
|||||||
/frontend/.env.local
|
/frontend/.env.local
|
||||||
/backend/ssl/
|
/backend/ssl/
|
||||||
/backend/app/test.db
|
/backend/app/test.db
|
||||||
|
/backend/python-client/
|
||||||
|
/backend/openapi.json
|
||||||
|
/backend/openapi-generator-cli.jar
|
||||||
|
56
.gitlab-ci.yml
Normal file
56
.gitlab-ci.yml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# GitLab CI/CD Configuration for FastAPI
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
- deploy
|
||||||
|
- release
|
||||||
|
|
||||||
|
variables:
|
||||||
|
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip_cache"
|
||||||
|
VIRTUAL_ENV: ".venv"
|
||||||
|
|
||||||
|
# Cache for dependencies
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- .pip_cache/
|
||||||
|
|
||||||
|
before_script: # common setup for every job
|
||||||
|
- python3 -m venv $VIRTUAL_ENV
|
||||||
|
- source $VIRTUAL_ENV/bin/activate
|
||||||
|
- pip install --upgrade pip
|
||||||
|
|
||||||
|
test:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- source $VIRTUAL_ENV/bin/activate
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
- pytest --cov=app --cov-report=xml # Run tests and generate coverage report
|
||||||
|
|
||||||
|
lint:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- source $VIRTUAL_ENV/bin/activate
|
||||||
|
- pip install flake8
|
||||||
|
- flake8 app/ # Run linting for code quality
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
stage: deploy
|
||||||
|
only:
|
||||||
|
- main
|
||||||
|
script:
|
||||||
|
- echo "Updating repository..."
|
||||||
|
- git pull origin main # Update the repository with the latest code
|
||||||
|
- echo "Setting up Python dependencies..."
|
||||||
|
- source $VIRTUAL_ENV/bin/activate
|
||||||
|
- pip install -r requirements.txt # Install the required Python dependencies
|
||||||
|
- bash ./make_openapi_client.sh # Re-generate OpenAPI client library
|
||||||
|
- echo "Running the application..."
|
||||||
|
- python3.8 -m main # Replace with the exact command to start your app
|
||||||
|
|
||||||
|
release:
|
||||||
|
stage: release
|
||||||
|
when: manual
|
||||||
|
variables:
|
||||||
|
TWINE_USERNAME: gitlab-ci-token
|
||||||
|
TWINE_PASSWORD: $CI_JOB_TOKEN
|
||||||
|
script:
|
||||||
|
- bash make_openapi_client.sh
|
@ -1,23 +1,45 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
VERSION={0.1.0}
|
VERSION=0.1.0
|
||||||
|
|
||||||
# Run whataver you need to generate FastAPI .json file
|
# Navigate to project root
|
||||||
pushd backend
|
cd "$(dirname "$0")/backend" || exit
|
||||||
python -m main generate-openapi
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Download OpenAPI generator
|
# Generate OpenAPI JSON file
|
||||||
|
python3 main.py generate-openapi
|
||||||
|
if [[ ! -f openapi.json ]]; then
|
||||||
|
echo "Error: openapi.json file not generated!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download OpenAPI generator CLI if not present
|
||||||
OPENAPI_VERSION=7.8.0
|
OPENAPI_VERSION=7.8.0
|
||||||
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${OPENAPI_VERSION}/openapi-generator-cli-${OPENAPI_VERSION}.jar -O openapi-generator-cli.jar
|
if [[ ! -f openapi-generator-cli.jar ]]; then
|
||||||
|
wget "https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${OPENAPI_VERSION}/openapi-generator-cli-${OPENAPI_VERSION}.jar" -O openapi-generator-cli.jar
|
||||||
|
fi
|
||||||
|
|
||||||
# Run OpenAPI generator (requires java to be installed - this is already configured on mx-aare-test)
|
# Run OpenAPI generator
|
||||||
java -jar openapi-generator-cli.jar generate -i /backend/openapi.json -o python-client/ -g python --additional-properties=packageName=aare-test,packageVersion=${VERSION}
|
java -jar openapi-generator-cli.jar generate \
|
||||||
# build python package
|
-i "$(pwd)/openapi.json" \
|
||||||
cd python-client
|
-o python-client/ \
|
||||||
python3.11 -m venv .venv
|
-g python \
|
||||||
|
--additional-properties=packageName=aareDBclient,projectName=aareDB,packageVersion=${VERSION}
|
||||||
|
|
||||||
|
# Check if the generator succeeded
|
||||||
|
if [[ ! -d python-client ]]; then
|
||||||
|
echo "OpenAPI generator failed. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build Python package
|
||||||
|
cd python-client || exit
|
||||||
|
python3 -m venv .venv
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
pip install twine build
|
pip install -U pip twine build
|
||||||
python -m build
|
python -m build
|
||||||
|
|
||||||
# upload the package into the package repository - this uses variables from CI pipeline, so it won't work offline
|
# Upload package (only if in CI environment)
|
||||||
twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
|
if [[ -z "${CI_API_V4_URL}" || -z "${CI_PROJECT_ID}" ]]; then
|
||||||
|
echo "Skipping package upload—CI variables not set."
|
||||||
|
else
|
||||||
|
twine upload --repository-url "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi" dist/*
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user