1010 - cron : " 0 12 1-7 * 2"
1111
1212jobs :
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/action-docker-layer-caching@v0.0.11
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+ uses : iFaxity/wait-on-action@v1.1.0
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+
13191 docker-image-ubuntu :
14192 strategy :
15193 matrix :
24202 - ubuntu : 22.04
25203 sqlcmd : " 17.10.1.1-1"
26204 sqlcmd_minor : " 17.10"
27- sqlcmd_major : " 17 "
205+ sqlcmd_major : " "
28206 latest : false
29207 package_suffix : " "
30208 package_path : " /opt/mssql-tools"
@@ -39,18 +217,17 @@ jobs:
39217 sqlcmd : " 18.4.1.1-1"
40218 sqlcmd_minor : " 18.4"
41219 sqlcmd_major : " 18"
42- latest : true # newest possible version available -> tag as latest ubuntu-latest
220+ latest : true
43221 package_suffix : " 18"
44222 package_path : " /opt/mssql-tools18"
45223
46224 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 "
50228 IMAGE_NAME_UBUNTU_FULL : " fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-ubuntu${{ matrix.version.ubuntu }}"
51229 IMAGE_NAME_UBUNTU_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu${{ matrix.version.ubuntu }}"
52230 IMAGE_NAME_UBUNTU_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu${{ matrix.version.ubuntu }}"
53- IMAGE_LATEST : " fabiang/sqlcmd:latest"
54231 IMAGE_LATEST_UBUNTU : " fabiang/sqlcmd:ubuntu-latest"
55232 IMAGE_LATEST_UBUNTU_MINOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu"
56233 IMAGE_LATEST_UBUNTU_MAJOR : " fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu"
@@ -144,7 +321,6 @@ jobs:
144321 - name : Tag Latest
145322 if : " ${{ matrix.version.latest == true }}"
146323 run : |
147- docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST }}'
148324 docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU }}'
149325
150326 - name : Docker Hub login
@@ -157,7 +333,6 @@ jobs:
157333 - name : Push Image
158334 if : " ${{ github.ref == 'refs/heads/main' }}"
159335 run : |
160- docker push '${{ env.IMAGE_NAME_FULL }}'
161336 docker push '${{ env.IMAGE_NAME_UBUNTU_FULL }}'
162337
163338 - name : Push Image Minor
@@ -177,5 +352,4 @@ jobs:
177352 - name : Push Lastest
178353 if : " ${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
179354 run : |
180- docker push '${{ env.IMAGE_LATEST }}'
181355 docker push '${{ env.IMAGE_LATEST_UBUNTU }}'
0 commit comments