forked from googleapis/google-cloud-dotnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.generator
More file actions
80 lines (62 loc) · 2.89 KB
/
Dockerfile.generator
File metadata and controls
80 lines (62 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
FROM marketplace.gcr.io/google/debian12:latest AS dotnet-base
RUN apt-get update
RUN apt-get install -y curl git unzip
RUN curl https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb
RUN rm packages-microsoft-prod.deb
RUN apt-get update && apt-get install -y dotnet-sdk-8.0
FROM dotnet-base AS build
WORKDIR /src
# Copy files which are needed for building
COPY apis/GoogleApis.snk apis/GoogleApis.snk
COPY Directory.Packages.props .
COPY global.json .
COPY tools tools
COPY toolversions.sh .
COPY generator-input/tweaks tweaks
# Build our tooling (which provides the entry point)
RUN dotnet build tools/Google.Cloud.Tools.ReleaseManager -c Release
# Build the Bigtable client generator as well, so we don't need to
# use the network to run it when generating.
RUN dotnet build tweaks/Google.Cloud.Bigtable.V2/Google.Cloud.Bigtable.V2.GenerateClient -c Release
# Install protobuf, the gRPC plugin and GAPIC generator, ready to run
RUN bash -c 'source toolversions.sh && install_protoc && install_microgenerator && install_grpc'
FROM dotnet-base
WORKDIR /app
COPY --from=build /src/packages/Google.Protobuf.Tools.* protobuf
COPY --from=build /src/packages/Grpc.Tools.* grpc
COPY --from=build /src/gapic-generator-csharp/Google.Api.Generator/bin/Release/*/* gapic
COPY --from=build /src/tools/Google.Cloud.Tools.ReleaseManager/bin/Release/* ReleaseManager
COPY --from=build \
/src/tweaks/Google.Cloud.Bigtable.V2/Google.Cloud.Bigtable.V2.GenerateClient/bin/Release/* \
Google.Cloud.Bigtable.V2.GenerateClient
# Copy the tool configuration from the local source
COPY .config .
ENV PROTOBUF_TOOLS_ROOT=/app/protobuf
ENV PROTOC=/app/protobuf/tools/linux_x64/protoc
ENV GRPC_PLUGIN=/app/grpc/tools/linux_x64/grpc_csharp_plugin
ENV GAPIC_PLUGIN=/app/gapic/Google.Api.Generator
ENV HOME=/root
# Create a really minimal generator-input in the container, for
# "unconfigured" generation.
COPY generator-input/CommonResourcesConfig.json generator-input/
# Make sure we have all the dotnet tools we need
RUN dotnet tool restore
# Required for dotnet tools to run as an arbitrary user (so we can
# create files in mounted volumes more appropriately)
RUN chmod a+rwx -R /root
RUN chmod a+rwx -R /app
ENTRYPOINT ["dotnet", "ReleaseManager/Google.Cloud.Tools.ReleaseManager.dll", "container"]