Skip to content

Commit e11feeb

Browse files
authored
Update docker.yml
1 parent 913c561 commit e11feeb

File tree

1 file changed

+181
-40
lines changed

1 file changed

+181
-40
lines changed

.github/workflows/docker.yml

Lines changed: 181 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,181 @@
1-
ARG UBUNTU_VERSION=22.04
2-
FROM ubuntu:$UBUNTU_VERSION
3-
4-
ARG MSSQLTOOLS_VERSION=18.2.1.1
5-
# Microsoft decided to have a suffix for newer versions of mssql-tools, e.g. mssql-tools18
6-
ARG MSSQLTOOLS_SUFFIX=18
7-
# and also the path changed on newer versions. It's a mess.
8-
ARG MSSQLTOOLS_PATH=/opt/mssql-tools18
9-
10-
ENV PATH=$MSSQLTOOLS_PATH/bin:$PATH
11-
12-
RUN apt-get -qqq update \
13-
&& apt-get install -y curl apt-transport-https locales gnupg2 \
14-
# Helper command to convert \r\n to \n,
15-
# since sqlcmd prints Windows line endings
16-
dos2unix \
17-
&& locale-gen "en_US.UTF-8" \
18-
\
19-
&& export `grep "VERSION_ID" /etc/os-release | sed -e 's/^VERSION_ID=\"/VERSION_ID=/' -e 's/\"$//'` \
20-
&& mkdir -p /usr/share/keyrings \
21-
&& curl --fail https://packages.microsoft.com/config/ubuntu/$VERSION_ID/prod.list \
22-
-o /tmp/microsoft-prod.list | \
23-
if ! grep -q "signed-by=" /tmp/microsoft-prod.list; then \
24-
sed -E 's#deb\s+\[#deb [signed-by=/usr/share/keyrings/microsoft-prod.gpg #; t; q1' | \
25-
fi \
26-
&& mv /tmp/microsoft-prod.list /etc/apt/sources.list.d/microsoft.list \
27-
&& cat /etc/apt/sources.list.d/microsoft.list \
28-
&& curl --fail https://packages.microsoft.com/keys/microsoft.asc | \
29-
gpg --verbose --yes --no-tty --batch --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \
30-
\
31-
&& apt-get -qqq update \
32-
&& ACCEPT_EULA=Y apt-get install -y mssql-tools$MSSQLTOOLS_SUFFIX=$MSSQLTOOLS_VERSION unixodbc-dev \
33-
&& apt-get remove -y curl apt-transport-https gnupg2 \
34-
&& rm -f /etc/apt/sources.list.d/msprod.list \
35-
&& rm -rf /var/lib/apt/lists/*
36-
37-
## should be set after locale was generated, overwise triggers warnings
38-
ENV LANG="en_US.UTF-8" LANGUAGE="en_US.UTF-8" LC_ALL="en_US.UTF-8"
39-
40-
ENTRYPOINT ["sqlcmd"]
1+
name: Docker Image
2+
3+
on:
4+
push:
5+
paths-ignore:
6+
- "README.md"
7+
- "LICENSE.md"
8+
pull_request:
9+
schedule:
10+
- cron: "0 12 1-7 * 2"
11+
12+
jobs:
13+
docker-image-ubuntu:
14+
strategy:
15+
matrix:
16+
version:
17+
- ubuntu: 18.04
18+
sqlcmd: "17.4.1.1-1"
19+
sqlcmd_minor: "17.4"
20+
sqlcmd_major: ""
21+
latest: false
22+
package_suffix: ""
23+
package_path: "/opt/mssql-tools"
24+
- ubuntu: 22.04
25+
sqlcmd: "17.10.1.1-1"
26+
sqlcmd_minor: "17.10"
27+
sqlcmd_major: "17"
28+
latest: false
29+
package_suffix: ""
30+
package_path: "/opt/mssql-tools"
31+
- ubuntu: 22.04
32+
sqlcmd: "18.2.1.1-1"
33+
sqlcmd_minor: "18.2"
34+
sqlcmd_major: ""
35+
latest: false
36+
package_suffix: "18"
37+
package_path: "/opt/mssql-tools18"
38+
- ubuntu: 24.04
39+
sqlcmd: "18.4.1.1-1"
40+
sqlcmd_minor: "18.4"
41+
sqlcmd_major: "18"
42+
latest: true # newest possible version available -> tag as latest ubuntu-latest
43+
package_suffix: "18"
44+
package_path: "/opt/mssql-tools18"
45+
46+
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 }}"
50+
IMAGE_NAME_UBUNTU_FULL: "fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-ubuntu${{ matrix.version.ubuntu }}"
51+
IMAGE_NAME_UBUNTU_MINOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu${{ matrix.version.ubuntu }}"
52+
IMAGE_NAME_UBUNTU_MAJOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu${{ matrix.version.ubuntu }}"
53+
IMAGE_LATEST: "fabiang/sqlcmd:latest"
54+
IMAGE_LATEST_UBUNTU: "fabiang/sqlcmd:ubuntu-latest"
55+
IMAGE_LATEST_UBUNTU_MINOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu"
56+
IMAGE_LATEST_UBUNTU_MAJOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu"
57+
58+
runs-on: ubuntu-latest
59+
60+
name: "Sqlcmd v${{ matrix.version.sqlcmd }} (Ubuntu ${{ matrix.version.ubuntu }})"
61+
62+
steps:
63+
- uses: actions/checkout@v3
64+
65+
- name: SQLServer Checksum
66+
id: sqlserver-checksum
67+
shell: bash
68+
run: |
69+
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
70+
71+
- name: Cache Docker Image
72+
id: docker-image-cache
73+
uses: actions/cache@v3
74+
with:
75+
path: '*.tar'
76+
key: docker-image-cache-${{ runner.os }}-${{ steps.sqlserver-checksum.outputs.checksum }}
77+
78+
- name: Load SQLServer image
79+
if: steps.docker-image-cache.outputs.cache-hit == 'true'
80+
run: docker image load -i sqlserver.tar
81+
82+
- name: Run SQL Server
83+
run: |
84+
docker run \
85+
--pull always \
86+
-e 'ACCEPT_EULA=Y' \
87+
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' \
88+
-p 1433:1433 \
89+
-d \
90+
--name SQLServer \
91+
--rm \
92+
mcr.microsoft.com/mssql/server:2022-latest
93+
94+
- name: Save SQLServer image
95+
if: steps.docker-image-cache.outputs.cache-hit != 'true'
96+
run: docker image save -o sqlserver.tar mcr.microsoft.com/mssql/server:2022-latest
97+
98+
- uses: satackey/[email protected]
99+
continue-on-error: true
100+
101+
- name: Build Image
102+
run: |
103+
docker build -f ubuntu/Dockerfile \
104+
-t '${{ env.IMAGE_NAME_FULL }}' \
105+
-t '${{ env.IMAGE_NAME_UBUNTU_FULL }}' \
106+
'--build-arg=UBUNTU_VERSION=${{ matrix.version.ubuntu }}' \
107+
'--build-arg=MSSQLTOOLS_VERSION=${{ matrix.version.sqlcmd }}' \
108+
'--build-arg=MSSQLTOOLS_SUFFIX=${{ matrix.version.package_suffix }}' \
109+
'--build-arg=MSSQLTOOLS_PATH=${{ matrix.version.package_path }}' \
110+
.
111+
112+
- name: Wait for SQLServer to become available
113+
uses: iFaxity/[email protected]
114+
with:
115+
resource: tcp:localhost:1433
116+
timeout: 1800000
117+
interval: 5000
118+
log: true
119+
120+
- name: Test image
121+
run: |
122+
docker run -t --rm --entrypoint='' --network=host \
123+
'${{ env.IMAGE_NAME_FULL }}' \
124+
sqlcmd -b -C -S 127.0.0.1,1433 -U sa -P 'yourStrong(!)Password' -Q 'SELECT @@VERSION'
125+
126+
- name: Stop SQLServer
127+
if: always()
128+
run: docker stop SQLServer
129+
130+
- name: Tag Minor
131+
if: "${{ matrix.version.sqlcmd_minor != '' }}"
132+
run: |
133+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MINOR }}'
134+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_UBUNTU_MINOR }}'
135+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU_MINOR }}'
136+
137+
- name: Tag Major
138+
if: "${{ matrix.version.sqlcmd_major != '' }}"
139+
run: |
140+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MAJOR }}'
141+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_UBUNTU_MAJOR }}'
142+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU_MAJOR }}'
143+
144+
- name: Tag Latest
145+
if: "${{ matrix.version.latest == true }}"
146+
run: |
147+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST }}'
148+
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU }}'
149+
150+
- name: Docker Hub login
151+
if: "${{ github.ref == 'refs/heads/main' }}"
152+
uses: azure/docker-login@v1
153+
with:
154+
username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
155+
password: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
156+
157+
- name: Push Image
158+
if: "${{ github.ref == 'refs/heads/main' }}"
159+
run: |
160+
docker push '${{ env.IMAGE_NAME_FULL }}'
161+
docker push '${{ env.IMAGE_NAME_UBUNTU_FULL }}'
162+
163+
- name: Push Image Minor
164+
if: "${{ matrix.version.sqlcmd_minor != '' && github.ref == 'refs/heads/main' }}"
165+
run: |
166+
docker push '${{ env.IMAGE_NAME_MINOR }}'
167+
docker push '${{ env.IMAGE_NAME_UBUNTU_MINOR }}'
168+
docker push '${{ env.IMAGE_LATEST_UBUNTU_MINOR }}'
169+
170+
- name: Push Image Major
171+
if: "${{ matrix.version.sqlcmd_major != '' && github.ref == 'refs/heads/main' }}"
172+
run: |
173+
docker push '${{ env.IMAGE_NAME_MAJOR }}'
174+
docker push '${{ env.IMAGE_NAME_UBUNTU_MAJOR }}'
175+
docker push '${{ env.IMAGE_LATEST_UBUNTU_MAJOR }}'
176+
177+
- name: Push Lastest
178+
if: "${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
179+
run: |
180+
docker push '${{ env.IMAGE_LATEST }}'
181+
docker push '${{ env.IMAGE_LATEST_UBUNTU }}'

0 commit comments

Comments
 (0)