From 74bd2a088442d0d3ee9672c5c35f9b74f51db122 Mon Sep 17 00:00:00 2001 From: Vince Grassia <593223+vgrassia@users.noreply.github.com> Date: Thu, 5 May 2022 12:18:42 -0400 Subject: [PATCH] Update build workflow and create QA Dockerfile --- .github/workflows/build.yml | 4 +- docker/Dockerfile-QA | 84 +++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 docker/Dockerfile-QA diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 16f0a3bd..9a5a70e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -218,7 +218,7 @@ jobs: run: | echo -e "\nBuilding Docker image" docker --version - docker build -t bitwarden/web . + docker build -t bitwarden/web -f docker/Dockerfile . - name: Tag rc branch if: github.ref == 'refs/heads/rc' @@ -340,7 +340,7 @@ jobs: echo -e "\nBuilding Docker image" docker --version - docker build -t bitwardenqa.azurecr.io/web . + docker build -t bitwardenqa.azurecr.io/web -f docker/Dockerfile-QA . - name: Get image tag id: image-tag diff --git a/docker/Dockerfile-QA b/docker/Dockerfile-QA new file mode 100644 index 00000000..6366b285 --- /dev/null +++ b/docker/Dockerfile-QA @@ -0,0 +1,84 @@ +############################################### +# Build stage # +############################################### +FROM node:16-slim AS node-build + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /source +COPY . . + +RUN npm ci +RUN npm run dist:oss:selfhost + +############################################### +# Build stage # +############################################### +FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS dotnet-build + +# Add packages +RUN apk add --update-cache \ + npm \ + && rm -rf /var/cache/apk/* + +# Copy csproj files as distinct layers +WORKDIR /source +COPY dotnet-src/Web/*.csproj ./src/Web/ +#COPY Directory.Build.props . + +# Restore project dependencies and tools +WORKDIR /source/src/Web +RUN dotnet restore + +# Copy required project files +WORKDIR /source +COPY dotnet-src/Web/. ./src/Web/ + +# Build app +WORKDIR /source/src/Web +RUN dotnet publish -c release -o /app --no-restore + +############################################### +# App stage # +############################################### +FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine +LABEL com.bitwarden.product="bitwarden" +LABEL com.bitwarden.project="web" +ENV ASPNETCORE_ENVIRONMENT=Production +ENV ASPNETCORE_URLS http://+:5000 +EXPOSE 5000 + +# Add packages +RUN apk add --update-cache \ + curl \ + && rm -rf /var/cache/apk/* + +# Create required directories +RUN mkdir -p /etc/bitwarden/web + +COPY docker/confd/app-id.toml /etc/confd/conf.d/ +COPY docker/confd/app-id.conf.tmpl /etc/confd/templates/ + +ADD https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 /usr/local/bin/confd +RUN chmod +x /usr/local/bin/confd + +# Copy Web server from dotnet-build stage +COPY --from=dotnet-build /app /server + +# Copy app from build stage +WORKDIR /app +COPY --from=node-build /source/build ./ + +# Copy entrypoint script and make it executable +COPY docker/entrypoint.sh / +RUN chmod +x /entrypoint.sh + +# Create non-root user to run app +RUN adduser -s /bin/false -D bitwarden && chown -R bitwarden:bitwarden /app /server /etc/bitwarden + +USER bitwarden:bitwarden +HEALTHCHECK CMD curl -f http://localhost:5000 || exit 1 +ENTRYPOINT ["/entrypoint.sh"]