diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a607921..245f6c1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -18,10 +18,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - name: Log in to Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -29,7 +29,7 @@ jobs: - name: Extract metadata for Docker id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | @@ -38,10 +38,10 @@ jobs: type=raw,value=latest,enable=${{ !contains(github.ref, '-alpha') && !contains(github.ref, '-beta') && !contains(github.ref, '-rc') }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 - name: Build and push Docker image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 with: context: . push: true diff --git a/Dockerfile b/Dockerfile index cc6dc58..5d27b9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ # Stage 1: Builder -FROM python:3.14-slim AS builder +FROM python:3.14-slim@sha256:3955a7dd66ccf92b68d0232f7f86d892eaf75255511dc7e98961bdc990dc6c9b AS builder # Install uv -COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv +COPY --from=ghcr.io/astral-sh/uv:latest@sha256:15f68a476b768083505fe1dbfcc998344d0135f0ca1b8465c4760b323904f05a /uv /usr/local/bin/uv WORKDIR /app @@ -20,7 +20,7 @@ RUN uv sync --frozen --no-dev # Stage 2: Runtime -FROM python:3.14-slim +FROM python:3.14-slim@sha256:3955a7dd66ccf92b68d0232f7f86d892eaf75255511dc7e98961bdc990dc6c9b # Create non-root user RUN useradd --create-home --shell /bin/bash appuser diff --git a/deploy/prod/docker-compose.yml b/deploy/prod/docker-compose.yml index 3a0c805..9df80af 100644 --- a/deploy/prod/docker-compose.yml +++ b/deploy/prod/docker-compose.yml @@ -1,7 +1,7 @@ # Production environment services: grist-mcp: - image: ghcr.io/xe138/grist-mcp-server:latest + image: ghcr.io/xe138/grist-mcp-server:latest@sha256:46be446d3d3b04fcbcb9b4e4214a7e9ec4d172e7a161f533d300448c181c9818 ports: - "${PORT:-3000}:3000" volumes: diff --git a/tests/integration/mock_grist/Dockerfile b/tests/integration/mock_grist/Dockerfile index 96017d9..9b3641e 100644 --- a/tests/integration/mock_grist/Dockerfile +++ b/tests/integration/mock_grist/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.14-slim +FROM python:3.14-slim@sha256:3955a7dd66ccf92b68d0232f7f86d892eaf75255511dc7e98961bdc990dc6c9b WORKDIR /app