Skip to content

Docker Image

Docker Image #238

Workflow file for this run

name: Docker Image
on:
push:
paths-ignore:
- "README.md"
- "LICENSE.md"
pull_request:
schedule:
- cron: "0 12 1-7 * 2"
jobs:
docker-image-ubuntu:
strategy:
matrix:
version:
- ubuntu: 18.04
sqlcmd: "17.4.1.1-1"
sqlcmd_minor: "17.4"
sqlcmd_major: ""
latest: false
package_suffix: ""
package_path: "/opt/mssql-tools"
- ubuntu: 22.04
sqlcmd: "17.10.1.1-1"
sqlcmd_minor: "17.10"
sqlcmd_major: "17"
latest: false
package_suffix: ""
package_path: "/opt/mssql-tools"
- ubuntu: 22.04
sqlcmd: "18.2.1.1-1"
sqlcmd_minor: "18.2"
sqlcmd_major: "18"
latest: true # newest possible version available -> tag as latest ubuntu-latest
package_suffix: "18"
package_path: "/opt/mssql-tools18"
env:
IMAGE_NAME_FULL: "fabiang/sqlcmd:${{ matrix.version.sqlcmd }}"
IMAGE_NAME_MINOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}"
IMAGE_NAME_MAJOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}"
IMAGE_NAME_UBUNTU_FULL: "fabiang/sqlcmd:${{ matrix.version.sqlcmd }}-ubuntu${{ matrix.version.ubuntu }}"
IMAGE_NAME_UBUNTU_MINOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu${{ matrix.version.ubuntu }}"
IMAGE_NAME_UBUNTU_MAJOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu${{ matrix.version.ubuntu }}"
IMAGE_LATEST: "fabiang/sqlcmd:latest"
IMAGE_LATEST_UBUNTU: "fabiang/sqlcmd:ubuntu-latest"
IMAGE_LATEST_UBUNTU_MINOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_minor }}-ubuntu"
IMAGE_LATEST_UBUNTU_MAJOR: "fabiang/sqlcmd:${{ matrix.version.sqlcmd_major }}-ubuntu"
runs-on: ubuntu-latest
name: "Sqlcmd v${{ matrix.version.sqlcmd }} (Ubuntu ${{ matrix.version.ubuntu }})"
steps:
- uses: actions/checkout@v3
- name: SQLServer Checksum
id: sqlserver-checksum
shell: bash
run: |
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
- name: Cache Docker Image
id: docker-image-cache
uses: actions/cache@v3
with:
path: '*.tar'
key: docker-image-cache-${{ runner.os }}-${{ steps.sqlserver-checksum.outputs.checksum }}
- name: Load SQLServer image
if: steps.docker-image-cache.outputs.cache-hit == 'true'
run: docker image load -i sqlserver.tar
- name: Run SQL Server
run: |
docker run \
--pull always \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' \
-p 1433:1433 \
-d \
--name SQLServer \
--rm \
mcr.microsoft.com/mssql/server:2022-latest
- name: Save SQLServer image
if: steps.docker-image-cache.outputs.cache-hit != 'true'
run: docker image save -o sqlserver.tar mcr.microsoft.com/mssql/server:2022-latest
- uses: satackey/[email protected]
continue-on-error: true
- name: Build Image
run: |
docker build -f ubuntu/Dockerfile \
-t '${{ env.IMAGE_NAME_FULL }}' \
-t '${{ env.IMAGE_NAME_UBUNTU_FULL }}' \
'--build-arg=UBUNTU_VERSION=${{ matrix.version.ubuntu }}' \
'--build-arg=MSSQLTOOLS_VERSION=${{ matrix.version.sqlcmd }}' \
'--build-arg=MSSQLTOOLS_SUFFIX=${{ matrix.version.package_suffix }}' \
'--build-arg=MSSQLTOOLS_PATH=${{ matrix.version.package_path }}' \
.
- name: Wait for SQLServer to become available
uses: iFaxity/[email protected]
with:
resource: tcp:localhost:1433
timeout: 1800000
interval: 5000
log: true
- name: Test image
run: |
docker run -t --rm --entrypoint='' --network=host \
'${{ env.IMAGE_NAME_FULL }}' \
sqlcmd -b -C -S 127.0.0.1,1433 -U sa -P 'yourStrong(!)Password' -Q 'SELECT @@VERSION'
- name: Stop SQLServer
if: always()
run: docker stop SQLServer
- name: Tag Minor
if: "${{ matrix.version.sqlcmd_minor != '' }}"
run: |
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MINOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_UBUNTU_MINOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU_MINOR }}'
- name: Tag Major
if: "${{ matrix.version.sqlcmd_major != '' }}"
run: |
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_MAJOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_NAME_UBUNTU_MAJOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU_MAJOR }}'
- name: Tag Latest
if: "${{ matrix.version.latest == true }}"
run: |
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_UBUNTU }}'
- name: Docker Hub login
if: "${{ github.ref == 'refs/heads/main' }}"
uses: azure/docker-login@v1
with:
username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
password: ${{ secrets.CONTAINER_REGISTRY_PASSWORD }}
- name: Push Image
if: "${{ github.ref == 'refs/heads/main' }}"
run: |
docker push '${{ env.IMAGE_NAME_FULL }}'
docker push '${{ env.IMAGE_NAME_UBUNTU_FULL }}'
- name: Push Image Minor
if: "${{ matrix.version.sqlcmd_minor != '' && github.ref == 'refs/heads/main' }}"
run: |
docker push '${{ env.IMAGE_NAME_MINOR }}'
docker push '${{ env.IMAGE_NAME_UBUNTU_MINOR }}'
docker push '${{ env.IMAGE_LATEST_UBUNTU_MINOR }}'
- name: Push Image Major
if: "${{ matrix.version.sqlcmd_major != '' && github.ref == 'refs/heads/main' }}"
run: |
docker push '${{ env.IMAGE_NAME_MAJOR }}'
docker push '${{ env.IMAGE_NAME_UBUNTU_MAJOR }}'
docker push '${{ env.IMAGE_LATEST_UBUNTU_MAJOR }}'
- name: Push Lastest
if: "${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
run: |
docker push '${{ env.IMAGE_LATEST }}'
docker push '${{ env.IMAGE_LATEST_UBUNTU }}'