@@ -3,159 +3,242 @@ name: Robot Framework in Docker
33on :
44 push :
55 # Publish `master` as Docker `latest` image.
6- # Release branches will trigger the creation of a git tag if the build is successful
76 branches :
87 - master
9- - release/*
8+ tags :
9+ - " *"
1010
1111 # Run tests for any PRs.
1212 pull_request :
1313
1414env :
15+ REGISTRY : docker.io
1516 # The image name
16- IMAGE_NAME : docker-robot-framework:ci
17+ IMAGE_NAME : ppodgorsek/robot-framework
18+ IMAGE_VERSION_CI : ci
1719
20+ # Build and run tests.
21+ # See also https://docs.docker.com/docker-hub/builds/automated-testing/
1822jobs :
19- # Build and run tests.
20- # See also https://docs.docker.com/docker-hub/builds/automated-testing/
2123 build :
2224 runs-on : ubuntu-latest
25+ steps :
26+ - name : Checkout code
27+ uses : actions/checkout@v4
28+
29+ - name : Log in to Docker Hub
30+ uses : docker/login-action@v3
31+ with :
32+ username : ${{ secrets.DOCKER_REGISTRY_USERNAME }}
33+ password : ${{ secrets.DOCKER_REGISTRY_TOKEN }}
34+
35+ - name : Set up QEMU
36+ uses : docker/setup-qemu-action@v3
37+
38+ - name : Set up Docker Buildx
39+ uses : docker/setup-buildx-action@v3
40+
41+ - name : Build
42+ uses : docker/build-push-action@v6
43+ with :
44+ # Only build one platform in order to run tests (additional platforms will be built afterwards, before push)
45+ platforms : linux/amd64
46+ push : false
47+ tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
48+ cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache
49+ cache-to : type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache,mode=max
50+
51+ test :
52+ runs-on : ubuntu-latest
53+ needs : build
2354 # run all our tests on each browser
2455 strategy :
2556 matrix :
2657 include :
2758 - browser : " chrome"
28- - browser : " edge"
59+ # FIXME: The tests pass successfully for Edge locally but fail in GitHub Actions
60+ # - browser: "edge"
2961 - browser : " firefox"
3062 env :
3163 BROWSER : ${{ matrix.browser }}
3264 steps :
33- - name : Checkout
34- uses : actions/checkout@v2
35- - name : Build image
36- run : podman build . --tag $IMAGE_NAME --file Dockerfile
65+ - name : Checkout code
66+ uses : actions/checkout@v4
67+
68+ - name : Log in to Docker Hub
69+ uses : docker/login-action@v3
70+ with :
71+ username : ${{ secrets.DOCKER_REGISTRY_USERNAME }}
72+ password : ${{ secrets.DOCKER_REGISTRY_TOKEN }}
73+
74+ - name : Pull image from cache
75+ uses : docker/build-push-action@v6
76+ with :
77+ platforms : linux/amd64
78+ push : false
79+ tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
80+ cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache
81+
3782 - name : Basic Test
3883 run : |
39- podman run --shm-size=1g \
84+ docker run --rm --shm-size=1g \
4085 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
4186 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
4287 -v `pwd`/test/requests.robot:/opt/robotframework/tests/requests.robot:Z \
4388 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
4489 -v `pwd`/test/timezones.robot:/opt/robotframework/tests/timezones.robot:Z \
45- -e BROWSER=$BROWSER \
46- $IMAGE_NAME
90+ -e BROWSER=${{ env.BROWSER }} \
91+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
92+
4793 - name : Test dependency installation
4894 run : |
49- podman run --shm-size=1g \
95+ docker run --rm --shm-size=1g \
5096 -v `pwd`/test/pip-dependencies/main.robot:/opt/robotframework/tests/pip-dependencies.robot:Z \
5197 -v `pwd`/test/pip-dependencies/requirements.txt:/opt/robotframework/pip-requirements.txt:Z \
52- -e BROWSER=$BROWSER \
53- $IMAGE_NAME
98+ -e BROWSER=${{ env.BROWSER }} \
99+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
100+
54101 - name : Colour Depth 16 Test
55102 run : |
56- podman run --shm-size=1g \
103+ docker run --rm --shm-size=1g \
57104 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
58105 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
59- -e BROWSER=$BROWSER \
106+ -e BROWSER=${{ env. BROWSER }} \
60107 -e SCREEN_COLOUR_DEPTH=16 \
61- $IMAGE_NAME
108+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
109+
62110 - name : Screen Width 800x600 Test
63111 run : |
64- podman run --shm-size=1g \
112+ docker run --rm --shm-size=1g \
65113 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
66114 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
67- -e BROWSER=$BROWSER \
115+ -e BROWSER=${{ env. BROWSER }} \
68116 -e SCREEN_WIDTH=800 \
69117 -e SCREEN_HEIGHT=600 \
70- $IMAGE_NAME
118+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
119+
71120 - name : Screen Width 1024x768 Test
72121 run : |
73- podman run --shm-size=1g \
122+ docker run --rm --shm-size=1g \
74123 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
75124 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
76- -e BROWSER=$BROWSER \
125+ -e BROWSER=${{ env. BROWSER }} \
77126 -e SCREEN_WIDTH=1024 \
78127 -e SCREEN_HEIGHT=768 \
79- $IMAGE_NAME
128+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
129+
80130 - name : Screen Width 1280x1024 Test
81131 run : |
82- podman run --shm-size=1g \
132+ docker run --rm --shm-size=1g \
83133 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
84134 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
85- -e BROWSER=$BROWSER \
135+ -e BROWSER=${{ env. BROWSER }} \
86136 -e SCREEN_WIDTH=1280 \
87137 -e SCREEN_HEIGHT=1024 \
88- $IMAGE_NAME
138+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
139+
89140 - name : Screen Width 2560x1440 Test
90141 run : |
91- podman run --shm-size=1g \
142+ docker run --rm --shm-size=1g \
92143 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
93144 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
94- -e BROWSER=$BROWSER \
145+ -e BROWSER=${{ env. BROWSER }} \
95146 -e SCREEN_WIDTH=2560 \
96147 -e SCREEN_HEIGHT=1440 \
97- $IMAGE_NAME
148+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
149+
98150 - name : Screen Width 3840x2160 Test
99151 run : |
100- podman run --shm-size=1g \
152+ docker run --rm --shm-size=1g \
101153 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
102154 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
103- -e BROWSER=$BROWSER \
155+ -e BROWSER=${{ env. BROWSER }} \
104156 -e SCREEN_WIDTH=3840 \
105157 -e SCREEN_HEIGHT=2160 \
106- $IMAGE_NAME
158+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
159+
107160 - name : Debug Log Level Test
108161 run : |
109- podman run --shm-size=1g \
162+ docker run --rm --shm-size=1g \
110163 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
111- -e BROWSER=$BROWSER \
164+ -e BROWSER=${{ env. BROWSER }} \
112165 -e ROBOT_OPTIONS="--loglevel DEBUG" \
113- $IMAGE_NAME
166+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
167+
114168 - name : Basic Multithreaded Test
115169 run : |
116- podman run --shm-size=1g \
170+ docker run --rm --shm-size=1g \
117171 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
118172 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
119173 -v `pwd`/test/requests.robot:/opt/robotframework/tests/requests.robot:Z \
120174 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
121175 -v `pwd`/test/timezones.robot:/opt/robotframework/tests/timezones.robot:Z \
122- -e BROWSER=$BROWSER \
176+ -e BROWSER=${{ env. BROWSER }} \
123177 -e ROBOT_THREADS=4 \
124- $IMAGE_NAME
178+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
179+
125180 - name : Test Level Multithreaded Test
126181 run : |
127- podman run --shm-size=1g \
182+ docker run --rm --shm-size=1g \
128183 -v `pwd`/test/browser-library.robot:/opt/robotframework/tests/browser-library.robot:Z \
129184 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
130185 -v `pwd`/test/requests.robot:/opt/robotframework/tests/requests.robot:Z \
131186 -v `pwd`/test/selenium.robot:/opt/robotframework/tests/selenium.robot:Z \
132187 -v `pwd`/test/timezones.robot:/opt/robotframework/tests/timezones.robot:Z \
133- -e BROWSER=$BROWSER \
188+ -e BROWSER=${{ env. BROWSER }} \
134189 -e ROBOT_THREADS=4 \
135190 -e PABOT_OPTIONS="--testlevelsplit" \
136- $IMAGE_NAME
191+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
192+
137193 - name : Custom User Test
138194 run : |
139- podman run --user=2000 --shm-size=1g \
195+ docker run --rm --user=2000 --shm-size=1g \
140196 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
141- -e BROWSER=$BROWSER \
142- $IMAGE_NAME
197+ -e BROWSER=${{ env.BROWSER }} \
198+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
199+
143200 - name : Custom User and Group Test
144201 run : |
145- podman run --user=2000:2000 --shm-size=1g \
202+ docker run --rm --user=2000:2000 --shm-size=1g \
146203 -v `pwd`/test/faker.robot:/opt/robotframework/tests/faker.robot:Z \
147- -e BROWSER=$BROWSER \
148- $IMAGE_NAME
204+ -e BROWSER=${{ env.BROWSER }} \
205+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
206+
149207 - name : Datetime
150208 run : |
151- podman run --user=2000:2000 --shm-size=1g \
209+ docker run --rm --shm-size=1g \
152210 -v `pwd`/test/timezones.robot:/opt/robotframework/tests/timezones.robot:Z \
153- -e BROWSER=$BROWSER \
211+ -e BROWSER=${{ env. BROWSER }} \
154212 -e TZ="America/New_York" \
155- $IMAGE_NAME
213+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
214+
156215 - name : Rerun Test
157216 run : |
158- podman run --user=2000:2000 --shm-size=1g \
217+ docker run --rm --shm-size=1g \
159218 -v `pwd`/test/rerun.robot:/opt/robotframework/tests/rerun.robot:Z \
219+ -e BROWSER=${{ env.BROWSER }} \
160220 -e ROBOT_RERUN_MAX_ROUNDS=50 \
161- $IMAGE_NAME
221+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION_CI }}
222+
223+ push :
224+ runs-on : ubuntu-latest
225+ needs : test
226+ if : github.event_name != 'pull_request'
227+ steps :
228+ - name : Checkout code
229+ uses : actions/checkout@v4
230+
231+ - name : Log in to Docker Hub
232+ uses : docker/login-action@v3
233+ with :
234+ username : ${{ secrets.DOCKER_REGISTRY_USERNAME }}
235+ password : ${{ secrets.DOCKER_REGISTRY_TOKEN }}
236+
237+ - name : Build other platforms and push
238+ uses : docker/build-push-action@v6
239+ with :
240+ platforms : linux/amd64
241+ # platforms: linux/amd64,linux/arm64
242+ push : ${{ github.event_name != 'pull_request' }}
243+ tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_type == 'branch' && 'latest' || github.ref_name }}
244+ cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache
0 commit comments