10
10
- cron : " 0 12 1-7 * 2"
11
11
12
12
jobs :
13
+ docker-image-alpine :
14
+ strategy :
15
+ matrix :
16
+ version :
17
+ - alpine : 3.21
18
+ sqlcmd : " 17.10.1.1-1"
19
+ sqlcmd_minor : " 17.10"
20
+ sqlcmd_major : " 17"
21
+ msodbcsql_version : " 17.10.6.1-1"
22
+ msodbcsql_suffix : 17
23
+ download_url : " https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/"
24
+ latest : false
25
+ package_suffix : " "
26
+ package_path : " /opt/mssql-tools"
27
+ - alpine : 3.21
28
+ sqlcmd : " 18.2.1.1-1"
29
+ sqlcmd_minor : " 18.2"
30
+ sqlcmd_major : " "
31
+ msodbcsql_version : " 18.2.1.1-1"
32
+ msodbcsql_suffix : 18
33
+ download_url : " https://download.microsoft.com/download/1/f/f/1fffb537-26ab-4947-a46a-7a45c27f6f77/"
34
+ latest : false
35
+ package_suffix : " 18"
36
+ package_path : " /opt/mssql-tools18"
37
+ - alpine : 3.21
38
+ sqlcmd : " 18.4.1.1-1"
39
+ sqlcmd_minor : " 18.4"
40
+ sqlcmd_major : " 18"
41
+ msodbcsql_version : " 18.4.1.1-1"
42
+ msodbcsql_suffix : 18
43
+ download_url : " https://download.microsoft.com/download/7/6/d/76de322a-d860-4894-9945-f0cc5d6a45f8/"
44
+ latest : true # newest possible version available -> tag as latest alpine-latest
45
+ package_suffix : " 18"
46
+ package_path : " /opt/mssql-tools18"
47
+
48
+ env :
49
+ IMAGE_NAME_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}"
50
+ IMAGE_NAME_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}"
51
+ IMAGE_NAME_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}"
52
+ IMAGE_NAME_ALPINE_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-alpine${{ matrix.version.alpine }}"
53
+ IMAGE_NAME_ALPINE_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-alpine${{ matrix.version.alpine }}"
54
+ IMAGE_NAME_ALPINE_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-alpine${{ matrix.version.alpine }}"
55
+ IMAGE_LATEST : " fabiang/sqlcmd:latest"
56
+ IMAGE_LATEST_ALPINE : " fabiang/sqlcmd:alpine-latest"
57
+ IMAGE_LATEST_ALPINE_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-alpine"
58
+ IMAGE_LATEST_ALPINE_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-alpine"
59
+
60
+ runs-on : ubuntu-latest
61
+
62
+ name : " Sqlcmd v${{ matrix.version.sqlcmd }} (Alpine ${{ matrix.version.alpine }})"
63
+
64
+ steps :
65
+ - uses : actions/checkout@v3
66
+
67
+ - name : SQLServer Checksum
68
+ id : sqlserver-checksum
69
+ shell : bash
70
+ run : |
71
+ echo "checksum=$(curl --silent -L --header 'Accept: application/vnd.docker.distribution.manifest.v2+json' 'https://mcr.microsoft.com/v2/mssql/server/manifests/2022-latest' | jq -r '.config.digest')" >> $GITHUB_OUTPUT
72
+
73
+ - name : Cache Docker Image
74
+ id : docker-image-cache
75
+ uses : actions/cache@v3
76
+ with :
77
+ path : ' *.tar'
78
+ key : docker-image-cache-${{ runner.os }}-${{ steps.sqlserver-checksum.outputs.checksum }}
79
+
80
+ - name : Load SQLServer image
81
+ if : steps.docker-image-cache.outputs.cache-hit == 'true'
82
+ run : docker image load -i sqlserver.tar
83
+
84
+ - name : Run SQL Server
85
+ run : |
86
+ docker run \
87
+ --pull always \
88
+ -e 'ACCEPT_EULA=Y' \
89
+ -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' \
90
+ -p 1433:1433 \
91
+ -d \
92
+ --name SQLServer \
93
+ --rm \
94
+ mcr.microsoft.com/mssql/server:2022-latest
95
+
96
+ - name : Save SQLServer image
97
+ if : steps.docker-image-cache.outputs.cache-hit != 'true'
98
+ run : docker image save -o sqlserver.tar mcr.microsoft.com/mssql/server:2022-latest
99
+
100
+ -
uses :
satackey/[email protected]
101
+ continue-on-error : true
102
+
103
+ - name : Build Image
104
+ run : |
105
+ docker build -f alpine/Dockerfile \
106
+ -t '${{ env.IMAGE_NAME_FULL }}' \
107
+ -t '${{ env.IMAGE_NAME_ALPINE_FULL }}' \
108
+ '--build-arg=ALPINE_VERSION=${{ matrix.version.alpine }}' \
109
+ \
110
+ '--build-arg=MSSQLTOOLS_VERSION=${{ matrix.version.sqlcmd }}' \
111
+ '--build-arg=MSSQLTOOLS_SUFFIX=${{ matrix.version.package_suffix }}' \
112
+ '--build-arg=MSSQLTOOLS_PATH=${{ matrix.version.package_path }}' \
113
+ \
114
+ '--build-arg=MSODBCSQL_VERSION=${{ matrix.version.msodbcsql_version }}' \
115
+ '--build-arg=MSODBCSQL_SUFFIX=${{ matrix.version.msodbcsql_suffix }}' \
116
+ \
117
+ '--build-arg=MICROSOFT_DOWNLOAD_URL=${{ matrix.version.download_url }}' \
118
+ .
119
+
120
+ - name : Wait for SQLServer to become available
121
+
122
+ with :
123
+ resource : tcp:localhost:1433
124
+ timeout : 1800000
125
+ interval : 5000
126
+ log : true
127
+
128
+ - name : Test image
129
+ run : |
130
+ docker run -t --rm --entrypoint='' --network=host \
131
+ '${{ env.IMAGE_NAME_FULL }}' \
132
+ sqlcmd -b -C -S 127.0.0.1,1433 -U sa -P 'yourStrong(!)Password' -Q 'SELECT @@VERSION'
133
+
134
+ - name : Stop SQLServer
135
+ if : always()
136
+ run : docker stop SQLServer
137
+
138
+ - name : Tag Minor
139
+ if : " ${{ matrix.version.sqlcmd_minor != '' }}"
140
+ run : |
141
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MINOR }}'
142
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_ALPINE_MINOR }}'
143
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_ALPINE_MINOR }}'
144
+
145
+ - name : Tag Major
146
+ if : " ${{ matrix.version.sqlcmd_major != '' }}"
147
+ run : |
148
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MAJOR }}'
149
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_ALPINE_MAJOR }}'
150
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_ALPINE_MAJOR }}'
151
+
152
+ - name : Tag Latest
153
+ if : " ${{ matrix.version.latest == true }}"
154
+ run : |
155
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST }}'
156
+ docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_ALPINE }}'
157
+
158
+ - name : Docker Hub login
159
+ if : " ${{ github.ref == 'refs/heads/main' }}"
160
+ uses : azure/docker-login@v1
161
+ with :
162
+ username : ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
163
+ password : ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
164
+
165
+ - name : Push Image
166
+ if : " ${{ github.ref == 'refs/heads/main' }}"
167
+ run : |
168
+ docker push '${{ env.IMAGE_NAME_FULL }}'
169
+ docker push '${{ env.IMAGE_NAME_ALPINE_FULL }}'
170
+
171
+ - name : Push Image Minor
172
+ if : " ${{ matrix.version.sqlcmd_minor != '' && github.ref == 'refs/heads/main' }}"
173
+ run : |
174
+ docker push '${{ env.IMAGE_NAME_MINOR }}'
175
+ docker push '${{ env.IMAGE_NAME_ALPINE_MINOR }}'
176
+ docker push '${{ env.IMAGE_LATEST_ALPINE_MINOR }}'
177
+
178
+ - name : Push Image Major
179
+ if : " ${{ matrix.version.sqlcmd_major != '' && github.ref == 'refs/heads/main' }}"
180
+ run : |
181
+ docker push '${{ env.IMAGE_NAME_MAJOR }}'
182
+ docker push '${{ env.IMAGE_NAME_ALPINE_MAJOR }}'
183
+ docker push '${{ env.IMAGE_LATEST_ALPINE_MAJOR }}'
184
+
185
+ - name : Push Lastest
186
+ if : " ${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
187
+ run : |
188
+ docker push '${{ env.IMAGE_LATEST }}'
189
+ docker push '${{ env.IMAGE_LATEST_ALPINE }}'
190
+
13
191
docker-image-ubuntu :
14
192
strategy :
15
193
matrix :
24
202
- ubuntu : 22.04
25
203
sqlcmd : " 17.10.1.1-1"
26
204
sqlcmd_minor : " 17.10"
27
- sqlcmd_major : " 17 "
205
+ sqlcmd_major : " "
28
206
latest : false
29
207
package_suffix : " "
30
208
package_path : " /opt/mssql-tools"
@@ -39,18 +217,17 @@ jobs:
39
217
sqlcmd : " 18.4.1.1-1"
40
218
sqlcmd_minor : " 18.4"
41
219
sqlcmd_major : " 18"
42
- latest : true # newest possible version available -> tag as latest ubuntu-latest
220
+ latest : true
43
221
package_suffix : " 18"
44
222
package_path : " /opt/mssql-tools18"
45
223
46
224
env :
47
- IMAGE_NAME_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}"
48
- IMAGE_NAME_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}"
49
- IMAGE_NAME_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}"
225
+ IMAGE_NAME_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-ubuntu "
226
+ IMAGE_NAME_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu "
227
+ IMAGE_NAME_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu "
50
228
IMAGE_NAME_UBUNTU_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-ubuntu${{ matrix.version.ubuntu }}"
51
229
IMAGE_NAME_UBUNTU_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu${{ matrix.version.ubuntu }}"
52
230
IMAGE_NAME_UBUNTU_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu${{ matrix.version.ubuntu }}"
53
- IMAGE_LATEST : " fabiang/sqlcmd:latest"
54
231
IMAGE_LATEST_UBUNTU : " fabiang/sqlcmd:ubuntu-latest"
55
232
IMAGE_LATEST_UBUNTU_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu"
56
233
IMAGE_LATEST_UBUNTU_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu"
@@ -144,7 +321,6 @@ jobs:
144
321
- name : Tag Latest
145
322
if : " ${{ matrix.version.latest == true }}"
146
323
run : |
147
- docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST }}'
148
324
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU }}'
149
325
150
326
- name : Docker Hub login
@@ -157,7 +333,6 @@ jobs:
157
333
- name : Push Image
158
334
if : " ${{ github.ref == 'refs/heads/main' }}"
159
335
run : |
160
- docker push '${{ env.IMAGE_NAME_FULL }}'
161
336
docker push '${{ env.IMAGE_NAME_UBUNTU_FULL }}'
162
337
163
338
- name : Push Image Minor
@@ -177,5 +352,4 @@ jobs:
177
352
- name : Push Lastest
178
353
if : " ${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
179
354
run : |
180
- docker push '${{ env.IMAGE_LATEST }}'
181
355
docker push '${{ env.IMAGE_LATEST_UBUNTU }}'
0 commit comments