Skip to content

Commit 67a07b2

Browse files
Merge branch 'main' into gpl/766-genie-scrubbing
2 parents 96a1d6f + 28942bd commit 67a07b2

File tree

1,185 files changed

+410614
-34905
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,185 files changed

+410614
-34905
lines changed

.devcontainer/Dockerfile

Lines changed: 345 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,345 @@
1+
FROM ubuntu:jammy
2+
3+
ADD https://raw.githubusercontent.com/gitpod-io/workspace-images/main/base/install-packages /usr/bin/install-packages
4+
RUN chmod +x /usr/bin/install-packages
5+
6+
# Improve resilience during build (DNS timeouts, intermediate repo unavailability, broken proxy, etc.)
7+
# Also, disable APT color output, and set the queue mode to 'host' to avoid issues with Docker's overlayfs.
8+
# https://serverfault.com/questions/722893/debian-mirror-hash-sum-mismatch/743015#743015
9+
RUN <<EOF cat >/etc/apt/apt.conf.d/99-gitpod
10+
Acquire::Retries "10";
11+
Acquire::https::Timeout "100";
12+
Acquire::http::Pipeline-Depth "0";
13+
Acquire::http::No-Cache=True;
14+
Acquire::BrokenProxy=true;
15+
APT::Color "0";
16+
APT::Acquire::Queue-Mode "host";
17+
Dpkg::Progress-Fancy "0";
18+
EOF
19+
20+
RUN yes | unminimize \
21+
&& install-packages \
22+
zip \
23+
unzip \
24+
bash-completion \
25+
build-essential \
26+
ninja-build \
27+
htop \
28+
iputils-ping \
29+
jq \
30+
less \
31+
locales \
32+
nano \
33+
ripgrep \
34+
software-properties-common \
35+
sudo \
36+
stow \
37+
time \
38+
emacs-nox \
39+
vim \
40+
multitail \
41+
lsof \
42+
ssl-cert \
43+
fish \
44+
zsh \
45+
python3-pip \
46+
shellcheck \
47+
curl \
48+
gnupg2 \
49+
isal \
50+
gperf \
51+
# Install tools for gsutil
52+
gcc \
53+
python3-pip \
54+
python-setuptools \
55+
# Install GraphViz to help debug terraform scripts
56+
graphviz \
57+
shellcheck \
58+
pigz \
59+
### MySQL client ###
60+
mysql-client \
61+
### Cypress deps
62+
libgtk2.0-0 \
63+
libgtk-3-0 \
64+
libgbm-dev \
65+
libnotify-dev \
66+
libgconf-2-4 \
67+
libnss3 \
68+
libxss1 \
69+
libasound2 \
70+
libxtst6 \
71+
xauth \
72+
openssh-client \
73+
&& locale-gen en_US.UTF-8
74+
75+
ENV LANG=en_US.UTF-8
76+
77+
### Git ###
78+
ADD https://raw.githubusercontent.com/gitpod-io/workspace-images/main/base/default.gitconfig /etc/gitconfig
79+
80+
RUN add-apt-repository -y ppa:git-core/ppa
81+
# https://github.com/git-lfs/git-lfs/blob/main/INSTALLING.md
82+
RUN export os=ubuntu; export dist=jammy; curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \
83+
install-packages git git-lfs && \
84+
git lfs install --system --skip-repo && \
85+
chmod 644 /etc/gitconfig
86+
87+
ARG TARGETPLATFORM
88+
ARG TARGETARCH
89+
ARG TARGETOS
90+
91+
# Install dependencies
92+
USER root
93+
ARG LEEWAY_VERSION=0.8.2
94+
ENV LEEWAY_MAX_PROVENANCE_BUNDLE_SIZE=8388608
95+
ENV LEEWAY_WORKSPACE_ROOT=/workspace/gitpod
96+
ENV LEEWAY_REMOTE_CACHE_BUCKET=leeway-cache-dev-3ac8ef5
97+
ENV LEEWAY_CACHE_DIR=/workspace/.leeway/cache
98+
ENV LEEWAY_BUILD_DIR=/workspace/.leeway/build
99+
RUN arch=$(uname -m); \
100+
case $arch in \
101+
x86_64) arch=x86_64 ;; \
102+
aarch64|arm64) arch=arm64 ;; \
103+
*) echo "Unsupported architecture: $arch"; exit 1 ;; \
104+
esac; \
105+
cd /tmp && \
106+
curl -OsSL https://github.com/gitpod-io/leeway/releases/download/v${LEEWAY_VERSION}/leeway_${LEEWAY_VERSION}_Linux_${arch}.tar.gz && \
107+
tar -xzf leeway_${LEEWAY_VERSION}_Linux_${arch}.tar.gz && \
108+
mv leeway /usr/local/bin/leeway && \
109+
rm leeway_${LEEWAY_VERSION}_Linux_${arch}.tar.gz
110+
111+
112+
### cloud_sql_proxy ###
113+
ARG CLOUD_SQL_PROXY=/usr/local/bin/cloud_sql_proxy
114+
RUN curl -fsSL https://dl.google.com/cloudsql/cloud_sql_proxy.linux.${TARGETARCH} > $CLOUD_SQL_PROXY \
115+
&& chmod +x $CLOUD_SQL_PROXY
116+
117+
### Helm3 ###
118+
RUN mkdir -p /tmp/helm/ \
119+
&& curl -fsSL https://get.helm.sh/helm-v3.8.1-linux-${TARGETARCH}.tar.gz | tar -xzvC /tmp/helm/ --strip-components=1 \
120+
&& cp /tmp/helm/helm /usr/local/bin/helm \
121+
&& ln -s /usr/local/bin/helm /usr/local/bin/helm3 \
122+
&& rm -rf /tmp/helm/ \
123+
&& helm completion bash > /usr/share/bash-completion/completions/helm
124+
125+
### kubectl ###
126+
RUN curl -fsSL -o /usr/bin/kubectl "https://dl.k8s.io/release/v1.28.9/bin/linux/${TARGETARCH}/kubectl" && chmod +x /usr/bin/kubectl \
127+
&& kubectl completion bash > /usr/share/bash-completion/completions/kubectl
128+
129+
RUN curl -fsSL -o /usr/bin/kubectx https://raw.githubusercontent.com/ahmetb/kubectx/master/kubectx && chmod +x /usr/bin/kubectx \
130+
&& curl -fsSL -o /usr/bin/kubens https://raw.githubusercontent.com/ahmetb/kubectx/master/kubens && chmod +x /usr/bin/kubens
131+
132+
RUN curl -fsSL https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.2/kubebuilder_2.3.2_linux_${TARGETARCH}.tar.gz | tar -xz -C /tmp/ \
133+
&& sudo mkdir -p /usr/local/kubebuilder \
134+
&& sudo mv /tmp/kubebuilder_2.3.2_linux_${TARGETARCH}/* /usr/local/kubebuilder \
135+
&& rm -rf /tmp/*
136+
137+
RUN curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | sudo apt-key add -
138+
139+
### CertManager's cmctl
140+
RUN cd /usr/bin && curl -fsSL https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cmctl-linux-amd64.tar.gz | tar xzv --no-anchored cmctl
141+
142+
# gokart
143+
RUN cd /usr/bin && curl -fsSL https://github.com/praetorian-inc/gokart/releases/download/v0.4.0/gokart_0.4.0_linux_x86_64.tar.gz | tar xzv --no-anchored gokart
144+
145+
# evans (gRPC client)
146+
RUN cd /usr/bin && curl -fsSL https://github.com/ktr0731/evans/releases/download/v0.10.6/evans_linux_${TARGETARCH}.tar.gz | tar xz evans
147+
148+
# dazzle
149+
RUN cd /usr/bin && curl -fsSL https://github.com/gitpod-io/dazzle/releases/download/v0.1.12/dazzle_0.1.12_Linux_x86_64.tar.gz | tar xz
150+
151+
# yq - jq for YAML files
152+
# Note: we rely on version 3.x.x in various places, 4.x breaks this!
153+
RUN cd /usr/bin && curl -fsSL https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_${TARGETARCH} > yq && chmod +x yq
154+
# yq4 as separate binary
155+
RUN cd /usr/bin && curl -fsSL https://github.com/mikefarah/yq/releases/download/v4.23.1/yq_linux_${TARGETARCH} > yq4 && chmod +x yq4
156+
157+
# release helper
158+
RUN cd /usr/bin && curl -fsSL https://github.com/c4milo/github-release/releases/download/v1.1.0/github-release_v1.1.0_linux_${TARGETARCH}.tar.gz | tar xz
159+
160+
### Protobuf
161+
RUN arch=$(uname -m); \
162+
case $arch in \
163+
x86_64) arch=x86_64 ;; \
164+
aarch64|arm64) arch=aarch_64 ;; \
165+
*) echo "Unsupported architecture: $arch"; exit 1 ;; \
166+
esac; \
167+
tmpdir=$(mktemp -d) \
168+
&& curl -fsSL -o $tmpdir/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.20.1/protoc-3.20.1-linux-${arch}.zip \
169+
&& mkdir -p /usr/lib/protoc && cd /usr/lib/protoc && unzip $tmpdir/protoc.zip \
170+
&& chmod -R o+r+x /usr/lib/protoc/include \
171+
&& chmod -R +x /usr/lib/protoc/bin \
172+
&& ln -s /usr/lib/protoc/bin/* /usr/bin \
173+
&& rm -rf $tmpdir
174+
175+
### Toxiproxy CLI
176+
RUN curl -fsSL -o /usr/bin/toxiproxy https://github.com/Shopify/toxiproxy/releases/download/v2.4.0/toxiproxy-cli-linux-${TARGETARCH} \
177+
&& chmod +x /usr/bin/toxiproxy
178+
179+
### libseccomp > 2.5.2
180+
RUN cd $(mktemp -d) \
181+
&& curl -fsSL https://github.com/seccomp/libseccomp/releases/download/v2.5.4/libseccomp-2.5.4.tar.gz | tar xz \
182+
&& cd libseccomp-2.5.4 && ./configure && make && make install
183+
184+
185+
186+
RUN curl -sSL "https://awscli.amazonaws.com/awscli-exe-linux-$(arch).zip" -o awscliv2.zip && \
187+
unzip -q awscliv2.zip && \
188+
./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update && \
189+
rm -rf awscliv2.zip ./aws
190+
191+
ENV GO_VERSION=1.22.2
192+
ENV GOPATH=/root/go-packages
193+
ENV GOROOT=/root/go
194+
ENV PATH=$GOROOT/bin:$GOPATH/bin:$PATH
195+
196+
RUN mkdir -p $GOROOT && \
197+
cd /root && \
198+
curl -fsSL https://dl.google.com/go/go$GO_VERSION.${TARGETOS}-${TARGETARCH}.tar.gz | tar xzs
199+
RUN go install github.com/go-delve/delve/cmd/dlv@latest
200+
201+
# Install codecov uploader
202+
# https://about.codecov.io/blog/introducing-codecovs-new-uploader
203+
RUN curl -fsSL https://uploader.codecov.io/latest/codecov-linux -o /usr/local/bin/codecov \
204+
&& chmod +x /usr/local/bin/codecov
205+
206+
207+
# gh (Github CLI) binary:
208+
RUN cd /usr/bin && curl -fsSL https://github.com/cli/cli/releases/download/v2.35.0/gh_2.35.0_linux_${TARGETARCH}.tar.gz \
209+
| tar xzv --strip-components=2 gh_2.35.0_linux_${TARGETARCH}/bin/gh
210+
211+
# Install observability-related binaries
212+
ARG PROM_VERSION="2.36.0"
213+
RUN curl -LO https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-${TARGETARCH}.tar.gz && \
214+
tar -xzvf prometheus-${PROM_VERSION}.linux-${TARGETARCH}.tar.gz && \
215+
mv prometheus-${PROM_VERSION}.linux-${TARGETARCH}/promtool /usr/local/bin/promtool && \
216+
rm -rf prometheus-${PROM_VERSION}.linux-${TARGETARCH}/ && \
217+
rm -f prometheus-${PROM_VERSION}.linux-${TARGETARCH}.tar.gz
218+
219+
ARG JSONNET_BUNDLER_VERSION="0.4.0"
220+
RUN curl -fsSL -o jb https://github.com/jsonnet-bundler/jsonnet-bundler/releases/download/v${JSONNET_BUNDLER_VERSION}/jb-linux-${TARGETARCH} && \
221+
chmod +x jb && mv jb /usr/local/bin
222+
223+
ARG JSONNET_VERSION="0.17.0"
224+
RUN curl -fsSLO https://github.com/google/go-jsonnet/releases/download/v${JSONNET_VERSION}/go-jsonnet_${JSONNET_VERSION}_Linux_x86_64.tar.gz && \
225+
tar -xzvf go-jsonnet_${JSONNET_VERSION}_Linux_x86_64.tar.gz && \
226+
mv jsonnet /usr/local/bin/jsonnet && \
227+
mv jsonnetfmt /usr/local/bin/jsonnetfmt && \
228+
tar -tzf go-jsonnet_${JSONNET_VERSION}_Linux_x86_64.tar.gz | xargs rm -f && \
229+
rm -f go-jsonnet_${JSONNET_VERSION}_Linux_x86_64.tar.gz
230+
231+
ARG GOJSONTOYAML_VERSION="0.1.0"
232+
RUN curl -fsSLO https://github.com/brancz/gojsontoyaml/releases/download/v${GOJSONTOYAML_VERSION}/gojsontoyaml_${GOJSONTOYAML_VERSION}_linux_${TARGETARCH}.tar.gz && \
233+
tar -xzvf gojsontoyaml_${GOJSONTOYAML_VERSION}_linux_${TARGETARCH}.tar.gz && \
234+
mv gojsontoyaml /usr/local/bin/gojsontoyaml && \
235+
tar -tzf gojsontoyaml_${GOJSONTOYAML_VERSION}_linux_${TARGETARCH}.tar.gz | xargs rm -f && \
236+
rm -f gojsontoyaml_${GOJSONTOYAML_VERSION}_linux_${TARGETARCH}.tar.gz
237+
238+
# So we can parse the report.html output by leeway, and remove the output produced by this image build
239+
# why? it's too verbose, exceeding the Github Actions summary limit
240+
RUN go install github.com/ericchiang/[email protected]
241+
242+
# Install oci-tool
243+
RUN curl -fsSL https://github.com/csweichel/oci-tool/releases/download/v0.2.0/oci-tool_0.2.0_linux_${TARGETARCH}.tar.gz | tar xz -C /usr/local/bin \
244+
&& chmod +x /usr/local/bin/oci-tool
245+
246+
# Install golangci-lint
247+
RUN go install -v github.com/golangci/golangci-lint/cmd/golangci-lint@latest
248+
249+
ENV USE_GKE_GCLOUD_AUTH_PLUGIN=True
250+
251+
# create completions
252+
RUN mkdir -p /root/.bashrc.d && \
253+
(echo; echo "source /etc/bash_completion"; echo) >> /root/.bashrc && \
254+
(echo; echo "for i in \$(ls -A \$HOME/.bashrc.d/); do source \$HOME/.bashrc.d/\$i; done"; echo) >> /root/.bashrc && \
255+
mkdir -p /root/.local/share/bash-completion/completions
256+
257+
RUN { echo && echo "PS1='\[\033[01;32m\]\u\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\$(__git_ps1 \" (%s)\") $ '" ; } >> /root/.bashrc
258+
259+
## Register leeway autocompletion in bashrc
260+
RUN bash -c "echo . \<\(leeway bash-completion\) >> /root/.bashrc"
261+
262+
### Google Cloud ###
263+
# not installed via repository as then 'docker-credential-gcr' is not available
264+
ARG GCS_DIR=/opt/google-cloud-sdk
265+
ENV PATH=$GCS_DIR/bin:$PATH
266+
RUN arch=$(uname -m); \
267+
case $arch in \
268+
x86_64) arch=x86_64 ;; \
269+
aarch64|arm64) arch=arm ;; \
270+
*) echo "Unsupported architecture: $arch"; exit 1 ;; \
271+
esac; \
272+
mkdir -p $GCS_DIR \
273+
&& curl -fsSL https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-472.0.0-linux-${arch}.tar.gz \
274+
| tar -xzC /opt \
275+
&& /opt/google-cloud-sdk/install.sh --quiet --usage-reporting=false --bash-completion=true \
276+
--additional-components gke-gcloud-auth-plugin docker-credential-gcr alpha beta \
277+
# needed for access to our private registries
278+
&& docker-credential-gcr configure-docker
279+
280+
RUN sudo python3 -m pip uninstall crcmod; sudo python3 -m pip install --no-cache-dir -U crcmod pre-commit
281+
282+
283+
ENV DB_HOST=127.0.0.1
284+
285+
286+
# Install Terraform
287+
ARG RELEASE_URL="https://releases.hashicorp.com/terraform/1.8.1/terraform_1.8.1_linux_${TARGETARCH}.zip"
288+
RUN mkdir -p ~/.terraform \
289+
&& cd ~/.terraform \
290+
&& curl -fsSL -o terraform_linux_${TARGETARCH}.zip ${RELEASE_URL} \
291+
&& unzip *.zip \
292+
&& rm -f *.zip \
293+
&& printf "terraform -install-autocomplete 2> /dev/null\n" >>~/.bashrc
294+
295+
## Java
296+
ENV JAVA_VERSION=11.0.23.fx-zulu
297+
RUN curl -fsSL "https://get.sdkman.io" | bash \
298+
&& bash -c ". /root/.sdkman/bin/sdkman-init.sh \
299+
&& sed -i 's/sdkman_selfupdate_enable=true/sdkman_selfupdate_enable=false/g' /root/.sdkman/etc/config \
300+
&& sed -i 's/sdkman_selfupdate_feature=true/sdkman_selfupdate_feature=false/g' /root/.sdkman/etc/config \
301+
&& sdk install java ${JAVA_VERSION} \
302+
&& sdk default java ${JAVA_VERSION} \
303+
&& sdk install gradle \
304+
&& sdk install maven \
305+
&& sdk flush archives \
306+
&& sdk flush temp \
307+
&& mkdir /root/.m2 \
308+
&& printf '<settings>\n <localRepository>/workspace/m2-repository/</localRepository>\n</settings>\n' > /root/.m2/settings.xml \
309+
&& echo 'export SDKMAN_DIR=\"/root/.sdkman\"' >> /root/.bashrc.d/99-java \
310+
&& echo '[[ -s \"/root/.sdkman/bin/sdkman-init.sh\" ]] && source \"/root/.sdkman/bin/sdkman-init.sh\"' >> /root/.bashrc.d/99-java"
311+
# above, we are adding the sdkman init to .bashrc (executing sdkman-init.sh does that), because one is executed on interactive shells, the other for non-interactive shells (e.g. plugin-host)
312+
ENV GRADLE_USER_HOME=/workspace/.gradle/
313+
314+
ENV NODE_VERSION=18.20.4
315+
316+
ENV PNPM_HOME=/root/.pnpm
317+
ENV PATH=/root/.nvm/versions/node/v${NODE_VERSION}/bin:/root/.yarn/bin:${PNPM_HOME}:$PATH
318+
ENV HOME=/root
319+
RUN curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash \
320+
&& bash -c ". $HOME/.nvm/nvm.sh \
321+
&& nvm install v${NODE_VERSION} \
322+
&& nvm alias default v${NODE_VERSION} \
323+
&& npm install -g typescript yarn pnpm node-gyp"
324+
325+
ENV PATH=$PATH:/root/.aws-iam:/root/.terraform:/workspace/bin
326+
327+
### Telepresence ###
328+
RUN curl -fsSL https://packagecloud.io/datawireio/telepresence/gpgkey | apt-key add - \
329+
# 'cosmic' not supported
330+
&& add-apt-repository -yu "deb https://packagecloud.io/datawireio/telepresence/ubuntu/ bionic main" \
331+
# 0.95 (current at the time of this commit) is broken
332+
&& install-packages \
333+
iproute2 \
334+
iptables \
335+
net-tools \
336+
socat \
337+
telepresence=0.109
338+
339+
# Install pre-commit hooks under /workspace during prebuilds
340+
ENV PRE_COMMIT_HOME=/workspace/.pre-commit
341+
342+
# Setting the environment variable here so that it will be accessible to all tasks and
343+
# terminal sessions in Gitpod workspaces.
344+
ENV PREVIEW_ENV_DEV_SA_KEY_PATH=/root/.config/gcloud/sa.json
345+
ENV GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES=1

.devcontainer/devcontainer.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"name": "gitpod",
3+
"build": {
4+
"context": "..",
5+
"dockerfile": "./Dockerfile"
6+
},
7+
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace/gitpod,type=bind",
8+
"workspaceFolder": "/workspace/gitpod/",
9+
"postCreateCommand": "dev/install-dependencies.sh",
10+
"mounts": [
11+
"source=/usr/local/gitpod/config/,target=/usr/local/gitpod/config/,type=bind"
12+
],
13+
"remoteEnv": {
14+
"GIT_EDITOR": "code --wait",
15+
"KUBE_EDITOR": "code --wait"
16+
},
17+
"features": {
18+
"ghcr.io/devcontainers/features/docker-in-docker:2": {
19+
"installDockerComposeSwitch": false
20+
}
21+
},
22+
"customizations": {
23+
"vscode": {
24+
"extensions": [
25+
"EditorConfig.EditorConfig",
26+
"golang.go",
27+
"hashicorp.terraform",
28+
"ms-azuretools.vscode-docker",
29+
"ms-kubernetes-tools.vscode-kubernetes-tools",
30+
"stkb.rewrap",
31+
"zxh404.vscode-proto3",
32+
"matthewpi.caddyfile-support",
33+
"timonwong.shellcheck",
34+
"fwcd.kotlin",
35+
"dbaeumer.vscode-eslint",
36+
"esbenp.prettier-vscode",
37+
"hbenl.vscode-mocha-test-adapter"
38+
]
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)