Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Kibana Dev Container #188887

Merged
merged 84 commits into from
Aug 26, 2024
Merged
Show file tree
Hide file tree
Changes from 73 commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
943a8e2
base dev container
Ikuni17 Jun 13, 2024
ee6a230
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jun 21, 2024
54adc5d
use dockerfile
Ikuni17 Jun 21, 2024
bf654b4
rename
Ikuni17 Jun 21, 2024
79c5b06
add support for dynamic shell
Ikuni17 Jun 21, 2024
df7aa5a
set default as bash
Ikuni17 Jun 21, 2024
12e1412
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jun 24, 2024
8dfa7e1
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jun 28, 2024
abea7d8
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 15, 2024
2a997cd
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 16, 2024
a7ac8cb
use kbn node ver
Ikuni17 Jul 16, 2024
a369afc
wip readme
Ikuni17 Jul 16, 2024
f48391e
fix node install and setup
Ikuni17 Jul 16, 2024
1f6363f
env not found msg
Ikuni17 Jul 16, 2024
6399c16
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 17, 2024
a2b4385
fix docker in docker setup
Ikuni17 Jul 17, 2024
6f74f67
wip fips setup
Ikuni17 Jul 18, 2024
c17a0f7
add gh cli feature
Ikuni17 Jul 18, 2024
8fa61c0
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 22, 2024
eab7024
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 22, 2024
56c7675
fix module linking
Ikuni17 Jul 23, 2024
2926892
cleanup
Ikuni17 Jul 23, 2024
10973ff
reorder commands for cache
Ikuni17 Jul 23, 2024
82aeb9a
update codeowners
Ikuni17 Jul 23, 2024
6b6fa5b
fix node install
Ikuni17 Jul 23, 2024
d967497
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 23, 2024
6f7dfa4
wip bazel cache mounting
Ikuni17 Jul 23, 2024
09509ce
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 24, 2024
a657eb9
fix group permissions on openssl
Ikuni17 Jul 24, 2024
f0d9dc5
add dockerignore
Ikuni17 Jul 24, 2024
a73e9a4
comment on bootstrap
Ikuni17 Jul 24, 2024
7cd70fe
use jammy
Ikuni17 Jul 24, 2024
0a5244a
remove caching setup - not working
Ikuni17 Jul 25, 2024
a9bb76a
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 25, 2024
3e58bd4
remove dockerignore
Ikuni17 Jul 25, 2024
5ba4685
patch optimizer for fips
Ikuni17 Jul 25, 2024
5824a3f
add kbn fips setting
Ikuni17 Jul 25, 2024
7e45938
rename scripts. cleanup post create. add post start
Ikuni17 Jul 25, 2024
2c4a0b1
patch node modules. fix kbn fips setting
Ikuni17 Jul 25, 2024
832435e
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 26, 2024
6115592
remove unused var
Ikuni17 Jul 26, 2024
e4b2f77
add env.sh and refactor lifecycle
Ikuni17 Jul 26, 2024
faea104
reorder dockerfile for caching
Ikuni17 Jul 27, 2024
17f1148
wip non-fips mode switch
Ikuni17 Jul 27, 2024
8d5aadd
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 29, 2024
37e766e
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Jul 31, 2024
a346b8b
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 1, 2024
cda13d5
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 2, 2024
e91d792
add editorconfig extension
Ikuni17 Aug 2, 2024
6372431
fix shell loading
Ikuni17 Aug 5, 2024
c042107
fix unbound var
Ikuni17 Aug 5, 2024
86cb018
fix env file paths
Ikuni17 Aug 5, 2024
5ba96c5
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 7, 2024
5ddfed2
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 8, 2024
e3150fa
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 9, 2024
22e33e1
docs wip. cleanup
Ikuni17 Aug 12, 2024
0110837
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 12, 2024
a2a756e
fix bug during fips setup
Ikuni17 Aug 12, 2024
e770c98
add shellcheck
Ikuni17 Aug 13, 2024
c6bb271
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 13, 2024
918f6d9
remove yq
Ikuni17 Aug 13, 2024
827ecab
fix failed bootstrap in fips mode
Ikuni17 Aug 13, 2024
e5ca280
remove post_create
Ikuni17 Aug 13, 2024
99b301f
add bootstrap warning
Ikuni17 Aug 13, 2024
f318489
add more default extensions
Ikuni17 Aug 13, 2024
2a059ce
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 13, 2024
5c02d30
adjust logging
Ikuni17 Aug 14, 2024
bd20524
docs
Ikuni17 Aug 14, 2024
bd125fc
update readme
Ikuni17 Aug 14, 2024
cb26731
use external doc link
Ikuni17 Aug 14, 2024
3138079
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 14, 2024
bb74f9e
fix shell swap
Ikuni17 Aug 14, 2024
c777a03
update snapshot for hashing algorithm change
Ikuni17 Aug 14, 2024
6c43ea0
forward debug ports
Ikuni17 Aug 15, 2024
e741849
dockerfile ports
Ikuni17 Aug 15, 2024
ca1e62f
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 15, 2024
e94c474
Merge branch 'main' into chore/101/fips-dev-containers
Ikuni17 Aug 19, 2024
fc7e886
Merge remote-tracking branch 'upstream/main' into chore/101/fips-dev-…
Ikuni17 Aug 20, 2024
e8e5104
remove dependabot
Ikuni17 Aug 20, 2024
1e5f15f
add renovate devcontainers
Ikuni17 Aug 20, 2024
300b325
added support for headed browser tests
Ikuni17 Aug 20, 2024
9913e71
enable devcontainer manager
Ikuni17 Aug 20, 2024
ab303df
Merge branch 'main' into chore/101/fips-dev-containers
Ikuni17 Aug 23, 2024
73c31de
Merge branch 'main' into chore/101/fips-dev-containers
Ikuni17 Aug 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .devcontainer/.env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# /bin/bash or /bin/zsh (oh-my-zsh is installed by default as well)
SHELL=/bin/bash
# Switch to 1 to enable FIPS environment, any other value to disable
FIPS=0
69 changes: 69 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
ENV HOME=/home/vscode
ENV NVM_DIR=${HOME}/nvm
ENV NVM_VERSION=v0.39.1
ENV KBN_DIR=/workspaces/kibana
ENV OPENSSL_PATH=${HOME}/openssl
# Only specific versions are FIPS certified.
ENV OPENSSL_VERSION='3.0.8'

