blob: 590c50fb1acc5f6f3db33fbce986664ebb036a6c [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-112407000-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-112407000-2');
</script>
<!-- Google Tag Manager -->
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-KS8HHSF');
</script>
<!-- End Google Tag Manager -->
<head>
<base href="/codewind/" />
<title>Deploying Codewind components individually | Codewind</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Deploying Codewind components individually">
<meta name="keywords" content="users, projects, Kubernetes, LDAP, user management, access management, login, deployment, pod, security, securing cloud connection, remote deployment of Code..."/>
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
<link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:300,400,600&display=swap" rel="stylesheet">
<!-- Bootstrap CSS CDN -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<link rel="stylesheet" href="css/styles.css">
<link rel="stylesheet" href="css/docs.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/themes/prism.min.css">
</head>
<body data-spy="scroll" data-target="#toc">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KS8HHSF"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div class="main">
<!-- Bootstrap NavBar -->
<nav class="navbar navbar-expand-lg navbar-light cw-banner fixed-top" aria-label="topnav">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="">
<img alt="Codewind logo image" title="Codewind logo image" src="images/header-logo.svg" class="cw-header-logo" alt="">
</a>
<div class="collapse navbar-collapse justify-content-end cw-navbar-padding" id="navbarNavDropdown">
<ul class="navbar-nav cw-navbar-nav">
<li class="nav-item cw-navbar-item cw-header-link-docs">
<a class="nav-link cw-nav-link cw-header-link-text" href="gettingstarted.html">Docs</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link-news">
<a class="nav-link cw-nav-link cw-header-link-text" href="news.html">News</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link-news">
<a class="nav-link cw-nav-link cw-header-link-text" href="https://medium.com/codewind">Blog</a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://github.com/eclipse/codewind"><img alt="Codewind Github" class="banner-image" title="Codewind Github" data-toggle="tooltip" data-placement="top" id="cw_github_stars" title="..." src="images/banner/github.svg"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" class="banner-image" title="Codewind Twitter" src="images/banner/twitter.png"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" class="banner-image" title="Codewind Mattermost" src="images/banner/mattermost.png"/></a>
</li>
<li class="nav-item cw-navbar-item cw-header-link">
<a class="nav-link cw-nav-link" href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" class="banner-image" title="Codewind YouTube" src="images/banner/youtube.png"/></a>
</li>
<!-- li class="nav-item cw-navbar-item" id="download-li">
<button onClick="window.location.href='https://microclimate.dev/download/codewind';" type="button" class="btn cw-download-button">Download</button>
<a href="https://microclimate.dev/download/codewind" class="nav-link cw-nav-link cw-download-link" href="#">Download</a>
</li> -->
<!-- Smaller devices menu END -->
</ul>
</div>
</nav>
<!-- End Bootstrap NavBar -->
<!-- Bootstrap row -->
<div class="row" id="body-row">
<!-- Sidebar -->
<div id="sidebar-container" class="bg-light" role="navigation" aria-label="sidebar">
<!-- Bootstrap List Group -->
<ul class="list-group sticky-top bg-light cw-sticky-offset">
<!-- Start single page getting started -->
<a href="overview.html"
class="bg-light list-group-item list-group-item-action">
What is Codewind?
</a>
<a href="#getting_started" data-url="gettingstarted.html" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="menu-collapsed">Getting started</span>
<span class="submenu-icon"></span>
</div>
</a>
<div id="getting_started" class="cw-sidebar-div cw-sidebar-submenu collapse" style="">
<a href="#vs_code" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
VS Code
<span class="submenu-icon"></span>
</a>
<!-- 3d level - eclipse -->
<div id="vs_code" class="cw-sidebar-div cw-sidebar-submenu-submenu collapse" style="">
<a href="mdt-vsc-getting-started.html"
class="bg-light list-group-item list-group-item-action">
Installing Codewind for VS Code
</a>
<a href="mdt-vsc-firstproject.html"
class="bg-light list-group-item list-group-item-action">
Creating your first project
</a>
<a href="vsc-codechange.html"
class="bg-light list-group-item list-group-item-action">
Making a code change
</a>
</div>
<a href="#eclipse" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
Eclipse
<span class="submenu-icon"></span>
</a>
<!-- 3d level - eclipse -->
<div id="eclipse" class="cw-sidebar-div cw-sidebar-submenu-submenu collapse" style="">
<a href="mdt-eclipse-getting-started.html"
class="bg-light list-group-item list-group-item-action">
Installing Codewind for Eclipse
</a>
<a href="mdt-eclipse-firstproject.html"
class="bg-light list-group-item list-group-item-action">
Creating your first project
</a>
<a href="mdt-eclipse-codechange.html"
class="bg-light list-group-item list-group-item-action">
Making a code change
</a>
</div>
<a href="#eclipse_che" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
Eclipse Che
<span class="submenu-icon"></span>
</a>
<!-- 3d level - eclipse -->
<div id="eclipse_che" class="cw-sidebar-div cw-sidebar-submenu-submenu collapse" style="">
<a href="mdt-che-installinfo.html"
class="bg-light list-group-item list-group-item-action">
Installing Eclipse Che for Codewind
</a>
<a href="mdt-che-setupregistries.html"
class="bg-light list-group-item list-group-item-action">
Adding registries in Che
</a>
<a href="mdt-che-createcodewindworkspace.html"
class="bg-light list-group-item list-group-item-action">
Creating a Codewind workspace in Che
</a>
<a href="mdt-che-tektonpipelines.html"
class="bg-light list-group-item list-group-item-action">
Setup to use Tekton Pipelines
</a>
<a href="mdt-che-usingtheia.html"
class="bg-light list-group-item list-group-item-action">
Using Codewind in Theia
</a>
<a href="mdt-che-odo-support.html"
class="bg-light list-group-item list-group-item-action">
OpenShift Do (odo) support in Codewind
</a>
<a href="openshiftregistry.html"
class="bg-light list-group-item list-group-item-action">
Using the OpenShift Registry
</a>
<a href="supportingmultipleusers.html"
class="bg-light list-group-item list-group-item-action">
Support for multiple users
</a>
<a href="viewkibanalogs.html"
class="bg-light list-group-item list-group-item-action">
Installing Kibana and filtering logs in IBM Cloud Private
</a>
<a href="mdt-che-uninstall.html"
class="bg-light list-group-item list-group-item-action">
Uninstalling Codewind for Eclipse Che
</a>
</div>
<a href="#intellij" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
IntelliJ
<span class="submenu-icon"></span>
</a>
<!-- 3d level - eclipse -->
<div id="intellij" class="cw-sidebar-div cw-sidebar-submenu-submenu collapse" style="">
<a href="mdt-intellij-getting-started.html"
class="bg-light list-group-item list-group-item-action">
Installing Codewind for IntelliJ
</a>
</div>
</div>
<a href="#local_to_remote_development" data-url="" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="menu-collapsed">Local to remote development</span>
<span class="submenu-icon"></span>
</div>
</a>
<div id="local_to_remote_development" class="cw-sidebar-div cw-sidebar-submenu collapse" style="">
<a href="remote-overview.html"
class="bg-light list-group-item list-group-item-action">
Overview
</a>
<a href="remotedeploy-combo.html"
class="bg-light list-group-item list-group-item-action">
Deploying all-in-one
</a>
<a href="remotedeploy-single.html"
class="cw-current-page bg-light list-group-item list-group-item-action">
Deploying components individually
</a>
<a href="remotedeploy-vscode.html"
class="bg-light list-group-item list-group-item-action">
Connecting VS Code to a remote deployment
</a>
<a href="remotedeploy-eclipse.html"
class="bg-light list-group-item list-group-item-action">
Connecting Eclipse to a remote deployment
</a>
<a href="remote-removing.html"
class="bg-light list-group-item list-group-item-action">
Removing a remote deployment
</a>
</div>
<a href="workingwithtemplates.html"
class="bg-light list-group-item list-group-item-action">
Working with templates
</a>
<a href="#developing_projects" data-url="" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="menu-collapsed">Developing projects</span>
<span class="submenu-icon"></span>
</div>
</a>
<div id="developing_projects" class="cw-sidebar-div cw-sidebar-submenu collapse" style="">
<a href="checkingstatuses.html"
class="bg-light list-group-item list-group-item-action">
Checking the application and build statuses
</a>
<a href="importing-existing-projects.html"
class="bg-light list-group-item list-group-item-action">
Importing existing projects
</a>
<a href="project-settings.html"
class="bg-light list-group-item list-group-item-action">
Project settings
</a>
<a href="referencing-files.html"
class="bg-light list-group-item list-group-item-action">
Referencing files external to a project
</a>
</div>
<a href="#performance_monitoring" data-url="" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="menu-collapsed">Performance monitoring</span>
<span class="submenu-icon"></span>
</div>
</a>
<div id="performance_monitoring" class="cw-sidebar-div cw-sidebar-submenu collapse" style="">
<a href="metrics-dashboard.html"
class="bg-light list-group-item list-group-item-action">
Understanding the Metrics Dashboard
</a>
<a href="performance.html"
class="bg-light list-group-item list-group-item-action">
Monitoring applications with the performance dashboard
</a>
</div>
<a href="#openapi_tools" data-url="" data-toggle="collapse" aria-expanded="false" class="bg-light list-group-item list-group-item-action flex-column align-items-start collapsed">
<div class="d-flex w-100 justify-content-start align-items-center">
<span class="menu-collapsed">OpenAPI Tools</span>
<span class="submenu-icon"></span>
</div>
</a>
<div id="openapi_tools" class="cw-sidebar-div cw-sidebar-submenu collapse" style="">
<a href="open-api-tools-for-vscode.html"
class="bg-light list-group-item list-group-item-action">
Codewind OpenAPI Tools for VS Code
</a>
<a href="open-api-tools-for-eclipse.html"
class="bg-light list-group-item list-group-item-action">
Codewind OpenAPI Tools for Eclipse
</a>
</div>
<a href="troubleshooting.html"
class="bg-light list-group-item list-group-item-action">
Troubleshooting
</a>
</ul>
<!-- List Group END-->
</div>
<!-- sidebar-container END -->
<!-- MAIN -->
<div id="content-container">
<div class="py-5 px-5">
<div class="cw-docs-spacer"></div>
<div role="main"><h1 id="installing-components-individually-for-a-codewind-remote-deployment">Installing components individually for a Codewind remote deployment</h1>
<p>Codewind includes a CLI to simplify the installation process. Find the <code class="highlighter-rouge">cwctl</code> CLI in your HOME directory under the <code class="highlighter-rouge">~/.codewind/&lt;version&gt;</code> path.</p>
<p>Use the following command to install components individually for a remote deployment with a new Keycloak and a new Codewind service:</p>
<p><code class="highlighter-rouge">cwctl --insecure install remote</code></p>
<p>This command requires various flags to specify where and what to install.</p>
<p>For OpenShift, Codewind is required to run as privileged and as root because it builds container images. Run the following commands where <code class="highlighter-rouge">&lt;namespace&gt;</code> is the namespace into which you plan to install Codewind:</p>
<ul>
<li>For Codewind on OpenShift, you must create the namespace first. To do this, enter: <code class="highlighter-rouge">oc create namespace &lt;Codewind-namespace&gt;</code>.</li>
<li>If you are on IBM Public Cloud, you must install Keycloak and Codewind in separate namespaces, for example, <code class="highlighter-rouge">oc create namespace &lt;keycloak-namespace&gt;</code> and then <code class="highlighter-rouge">oc create namespace &lt;Codewind-namespace&gt;</code>.</li>
</ul>
<p>For both IBM Public Cloud and OpenShift, run the following commands on only the Codewind namespace:</p>
<ul>
<li>Switch to your Codewind-only namespace using: <code class="highlighter-rouge">oc project &lt;Codewind-namespace&gt;</code>.</li>
<li>To enable privileged containers, enter <code class="highlighter-rouge">oc adm policy add-scc-to-group privileged system:serviceaccounts:&lt;Codewind-namespace&gt;</code>.</li>
<li>To enable containers to run as root, enter <code class="highlighter-rouge">oc adm policy add-scc-to-group anyuid system:serviceaccounts:&lt;Codewind-namespace&gt;</code>.</li>
</ul>
<h2 id="deploying-keycloak">Deploying Keycloak</h2>
<ol>
<li>Open a new terminal window on your local workstation.</li>
<li>Go to your home directory and then to the Codewind CLI:</li>
</ol>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ~/.codewind/0.8.0
</code></pre></div></div>
<p>Ensure that you are logged in to your Kubernetes or OpenShift cluster:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ kubectl get namespaces
</code></pre></div></div>
<p>If the command is successful, you see a list of current namespaces. If not, ensure that you are logged in to your Kubernetes or OpenShift cluster.</p>
<h2 id="determine-your-cloud-ingress-domain">Determine your Cloud ingress domain</h2>
<p>The CLI command requires an ingress domain. Find yours based on any of the existing routes:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>oc get routes -n default
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
registry-console registry-console-default.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud registry-console registry-console passthrough None
</code></pre></div></div>
<p>In the example the ingress domain is:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
</code></pre></div></div>
<h2 id="deploying-authentication-services-keycloak">Deploying Authentication services (Keycloak)</h2>
<p>Determine the following values for your cloud deployment:</p>
<ul>
<li><code class="highlighter-rouge">namespace</code>: The <code class="highlighter-rouge">cwctl</code> command creates the namespace if it does not yet exist.</li>
<li><code class="highlighter-rouge">kdevuser</code> and <code class="highlighter-rouge">kdevpass</code>: A developer user name and password that will be granted access to this deployment of Codewind. The <code class="highlighter-rouge">cwctl</code> command creates the user and adds it to the realm if it does not exist.</li>
<li><code class="highlighter-rouge">ingress</code>: The ingress domain for your cloud environment.</li>
</ul>
<p>To install Codewind, enter the following example command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./cwctl --insecure install remote \
--konly \
--namespace keycloak-0001 \
--kadminuser admin \
--kadminpass passw0rd \
--ingress mycluster-12345-7674b4bd9abbdeea0be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
</code></pre></div></div>
<p>This command performs the following actions:</p>
<ul>
<li>Deploys just a Keycloak service into the <code class="highlighter-rouge">keycloak-0001 </code>namespace.</li>
<li>Creates an initial Keycloak administrator user called <code class="highlighter-rouge">admin</code> with password <code class="highlighter-rouge">passw0rd</code>.</li>
<li>Uses the ingress domain appropriate to the deployment environment.</li>
</ul>
<p>Running the command, you see the following example output:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INFO[0000] Checking namespace codewind-0001 exists
INFO[0000] Creating codewind-0001 namespace
INFO[0000] Using namespace : codewind-0001
INFO[0000] Container images :
INFO[0000] eclipse/codewind-pfe-amd64:latest
INFO[0000] eclipse/codewind-performance-amd64:latest
INFO[0000] eclipse/codewind-keycloak-amd64:latest
INFO[0000] eclipse/codewind-gatekeeper-amd64:latest
INFO[0000] Running on OpenShift: true
...
INFO[0159] Keycloak is available at: https://codewind-keycloak-k55dxqhx.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
</code></pre></div></div>
<p>Keycloak has been sucessfully deployed and is available.</p>
<h2 id="deploying-a-remote-codewind-service">Deploying a remote Codewind service</h2>
<p>To deploy a new Codewind instance in Kubernetes, generate a user in Keycloak and configure security. You can use the CLI <code class="highlighter-rouge">cwctl</code> with additional options, for example:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./cwctl --insecure install remote \
--namespace codewind-0001 \
--krealm codewind \
--kclient codewind \
--kadminuser admin \
--kadminpass passw0rd \
--kdevuser developer \
--kdevpass passw0rd \
--ingress mycluster-12345-7674b4bd9abbdeea0be228236d5275c9-0001.eu-gb.containers.appdomain.cloud \
--kurl https://codewind-keycloak-k55dxqhx.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
</code></pre></div></div>
<p>This command performs the following actions:</p>
<ul>
<li>Deploys Codewind into the <code class="highlighter-rouge">codewind-0001 </code>namespace.</li>
<li>Configures the existing previously deployed Keycloak instance with a realm called <code class="highlighter-rouge">codewind</code>.</li>
<li>Adds a client prefix of <code class="highlighter-rouge">codewind</code>.</li>
<li>Creates an initial Codewind user called <code class="highlighter-rouge">developer</code> with password <code class="highlighter-rouge">passw0rd</code>.</li>
<li>Uses the ingress appropriate to the deployment environment.</li>
<li>Adds the Keycloak admin credentials of <code class="highlighter-rouge">admin</code> with password <code class="highlighter-rouge">passw0rd</code>.</li>
</ul>
<p>Running the command, you see the following example output:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INFO[0000] Checking namespace codewind-0001 exists
INFO[0000] Creating codewind-0001 namespace
INFO[0000] Using namespace : codewind-0001
INFO[0000] Container images :
INFO[0000] eclipse/codewind-pfe-amd64:latest
INFO[0000] eclipse/codewind-performance-amd64:latest
INFO[0000] eclipse/codewind-keycloak-amd64:latest
INFO[0000] eclipse/codewind-gatekeeper-amd64:latest
INFO[0000] Running on OpenShift: true
...
INFO[0156] Waiting for Codewind Gatekeeper to start on https://codewind-gatekeeper-k55333j0.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
INFO[0159] Waiting for Codewind PFE to start
INFO[0159] Codewind is available at: https://codewind-gatekeeper-k55333j0.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud
</code></pre></div></div>
<p>Codewind is successfully deployed and is available.</p>
<p>You can re-run the command several times. Each time you re-run the command, a new Codewind deployment is generated against the existing Keycloak service. You must have your own Codewind instance. However, you might also have more that one instance assigned to you through role-based access control that <code class="highlighter-rouge">cwctl</code> sets up automatically.</p>
<p>Make a note of the address provided because you need it for configuring your IDE in the next step, for example: <code class="highlighter-rouge">https://codewind-gatekeeper-k55333j0.mycluster-12345-7674b4bd9abbdeea5be228236d5275c9-0001.eu-gb.containers.appdomain.cloud</code></p>
<p>Next step: Connect your <a href="remotedeploy-vscode.html">VSCode</a> or <a href="remotedeploy-eclipse.html">Eclipse</a> IDE to the new Codewind deployment.</p>
</div>
</div>
<div class="py-5 px-5 text-right">
Last update: Feb 14, 2020
</div>
</div>
</div>
<!-- footer row -->
<footer>
<div id="footer-div-mobile">
<div class="row">
<div class="col-sm-12 text-center">
<span>Useful Links:</span>
<br/><br/>
<a class="cw-footer-links" href="http://www.eclipse.org">Eclipse Foundation</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal">Legal</a><br/>
</div>
</div>
<div class="cw_footer_display_flex cw-footer-same-height cw-footer-center">
<div class="cw_footer_display_icons row">
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="mailto:codewind-dev@eclipse.org"><img alt="Send us an email" title="Send us an email" src="images/email-icon.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" title="Codewind Twitter" src="images/twitter-logo.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://github.com/eclipse/codewind"><img alt="Codewind Github" title="Codewind Github" src="images/github-logo.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class=" cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" title="Codewind Mattermost" src="images/mattermost-logo.png" class="cw-logo-mm" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" title="Codewind YouTube" src="images/youtube-logo-dark.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center col-md-3 col-sm-6 col-xs-12">
<div>
<div>
<a href="http://www.eclipse.org"><img class="cw-logo-eclipse-mobile" alt="Eclipse" title="Eclipse" src="images/eclipse.svg"/></a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row cw-footer-desktop" id="footer-div">
<div class="cw-footer-left">
<div class="px-5 cw-font-12>
<span class="cw-font-14">Useful Links:</span>
<br/><br/>
<a class="cw-footer-links" href="http://www.eclipse.org">Eclipse Foundation</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
<a class="cw-footer-links" href="http://www.eclipse.org/legal">Legal</a><br/>
</div>
</div>
<div class="cw-footer-border-right"></div>
<div class="cw_footer_display_flex cw-footer-same-height cw-footer-center">
<div class="cw_footer_display_icons">
<div class="cw-footer-col text-center">
<div>
<div>
<a href="mailto:codewind-dev@eclipse.org"><img alt="Send us an email" title="Send us an email" src="images/email-icon.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://twitter.com/EclipseCodewind"><img alt="Codewind Twitter" title="Codewind Twitter" src="images/twitter-logo.svg" class="cw-logo" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://github.com/eclipse/codewind"><img alt="Codewind Github" title="Codewind Github" src="images/github-logo.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
<div class=" cw-footer-col text-center">
<div class="cw-logo-mm" >
<div class="cw-logo-mm" >
<a href="https://mattermost.eclipse.org/eclipse/channels/eclipse-codewind"><img alt="Codewind Mattermost" title="Codewind Mattermost" src="images/mattermost-logo.png" class="cw-logo-mm" /></a>
</div>
</div>
</div>
<div class="cw-footer-col text-center">
<div>
<div>
<a href="https://www.youtube.com/channel/UCnKCVK6RFDyHFqUmXlAhCHQ"><img alt="Codewind YouTube" title="Codewind YouTube" src="images/youtube-logo-dark.svg"
class="cw-logo" /></a>
</div>
</div>
</div>
</div>
</div>
<div class="cw-footer-border-right"></div>
<div class="cw-footer-right cw-footer-same-height cw-footer-vcenter">
<div class="cw-footer-eclipse-img cw-footer-same-height px-5 ">
<a href="http://www.eclipse.org">
<img alt="Eclipse" title="Eclipse" src="images/eclipse.svg"/>
</a>
</div>
</div>
</div>
</footer>
<!-- footer row END -->
<!-- Main Col END -->
<!-- Jquery -->
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
<!-- Font Awesome JS -->
<script defer src="https://use.fontawesome.com/releases/v5.0.13/js/solid.js"
integrity="sha384-tzzSw1/Vo+0N5UhStP3bvwWPq+uvzCMfrN1fEFe+xBmv1C/AtVX5K0uZtmcHitFZ" crossorigin="anonymous">
</script>
<script defer src="https://use.fontawesome.com/releases/v5.0.13/js/fontawesome.js"
integrity="sha384-6OIrr52G08NpOFSZdxxz1xdNSndlD4vdcf/q2myIUVO0VsqaGHJsB0RaBE01VTOY" crossorigin="anonymous">
</script>
<script src="js/jquery.matchHeight-min.js"></script>
<script src="js/index.js"></script>
<script src="js/docs.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-docker.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-json.min.js"></script>
</div>
</body>
</html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.0/anchor.min.js"></script>
<script>
$(document).ready(function(){
anchors.options.placement = 'left';
anchors.add('h1');
anchors.add('h2');
anchors.add('h3');
anchors.add('h4');
});
</script>