diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index b38c8e6..3e48a06 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -6,11 +6,7 @@ on: jobs: docker: name: Build Docker image - - strategy: - matrix: - arch: ['amd64', 'arm64'] - + runs-on: ubuntu-latest steps: - @@ -39,7 +35,7 @@ jobs: with: context: . file: docker/Dockerfile.${{ matrix.arch }} - platforms: linux/${{ matrix.arch }} + platforms: linux/amd64,linux/arm64 push: ${{ github.ref == 'refs/heads/dev' }} tags: ${{ secrets.REGISTRY_URL }}/west/telegram-bot:latest, ${{ secrets.REGISTRY_URL }}/west/telegram-bot:${{ steps.commit_sha.outputs.sha_short }} \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..2e7b9a7 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,44 @@ +# Build a project +FROM mcr.microsoft.com/dotnet/sdk:6.0.101-alpine3.14 AS build +WORKDIR /source + +# Copy project and perform restoring +COPY Kruzya.TelegramBot.sln ./ +COPY ./Core/*.csproj ./Core/ +COPY ./tests/*.csproj ./tests/ +COPY ./modules/CombotAntiSpam/*.csproj ./modules/CombotAntiSpam/ +COPY ./modules/Destiny2.WhereIsXur/*.csproj ./modules/Destiny2.WhereIsXur/ +COPY ./modules/RichSiteSummary/*.csproj ./modules/RichSiteSummary/ +COPY ./modules/UrlLimitations/*.csproj ./modules/UrlLimitations/ +COPY ./modules/ChatManagement/*.csproj ./modules/ChatManagement/ +COPY ./modules/Entertainment/*.csproj ./modules/Entertainment/ +COPY ./modules/UserGroupTag/*.csproj ./modules/UserGroupTag/ +RUN dotnet restore Kruzya.TelegramBot.sln + +# Copy all project files +COPY . . +RUN dotnet publish -c release -o /app --no-restore Kruzya.TelegramBot.sln && \ + mkdir /app/modules && \ + cp /app/TelegramBot.*.dll /app/modules/ && \ + rm -f /app/TelegramBot.*.dll /app/TelegramBot.*.pdb + +# Now reuse image with only runtime +FROM mcr.microsoft.com/dotnet/aspnet:6.0.101-alpine3.14 +WORKDIR /user +COPY --from=build /app /app + +ENV MUSL_LOCPATH /usr/share/i18n/locales/musl +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false + +RUN apk add --no-cache cmake make musl-dev gcc gettext-dev libintl icu-libs \ + && wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \ + && unzip musl-locales-master.zip \ + && cd musl-locales-master \ + && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \ + && cd .. && rm -r musl-locales-master + +ENV LANG ru_RU.UTF-8 +ENV LANGUAGE ru_RU.UTF-8 +ENV LC_ALL ru_RU.UTF-8 + +ENTRYPOINT ["dotnet", "/app/TelegramBot.dll"] diff --git a/docker/Dockerfile.amd64 b/docker/Dockerfile.amd64 index d8ae3d8..58aea98 100644 --- a/docker/Dockerfile.amd64 +++ b/docker/Dockerfile.amd64 @@ -1,5 +1,5 @@ # Build a project -FROM mcr.microsoft.com/dotnet/sdk:6.0.1-alpine3.14-amd64 AS build +FROM mcr.microsoft.com/dotnet/sdk:6.0.101-alpine3.14-amd64 AS build WORKDIR /source # Copy project and perform restoring @@ -23,7 +23,7 @@ RUN dotnet publish -c release -o /app --no-restore Kruzya.TelegramBot.sln && \ rm -f /app/TelegramBot.*.dll /app/TelegramBot.*.pdb # Now reuse image with only runtime -FROM mcr.microsoft.com/dotnet/aspnet:6.0.1-alpine3.14-amd64 +FROM mcr.microsoft.com/dotnet/aspnet:6.0.101-alpine3.14-amd64 WORKDIR /user COPY --from=build /app /app diff --git a/docker/Dockerfile.arm64 b/docker/Dockerfile.arm64 index 5499b48..25c42fe 100644 --- a/docker/Dockerfile.arm64 +++ b/docker/Dockerfile.arm64 @@ -1,5 +1,5 @@ # Build a project -FROM mcr.microsoft.com/dotnet/sdk:6.0.1-alpine3.14-arm64v8 AS build +FROM mcr.microsoft.com/dotnet/sdk:6.0.101-alpine3.14-arm64v8 AS build WORKDIR /source # Copy project and perform restoring @@ -23,7 +23,7 @@ RUN dotnet publish -c release -o /app --no-restore Kruzya.TelegramBot.sln && \ rm -f /app/TelegramBot.*.dll /app/TelegramBot.*.pdb # Now reuse image with only runtime -FROM mcr.microsoft.com/dotnet/aspnet:6.0.1-alpine3.14-arm64v8 +FROM mcr.microsoft.com/dotnet/aspnet:6.0.101-alpine3.14-arm64v8 WORKDIR /user COPY --from=build /app /app