RUN apt-get update && apt-get install -y curl git zsh locales docker.io perl make gcc

RUN locale-gen en_US.UTF-8

# Oh My Zsh setup
RUN if [ ! -d "$HOME/.oh-my-zsh" ]; then \
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"; \
fi && \
ZSH_CUSTOM=${ZSH_CUSTOM:-~/.oh-my-zsh/custom} && \
if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then \
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions; \
fi && \
sed -i 's/plugins=(git)/plugins=(git ssh-agent npm docker zsh-autosuggestions)/' /home/vscode/.zshrc

# Docker-in-Docker setup
RUN usermod -aG docker vscode

# FIPS setup
# https://github.com/openssl/openssl/blob/openssl-3.0/README-FIPS.md
# https://www.openssl.org/docs/man3.0/man7/fips_module.html
WORKDIR ${HOME}

RUN set -e ; \
mkdir -p "${OPENSSL_PATH}"; \
curl --retry 8 -S -L -O "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" ; \
curl --retry 8 -S -L -O "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz.sha256" ; \
echo "$(cat openssl-${OPENSSL_VERSION}.tar.gz.sha256) openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c ; \
tar -zxf "openssl-${OPENSSL_VERSION}.tar.gz" ; \
rm -rf openssl-${OPENSSL_VERSION}.tar* ; \
cd "${OPENSSL_PATH}-${OPENSSL_VERSION}" ; \
./Configure --prefix="${OPENSSL_PATH}" --openssldir="${OPENSSL_PATH}/ssl" --libdir="${OPENSSL_PATH}/lib" shared -Wl,-rpath,${OPENSSL_PATH}/lib enable-fips; \
make -j $(nproc) > /dev/null ; \
make install > /dev/null ; \
rm -rf "${OPENSSL_PATH}-${OPENSSL_VERSION}" ; \
chown -R 1000:1000 "${OPENSSL_PATH}";

