Skip to content

Commit 3f7a9f3

Browse files
Added CI pipeline hamzaavvan#9
1 parent 6ef94ea commit 3f7a9f3

File tree

1 file changed

+28
-62
lines changed

1 file changed

+28
-62
lines changed

.github/workflows/ci.yaml

Lines changed: 28 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,83 +3,49 @@ name: CI Pipeline
33
on:
44
push:
55
branches: [master]
6-
pull_request:
7-
branches: [master]
86

97
jobs:
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

Comments
 (0)