Skip to content

Docker Image

Docker Image #281

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-alpine:
strategy:
matrix:
version:
- sqlcmd: "1.1.0"
sqlcmd_minor: "1.1"
sqlcmd_major: ""
sha256: "ba229790512c92dba2748be2901b6daf356ae7c93c2d874b6104851b29dbcaf2"
latest: false
- sqlcmd: "1.2.0"
sqlcmd_minor: ""
sqlcmd_major: ""
sha256: "bd14fecd5cd2fd4f76e3fcfe5dcafb3ee814e601e7038893b8785cd0f46adf9c"
latest: false
- sqlcmd: "1.2.1"
sqlcmd_minor: "1.2"
sqlcmd_major: ""
sha256: "78da537e96c2e2279b9cf86bdfc3ec9c7819ae8f66fdcefc8b5f3b4f40dee977"
latest: false
- sqlcmd: "1.3.0"
sqlcmd_minor: "1.3"
sqlcmd_major: ""
sha256: "cf37af5d02bdf43087f9df2cdf2785412e3bf4279f6a5c2846f5b5f59c31bfec"
latest: false
- sqlcmd: "1.4.0"
sqlcmd_minor: "1.4"
sqlcmd_major: ""
sha256: "5d2264a9e867d698172a6b02a7c816d6a8b9aa1a9e8cbbcf94b50866efcbb830"
latest: false
- sqlcmd: "1.5.0"
sqlcmd_minor: "1.5"
sqlcmd_major: ""
sha256: "79ee0bc5ca6778c2a5bac2a54774b986ea1794855f842de8322276c7ca0f2a0c"
latest: false
- sqlcmd: "1.6.0"
sqlcmd_minor: "1.6"
sqlcmd_major: ""
sha256: "39454d1b1307e40e9fe607d3fec53ad1b1f6d2a868b126b971c705c976d24184"
latest: false
- sqlcmd: "1.7.0"
sqlcmd_minor: "1.7"
sqlcmd_major: ""
sha256: "a390146de7e9521b983084d3d33707fed0bac59d557b6da5ee821c65789b7abb"
latest: false
- sqlcmd: 1.8.0
sqlcmd_major: ""
sqlcmd_minor: ""
sha256: 97026215948999c107ee3a1d1f109fbf77a733e39aebb4b17219d47e73e7fac4
latest: false
- sqlcmd: 1.8.2
sqlcmd_major: "1"
sqlcmd_minor: "1.8"
sha256: 4e97bf4ea6b00a43469156bde3ee91a622deed543b02b9b5dae3fa5565f6fea5
latest: true
env:
IMAGE_NAME_FULL: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd }}"
IMAGE_NAME_MINOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_minor }}"
IMAGE_NAME_MAJOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_major }}"
IMAGE_NAME_ALPINE_FULL: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd }}-alpine${{ matrix.version.alpine }}"
IMAGE_NAME_ALPINE_MINOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_minor }}-alpine${{ matrix.version.alpine }}"
IMAGE_NAME_ALPINE_MAJOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_major }}-alpine${{ matrix.version.alpine }}"
IMAGE_LATEST: "fabiang/go-sqlcmd:latest"
IMAGE_LATEST_ALPINE: "fabiang/go-sqlcmd:alpine-latest"
IMAGE_LATEST_ALPINE_MINOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_minor }}-alpine"
IMAGE_LATEST_ALPINE_MAJOR: "fabiang/go-sqlcmd:${{ matrix.version.sqlcmd_major }}-alpine"
runs-on: ubuntu-latest
name: "Sqlcmd v${{ matrix.version.sqlcmd }}"
steps:
- uses: actions/checkout@v4
- 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
- uses: satackey/[email protected]
continue-on-error: true
- name: Build Image
run: |
docker build -f alpine/Dockerfile \
-t '${{ env.IMAGE_NAME_FULL }}' \
-t '${{ env.IMAGE_NAME_ALPINE_FULL }}' \
'--build-arg=GO_SQLCMD_VERSION=${{ matrix.version.sqlcmd }}' \
'--build-arg=GO_SQLCMD_SHA256=${{ matrix.version.sha256 }}' \
.
- name: Wait for SQLServer to become available
uses: iFaxity/wait-on-action@v1
with:
resource: tcp:localhost:1433
timeout: 1800000
interval: 5000
log: true
- name: Test image
run: |
docker run -t --rm --entrypoint='' --network=host \
-e "SQLCMDPASSWORD=$SQLCMDPASSWORD" \
'${{ env.IMAGE_NAME_FULL }}' \
sqlcmd -b -C -S 127.0.0.1,1433 -U sa -Q 'SELECT @@VERSION'
env:
SQLCMDPASSWORD: "yourStrong(!)Password"
- name: Stop SQLServer
if: always()
run: docker stop SQLServer
- 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
- 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_ALPINE_MINOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_ALPINE_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_ALPINE_MAJOR }}'
docker tag '${{ env.IMAGE_NAME_FULL }}' '${{ env.IMAGE_LATEST_ALPINE_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_ALPINE }}'
- name: Docker Hub login
if: "${{ github.ref == 'refs/heads/main' }}"
uses: azure/docker-login@v2
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_ALPINE_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_ALPINE_MINOR }}'
docker push '${{ env.IMAGE_LATEST_ALPINE_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_ALPINE_MAJOR }}'
docker push '${{ env.IMAGE_LATEST_ALPINE_MAJOR }}'
- name: Push Latest
if: "${{ matrix.version.latest == true && github.ref == 'refs/heads/main' }}"
run: |
docker push '${{ env.IMAGE_LATEST }}'
docker push '${{ env.IMAGE_LATEST_ALPINE }}'