diff --git a/.github/workflows/PrValidation.yml b/.github/workflows/PrValidation.yml index 3519a68f0..88ad51818 100644 --- a/.github/workflows/PrValidation.yml +++ b/.github/workflows/PrValidation.yml @@ -413,6 +413,19 @@ jobs: docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-queue -v docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-table -v + Azurite_Windows_Docker: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - run: npm ci --legacy-peer-deps + - run: npm run docker:build-windows + - name: Validate docker image + run: | + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-blob -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-queue -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-table -v + Azurite_ExeTest: runs-on: windows-latest steps: diff --git a/ChangeLog.md b/ChangeLog.md index 167f01c02..afba0aec0 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -7,6 +7,7 @@ General: - Changed the responds status code of not implemented API from 500 to 501. +- Added support for docker image based on Windows Base Image. Blob: diff --git a/Dockerfile.Windows b/Dockerfile.Windows new file mode 100644 index 000000000..1d3250e63 --- /dev/null +++ b/Dockerfile.Windows @@ -0,0 +1,75 @@ +# +# Base-Node +# +FROM mcr.microsoft.com/windows/servercore:ltsc2022-amd64 AS nodewindows +# Install dependencies first +RUN mkdir c:\node +WORKDIR c:\\node + +RUN curl.exe -o Node.zip https://nodejs.org/dist/v22.12.0/node-v22.12.0-win-x64.zip +RUN tar -xf Node.zip -C c:\node +RUN del Node.zip + +USER ContainerAdministrator +RUN setx /M PATH "%PATH%;C:\Node\node-v22.12.0-win-x64" +USER ContainerUser + +# +# Builder +# +FROM nodewindows AS builder + +RUN mkdir c:\azurite +WORKDIR c:\\azurite + +COPY *.json LICENSE NOTICE.txt ./ + +# Copy the source code and build the app +COPY src ./src +COPY tests ./tests +RUN npm ci --unsafe-perm +RUN npm run build && \ + npm install -g --unsafe-perm --loglevel verbose + + +# +# Production image +# +FROM nodewindows + +ENV NODE_ENV=productions + +RUN mkdir c:\azurite +WORKDIR c:\\azurite + +# Default Workspace Volume +VOLUME [ "c:/data" ] + +COPY package*.json ./ +COPY LICENSE ./ +COPY NOTICE.txt ./ + +COPY --from=builder c:/azurite/dist/ dist/ + +USER ContainerAdministrator +RUN icacls c:\azurite /grant "Authenticated Users":(OI)(CI)M +USER ContainerUser + +RUN npm pkg set scripts.prepare="echo no-prepare" + +RUN npm ci --unsafe-perm + +RUN npm install -g --unsafe-perm --loglevel verbose + +# Blob Storage Port +EXPOSE 10000 +# Queue Storage Port +EXPOSE 10001 +# Table Storage Port +EXPOSE 10002 + +ENTRYPOINT "cmd.exe /S /C" + +WORKDIR C:\\Node\\node-v22.12.0-win-x64\\ + +CMD azurite -l c:/data --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8e192fa02..5a1de315c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -548,6 +548,29 @@ jobs: workingDirectory: "./" displayName: "Validate docker image" + - job: dockerwindows + displayName: Docker Windows Build + pool: + vmImage: "windows-latest" + steps: + - script: | + npm ci --legacy-peer-deps + workingDirectory: "./" + displayName: "npm ci --legacy-peer-deps" + + - script: | + npm run docker:build-windows + workingDirectory: "./" + displayName: "Build docker image" + + - script: | + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite" -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-blob" -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-queue" -v + docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-table" -v + workingDirectory: "./" + displayName: "Validate docker image" + - job: governance displayName: Component Governance Component Detection pool: diff --git a/package.json b/package.json index 828b12ec4..28b7bdd6f 100644 --- a/package.json +++ b/package.json @@ -275,16 +275,20 @@ "vscode:pack": "vsce package", "docker:prebuild": "echo skip", "docker:build": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:latest", + "docker:build-windows": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:latest", "docker:build:internal": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/internal/azure-storage/azurite:latest", + "docker:build-windows:internal": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/internal/azure-storage/azurite:latest", "docker:publish": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version", "docker:publish:internal": "cross-var docker push xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version", "docker:init-multi-platform-builder": "docker buildx create --name multi-platform-builder --use", "docker:build-amd64": "cross-var docker buildx build --platform linux/amd64 --load --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 .", + "docker:build-windows-amd64": "cross-var docker buildx build --platform windows/amd64 --load --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 .", "docker:build-arm64": "cross-var docker buildx build --platform linux/arm64 --load --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64 .", "docker:publish-amd64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64", + "docker:publish-windows-amd64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64", "docker:publish-arm64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64", - "docker:create-manifest-versioned": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64", - "docker:create-manifest-latest": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:latest xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64", + "docker:create-manifest-versioned": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64", + "docker:create-manifest-latest": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:latest xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64", "docker:publish-manifest-versioned": "cross-var docker manifest push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version", "docker:publish-manifest-latest": "cross-var docker manifest push xstoreazurite.azurecr.io/public/azure-storage/azurite:latest", "prepare": "npm run build",