@@ -17,19 +17,27 @@ jobs:
17
17
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
18
18
env :
19
19
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
20
- - name : Pull image
20
+ - name : Pull images
21
21
run : |
22
- docker pull ${{ env.IMAGE }}:latest || true
23
- - name : Build image
22
+ docker pull ${{ env.IMAGE }}-builder:latest || true
23
+ docker pull ${{ env.IMAGE }}-final:latest || true
24
+ - name : Build images
24
25
run : |
25
26
docker build \
26
- --cache-from ${{ env.IMAGE }}:latest \
27
- --tag ${{ env.IMAGE }}:latest \
27
+ --target builder \
28
+ --cache-from ${{ env.IMAGE }}-builder:latest \
29
+ --tag ${{ env.IMAGE }}-builder:latest \
30
+ --file ./project/Dockerfile.prod \
31
+ "./project"
32
+ docker build \
33
+ --cache-from ${{ env.IMAGE }}-final:latest \
34
+ --tag ${{ env.IMAGE }}-final:latest \
28
35
--file ./project/Dockerfile.prod \
29
36
"./project"
30
- - name : Push image
37
+ - name : Push images
31
38
run : |
32
- docker push ${{ env.IMAGE }}:latest
39
+ docker push ${{ env.IMAGE }}-builder:latest
40
+ docker push ${{ env.IMAGE }}-final:latest
33
41
34
42
test :
35
43
name : Test Docker Image
@@ -42,14 +50,21 @@ jobs:
42
50
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
43
51
env :
44
52
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
45
- - name : Pull image
53
+ - name : Pull images
46
54
run : |
47
- docker pull ${{ env.IMAGE }}:latest || true
48
- - name : Build image
55
+ docker pull ${{ env.IMAGE }}-builder:latest || true
56
+ docker pull ${{ env.IMAGE }}-final:latest || true
57
+ - name : Build images
49
58
run : |
50
59
docker build \
51
- --cache-from ${{ env.IMAGE }}:latest \
52
- --tag ${{ env.IMAGE }}:latest \
60
+ --target builder \
61
+ --cache-from ${{ env.IMAGE }}-builder:latest \
62
+ --tag ${{ env.IMAGE }}-builder:latest \
63
+ --file ./project/Dockerfile.prod \
64
+ "./project"
65
+ docker build \
66
+ --cache-from ${{ env.IMAGE }}-final:latest \
67
+ --tag ${{ env.IMAGE }}-final:latest \
53
68
--file ./project/Dockerfile.prod \
54
69
"./project"
55
70
- name : Run container
61
76
-e ENVIRONMENT=dev \
62
77
-e DATABASE_TEST_URL=sqlite://sqlite.db \
63
78
-p 5003:8765 \
64
- ${{ env.IMAGE }}:latest
79
+ ${{ env.IMAGE }}-final:latest
80
+ - name : Install requirements
81
+ run : docker exec fastapi-tdd pip install black flake8 isort pytest
65
82
- name : Pytest
66
83
run : docker exec fastapi-tdd python -m pytest .
67
84
- name : Flake8
76
93
runs-on : ubuntu-latest
77
94
needs : [build, test]
78
95
env :
79
- HEROKU_APP_NAME : immense-island-91665
96
+ HEROKU_APP_NAME : <APP_NAME>
80
97
HEROKU_REGISTRY_IMAGE : registry.heroku.com/${HEROKU_APP_NAME}/web
81
98
steps :
82
99
- name : Checkout master
@@ -85,13 +102,21 @@ jobs:
85
102
run : echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
86
103
env :
87
104
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
88
- - name : Pull image
105
+ - name : Pull images
89
106
run : |
90
- docker pull ${{ env.IMAGE }}:latest || true
91
- - name : Build image
107
+ docker pull ${{ env.IMAGE }}-builder:latest || true
108
+ docker pull ${{ env.IMAGE }}-final:latest || true
109
+ - name : Build images
92
110
run : |
93
111
docker build \
94
- --cache-from ${{ env.IMAGE }}:latest \
112
+ --target builder \
113
+ --cache-from ${{ env.IMAGE }}-builder:latest \
114
+ --tag ${{ env.IMAGE }}-builder:latest \
115
+ --file ./project/Dockerfile.prod \
116
+ "./project"
117
+ docker build \
118
+ --cache-from ${{ env.IMAGE }}-final:latest \
119
+ --tag ${{ env.IMAGE }}:latest \
95
120
--tag ${{ env.HEROKU_REGISTRY_IMAGE }}:latest \
96
121
--file ./project/Dockerfile.prod \
97
122
"./project"
@@ -100,13 +125,12 @@ jobs:
100
125
env :
101
126
HEROKU_AUTH_TOKEN : ${{ secrets.HEROKU_AUTH_TOKEN }}
102
127
- name : Push to the registry
103
- run : docker push ${{ env.HEROKU_REGISTRY_IMAGE }}
128
+ run : docker push ${{ env.HEROKU_REGISTRY_IMAGE }}:latest
104
129
- name : Set environment variables
105
130
run : |
106
131
echo ::set-env name=HEROKU_REGISTRY_IMAGE::${{ env.HEROKU_REGISTRY_IMAGE }}
107
132
echo ::set-env name=HEROKU_AUTH_TOKEN::${{ secrets.HEROKU_AUTH_TOKEN }}
108
133
- name : Release
109
134
run : |
110
135
chmod +x ./release.sh
111
- ./release.sh
112
-
136
+ ./release.sh
0 commit comments