-
Notifications
You must be signed in to change notification settings - Fork 2
140 lines (116 loc) · 5.74 KB
/
Copy pathbuild-and-test.yml
File metadata and controls
140 lines (116 loc) · 5.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
name: Build and Test Docker Images
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Restore dependencies
run: dotnet restore ModularMonolith.sln
- name: Build solution
run: dotnet build ModularMonolith.sln --no-restore --configuration Release
- name: Run tests
run: |
dotnet test ECommerce.Modules.Orders.Tests/ECommerce.Modules.Orders.Tests.csproj --no-build --configuration Release --logger "trx;LogFileName=orders_test_results.trx"
dotnet test ECommerce.BusinessEvents.Tests/ECommerce.BusinessEvents.Tests.csproj --no-build --configuration Release --logger "trx;LogFileName=businessevents_test_results.trx"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build ECommerceApp Docker image
run: |
if [ -f ./ECommerceApp/Dockerfile ]; then
docker build -t modularmonolith -f ECommerceApp/Dockerfile .
else
echo "ECommerceApp Dockerfile not found, skipping build."
fi
- name: Build ECommerce.AdminUI Docker image
run: |
if [ -f ./ECommerce.AdminUI/Dockerfile ]; then
docker build -t admin-ui -f ECommerce.AdminUI/Dockerfile .
else
echo "ECommerce.AdminUI Dockerfile not found, skipping build."
fi
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.ACCESS_TOKEN }}
- name: Set short SHA
run: echo "SHORT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV
- name: Tag and push ECommerceApp image
run: |
docker tag modularmonolith ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:latest
docker tag modularmonolith ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:${{ env.SHORT_SHA }}
docker push ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:latest
docker push ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:${{ env.SHORT_SHA }}
- name: Tag and push ECommerce.AdminUI image
run: |
docker tag admin-ui:latest ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:latest
docker tag admin-ui:latest ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:${{ env.SHORT_SHA }}
docker push ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:latest
docker push ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:${{ env.SHORT_SHA }}
deploy-mock:
needs: build-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' # Only deploy on main, adjust as needed
steps:
- name: Set short SHA
run: echo "SHORT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV
- name: Show deployment parameters
env:
IMAGE_TAG: ${{ env.SHORT_SHA }}
ENVIRONMENT: ${{ inputs.environment || 'dev' }}
run: |
echo "Mock Deploying to environment: $ENVIRONMENT"
echo "Using image tag: $IMAGE_TAG"
echo "Would deploy ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:${IMAGE_TAG}"
echo "Would deploy ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:${IMAGE_TAG}"
- name: Simulate deployment script
run: |
echo "kubectl apply -f k8s/deployment.yaml --dry-run=client"
# Add any commands you want to 'mock' here
- name: Confirm mock deployment success
run: echo "Mock deployment completed successfully."
update-deployment-manifests:
needs: build-and-test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout infrastructure repository
uses: actions/checkout@v4
with:
repository: ilroberts/DotNetModularMonolith-k8s
token: ${{ secrets.ACCESS_TOKEN }}
path: infra-repo
- name: Set up Git
run: |
git config --global user.name "github-actions"
git config --global user.email "github-actions@github.com"
working-directory: infra-repo
- name: Install yq
run: sudo apt-get update && sudo apt-get install -y yq
- name: Set short SHA
run: echo "SHORT_SHA=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV
- name: Update ECommerceApp image tag in manifest
run: |
yq -y -i '(.spec.template.spec.containers[] | select(.name == "modularmonolith").image) = "ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/modularmonolith:${{ env.SHORT_SHA }}"' ECommerceApp/k8s/base/deployment.yaml
working-directory: infra-repo
- name: Update AdminUI image tag in manifest
run: |
yq -y -i '(.spec.template.spec.containers[] | select(.name == "admin-ui").image) = "ghcr.io/${{ github.repository_owner }}/dotnetmodularmonolith/admin-ui:${{ env.SHORT_SHA }}"' ECommerce.AdminUI/k8s/base/deployment.yaml
working-directory: infra-repo
- name: Commit and push manifest updates
run: |
git add ECommerceApp/k8s/base/deployment.yaml ECommerce.AdminUI/k8s/base/deployment.yaml
git commit -m "Update ECommerceApp and AdminUI images to ${{ env.SHORT_SHA }} [ci skip]" || echo "No changes to commit"
git push
working-directory: infra-repo