diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..01ea86969143ae50bdb416dc71d7fd4a5f34ec39 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,123 @@ +################## +# CI/CD Pipeline # +################## +stages: + - build + - test + - deploy + +.default_tags: &default_tags + tags: + - all-jobs + +############### +# Build Stage # +############### +build_user_service: + <<: *default_tags + stage: build + script: + - echo "Building User Microservice" + - dotnet publish UserMicroservice -c Release -o ./output/UserMicroservice + artifacts: + paths: + - output/UserMicroservice/ + +build_flight_service: + <<: *default_tags + stage: build + script: + - echo "Building Flight Microservice" + - dotnet publish FlightMicroservice -c Release -o ./output/FlightMicroservice + artifacts: + paths: + - output/FlightMicroservice/ + +build_booking_service: + <<: *default_tags + stage: build + script: + - echo "Building Booking Microservice" + - dotnet publish BookingMicroservice -c Release -o ./output/BookingMicroservice + artifacts: + paths: + - output/BookingMicroservice/ + +build_gateway_api: + <<: *default_tags + stage: build + script: + - echo "Building Gateway API" + - dotnet publish GatewayAPI -c Release -o ./output/GatewayAPI + artifacts: + paths: + - output/GatewayAPI/ + +build_client_app: + <<: *default_tags + stage: build + script: + - echo "Building Client Application" + - cd client + - npm install + - npm run build + - mkdir -p ../output/client + - cp -R build/* ../output/client/ + artifacts: + paths: + - output/client/ + +############## +# Test Stage # +############## +test-services: + <<: *default_tags + stage: test + script: + - echo "Running unit tests..." + - find . -name "*.Tests.csproj" -exec dotnet test {} \; + artifacts: + when: always + reports: + junit: + - "**/TestResults/*.xml" + coverage: '/^Total coverage: (\d+\.\d+)%/' + +################ +# Deploy Stage # +################ +deploy_services_to_registry: + <<: *default_tags + stage: deploy + script: + - echo "Publishing User Microservice to GitLab Package Registry..." + - dotnet nuget push "output/UserMicroservice/*.nupkg" --source "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/nuget" --api-key $CI_JOB_TOKEN + - echo "Publishing Flight Microservice to GitLab Package Registry..." + - dotnet nuget push "output/FlightMicroservice/*.nupkg" --source "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/nuget" --api-key $CI_JOB_TOKEN + - echo "Publishing Booking Microservice to GitLab Package Registry..." + - dotnet nuget push "output/BookingMicroservice/*.nupkg" --source "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/nuget" --api-key $CI_JOB_TOKEN + - echo "Publishing Gateway API to GitLab Package Registry..." + - dotnet nuget push "output/GatewayAPI/*.nupkg" --source "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/nuget" --api-key $CI_JOB_TOKEN + - echo "Publishing Client Application to GitLab NPM Registry..." + - cd output/client + - npm pack + - npm publish --registry "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/npm" --auth "//gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/packages/npm/:_authToken=$CI_JOB_TOKEN" + dependencies: + - build_user_service + - build_client_app + - build_gateway_api + - build_booking_service + - build_flight_service + only: + - /^release\/.*$/ + +deploy_docker_images: + <<: *default_tags + stage: deploy + script: + - echo "Building and pushing Docker images..." + - docker-compose -f docker-compose.yml build + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker-compose -f docker-compose.yml push + only: + - /^release\/.*$/