@@ -3,83 +3,49 @@ name: CI Pipeline
33on :
44 push :
55 branches : [master]
6- pull_request :
7- branches : [master]
86
97jobs :
10- test :
11- runs-on : ubuntu-latest
12-
13- steps :
14- # 1. Checkout code
15- - name : Checkout code
16- uses : actions/checkout@v4
17-
18- # 2. Set up Python
19- - name : Set up Python
20- uses : actions/setup-python@v4
21- with :
22- python-version : ' 3.9'
23-
24- # 3. Install dependencies
25- - name : Install dependencies
26- run : |
27- pip install -r requirements.txt
28-
29- build :
8+ build-and-push :
309 runs-on : ubuntu-latest
31- needs : test
3210
3311 steps :
34- # 1. Checkout code
12+ # 1️⃣ Checkout code
3513 - name : Checkout code
3614 uses : actions/checkout@v4
3715
38- # 2. Install Docker Compose
16+ # 2️⃣ Install Docker Compose
3917 - name : Install Docker Compose
4018 run : |
4119 sudo apt-get update
4220 sudo apt-get install -y docker-compose
4321
44- # 3. Create .env
45- - name : Create .env file
22+ # 3️⃣ Login to Docker Hub
23+ - name : Login to Docker Hub
4624 run : |
47- echo "DB_USER=root" >> .env
48- echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env
49- echo "DB_NAME=library" >> .env
50-
51- # 4. Build Docker Images
52- - name : Build Docker Images
53- run : |
54- # Build app image
55- docker build -t library-app:latest .
25+ echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
5626
57- # 5. Test if containers start
58- - name : Test containers
27+ # 4️⃣ Build all images from docker-compose
28+ - name : Build Docker images
5929 run : |
60- docker-compose ps
61- docker-compose down
30+ docker-compose build
6231
63- # 6. Tag and Push to Docker Hub (only on master branch)
64- - name : Tag and Push to Docker Hub
65- if : github.event_name == 'push' && github.ref == 'refs/heads/master'
32+ # 5️⃣ Tag and push all images with `latest` and `v2`
33+ - name : Tag and Push images
6634 run : |
67- echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
68-
69- COMMIT_SHA=$(echo ${{ github.sha }} | cut -c1-7)
70-
71- # Tag app image
72- docker tag library-app:latest ${{ secrets.DOCKER_USERNAME }}/library-app:latest
73- docker tag library-app:latest ${{ secrets.DOCKER_USERNAME }}/library-app:$COMMIT_SHA
74- docker tag library-app:latest ${{ secrets.DOCKER_USERNAME }}/library-app:${{ github.run_number }}
75-
76- # Tag MySQL image
77- docker tag mysql:db ${{ secrets.DOCKER_USERNAME }}/mysql-db:latest
78- docker tag mysql:db ${{ secrets.DOCKER_USERNAME }}/mysql-db:$COMMIT_SHA
79-
80- # Push all images
81- docker push ${{ secrets.DOCKER_USERNAME }}/library-app:latest
82- docker push ${{ secrets.DOCKER_USERNAME }}/library-app:$COMMIT_SHA
83- docker push ${{ secrets.DOCKER_USERNAME }}/library-app:${{ github.run_number }}
84- docker push ${{ secrets.DOCKER_USERNAME }}/mysql-db:latest
85- docker push ${{ secrets.DOCKER_USERNAME }}/mysql-db:$COMMIT_SHA
35+ # List all built images
36+ docker images
37+
38+ # Loop through each service defined in docker-compose
39+ for service in $(docker-compose config --services); do
40+ IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/${service}
41+
42+ echo "Tagging and pushing $IMAGE_NAME ..."
43+
44+ # Tag images
45+ docker tag ${service}:latest $IMAGE_NAME:latest
46+ docker tag ${service}:latest $IMAGE_NAME:v2
47+
48+ # Push both tags
49+ docker push $IMAGE_NAME:latest
50+ docker push $IMAGE_NAME:v2
51+ done
0 commit comments