diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5d54ca6..90158a1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -403,3 +403,42 @@ jobs: GHCR_PASSWORD: ${{ secrets.GHCR_PASSWORD }} DOCKER_CLI_EXPERIMENTAL: enabled DOCKER_BUILD_PLATFORM: linux/amd64,linux/arm64,linux/arm/v7,linux/s390x,linux/ppc64le + + build-docker-windows: + needs: + - csi-sanity-synology-dsm6 + - csi-sanity-synology-dsm7 + - csi-sanity-truenas-scale-22_02 + - csi-sanity-truenas-core-12_0 + - csi-sanity-truenas-core-13_0 + - csi-sanity-zfs-generic + - csi-sanity-client + - csi-sanity-zfs-local + - csi-sanity-local-hostpath + - csi-sanity-windows-node + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-2019, windows-2022] + include: + - os: windows-2019 + base_tag: ltsc2019 + file: Dockerfile.Windows + - os: windows-2022 + base_tag: ltsc2022 + file: Dockerfile.Windows + steps: + - uses: actions/checkout@v2 + - name: docker build + shell: bash + run: | + docker info + docker build --pull -f ${{ matrix.file }} --build-arg BASE_TAG=${{ matrix.base_tag }} -t windows:${{ matrix.base_tag }} . + docker inspect windows:${{ matrix.base_tag }} + docker save windows:${{ matrix.base_tag }} -o windows-${{ matrix.base_tag }}.tar + - name: upload image tar + uses: actions/upload-artifact@v2 + with: + name: windows-${{ matrix.base_tag }}.tar + path: windows-${{ matrix.base_tag }}.tar + retention-days: 7 diff --git a/Dockerfile b/Dockerfile index 82349b4..a1bba72 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 ENV LANG=en_US.utf8 -ENV NODE_VERSION=v16.14.2 +ENV NODE_VERSION=v16.15.0 ENV NODE_ENV=production # install build deps @@ -73,7 +73,7 @@ COPY --from=build /usr/local/lib/nodejs/bin/node /usr/local/bin/node # netbase is required by rpcbind/rpcinfo to work properly # /etc/{services,rpc} are required RUN apt-get update && \ - apt-get install -y netbase socat e2fsprogs xfsprogs btrfs-progs fatresize dosfstools nfs-common cifs-utils sudo rsync && \ + apt-get install -y netbase socat e2fsprogs exfatprogs xfsprogs btrfs-progs fatresize dosfstools ntfs-3g nfs-common cifs-utils fdisk gdisk cloud-guest-utils sudo rsync && \ rm -rf /var/lib/apt/lists/* # controller requirements diff --git a/Dockerfile.Windows b/Dockerfile.Windows new file mode 100644 index 0000000..038b283 --- /dev/null +++ b/Dockerfile.Windows @@ -0,0 +1,73 @@ +# docker build --build-arg BASE_TAG=ltsc2019 -t foobar -f Dockerfile.Windows . +# docker run --rm -ti --entrypoint powershell foobar + + +# mcr.microsoft.com/windows/servercore:ltsc2019 +# mcr.microsoft.com/windows/nanoserver:1809 + +ARG BASE_TAG + +FROM mcr.microsoft.com/windows/servercore:${BASE_TAG} as build + +SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] + +#ENV GPG_VERSION 4.0.2 +ENV GPG_VERSION 2.3.4 + +RUN Invoke-WebRequest $('https://files.gpg4win.org/gpg4win-vanilla-{0}.exe' -f $env:GPG_VERSION) -OutFile 'gpg4win.exe' -UseBasicParsing ; \ + Start-Process .\gpg4win.exe -ArgumentList '/S' -NoNewWindow -Wait + +# https://github.com/nodejs/node#release-keys +RUN @( \ + '4ED778F539E3634C779C87C6D7062848A1AB005C', \ + '141F07595B7B3FFE74309A937405533BE57C7D57', \ + '94AE36675C464D64BAFA68DD7434390BDBE9B9C5', \ + '74F12602B6F1C4E913FAA37AD3A89613643B6201', \ + '71DCFD284A79C3B38668286BC97EC7A07EDE3FC1', \ + '61FC681DFB92A079F1685E77973F295594EC4689', \ + '8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600', \ + 'C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8', \ + 'C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C', \ + 'DD8F2338BAE7501E3DD5AC78C273792F7D83545D', \ + 'A48C2BEE680E841632CD4E44F07496B3EB3C1762', \ + '108F52B48DB57BB0CC439B2997B01419BD92F80A', \ + 'B9E2F5981AA6E0CD28160D9FF13993A75599653C' \ + ) | foreach { \ + gpg --keyserver hkps://keys.openpgp.org --recv-keys $_ ; \ + } + +ENV NODE_VERSION 16.15.0 + +RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/SHASUMS256.txt.asc' -f $env:NODE_VERSION) -OutFile 'SHASUMS256.txt.asc' -UseBasicParsing ; +#RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/SHASUMS256.txt.asc' -f $env:NODE_VERSION) -OutFile 'SHASUMS256.txt.asc' -UseBasicParsing ; \ +# gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc +#gpg --verify SHASUMS256.txt.sig SHASUMS256.txt + +RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/node-v{0}-win-x64.zip' -f $env:NODE_VERSION) -OutFile 'node.zip' -UseBasicParsing ; \ + $sum = $(cat SHASUMS256.txt.asc | sls $(' node-v{0}-win-x64.zip' -f $env:NODE_VERSION)) -Split ' ' ; \ + if ((Get-FileHash node.zip -Algorithm sha256).Hash -ne $sum[0]) { Write-Error 'SHA256 mismatch' } ; \ + Expand-Archive node.zip -DestinationPath C:\ ; \ + Rename-Item -Path $('C:\node-v{0}-win-x64' -f $env:NODE_VERSION) -NewName 'C:\nodejs' + +#RUN setx /M PATH "%PATH%;C:\nodejs" +RUN setx /M PATH $(${Env:PATH} + \";C:\nodejs\") + +RUN node --version; npm --version; + +RUN mkdir /app +WORKDIR /app + +COPY package*.json ./ +RUN npm install --only=production; ls / +COPY . . + +FROM mcr.microsoft.com/windows/servercore:${BASE_TAG} + +LABEL org.opencontainers.image.source https://github.com/democratic-csi/democratic-csi + +COPY --from=build /nodejs/node.exe /Windows/system32 +COPY --from=build /app /app + +WORKDIR /app + +ENTRYPOINT [ "node.exe", "--expose-gc", "bin/democratic-csi" ]