WORKDIR ${KBN_DIR}

# Node and NVM setup
COPY .node-version /tmp/
RUN mkdir -p $NVM_DIR && \
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh | bash && \
. "$NVM_DIR/nvm.sh" && \
NODE_VERSION=$(cat /tmp/.node-version) && \
nvm install ${NODE_VERSION} && \
nvm use ${NODE_VERSION} && \
nvm alias default ${NODE_VERSION} && \
npm install -g yarn && \
echo "source $NVM_DIR/nvm.sh" >> ${HOME}/.bashrc && \
echo "source $NVM_DIR/nvm.sh" >> ${HOME}/.zshrc && \
chown -R 1000:1000 "${HOME}/.npm"

# Reload the env everytime a new shell is opened incase the .env file changed.
RUN echo "source $KBN_DIR/.devcontainer/scripts/env.sh" >> ${HOME}/.bashrc && \
echo "source $KBN_DIR/.devcontainer/scripts/env.sh" >> ${HOME}/.zshrc

# This is for documentation. Ports are exposed via devcontainer.json
EXPOSE 9200 5601
1 change: 1 addition & 0 deletions .devcontainer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
See the [dev docs](https://github.com/elastic/kibana/blob/main/dev_docs/getting_started/setting_up_a_development_env.mdx#using-the-kibana-dev-container-optional) for information on using the Kibana Dev Container.
28 changes: 28 additions & 0 deletions .devcontainer/config/nodejs.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
##########################################################################
## ##
## This OpenSSL config is only loaded when running Kibana in FIPS mode. ##
## ##
## See: ##
## https://github.com/openssl/openssl/blob/openssl-3.0/README-FIPS.md ##
## https://www.openssl.org/docs/man3.0/man7/fips_module.html ##
## ##
##########################################################################

nodejs_conf = nodejs_init
.include /home/vscode/openssl/ssl/fipsmodule.cnf

[nodejs_init]
providers = provider_sect
alg_section = algorithm_sect

[provider_sect]
default = default_sect
# The fips section name should match the section name inside the
# included fipsmodule.cnf.
fips = fips_sect

[default_sect]
activate = 1

[algorithm_sect]
default_properties = fips=yes
35 changes: 35 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "Kibana",
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"ms-azuretools.vscode-docker",
"editorconfig.editorconfig",
"timonwong.shellcheck",
"eamodio.gitlens",
"github.vscode-pull-request-github"
]
}
},
"forwardPorts": [
9200,
5601
],
"postStartCommand": "/workspaces/kibana/.devcontainer/scripts/post_start.sh",
"remoteUser": "vscode",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"version": "latest",
"dockerDashComposeVersion": "latest"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"installDirectlyFromGitHubRelease": true,
"version": "latest"
}
}
}
48 changes: 48 additions & 0 deletions .devcontainer/scripts/env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/bash

ENV_PATH="${KBN_DIR}/.devcontainer/.env"
KBN_CONFIG_FILE="${KBN_DIR}/config/kibana.dev.yml"

