18
18
DOCKER_REGISTRY_PROJECT_NAME : internal-public
19
19
DOCKER_REGISTRY_REPO_NAME : lmt
20
20
TARGET_DIR_ON_SERVER : /blumilk/deployments/dev/projects
21
+ ENVIRONMENT : dev
21
22
steps :
22
23
- name : set branch name
23
24
run : echo "BRANCH_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
@@ -27,3 +28,141 @@ jobs:
27
28
with :
28
29
fetch-depth : 0
29
30
ref : ${{ env.BRANCH_NAME }}
31
+
32
+ - name : sync with main branch
33
+ run : |
34
+ git config user.name "GitHub Actions Bot"
35
+ git config user.email "<>"
36
+ git merge --no-commit --no-ff origin/main
37
+
38
+ - name : set deployment project version
39
+ run : echo "DEPLOYMENT_PROJECT_VERSION=$(bash ./environment/.deployment/scripts/version.sh --long)" >> $GITHUB_ENV
40
+
41
+ - name : set docker image name
42
+ run : echo "DOCKER_IMAGE_NAME=${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REGISTRY_PROJECT_NAME }}/${{ env.DOCKER_REGISTRY_REPO_NAME }}" >> $GITHUB_ENV
43
+
44
+ - name : fetch server secrets
45
+ uses : Infisical/secrets-action@v1.0.8
46
+ with :
47
+ domain : https://infisical.blumilk.pl
48
+ client-id : ${{ secrets.INFISICAL_MACHINE_IDENTITY_GHA_BOT_CLIENT_ID }}
49
+ client-secret : ${{ secrets.INFISICAL_MACHINE_IDENTITY_GHA_BOT_CLIENT_SECRET }}
50
+ project-slug : blumilk-infra-pv-ih
51
+ env-slug : infra
52
+ secret-path : /servers/ovh/ns31445530
53
+ export-type : env
54
+ recursive : true
55
+ include-imports : true
56
+
57
+ - name : set up Docker Buildx
58
+ uses : docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1
59
+
60
+ - name : login to Docker Registry
61
+ uses : docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
62
+ with :
63
+ registry : ${{ env.DOCKER_REGISTRY }}
64
+ username : ${{ env.DOCKER_REGISTRY_USER_NAME }}
65
+ password : ${{ env.HARBOR_ROBOT_BLUMILKBOT_TOKEN }} # masked secret fetched from Infisical
66
+
67
+ - name : set docker app database image name
68
+ run : echo "DOCKER_APP_DATABASE_IMAGE_NAME=${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REGISTRY_PROJECT_NAME }}/${{ env.DOCKER_REGISTRY_REPO_NAME }}-postgres" >> $GITHUB_ENV
69
+
70
+
71
+ - name : Docker meta for app database
72
+ id : meta-app-database
73
+ uses : docker/metadata-action@v5.5.1
74
+ with :
75
+ images : |
76
+ ${{ env.DOCKER_APP_DATABASE_IMAGE_NAME }}
77
+ tags : |
78
+ type=raw,value=dev
79
+ context : workflow
80
+
81
+ - name : build and push app database image
82
+ uses : docker/build-push-action@v5.1.0
83
+ with :
84
+ context : .
85
+ file : ./environment/.docker/postgres/Dockerfile
86
+ labels : ${{ steps.meta-app-database.outputs.labels }}
87
+ tags : ${{ steps.meta-app-database.outputs.tags }}
88
+ push : true
89
+ cache-from : type=gha, ref=${{ env.DOCKER_APP_DATABASE_IMAGE_NAME }}-dev-build-cache
90
+ cache-to : type=gha, ref=${{ env.DOCKER_APP_DATABASE_IMAGE_NAME }}-dev-build-cache, mode=max
91
+
92
+ - name : Docker meta for app
93
+ id : meta
94
+ uses : docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1
95
+ with :
96
+ images : ${{ env.DOCKER_IMAGE_NAME }}
97
+ tags : |
98
+ type=raw,value=dev
99
+ context : workflow
100
+
101
+ - name : build and push app image
102
+ uses : docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5.4.0
103
+ with :
104
+ context : .
105
+ file : ./environment/.docker/app/Dockerfile
106
+ target : production
107
+ build-args : |
108
+ DEPLOYMENT_PROJECT_VERSION_ARG=${{ env.DEPLOYMENT_PROJECT_VERSION }}
109
+ ENVIRONMENT=${{ env.ENVIRONMENT }}
110
+ labels : ${{ steps.meta.outputs.labels }}
111
+ tags : ${{ steps.meta.outputs.tags }}
112
+ push : true
113
+ cache-from : type=gha, ref=${{ env.DOCKER_IMAGE_NAME }}-dev-build-cache
114
+ cache-to : type=gha, ref=${{ env.DOCKER_IMAGE_NAME }}-dev-build-cache, mode=max
115
+
116
+ - name : set deployment path on server
117
+ run : echo "DEPLOYMENT_PATH_ON_SERVER=${{ env.TARGET_DIR_ON_SERVER }}/${{ env.DOCKER_REGISTRY_PROJECT_NAME }}/${{ env.DOCKER_REGISTRY_REPO_NAME }}" >> $GITHUB_ENV
118
+
119
+ - name : copy files via ssh
120
+ uses : appleboy/scp-action@917f8b81dfc1ccd331fef9e2d61bdc6c8be94634 # v0.1.7
121
+ with :
122
+ timeout : 10s
123
+ command_timeout : 10m
124
+ host : ${{ env.SERVER_OVH_NS31445530_IP }} # masked secret fetched from Infisical
125
+ port : ${{ env.SERVER_OVH_NS31445530_SSH_PORT }} # masked secret fetched from Infisical
126
+ username : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_NAME }} # masked secret fetched from Infisical
127
+ key : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_SSH_PRIVATE_KEY }} # masked secret fetched from Infisical
128
+ passphrase : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_SSH_PRIVATE_KEY_PASSPHRASE }} # masked secret fetched from Infisical
129
+ source : " ./environment/.deployment/dev/*,./environment/.deployment/Taskfile.yml"
130
+ target : ${{ env.DEPLOYMENT_PATH_ON_SERVER }}
131
+ rm : true
132
+
133
+
134
+ - name : fetch project deployment secrets
135
+ uses : Infisical/secrets-action@v1.0.8
136
+ with :
137
+ domain : https://infisical.blumilk.pl
138
+ client-id : ${{ secrets.INFISICAL_MACHINE_IDENTITY_GHA_BOT_CLIENT_ID }}
139
+ client-secret : ${{ secrets.INFISICAL_MACHINE_IDENTITY_GHA_BOT_CLIENT_SECRET }}
140
+ project-slug : lmt-d-hr8
141
+ env-slug : dev
142
+ secret-path : /deployment
143
+ export-type : env
144
+ recursive : false
145
+ include-imports : false
146
+
147
+ - name : run deployment script over ssh
148
+ uses : appleboy/ssh-action@v1.2.2
149
+ with :
150
+ timeout : 10s
151
+ command_timeout : 10m
152
+ host : ${{ env.SERVER_OVH_NS31445530_IP }} # masked secret fetched from Infisical
153
+ port : ${{ env.SERVER_OVH_NS31445530_SSH_PORT }} # masked secret fetched from Infisical
154
+ username : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_NAME }} # masked secret fetched from Infisical
155
+ key : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_SSH_PRIVATE_KEY }} # masked secret fetched from Infisical
156
+ passphrase : ${{ env.SERVER_OVH_NS31445530_BLUMILKBOT_USER_SSH_PRIVATE_KEY_PASSPHRASE }} # masked secret fetched from Infisical
157
+ # masked secrets from Infisical: HARBOR_ROBOT_BLUMILKBOT_TOKEN, SOPS_AGE_DEV_SECRET_KEY
158
+ script : |
159
+ cd ${{ env.DEPLOYMENT_PATH_ON_SERVER }}/environment/.deployment/
160
+ mv Taskfile.yml ${{ env.ENVIRONMENT }}/
161
+ cd ${{ env.ENVIRONMENT }}/
162
+ echo ${{ env.HARBOR_ROBOT_BLUMILKBOT_TOKEN }} | docker login ${{ env.DOCKER_REGISTRY }} --username ${{ env.DOCKER_REGISTRY_USER_NAME }} --password-stdin
163
+ export SOPS_AGE_KEY=${{ env.SOPS_AGE_DEV_SECRET_KEY }}
164
+ export ENVIRONMENT=${{ env.ENVIRONMENT }}
165
+ task deploy
166
+ docker images --filter dangling=true | grep "${{ env.DOCKER_IMAGE_NAME }}" | awk '{print $3}'| xargs --no-run-if-empty docker rmi
167
+ docker images --filter dangling=true | grep ${{ env.DOCKER_APP_DATABASE_IMAGE_NAME }} | awk '{print $3}'| xargs --no-run-if-empty docker rmi
168
+ docker logout ${{ env.DOCKER_REGISTRY }}
0 commit comments