1+ name : CI Pipeline
2+
3+ on :
4+ push :
5+ paths :
6+ - backend/src/**
7+ - .github/workflows/ci.yml
8+ branches :
9+ - master
10+ - develop
11+ tags :
12+ - ' v*'
13+ pull_request :
14+ types : [opened, synchronize, reopened]
15+
16+ jobs :
17+ build-and-test :
18+ runs-on : ubuntu-latest
19+
20+ steps :
21+ - name : Checkout repository
22+ uses : actions/checkout@v4
23+
24+ - name : Run reusable Build and Test action
25+ uses : ./.github/actions/build-and-test
26+ with :
27+ backendCsprojPath : ./backend/src/MessagingPlatform.Api/MessagingPlatform.Api.csproj
28+ unitTestsProjectPath : ./backend/tests/MessagingPlatform.Domain.Tests/MessagingPlatform.Domain.Tests.csproj
29+ buildConfiguration : Release
30+ serviceName : MessagingPlatform
31+
32+ docker :
33+ needs : build-and-test
34+ runs-on : ubuntu-latest
35+
36+ env :
37+ DOCKER_HUB_USERNAME : ${{ secrets.DOCKER_HUB_USERNAME }}
38+ DOCKER_HUB_PASSWORD : ${{ secrets.DOCKER_HUB_PASSWORD }}
39+
40+ steps :
41+ - name : Checkout repository
42+ uses : actions/checkout@v4
43+
44+ - name : Log in to Docker Hub
45+ run : echo "${{ env.DOCKER_HUB_PASSWORD }}" | docker login -u "${{ env.DOCKER_HUB_USERNAME }}" --password-stdin
46+
47+ - name : Build Docker image
48+ run : |
49+ IMAGE_VERSION="latest"
50+ if [[ "$GITHUB_REF" == refs/tags/* ]]; then
51+ IMAGE_VERSION=${GITHUB_REF#refs/tags/}
52+ fi
53+ docker buildx build \
54+ -t ${{ env.DOCKER_HUB_USERNAME }}/messagingplatform:${IMAGE_VERSION} \
55+ -t ${{ env.DOCKER_HUB_USERNAME }}/messagingplatform:latest \
56+ -f ./backend/Dockerfile \
57+ ./backend/src
58+
59+ - name : Push latest Docker image to Docker Hub
60+ run : docker push ${{ env.DOCKER_HUB_USERNAME }}/messagingplatform:latest
61+
62+ - name : Push Docker image to Docker Hub
63+ if : startsWith(github.ref, 'refs/tags/')
64+ run : |
65+ IMAGE_VERSION=${GITHUB_REF#refs/tags/}
66+ docker push ${{ env.DOCKER_HUB_USERNAME }}/messagingplatform:${IMAGE_VERSION}
0 commit comments