@@ -19,19 +19,27 @@ jobs:
19
19
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io
20
20
env :
21
21
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
22
- - name : Pull image
22
+ - name : Pull images
23
23
run : |
24
- docker pull ${{ env.IMAGE }}:latest || true
25
- - name : Build image
24
+ docker pull ${{ env.IMAGE }}-builder:latest || true
25
+ docker pull ${{ env.IMAGE }}-final:latest || true
26
+ - name : Build images
26
27
run : |
27
28
docker build \
28
- --cache-from ${{ env.IMAGE }}:latest \
29
- --tag ${{ env.IMAGE }}:latest \
29
+ --target builder \
30
+ --cache-from ${{ env.IMAGE }}-builder:latest \
31
+ --tag ${{ env.IMAGE }}-builder:latest \
32
+ --file ./project/Dockerfile.prod \
33
+ "./project"
34
+ docker build \
35
+ --cache-from ${{ env.IMAGE }}-final:latest \
36
+ --tag ${{ env.IMAGE }}-final:latest \
30
37
--file ./project/Dockerfile.prod \
31
38
"./project"
32
- - name : Push image
39
+ - name : Push images
33
40
run : |
34
- docker push ${{ env.IMAGE }}:latest
41
+ docker push ${{ env.IMAGE }}-builder:latest
42
+ docker push ${{ env.IMAGE }}-final:latest
35
43
36
44
test :
37
45
name : Test Docker Image
@@ -41,19 +49,26 @@ jobs:
41
49
- name : Checkout
42
50
uses : actions/checkout@v3
43
51
with :
44
- ref : updates
52
+ ref : main
45
53
- name : Log in to GitHub Packages
46
54
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io
47
55
env :
48
56
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
49
- - name : Pull image
57
+ - name : Pull images
50
58
run : |
51
- docker pull ${{ env.IMAGE }}:latest || true
52
- - name : Build image
59
+ docker pull ${{ env.IMAGE }}-builder:latest || true
60
+ docker pull ${{ env.IMAGE }}-final:latest || true
61
+ - name : Build images
53
62
run : |
54
63
docker build \
55
- --cache-from ${{ env.IMAGE }}:latest \
56
- --tag ${{ env.IMAGE }}:latest \
64
+ --target builder \
65
+ --cache-from ${{ env.IMAGE }}-builder:latest \
66
+ --tag ${{ env.IMAGE }}-builder:latest \
67
+ --file ./project/Dockerfile.prod \
68
+ "./project"
69
+ docker build \
70
+ --cache-from ${{ env.IMAGE }}-final:latest \
71
+ --tag ${{ env.IMAGE }}-final:latest \
57
72
--file ./project/Dockerfile.prod \
58
73
"./project"
59
74
- name : Run container
66
81
-e DATABASE_URL=sqlite://sqlite.db \
67
82
-e DATABASE_TEST_URL=sqlite://sqlite.db \
68
83
-p 5003:8765 \
69
- ${{ env.IMAGE }}:latest
84
+ ${{ env.IMAGE }}-final:latest
85
+ - name : Install requirements
86
+ run : docker exec fastapi-tdd pip install black==25.1.0 flake8==7.2.0 isort==6.0.1 pytest==8.3.5
70
87
- name : Pytest
71
88
run : docker exec fastapi-tdd python -m pytest .
72
89
- name : Flake8
@@ -92,13 +109,21 @@ jobs:
92
109
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin ghcr.io
93
110
env :
94
111
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
95
- - name : Pull image
112
+ - name : Pull images
96
113
run : |
97
- docker pull ${{ env.IMAGE }}:latest || true
98
- - name : Build image
114
+ docker pull ${{ env.IMAGE }}-builder:latest || true
115
+ docker pull ${{ env.IMAGE }}-final:latest || true
116
+ - name : Build images
99
117
run : |
100
118
docker build \
101
- --cache-from ${{ env.IMAGE }}:latest \
119
+ --target builder \
120
+ --cache-from ${{ env.IMAGE }}-builder:latest \
121
+ --tag ${{ env.IMAGE }}-builder:latest \
122
+ --file ./project/Dockerfile.prod \
123
+ "./project"
124
+ docker build \
125
+ --cache-from ${{ env.IMAGE }}-final:latest \
126
+ --tag ${{ env.IMAGE }}:latest \
102
127
--tag ${{ env.HEROKU_REGISTRY_IMAGE }}:latest \
103
128
--file ./project/Dockerfile.prod \
104
129
"./project"
@@ -107,7 +132,7 @@ jobs:
107
132
env :
108
133
HEROKU_AUTH_TOKEN : ${{ secrets.HEROKU_AUTH_TOKEN }}
109
134
- name : Push to the registry
110
- run : docker push ${{ env.HEROKU_REGISTRY_IMAGE }}
135
+ run : docker push ${{ env.HEROKU_REGISTRY_IMAGE }}:latest
111
136
- name : Set environment variables
112
137
run : |
113
138
echo "HEROKU_REGISTRY_IMAGE=${{ env.HEROKU_REGISTRY_IMAGE }}" >> $GITHUB_ENV
0 commit comments