# GitLab CI/CD Pipeline for Gallery Generator # Builds Apptainer container and runs tests inside it stages: - build - test variables: CONTAINER_IMAGE: "gallery-generator.sif" APPTAINER_CACHE_DIR: "$CI_PROJECT_DIR/.apptainer-cache" # Cache to speed up builds cache: key: "$CI_COMMIT_REF_SLUG" paths: - .apptainer-cache/ # Build the Apptainer container build:container: stage: build tags: - apptainer script: - echo "Building Apptainer container..." - apptainer --version - apptainer build --fakeroot $CONTAINER_IMAGE Singularity.def - ls -lh $CONTAINER_IMAGE artifacts: paths: - $CONTAINER_IMAGE expire_in: 1 hour # Run tests inside the container test:pytest: stage: test tags: - apptainer dependencies: - build:container script: - echo "Running pytest inside container..." - apptainer exec $CONTAINER_IMAGE pytest /src/tests/ -v artifacts: when: always # Run tests with coverage test:coverage: stage: test tags: - apptainer dependencies: - build:container script: - echo "Running coverage analysis inside container..." - apptainer exec $CONTAINER_IMAGE pytest /src/tests/ --cov=/src --cov-report=xml --cov-report=term - apptainer exec $CONTAINER_IMAGE cat /src/coverage.xml > coverage.xml || echo "No coverage.xml found" coverage: '/TOTAL.*\s+(\d+%)$/' artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xml paths: - coverage.xml expire_in: 30 days