setup_fips() {
if [ ! -f "$KBN_CONFIG_FILE" ]; then
touch "$KBN_CONFIG_FILE"
fi

if [ -n "$FIPS" ] && [ "$FIPS" = "1" ]; then
sed -i '/xpack.security.experimental.fipsMode.enabled:/ {s/.*/xpack.security.experimental.fipsMode.enabled: true/; t}; $a\xpack.security.experimental.fipsMode.enabled: true' "$KBN_CONFIG_FILE"

# Patch node_modules so we can start Kibana in dev mode
sed -i 's/hashType = hashType || '\''md5'\'';/hashType = hashType || '\''sha1'\'';/g' "${KBN_DIR}/node_modules/file-loader/node_modules/loader-utils/lib/getHashDigest.js"
sed -i 's/const hash = createHash("md4");/const hash = createHash("sha1");/g' "${KBN_DIR}/node_modules/webpack/lib/ModuleFilenameHelpers.js"
sed -i 's/contentHash: createHash("md4")/contentHash: createHash("sha1")/g' "${KBN_DIR}/node_modules/webpack/lib/SourceMapDevToolPlugin.js"

export OPENSSL_MODULES="$OPENSSL_PATH/lib/ossl-modules"
export NODE_OPTIONS="--enable-fips --openssl-config=$KBN_DIR/.devcontainer/config/nodejs.cnf"
echo "FIPS mode enabled"
echo "If manually bootstrapping in FIPS mode use: NODE_OPTIONS='' yarn kbn bootstrap"
else
sed -i '/xpack.security.experimental.fipsMode.enabled:/ {s/.*/xpack.security.experimental.fipsMode.enabled: false/; t}; $a\xpack.security.experimental.fipsMode.enabled: false' "$KBN_CONFIG_FILE"
fi
}

setup_shell() {
if [ -n "$SHELL" ] && [ -x "$SHELL" ]; then
current_shell=$(ps -p $$ -o comm=)
desired_shell=$(basename "$SHELL")

if [ "$current_shell" != "$desired_shell" ]; then
sudo chsh -s "$SHELL" vscode
exec "$SHELL"
fi
else
echo "Shell is not set or not executable, using bash"
fi
}

if [ -f "$ENV_PATH" ]; then
source "$ENV_PATH"
setup_fips
setup_shell
else
echo ".env file not found, using default values"
fi
5 changes: 5 additions & 0 deletions .devcontainer/scripts/post_start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

# If FIPS mode is enabled, there can be issues installing some dependencies due to invalid algorithms.
# So override the NODE_OPTIONS environment variable to disable FIPS mode.
NODE_OPTIONS='' yarn kbn bootstrap
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -1261,6 +1261,7 @@ x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant
/kbn_pm/ @elastic/kibana-operations
/x-pack/dev-tools @elastic/kibana-operations
/catalog-info.yaml @elastic/kibana-operations @elastic/kibana-tech-leads
/.devcontainer/ @elastic/kibana-operations

# Appex QA
/src/dev/code_coverage @elastic/appex-qa
Expand Down
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for more information:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
# https://containers.dev/guide/dependabot

version: 2
updates:
- package-ecosystem: "devcontainers"
directory: "/"
schedule:
interval: weekly
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,5 @@ x-pack/test/security_api_integration/plugins/audit_log/audit.log
# ignore FTR temp directory
.ftr
role_users.json

.devcontainer/.env
29 changes: 27 additions & 2 deletions dev_docs/getting_started/setting_up_a_development_env.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ id: kibDevTutorialSetupDevEnv
slug: /kibana-dev-docs/getting-started/setup-dev-env
title: Set up a Development Environment
description: Learn how to setup a development environment for contributing to the Kibana repository
date: 2022-07-07
tags: ['kibana', 'onboarding', 'dev', 'architecture', 'setup']
date: 2024-08-09
tags: ['kibana', 'onboarding', 'dev', 'architecture', 'setup', 'devcontainer']
---

