@@ -3,53 +3,101 @@ name: Docker CI
33on :
44 push :
55 branches :
6- - main
6+ - develop
7+ - develop-restore
8+ - feat/docker-workflow
79 pull_request :
810 branches :
9- - main
11+ - develop
12+ - develop-restore
13+ - feat/docker-workflow
1014
1115jobs :
12- build :
16+ build_and_test :
1317 runs-on : " ubuntu-latest"
1418 steps :
1519 - uses : actions/checkout@v4
1620
17- # Needed for cargo-make
21+ - name : Setup Node.js
22+ uses : actions/setup-node@v4
23+ with :
24+ node-version : ' 20'
25+
26+
27+ - name : Install root dependencies
28+ run : npm install
29+
30+ - name : Install dependencies inside packages/frontend
31+ run : |
32+ cd packages/frontend
33+ npm install --no-workspaces
34+
1835 - name : Set up Rust
1936 uses : dtolnay/rust-toolchain@stable
2037
2138 - name : Install cargo make
2239 run : cargo install cargo-make
2340
24- - name : get Sysbox
41+ - name : Get Sysbox
2542 run : wget https://downloads.nestybox.com/sysbox/releases/v0.6.1/sysbox-ce_0.6.1-0.linux_amd64.deb
2643
2744 - name : Install Sysbox
28- run : sudo apt-get install ./sysbox-ce_0.6.1-0.linux_amd64.deb
45+ run : sudo apt-get update && sudo apt-get install -y ./sysbox-ce_0.6.1-0.linux_amd64.deb
2946
3047 - name : Configure Sysbox runtime
31- run : sudo cp sysbox/daemon.json /etc/docker/daemon.json
48+ # Ensure the target directory exists
49+ run : sudo mkdir -p /etc/docker && sudo cp sysbox/daemon.json /etc/docker/daemon.json
3250
3351 - name : Restart docker service
3452 run : sudo systemctl restart docker.service
3553
36- - name : Build docker
37- run : cargo make docker-build
54+ - name : Build docker image
55+ # Use direct docker build for clarity and tagging
56+ # Use the Dockerfile with embedded entrypoint
57+ run : docker build -t fzsolangpg -f Dockerfile .
3858
39- - name : Run docker
40- run : cargo make docker-run
59+ - name : Run docker container in detached mode
60+ # Publish both port 4444 (backend) and 3000 (frontend)
61+ run : docker run --runtime=sysbox-runc -d -p 4444:4444 -p 3000:3000 --name zsolangpg_backend fzsolangpg
4162
42- - name : Allow Docker image to boot up
43- uses : juliangruber/sleep-action@v1
44- with :
45- time : 120s
63+ - name : Download wait-for-it.sh
64+ run : wget https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh && chmod +x wait-for-it.sh
4665
47- # Needed to run tests
48- - name : Install npm dependencies
49- run : cargo make deps-npm
66+ - name : Wait for backend server (port 4444)
67+ run : |
68+ echo "Waiting for backend server on localhost:4444..."
69+ ./wait-for-it.sh localhost:4444 -t 180 -- echo "Backend server (4444) is up!"
70+ if [ $? -ne 0 ]; then
71+ echo "Timeout waiting for backend server (4444)."
72+ docker logs zsolangpg_backend # Show logs on timeout
73+ exit 1
74+ fi
75+ - name : Wait for frontend server (port 3000)
76+ run : |
77+ echo "Waiting for frontend server on localhost:3000..."
78+ ./wait-for-it.sh localhost:3000 -t 180 -- echo "Frontend server (3000) is up!"
79+ if [ $? -ne 0 ]; then
80+ echo "Timeout waiting for frontend server (3000)."
81+ docker logs zsolangpg_backend # Show logs on timeout
82+ exit 1
83+ fi
84+
85+ # Login to Docker Hub
86+ - name : Log in to Docker Hub
87+ uses : docker/login-action@v3
88+ with :
89+ username : ${{ secrets.DOCKERHUB_USERNAME }}
90+ password : ${{ secrets.DOCKERHUB_TOKEN }}
5091
51- - name : Test
52- run : cargo make test-app
92+ - name : Tag & Push Docker image to Docker Hub on Push to develop and feat/docker-workflow
93+ if : github.event_name == 'push'
94+ run : |
95+ docker tag fzsolangpg ahmadsamehh/fzsolangpg:latest
96+ docker push ahmadsamehh/fzsolangpg:latest
5397
54- - name : Show logs
55- run : cargo make docker-log
98+ - name : Tag and Push Docker image (pull request event)
99+ if : github.event_name == 'pull_request'
100+ run : |
101+ PR_NUMBER=${{ github.event.pull_request.number }}
102+ docker tag fzsolangpg ahmadsamehh/fzsolangpg:pr-$PR_NUMBER
103+ docker push ahmadsamehh/fzsolangpg:pr-$PR_NUMBER
0 commit comments