From 27e372e139fb72debb131db02b07a4537ecd8e50 Mon Sep 17 00:00:00 2001
From: Florian Braun <5863788+FloThinksPi@users.noreply.github.com>
Date: Mon, 3 Jul 2023 10:35:51 +0200
Subject: [PATCH] Make dev setup locally usablei
---
.devcontainer/Dockerfile | 16 -
.../_Mariadb__CC-Unittests.xml | 27 ++
.../.idea/runConfigurations/_Mariadb__CC.xml | 27 ++
.../_Postgres__CC-Unittests.xml | 27 ++
.../.idea/runConfigurations/_Postgres__CC.xml | 4 +-
.../vscode/.vscode/launch.json | 0
.devcontainer/devcontainer.json | 8 +-
.devcontainer/docker-compose.override.yml | 19 +
.devcontainer/docker-compose.yml | 79 ---
.../{library => images}/catsbroker/Dockerfile | 0
.devcontainer/images/devcontainer/Dockerfile | 5 +
.devcontainer/images/devcontainer/setup.sh | 52 ++
.../{library => images}/nginx/Dockerfile | 7 +-
.../{library => images}/nginx/conf/mime.types | 0
.../{library => images}/nginx/conf/nginx.conf | 2 +-
.../nginx/conf/nginx_external_endpoints.conf | 0
.../nginx/conf/public_upload.conf | 0
.../{library => images}/uaa/Dockerfile | 6 +-
.../uaa/PatchAdminOAuthClient.java | 0
.devcontainer/library/idea/.idea/.gitignore | 8 -
.../.idea/libraries/app_packager_zips.xml | 15 -
.../library/idea/.idea/libraries/fixtures.xml | 14 -
.devcontainer/library/idea/.idea/misc.xml | 44 --
.devcontainer/library/idea/.idea/modules.xml | 8 -
.devcontainer/library/idea/.idea/vcs.xml | 6 -
.../library/idea/cloud_controller_ng.iml | 455 ------------------
.devcontainer/library/initializeCommand.sh | 5 -
.devcontainer/scripts/codespaces_init.sh | 5 +
.devcontainer/scripts/codespaces_start.sh | 12 +
.../setupDevelopmentEnvironment.sh} | 134 +++---
.devcontainer/scripts/setupIDEs.sh | 10 +
devenv.sh | 100 ++++
docker-compose.yml | 112 +++++
33 files changed, 479 insertions(+), 728 deletions(-)
delete mode 100644 .devcontainer/Dockerfile
create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml
create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml
create mode 100644 .devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml
rename .devcontainer/{library/idea => configs/intellij}/.idea/runConfigurations/_Postgres__CC.xml (89%)
rename .devcontainer/{library => configs}/vscode/.vscode/launch.json (100%)
create mode 100644 .devcontainer/docker-compose.override.yml
delete mode 100644 .devcontainer/docker-compose.yml
rename .devcontainer/{library => images}/catsbroker/Dockerfile (100%)
create mode 100644 .devcontainer/images/devcontainer/Dockerfile
create mode 100755 .devcontainer/images/devcontainer/setup.sh
rename .devcontainer/{library => images}/nginx/Dockerfile (66%)
rename .devcontainer/{library => images}/nginx/conf/mime.types (100%)
rename .devcontainer/{library => images}/nginx/conf/nginx.conf (95%)
rename .devcontainer/{library => images}/nginx/conf/nginx_external_endpoints.conf (100%)
rename .devcontainer/{library => images}/nginx/conf/public_upload.conf (100%)
rename .devcontainer/{library => images}/uaa/Dockerfile (94%)
rename .devcontainer/{library => images}/uaa/PatchAdminOAuthClient.java (100%)
delete mode 100644 .devcontainer/library/idea/.idea/.gitignore
delete mode 100644 .devcontainer/library/idea/.idea/libraries/app_packager_zips.xml
delete mode 100644 .devcontainer/library/idea/.idea/libraries/fixtures.xml
delete mode 100644 .devcontainer/library/idea/.idea/misc.xml
delete mode 100644 .devcontainer/library/idea/.idea/modules.xml
delete mode 100644 .devcontainer/library/idea/.idea/vcs.xml
delete mode 100644 .devcontainer/library/idea/cloud_controller_ng.iml
delete mode 100755 .devcontainer/library/initializeCommand.sh
create mode 100755 .devcontainer/scripts/codespaces_init.sh
create mode 100755 .devcontainer/scripts/codespaces_start.sh
rename .devcontainer/{library/onCreateCommand.sh => scripts/setupDevelopmentEnvironment.sh} (61%)
create mode 100755 .devcontainer/scripts/setupIDEs.sh
create mode 100755 devenv.sh
create mode 100644 docker-compose.yml
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
deleted file mode 100644
index d11a70e3b1d..00000000000
--- a/.devcontainer/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-FROM mcr.microsoft.com/vscode/devcontainers/ruby:3.1
-
-COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/
-
-RUN wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - \
- && echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list \
- && apt-get update && export DEBIAN_FRONTEND=noninteractive \
- && apt-get install postgresql-client postgresql-client-common mariadb-client cf7-cli -y \
- && apt-get install -o Dpkg::Options::="--force-overwrite" cf8-cli -y \
- && gem install cf-uaac \
- && wget $(curl -s https://api.github.com/repos/cloudfoundry/credhub-cli/releases/latest | \
- jq -r '.assets[] | select(.name|match("credhub-linux.*")) | .browser_download_url') -O credhub.tar.gz \
- && tar -xzf credhub.tar.gz && rm -f credhub.tar.gz && mv credhub /usr/bin \
- && wget $(curl -s https://api.github.com/repos/mikefarah/yq/releases/latest | \
- jq -r '.assets[] | select(.name|match("linux_amd64$")) | .browser_download_url') -O /usr/bin/yq \
- && chmod +x /usr/bin/yq
\ No newline at end of file
diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml
new file mode 100644
index 00000000000..7f4fd4c509b
--- /dev/null
+++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC-Unittests.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml
new file mode 100644
index 00000000000..9a1cc7fc802
--- /dev/null
+++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Mariadb__CC.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml
new file mode 100644
index 00000000000..f01f32bb398
--- /dev/null
+++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC-Unittests.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml
similarity index 89%
rename from .devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml
rename to .devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml
index d5d2000e540..a9c4226ce9d 100644
--- a/.devcontainer/library/idea/.idea/runConfigurations/_Postgres__CC.xml
+++ b/.devcontainer/configs/intellij/.idea/runConfigurations/_Postgres__CC.xml
@@ -1,5 +1,5 @@
-
+
@@ -8,7 +8,7 @@
-
+
diff --git a/.devcontainer/library/vscode/.vscode/launch.json b/.devcontainer/configs/vscode/.vscode/launch.json
similarity index 100%
rename from .devcontainer/library/vscode/.vscode/launch.json
rename to .devcontainer/configs/vscode/.vscode/launch.json
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index aded668ce6d..533e66e10f4 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,7 +1,7 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
{
"name": "Cloud Controller Dev Environment",
- "dockerComposeFile": "docker-compose.yml",
+ "dockerComposeFile": ["../docker-compose.yml", "docker-compose.override.yml"],
"service": "codespace",
"runServices": [
"postgres",
@@ -11,9 +11,9 @@
"catsbroker",
"nginx"
],
- "workspaceFolder": "..",
- "initializeCommand": ".devcontainer/library/initializeCommand.sh",
- "onCreateCommand": ".devcontainer/library/onCreateCommand.sh",
+ "workspaceFolder": "/workspace",
+ "initializeCommand": ".devcontainer/scripts/codespaces_init.sh",
+ "onCreateCommand": ".devcontainer/scripts/codespaces_start.sh",
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
diff --git a/.devcontainer/docker-compose.override.yml b/.devcontainer/docker-compose.override.yml
new file mode 100644
index 00000000000..26d9e938234
--- /dev/null
+++ b/.devcontainer/docker-compose.override.yml
@@ -0,0 +1,19 @@
+version: "3.3"
+services:
+
+ # Dev Container
+ codespace:
+ container_name: codespace
+ build:
+ context: .devcontainer/images/devcontainer
+ dockerfile: Dockerfile
+ restart: unless-stopped
+ command: /bin/sh -c "while sleep 1000; do :; done"
+ volumes:
+ - .:/workspace:cached
+ - /var/run/docker.sock:/var/run/docker.sock
+ network_mode: host
+ cap_add:
+ - SYS_PTRACE
+ security_opt:
+ - seccomp:unconfined
\ No newline at end of file
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
deleted file mode 100644
index 965c12ecb32..00000000000
--- a/.devcontainer/docker-compose.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-version: '3'
-
-services:
- # Dev Container
- codespace:
- container_name: codespace
- build:
- context: ../
- dockerfile: .devcontainer/Dockerfile
- restart: unless-stopped
- command: /bin/sh -c "while sleep 1000; do :; done"
- volumes:
- - ..:/workspace:cached
- - /var/run/docker.sock:/var/run/docker.sock
- networks:
- - codespace
- cap_add:
- - SYS_PTRACE
- security_opt:
- - seccomp:unconfined
- # Postgres
- postgres:
- container_name: postgres
- image: postgres:13
- environment:
- POSTGRES_PASSWORD: supersecret
- networks:
- - codespace
- restart: unless-stopped
- # Postgres
- mariadb:
- container_name: mariadb
- image: mariadb:10.3
- environment:
- MARIADB_ROOT_PASSWORD: supersecret
- networks:
- - codespace
- restart: unless-stopped
- # UAA
- uaa:
- container_name: uaa
- build:
- context: library/uaa
- dockerfile: Dockerfile
- networks:
- - codespace
- restart: unless-stopped
- # Minio
- minio:
- container_name: minio
- image: minio/minio:latest
- command: minio server --address :9001 /data
- networks:
- - codespace
- restart: unless-stopped
- # CATS Configurable Service Broker
- catsbroker:
- container_name: catsbroker
- build:
- context: library/catsbroker
- dockerfile: Dockerfile
- networks:
- - codespace
- restart: unless-stopped
- # Nginx
- nginx:
- container_name: nginx
- build:
- context: ./library/nginx
- dockerfile: Dockerfile
- args:
- ENABLED_MODULES: nginx_upload_module
- networks:
- - codespace
- volumes:
- - ./library/nginx/conf:/usr/local/nginx/conf:ro
- - ../tmp:/tmp:cached
-networks:
- codespace:
\ No newline at end of file
diff --git a/.devcontainer/library/catsbroker/Dockerfile b/.devcontainer/images/catsbroker/Dockerfile
similarity index 100%
rename from .devcontainer/library/catsbroker/Dockerfile
rename to .devcontainer/images/catsbroker/Dockerfile
diff --git a/.devcontainer/images/devcontainer/Dockerfile b/.devcontainer/images/devcontainer/Dockerfile
new file mode 100644
index 00000000000..e81ad72463d
--- /dev/null
+++ b/.devcontainer/images/devcontainer/Dockerfile
@@ -0,0 +1,5 @@
+FROM mcr.microsoft.com/vscode/devcontainers/ruby:3.1
+
+COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/
+COPY setup.sh /tmp/setup.sh
+RUN /tmp/setup.sh && rm /tmp/setup.sh
\ No newline at end of file
diff --git a/.devcontainer/images/devcontainer/setup.sh b/.devcontainer/images/devcontainer/setup.sh
new file mode 100755
index 00000000000..493090f5be5
--- /dev/null
+++ b/.devcontainer/images/devcontainer/setup.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+set -Eeuo pipefail
+# shellcheck disable=SC2064
+trap "pkill -P $$" EXIT
+
+setupAptPackages () {
+
+ if [[ $(uname -m) == aarch64 ]]; then
+ PACKAGES="postgresql-client postgresql-client-common mariadb-client docker-compose-plugin"
+ else
+ PACKAGES="cf8-cli postgresql-client postgresql-client-common mariadb-client docker-compose-plugin"
+ fi
+
+ install -m 0755 -d /etc/apt/keyrings
+ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
+ chmod a+r /etc/apt/keyrings/docker.gpg
+ echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
+ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
+ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
+ echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
+ apt-get update && export DEBIAN_FRONTEND=noninteractive
+ apt-get install -o Dpkg::Options::="--force-overwrite" $PACKAGES -y
+}
+
+setupRubyGems () {
+ gem install cf-uaac
+}
+
+setupCredhubCli () {
+ wget "$(curl -s https://api.github.com/repos/cloudfoundry/credhub-cli/releases/latest |
+ jq -r '.assets[] | select(.name|match("credhub-linux.*")) | .browser_download_url')" -O credhub.tar.gz
+ tar -xzf credhub.tar.gz && rm -f credhub.tar.gz && mv credhub /usr/bin
+}
+
+setupUaaCli () {
+ wget "$(curl -s https://api.github.com/repos/mikefarah/yq/releases/latest |
+ jq -r '.assets[] | select(.name|match("linux_amd64$")) | .browser_download_url')" -O /usr/bin/yq
+ chmod +x /usr/bin/yq
+}
+
+setupAptPackages || tee fail &
+setupRubyGems || tee fail &
+setupCredhubCli || tee fail &
+setupUaaCli || tee fail &
+
+
+# Wait for background jobs and exit 1 if any error happened
+# shellcheck disable=SC2046
+wait $(jobs -p)
+test -f fail && exit 1
+
+trap "" EXIT
\ No newline at end of file
diff --git a/.devcontainer/library/nginx/Dockerfile b/.devcontainer/images/nginx/Dockerfile
similarity index 66%
rename from .devcontainer/library/nginx/Dockerfile
rename to .devcontainer/images/nginx/Dockerfile
index 27fa2cfd6ca..889a98ca11f 100644
--- a/.devcontainer/library/nginx/Dockerfile
+++ b/.devcontainer/images/nginx/Dockerfile
@@ -1,7 +1,7 @@
FROM alpine
RUN apk --no-cache add build-base pcre-dev openssl-dev gzip curl jq zlib-dev \
- && NGINX_VERSION=$(curl -s https://hub.docker.com/v2/repositories/library/nginx/tags | jq -r ".results[] | select(.images | any(.digest==\"$(curl -s https://hub.docker.com/v2/repositories/library/nginx/tags | jq -r '.results[] | select(.name=="stable").images[] | select(.architecture=="amd64").digest')\")) | .name " | grep "[0-9]*\.[0-9]*\.[0-9]") \
+ && NGINX_VERSION=$(curl -s https://nginx.org/en/download.html | grep -o -E -m 1 "nginx-[0-9]+\.[0-9]+\.[0-9]+" | cut -d'-' -f2 | head -n 1) \
&& UPLOAD_VERSION=$(curl -s https://api.github.com/repos/fdintino/nginx-upload-module/tags | jq -r '.[0].name') \
&& wget -P /tmp https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && tar -zxvf /tmp/nginx-${NGINX_VERSION}.tar.gz -C /tmp \
&& wget -P /tmp https://github.com/fdintino/nginx-upload-module/archive/${UPLOAD_VERSION}.tar.gz && tar -zxvf /tmp/${UPLOAD_VERSION}.tar.gz -C /tmp \
@@ -10,7 +10,10 @@ RUN apk --no-cache add build-base pcre-dev openssl-dev gzip curl jq zlib-dev \
--add-module=/tmp/nginx-upload-module-${UPLOAD_VERSION}\
--with-http_stub_status_module \
&& make \
- && make install
+ && make install\
+ && rm -rf /usr/local/nginx/conf
+
+COPY conf /usr/local/nginx/conf
EXPOSE 80
diff --git a/.devcontainer/library/nginx/conf/mime.types b/.devcontainer/images/nginx/conf/mime.types
similarity index 100%
rename from .devcontainer/library/nginx/conf/mime.types
rename to .devcontainer/images/nginx/conf/mime.types
diff --git a/.devcontainer/library/nginx/conf/nginx.conf b/.devcontainer/images/nginx/conf/nginx.conf
similarity index 95%
rename from .devcontainer/library/nginx/conf/nginx.conf
rename to .devcontainer/images/nginx/conf/nginx.conf
index e97fc90d687..727a6e9cc92 100644
--- a/.devcontainer/library/nginx/conf/nginx.conf
+++ b/.devcontainer/images/nginx/conf/nginx.conf
@@ -39,7 +39,7 @@ http {
##
upstream cloud_controller {
- server unix:/tmp/cloud_controller.sock;
+ server host.docker.internal:3000;
}
include nginx_external_endpoints.conf;
diff --git a/.devcontainer/library/nginx/conf/nginx_external_endpoints.conf b/.devcontainer/images/nginx/conf/nginx_external_endpoints.conf
similarity index 100%
rename from .devcontainer/library/nginx/conf/nginx_external_endpoints.conf
rename to .devcontainer/images/nginx/conf/nginx_external_endpoints.conf
diff --git a/.devcontainer/library/nginx/conf/public_upload.conf b/.devcontainer/images/nginx/conf/public_upload.conf
similarity index 100%
rename from .devcontainer/library/nginx/conf/public_upload.conf
rename to .devcontainer/images/nginx/conf/public_upload.conf
diff --git a/.devcontainer/library/uaa/Dockerfile b/.devcontainer/images/uaa/Dockerfile
similarity index 94%
rename from .devcontainer/library/uaa/Dockerfile
rename to .devcontainer/images/uaa/Dockerfile
index dac7c53b9ed..c43b5f9c7fa 100644
--- a/.devcontainer/library/uaa/Dockerfile
+++ b/.devcontainer/images/uaa/Dockerfile
@@ -5,7 +5,7 @@ WORKDIR /uaa
# Patch admin client, add authority password.write
COPY PatchAdminOAuthClient.java /PatchAdminOAuthClient.java
-RUN apt-get update && apt-get install jq -y \
+RUN apt-get update && apt-get install jq -y \
&& git clone -b $(curl -s https://api.github.com/repos/cloudfoundry/uaa/releases/latest | jq -r '.tag_name') https://github.com/cloudfoundry/uaa.git . --recursive --depth=1 --shallow-submodules \
&& git clone -b $(curl -s https://api.github.com/repos/pivotal/credhub-release/releases/latest | jq -r '.tag_name') https://github.com/pivotal/credhub-release /credhub-release --recursive --depth=1 --shallow-submodules \
&& javac /PatchAdminOAuthClient.java -d / \
@@ -27,7 +27,7 @@ COPY --from=builder /credhub-release/src/credhub/config/uaa.yml /credhub-uaa.yml
# Remove jwt node with symmetric key
# Replace UAA client name in credhub config
# Concatenate modified cargo and credhub config files
-RUN yq e '.issuer.uri = "http://localhost:8080"' -i /uaa.yml \
+RUN yq e '.issuer.uri = "http://localhost:8080"' -i /uaa.yml \
&& yq e '.uaa.url = .issuer.uri' -i /uaa.yml \
&& yq e 'del(.jwt)' -i /uaa.yml \
&& yq e '.oauth.clients.director_to_credhub = .oauth.clients.credhub_client' -i /credhub-uaa.yml \
@@ -41,7 +41,7 @@ FROM tomcat:9-jdk11
COPY --from=yq /uaa.yml /uaa.yml
# Remove pre-installed apps
-RUN rm -rf /usr/local/tomcat/webapps/*
+RUN rm -rf /usr/local/tomcat/webapps/*
# Install war from build image
COPY --from=builder /uaa/uaa/build/libs/cloudfoundry-identity-uaa-*.war /usr/local/tomcat/webapps/ROOT.war
diff --git a/.devcontainer/library/uaa/PatchAdminOAuthClient.java b/.devcontainer/images/uaa/PatchAdminOAuthClient.java
similarity index 100%
rename from .devcontainer/library/uaa/PatchAdminOAuthClient.java
rename to .devcontainer/images/uaa/PatchAdminOAuthClient.java
diff --git a/.devcontainer/library/idea/.idea/.gitignore b/.devcontainer/library/idea/.idea/.gitignore
deleted file mode 100644
index 13566b81b01..00000000000
--- a/.devcontainer/library/idea/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml b/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml
deleted file mode 100644
index 8670e122ad3..00000000000
--- a/.devcontainer/library/idea/.idea/libraries/app_packager_zips.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/idea/.idea/libraries/fixtures.xml b/.devcontainer/library/idea/.idea/libraries/fixtures.xml
deleted file mode 100644
index 40dfe3482bc..00000000000
--- a/.devcontainer/library/idea/.idea/libraries/fixtures.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/idea/.idea/misc.xml b/.devcontainer/library/idea/.idea/misc.xml
deleted file mode 100644
index bbd1dd68f56..00000000000
--- a/.devcontainer/library/idea/.idea/misc.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/idea/.idea/modules.xml b/.devcontainer/library/idea/.idea/modules.xml
deleted file mode 100644
index d4a84da4a81..00000000000
--- a/.devcontainer/library/idea/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/idea/.idea/vcs.xml b/.devcontainer/library/idea/.idea/vcs.xml
deleted file mode 100644
index 35eb1ddfbbc..00000000000
--- a/.devcontainer/library/idea/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/idea/cloud_controller_ng.iml b/.devcontainer/library/idea/cloud_controller_ng.iml
deleted file mode 100644
index dd01ba668a2..00000000000
--- a/.devcontainer/library/idea/cloud_controller_ng.iml
+++ /dev/null
@@ -1,455 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.devcontainer/library/initializeCommand.sh b/.devcontainer/library/initializeCommand.sh
deleted file mode 100755
index 48cb26a0257..00000000000
--- a/.devcontainer/library/initializeCommand.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#/bin/dash
-set -eux
-
-# Setup VSCode
-mkdir -p /tmp
\ No newline at end of file
diff --git a/.devcontainer/scripts/codespaces_init.sh b/.devcontainer/scripts/codespaces_init.sh
new file mode 100755
index 00000000000..4d81e810aa2
--- /dev/null
+++ b/.devcontainer/scripts/codespaces_init.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -Eeuxo pipefail
+
+# Setup VSCode
+mkdir -p tmp
\ No newline at end of file
diff --git a/.devcontainer/scripts/codespaces_start.sh b/.devcontainer/scripts/codespaces_start.sh
new file mode 100755
index 00000000000..be5e96fd4fb
--- /dev/null
+++ b/.devcontainer/scripts/codespaces_start.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -Eeuxo pipefail
+# shellcheck disable=SC2064
+trap "pkill -P $$" EXIT
+
+# Setup IDEs
+./.devcontainer/scripts/setupIDEs.sh
+
+# Setup DBs and CC Config File
+sudo ./.devcontainer/scripts/setupDevelopmentEnvironment.sh
+
+trap "" EXIT
\ No newline at end of file
diff --git a/.devcontainer/library/onCreateCommand.sh b/.devcontainer/scripts/setupDevelopmentEnvironment.sh
similarity index 61%
rename from .devcontainer/library/onCreateCommand.sh
rename to .devcontainer/scripts/setupDevelopmentEnvironment.sh
index ab7dc2641ad..d4fc586c9ab 100755
--- a/.devcontainer/library/onCreateCommand.sh
+++ b/.devcontainer/scripts/setupDevelopmentEnvironment.sh
@@ -1,59 +1,96 @@
-#/bin/dash
-set -eux
+#!/bin/bash
+set -Eeuo pipefail
+# shellcheck disable=SC2064
trap "pkill -P $$" EXIT
-# Setup IDEs
-cp -a -f .devcontainer/library/vscode/.vscode/ .
-cp -a -f .devcontainer/library/idea/.idea/ .
-cp -a -f .devcontainer/library/idea/cloud_controller_ng.iml .
+# Database Information
+POSTGRES_CONNECTION_STRING="postgres://postgres:supersecret@localhost:5432/ccdb"
+MYSQL_CONNECTION_STRING="mysql2://root:supersecret@127.0.0.1:3306/ccdb"
-# Install packages
-bundle install &
+setupPostgres () {
+ export DB="postgres"
+ export DB_CONNECTION_STRING="${POSTGRES_CONNECTION_STRING}"
+ bundle exec rake db:recreate
+ bundle exec rake db:migrate
+ bundle exec rake db:seed
+}
+
+
+setupMariadb () {
+ export DB="mysql"
+ export DB_CONNECTION_STRING="${MYSQL_CONNECTION_STRING}"
+ bundle exec rake db:recreate
+ bundle exec rake db:migrate
+ bundle exec rake db:seed
+}
+
+setupUAA () {
+ # Wait until ready
+ # shellcheck disable=SC2016
+ timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' http://localhost:8080/info)" != "200" ]]; do sleep 5; done' || false
+
+ # Login
+ uaac target http://localhost:8080 --skip-ssl-validation
+ uaac token client get admin -s "adminsecret"
+
+ # Admin User
+ NEW_ADMIN_USERNAME="ccadmin"
+ NEW_ADMIN_PASSWORD="secret"
+ uaac user add ${NEW_ADMIN_USERNAME} -p ${NEW_ADMIN_PASSWORD} --emails fake@example.com
+ uaac member add cloud_controller.admin ${NEW_ADMIN_USERNAME}
+ uaac member add uaa.admin ${NEW_ADMIN_USERNAME}
+ uaac member add scim.read ${NEW_ADMIN_USERNAME}
+ uaac member add scim.write ${NEW_ADMIN_USERNAME}
+
+ # Dasboard User
+ uaac user add cc-service-dashboards -p some-sekret --emails fake2@example.com
+}
# CC config
+mkdir -p tmp
cp -a config/cloud_controller.yml tmp/cloud_controller.yml
-yq -i e '.login.url="http://uaa:8080"' tmp/cloud_controller.yml
+yq -i e '.login.url="http://localhost:8080"' tmp/cloud_controller.yml
yq -i e '.login.enabled=true' tmp/cloud_controller.yml
yq -i e '.nginx.use_nginx=true' tmp/cloud_controller.yml
-yq -i e '.nginx.instance_socket="/workspaces/cloud_controller_ng/tmp/cloud_controller.sock"' tmp/cloud_controller.yml
+yq -i e '.nginx.instance_socket=""' tmp/cloud_controller.yml
-yq -i e '.logging.file="/workspaces/cloud_controller_ng/tmp/cloud_controller.log"' tmp/cloud_controller.yml
-yq -i e '.telemetry_log_path="/workspaces/cloud_controller_ng/tmp/cloud_controller_telemetry.log"' tmp/cloud_controller.yml
-yq -i e '.directories.tmpdir="/workspaces/cloud_controller_ng/tmp"' tmp/cloud_controller.yml
-yq -i e '.directories.diagnostics="/workspaces/cloud_controller_ng/tmp"' tmp/cloud_controller.yml
+yq -i e '.logging.file="tmp/cloud_controller.log"' tmp/cloud_controller.yml
+yq -i e '.telemetry_log_path="tmp/cloud_controller_telemetry.log"' tmp/cloud_controller.yml
+yq -i e '.directories.tmpdir="tmp"' tmp/cloud_controller.yml
+yq -i e '.directories.diagnostics="tmp"' tmp/cloud_controller.yml
yq -i e '.security_event_logging.enabled=true' tmp/cloud_controller.yml
-yq -i e '.security_event_logging.file="/workspaces/cloud_controller_ng/tmp/cef.log"' tmp/cloud_controller.yml
+yq -i e '.security_event_logging.file="tmp/cef.log"' tmp/cloud_controller.yml
-yq -i e '.uaa.url="http://uaa:8080"' tmp/cloud_controller.yml
-yq -i e '.uaa.internal_url="http://uaa:8080"' tmp/cloud_controller.yml
+yq -i e '.uaa.url="http://localhost:8080"' tmp/cloud_controller.yml
+yq -i e '.uaa.internal_url="http://localhost:8080"' tmp/cloud_controller.yml
yq -i e '.uaa.resource_id="cloud_controller"' tmp/cloud_controller.yml
yq -i e 'del(.uaa.symmetric_secret)' tmp/cloud_controller.yml
yq -i e '.resource_pool.fog_connection.provider="AWS"' tmp/cloud_controller.yml
-yq -i e '.resource_pool.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml
+yq -i e '.resource_pool.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml
yq -i e '.resource_pool.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml
yq -i e '.resource_pool.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml
yq -i e '.resource_pool.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml
yq -i e '.resource_pool.fog_connection.path_style=true' tmp/cloud_controller.yml
yq -i e '.packages.fog_connection.provider="AWS"' tmp/cloud_controller.yml
-yq -i e '.packages.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml
+yq -i e '.packages.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml
yq -i e '.packages.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml
yq -i e '.packages.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml
yq -i e '.packages.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml
yq -i e '.packages.fog_connection.path_style=true' tmp/cloud_controller.yml
yq -i e '.droplets.fog_connection.provider="AWS"' tmp/cloud_controller.yml
-yq -i e '.droplets.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml
+yq -i e '.droplets.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml
yq -i e '.droplets.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml
yq -i e '.droplets.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml
yq -i e '.droplets.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml
yq -i e '.droplets.fog_connection.path_style=true' tmp/cloud_controller.yml
yq -i e '.buildpacks.fog_connection.provider="AWS"' tmp/cloud_controller.yml
-yq -i e '.buildpacks.fog_connection.endpoint="http://minio:9001"' tmp/cloud_controller.yml
+yq -i e '.buildpacks.fog_connection.endpoint="http://localhost:9001"' tmp/cloud_controller.yml
yq -i e '.buildpacks.fog_connection.aws_access_key_id="minioadmin"' tmp/cloud_controller.yml
yq -i e '.buildpacks.fog_connection.aws_secret_access_key="minioadmin"' tmp/cloud_controller.yml
yq -i e '.buildpacks.fog_connection.aws_signature_version=2' tmp/cloud_controller.yml
@@ -62,52 +99,17 @@ yq -i e '.buildpacks.fog_connection.path_style=true' tmp/cloud_controller.yml
yq -i e '.cloud_controller_username_lookup_client_name="login"' tmp/cloud_controller.yml
yq -i e '.cloud_controller_username_lookup_client_secret="loginsecret"' tmp/cloud_controller.yml
-wait
-
-# Database setup
-POSTGRES_CONNECTION_STRING="postgres://postgres:supersecret@postgres:5432/ccdb"
-MYSQL_CONNECTION_STRING="mysql2://root:supersecret@mariadb:3306/ccdb"
-
-setupPostgres () {
- export DB="postgres"
- export DB_CONNECTION_STRING="${POSTGRES_CONNECTION_STRING}"
- bundle exec rake db:recreate
- bundle exec rake db:migrate
- bundle exec rake db:seed
-}
-
-
-setupMariadb () {
- export DB="mysql"
- export DB_CONNECTION_STRING="${MYSQL_CONNECTION_STRING}"
- bundle exec rake db:recreate
- bundle exec rake db:migrate
- bundle exec rake db:seed
-}
-
-setupPostgres &
-setupMariadb &
-
-setupUAA () {
- timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' http://uaa:8080/info)" != "200" ]]; do sleep 5; done' || false
- CF_UAA_ADMIN_CLIENT_SECRET="adminsecret"
- NEW_ADMIN_USERNAME="ccadmin"
- NEW_ADMIN_PASSWORD="secret"
- uaac target http://uaa:8080 --skip-ssl-validation
- uaac token client get admin -s ${CF_UAA_ADMIN_CLIENT_SECRET}
- uaac user add ${NEW_ADMIN_USERNAME} -p ${NEW_ADMIN_PASSWORD} --emails fake@example.com
- uaac member add cloud_controller.admin ${NEW_ADMIN_USERNAME}
- uaac member add uaa.admin ${NEW_ADMIN_USERNAME}
- uaac member add scim.read ${NEW_ADMIN_USERNAME}
- uaac member add scim.write ${NEW_ADMIN_USERNAME}
+# Install packages
+bundle install
- # Dasboard User
- uaac user add cc-service-dashboards -p some-sekret --emails fake2@example.com
- uaac member add cloud_controller_service_permissions.read cc-service-dashboards
- uaac member add openid cc-service-dashboards
-}
+# Setup Containers
+setupPostgres || tee tmp/fail &
+setupMariadb || tee tmp/fail &
+setupUAA || tee tmp/fail &
-setupUAA &
+# Wait for background jobs and exit 1 if any error happened
+# shellcheck disable=SC2046
+wait $(jobs -p)
+test -f tmp/fail && rm tmp/fail && exit 1
-wait
trap "" EXIT
\ No newline at end of file
diff --git a/.devcontainer/scripts/setupIDEs.sh b/.devcontainer/scripts/setupIDEs.sh
new file mode 100755
index 00000000000..19b9a2391b8
--- /dev/null
+++ b/.devcontainer/scripts/setupIDEs.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+set -Eeuo pipefail
+# shellcheck disable=SC2064
+trap "pkill -P $$" EXIT
+
+# Setup IDEs
+cp -a -f .devcontainer/configs/vscode/.vscode .
+cp -a -f .devcontainer/configs/intellij/.idea .
+
+trap "" EXIT
\ No newline at end of file
diff --git a/devenv.sh b/devenv.sh
new file mode 100755
index 00000000000..eefd656bf48
--- /dev/null
+++ b/devenv.sh
@@ -0,0 +1,100 @@
+#/bin/bash
+set -eu
+trap "pkill -P $$" EXIT
+
+# Prerequisits
+# PSQL
+# MYSQL
+# RUBY(RBENV)
+# RUBY BUNDLER
+# UAAC (gem install cf-uaac)
+# Docker
+# Docker-Compose
+
+# Help text
+help_command() {
+ echo "Usage: $0 COMMAND"
+ echo ""
+ echo "Commands:"
+ echo " create - Setting up the development environment(containers)"
+ echo " start - Starting the development environment(containers), a existing fully set up set of containers must exist."
+ echo " stop - Stopping but not removing the development environment(containers)"
+ echo " destroy - Stopping and removing the development environment(containers)"
+ echo " runconfigs - Copies matching run configurations for intellij and vscode into the respective folders"
+ echo " help - Print this help text"
+}
+
+
+# Create a clean development environment
+create_command(){
+ docker-compose -p "" down
+ docker buildx bake -f docker-compose.yml &
+ docker-compose -p "" pull &
+ wait $(jobs -p)
+ docker-compose -p "" up -d
+ ./.devcontainer/scripts/setupDevelopmentEnvironment.sh
+}
+
+# Start containers
+start_command(){
+ docker-compose -p "" start
+}
+
+# Stop containers
+stop_command(){
+ docker-compose -p "" stop
+}
+
+# Remove containers
+destroy_command(){
+ docker-compose -p "" down
+}
+
+# Call Setup IDEs Script
+runconfigs_command(){
+ ./.devcontainer/scripts/setupIDEs.sh
+}
+
+# Error handler
+handle_error() {
+ echo "Error: Invalid command"
+ help_command
+ exit 1
+}
+
+# Handle no command specified
+if [ $# -eq 0 ]; then
+ handle_error
+fi
+
+# Parse commands
+case "$1" in
+ create)
+ echo "Setting up the development environment(containers)"
+ create_command
+ ;;
+ start)
+ echo "Starting the development environment(containers), a existing fully set up set of containers must exist."
+ start_command
+ ;;
+ stop)
+ echo "Stopping but not removing the development environment(containers)"
+ stop_command
+ ;;
+ destroy)
+ echo "Stopping and removing the development environment(containers)"
+ destroy_command
+ ;;
+ runconfigs)
+ echo "Copying matching run configurations for intellij and vscode into the respective folders"
+ runconfigs_command
+ ;;
+ help)
+ help_command
+ ;;
+ *)
+ handle_error
+ ;;
+esac
+
+trap "" EXIT
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000000..a16888cd1e6
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,112 @@
+version: "3.3"
+services:
+
+ # Postgres
+ postgres:
+ container_name: postgres
+ image: postgres:13
+ environment:
+ POSTGRES_PASSWORD: supersecret
+ ports:
+ - "127.0.0.1:5432:5432"
+ networks:
+ - cc-net
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ restart: unless-stopped
+
+ # Mariadb
+ mariadb:
+ container_name: mariadb
+ image: mariadb:10.3
+ environment:
+ MARIADB_ROOT_PASSWORD: supersecret
+ ports:
+ - "127.0.0.1:3306:3306"
+ healthcheck:
+ test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
+ interval: 10s
+ timeout: 20s
+ retries: 3
+ networks:
+ - cc-net
+ restart: unless-stopped
+
+ # UAA
+ uaa:
+ container_name: uaa
+ build:
+ context: .devcontainer/images/uaa
+ dockerfile: Dockerfile
+ ports:
+ - "127.0.0.1:8080:8080"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/info"]
+ interval: 30s
+ timeout: 20s
+ retries: 3
+ networks:
+ - cc-net
+ restart: unless-stopped
+
+ # Minio S3 Blobstore
+ minio:
+ container_name: minio
+ image: minio/minio:latest
+ command: minio server --address ":9001" "/data"
+ ports:
+ - "127.0.0.1:9001:9001"
+ - "127.0.0.1:9000:9000"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:9001/minio/health/live"]
+ interval: 30s
+ timeout: 20s
+ retries: 3
+ networks:
+ - cc-net
+ restart: unless-stopped
+
+ # CATS Configurable Service Broker
+ catsbroker:
+ container_name: catsbroker
+ build:
+ context: .devcontainer/images/catsbroker
+ dockerfile: Dockerfile
+ ports:
+ - "127.0.0.1:9292:9292"
+ - "127.0.0.1:9393:80"
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:9292/v2/catalog"]
+ interval: 30s
+ timeout: 20s
+ retries: 3
+ networks:
+ - cc-net
+ restart: unless-stopped
+
+ # Nginx Reverse Proxy (For uploads e.g. Packages)
+ nginx:
+ container_name: nginx
+ build:
+ context: .devcontainer/images/nginx
+ dockerfile: Dockerfile
+ args:
+ ENABLED_MODULES: nginx_upload_module
+ ports:
+ - "80:80"
+ networks:
+ - cc-net
+ volumes:
+ - .devcontainer/images/nginx/conf:/usr/local/nginx/conf:ro # TODO BAKE CONFIG INTO CONTAINER IMAGE
+ - ./tmp:/tmp
+ cap_add:
+ - NET_BIND_SERVICE
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
+ restart: unless-stopped
+
+networks:
+ cc-net:
\ No newline at end of file