Setting up a development environment is pretty easy.
Expand Down Expand Up @@ -92,3 +92,28 @@ node scripts/register_git_hook
```

After the script completes the pre-commit hook will be created within the file `.git/hooks/pre-commit`. If you choose to not install it, don’t worry, we still run a quick CI check to provide feedback earliest as we can about the same checks.

## Using the Kibana Dev Container (optional)

Kibana also supports using a [dev container](https://containers.dev/) which can integrate with various editors and tools [(supported tools)](https://containers.dev/supporting). The dev container provides a consistent development environment across different machines and setups which is based on Ubuntu Jammy (22.04). The only prerequisite is having [Docker](https://www.docker.com/) installed locally. VS Code is the recommended editor and will be used for these instructions because it is the most mature, but it is not required.

### Setting up the Dev Container

1. Make a copy of `.devcontainer/.env.template` and rename it to `.devcontainer/.env`. Edit any values you're interested in.
1. There are three options for mounting the Kibana repo into the container:
- **Local Filesystem**: Clone the repo locally, or use an existing copy, and open it in VS Code. When prompted, select "Reopen in Dev Container". This uses a bind mount, allowing the container to access and modify files directly on your local filesystem. Your git credentials should be automatically mounted in the container as well. Note that Bazel will create symlinks and a cache inside the container file system. So, if switching to working on your local filesystem afterwards, you will need to bootstrap again.
- **Docker Repo Volume**: Use the `Dev Containers: Clone Repository in Named Container Volume...` command from the Command Palette (`F1`). This clones the repo into a Docker volume, isolating it from your local filesystem. You will need to configure your git credentials manually in this isolated environment.
- **Docker PR Volume**: Use the `Dev Containers: Clone GitHub Pull Request in Named Container Volume...` command from the Command Palette (`F1`). This is the same as the previous option, but can be useful for testing a PR in insolation of your local filesystem.
1. VS Code will then build the container, this will take a few minutes the first time, but subsequent builds will utilize Docker caching and be much faster.
1. Once the container is built and started, it will automatically run `yarn kbn bootstrap`.
1. You should see the Kibana repo and your terminal will be inside the container. You can develop as normal now, including running `yarn es` from inside the container.

### Customizing the Dev Container
Installing any extra extensions or making adjustments to the OS environment inside the container will not have an effect on your local OS or VS Code installation. Editing the `devcontainer.json` or `.devcontainer/Dockerfile` should be reserved for changes to all dev environments.

### FIPS Mode

The dev container is pre-configured to run Kibana in FIPS mode if needed. Simply change the `.env` file to `FIPS=1` and reopen your terminal. There should be a log message in your terminal which indicates `FIPS mode enabled`.

### Troubleshooting
- Sometimes when rebuilding the container, there will be an error message that it failed. Usually hitting retry will fix this, and is only related to VS Code trying to reconnect to the container too quickly.
2 changes: 1 addition & 1 deletion packages/kbn-optimizer/src/common/bundle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ it('creates cache keys', () => {
},
"dllName": "manifest-name",
"dllRefs": Object {
"./some-foo.ts": "1:ku/53aRMuAA+4TmQeCWA/w:GtuPW9agF2yecW0xAIHtUQ",
"./some-foo.ts": "1:8ZZnQFMG7xLG5lQakybjWCNbihQ:6Yk7GIWDT9j4uCAeHPI2xJcHgrE",
},
"spec": Object {
"banner": undefined,
Expand Down
2 changes: 1 addition & 1 deletion packages/kbn-optimizer/src/common/dll_manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export interface ParsedDllManifest {
}

const hash = (s: string) => {
return Crypto.createHash('md5').update(s).digest('base64').replace(/=+$/, '');
return Crypto.createHash('sha1').update(s).digest('base64').replace(/=+$/, '');
};

export function parseDllManifest(manifest: DllManifest): ParsedDllManifest {
Expand Down
1 change: 1 addition & 0 deletions packages/kbn-optimizer/src/worker/webpack.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export function getWebpackConfig(
profile: worker.profileWebpack,

output: {
hashFunction: 'sha1',
path: bundle.outputDir,
filename: `${bundle.id}.${bundle.type}.js`,
chunkFilename: `${bundle.id}.chunk.[id].js`,
Expand Down