image: docker:20.10.16 # Define the Docker image stages: # Define stages in the pipeline - prepare - build - test - deploy prepare: stage: prepare tags: - docker services: - docker:20.10.16-dind before_script: - echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin script: - docker pull $CI_REGISTRY_IMAGE:latest || true - docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest # Job to build documentation build-docs: stage: build dependencies: - prepare image: name: $CI_REGISTRY_IMAGE:latest entrypoint: [""] tags: - docker script: - sphinx-build docs/source docs/build # Build the documentation artifacts: paths: - docs/build # Save the build output for later stages expire_in: 12 month # Optional: Set how long to keep the artifacts (default: 30 days) # Job to test the implementation test: stage: test dependencies: - prepare image: name: $CI_REGISTRY_IMAGE:latest entrypoint: [""] tags: - docker script: - pytest --cov=fxdgm --cov-report=term --cov-report=html tests/ # Run the tests and store coverage artifacts: paths: - htmlcov # Save the coverage report expire_in: 12 month # Optional: Set how long to keep the artifacts (default: 30 days) coverage: '/^TOTAL.*\s+(\d+\%)$/' # Job to deploy documentation to GitLab Pages pages: stage: deploy dependencies: - build-docs image: name: $CI_REGISTRY_IMAGE:latest entrypoint: [""] tags: - docker script: - mv docs/build public # Move the build output to the "public" directory artifacts: paths: - public # Files in the "public" folder will be deployed to GitLab Pages only: - main # Only deploy if the changes are in the default branch