diff --git a/assets/scss/_adopters.scss b/assets/scss/_adopters.scss new file mode 100644 index 0000000..eb68d97 --- /dev/null +++ b/assets/scss/_adopters.scss @@ -0,0 +1,290 @@ + +@mixin carousel-controls-hover { + .carousel-control-next, .carousel-control-prev { + &:focus { + opacity: 0.5; + } + &:hover { + opacity: 0.9; + } + } + + .carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%233d6ddd' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E") !important; + } + + .carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%233d6ddd' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E") !important; + } + } + + + #adopters-wall { + margin-left: -15px; + margin-right: -15px; + + + .adopters-label { + margin-top: 3rem; + margin-bottom: 1rem; + + text-align: center; + font-size: 2rem; + font-weight: 600; + } + + #logos { + display: flex; + align-items: center; + margin-bottom: 3rem; + + .col { + position: static; + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + padding: 0; + + + img { + height: 48px; + width: 100px; + margin: 18px 6px; + + @media (min-width: 992px) { + height: 64px; + width: 150px; + margin: 24px 8px; + } + + + @media (min-width: 1800px) { + height: 96px; + width: 200px; + margin: 36px 12px; + } + + object-fit: contain; + } + } + } + } + + .adopters-carousel { + margin-bottom: 2rem; + justify-content: center; + + + #adopters { + .section-label { + margin-bottom: 2rem; + } + + .carousel-item { + height: 620px; + + @media (max-width: 560px) { + height: 800px; + } + + @media (max-width: 460px) { + height: 900px; + } + + @media (max-width: 390px) { + height: auto; + } + + width: 100vw; + padding: 0 15px; + + .item { + height: 620px; + + @media (max-width: 560px) { + height: 800px; + } + + @media (max-width: 460px) { + height: 900px; + } + + @media (max-width: 390px) { + height: auto; + margin-top: 50px; + } + + max-width: 600px; + position: relative; + left: 0; + right: 0; + margin: 0rem auto; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .logo { + height: 120px; + display: flex; + background-color: $flux-white; + opacity: 1; + img { + max-width: 552px; + max-height: 120px; + object-fit: contain; + + @include media-breakpoint-down(sm) { + max-width: 75vw; + } + } + } + + .case-study { + display: flex; + padding: 1rem 12px 0 24px; + + max-width: 600px; + flex-wrap: wrap; + .summary { + flex: 2 0 0; + min-width: 280px; + padding-right: 1rem; + + .business ul { + list-style-type: none; + margin: 0 0 0px 2px; + padding-left: 0; + + font-size: 1.1rem; + + li { + padding-bottom: 6px; + } + } + + .details { + padding-top: 8px; + ul { + padding-left: 1.5rem; + } + + h3 { + font-variant-caps: all-small-caps; + font-weight: 700; + color: $flux-lighter-blue; + } + } + } + + .description { + flex: 1 0 0; + min-width: 220px; + } + } + } + } + + + .carousel { + &:hover { + @include carousel-controls-hover(); + } + + // touchscreen + @media (hover: none) { + @include carousel-controls-hover(); + } + + .carousel-control-prev, .carousel-control-next { + width: 20px; + margin: 0 auto; + left: 0; + right: 0; + } + .carousel-control-prev span { + position: absolute; + left: -320px; + } + + .carousel-control-next span { + position: absolute; + left: 320px; + } + + @include media-breakpoint-down(sm) { + .carousel-control-prev { + left: 10px; + right: auto; + } + + .carousel-control-next { + left: auto; + right: 10px; + } + + .carousel-control-prev, .carousel-control-next { + span { + position: static; + } + } + } + + .carousel-inner { + .carousel-item { + padding: 1rem; + + #carousel-caption { + color: $flux-darkest-blue; + } + } + } + } + } + + /* /adopters page */ + .adopters { + .card-deck { + max-width: 83%; + @include media-breakpoint-down(sm) { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + } + @include media-breakpoint-only(lg) { + column-count: 4; + } + @include media-breakpoint-only(xl) { + column-count: 5; + } + + .card { + min-width: 48%; + max-width: 48%; + @include media-breakpoint-up(sm) { + min-width: 150px; + max-width: 150px; + } + } + + .card-header { + overflow-wrap: anywhere; + hyphens: auto; + } + + .card-body { + align-items: center; + display: flex; + min-height: 147px; + } + + .card-text { + width: 100%; + vertical-align: middle + } + } + + } \ No newline at end of file diff --git a/assets/scss/_variables_project.scss b/assets/scss/_variables_project.scss index c8aba0e..ad47853 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/_variables_project.scss @@ -6,4 +6,20 @@ Add styles or override variables from the theme here. $primary: #280C53; $secondary: #802A78; -$dark: #280C53; \ No newline at end of file +$dark: #280C53; + + +.card-primary { + background-color: $primary !important; + color: #fff !important; +} + +.card-secondary { + background-color: $secondary !important; + color: #fff !important; +} + +.card-dark { + background-color: $dark !important; + color: #fff !important; +} diff --git a/assets/scss/adopters_wall.scss b/assets/scss/adopters_wall.scss new file mode 100644 index 0000000..21b24c9 --- /dev/null +++ b/assets/scss/adopters_wall.scss @@ -0,0 +1,60 @@ +@keyframes move { + 0% { + margin-left: -9200px; + } + 100% { + margin-left: 800px; + } + } + + @media screen and (min-width: 900px) { + @keyframes move { + 0% { + margin-left: -9100px; + } + 100% { + margin-left: 800px; + } + } + } + + + .scrollmenu:hover { + animation-play-state: paused; + } + + .scrollmenu { + height: 100%; + overflow: hidden; + white-space: nowrap; + animation-name: move; + animation-iteration-count: infinite; + animation-duration: 450s; + animation-direction: right; + animation-timing-function: linear; + } + + .scrollmenu img { + display: inline-block; + color: white; + text-align: center; + height: 100%; + padding-right: 30px; + text-decoration: none; + } + + .carousel-inner { + height: 100%; + } + + .carousel-item .active { + height: 100%; + } + + .scrollmenu img { + transition: 0.3s all ease-in-out; + } + + .scrollmenu img:hover { + transform: scale(1.5); + } \ No newline at end of file diff --git a/content/en/_index.md b/content/en/_index.md index 52936cc..e7c1fac 100644 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -14,7 +14,7 @@ title: Goldydocs {{< /blocks/cover >}} -{{% blocks/section color="primary" type="row" %}} +{{% blocks/section color=white type="row" %}} {{% blocks/feature icon="fa-chart-bar" title="Resource Control" %}} Share a single cluster with multiple teams, groups of users, or departments by saving operational and management efforts. Take control of the resources consumed by users while preventing them to overtake. @@ -34,7 +34,7 @@ Capsule is a framework is considered a framework which enables you to create you -{{% blocks/section color="dark" type="row" %}} +{{% blocks/section type="row" %}} {{% blocks/feature icon="fa-building-shield" title="Governance" %}} Leverage Kubernetes Admission Controllers to enforce the industry security best practices and meet policy requirements. diff --git a/content/en/adopters/_index.md b/content/en/adopters/_index.md new file mode 100644 index 0000000..ab932e9 --- /dev/null +++ b/content/en/adopters/_index.md @@ -0,0 +1,16 @@ +--- +title: Adopters +menu: {main: {weight: 40}} +type: docs +disable_toc: true +--- + +These companies and projects are happy adopters of Capsule. If you are using Capsule and would like to be listed here, please add yourself here. + +For us as an open source project, it's important to have different companies and projects using Capsule. It builds confidence for potential users of the project. + +To join this list, [please follow these instructions](/project/contributions/adoption/#adding-yourself). + +--- + +{{< adopters >}} \ No newline at end of file diff --git a/content/en/blog/_index.md b/content/en/announcements/_index.md similarity index 67% rename from content/en/blog/_index.md rename to content/en/announcements/_index.md index 95ccb91..724d2f8 100644 --- a/content/en/blog/_index.md +++ b/content/en/announcements/_index.md @@ -1,6 +1,11 @@ --- -title: Blog +title: Announcements menu: {main: {weight: 30}} +type: blog +cascade: + - type: "blog" + _target: + path: "/**" --- This is the **blog** section. It has two categories: News and Releases. diff --git a/content/en/blog/news/_index.md b/content/en/announcements/news/_index.md similarity index 100% rename from content/en/blog/news/_index.md rename to content/en/announcements/news/_index.md diff --git a/content/en/blog/news/kubecon-eu-24.md b/content/en/announcements/news/kubecon-eu-24.md similarity index 98% rename from content/en/blog/news/kubecon-eu-24.md rename to content/en/announcements/news/kubecon-eu-24.md index 21d2193..8dfc619 100755 --- a/content/en/blog/news/kubecon-eu-24.md +++ b/content/en/announcements/news/kubecon-eu-24.md @@ -3,6 +3,8 @@ title: KubeCon Europe 2024 date: 2024-02-25 description: > KubeCon + CloudNativeCon Europe 2024 +tags: + - event --- We are getting ready for this years [KubeCon + CloudNativeCon Europe 2024](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/). We are excited to meet you in person and talk about Capsule. diff --git a/content/en/blog/releases/_index.md b/content/en/announcements/releases/_index.md similarity index 100% rename from content/en/blog/releases/_index.md rename to content/en/announcements/releases/_index.md diff --git a/content/en/docs/get-involved/_index.md b/content/en/docs/get-involved/_index.md deleted file mode 100644 index 3ca9cbc..0000000 --- a/content/en/docs/get-involved/_index.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Contributions -weight: 20 -description: Contributions to the project ---- - -{{% pageinfo %}} -These basic sample guidelines assume that your Docsy site is deployed using Netlify and your files are stored in GitHub. You can use the guidelines "as is" or adapt them with your own instructions: for example, other deployment options, information about your doc project's file structure, project-specific review guidelines, versioning guidelines, or any other information your users might find useful when updating your site. [Kubeflow](https://github.com/kubeflow/website/blob/master/README.md) has a great example. - -Don't forget to link to your own doc repo rather than our example site! Also make sure users can find these guidelines from your doc repo README: either add them there and link to them from this page, add them here and link to them from the README, or include them in both locations. -{{% /pageinfo %}} - -We use [Hugo](https://gohugo.io/) to format and generate our website, the -[Docsy](https://github.com/google/docsy) theme for styling and site structure, -and [Netlify](https://www.netlify.com/) to manage the deployment of the site. -Hugo is an open-source static site generator that provides us with templates, -content organisation in a standard directory structure, and a website generation -engine. You write the pages in Markdown (or HTML if you want), and Hugo wraps them up into a website. - -All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. - -## Quick start with Netlify - -Here's a quick guide to updating the docs. It assumes you're familiar with the -GitHub workflow and you're happy to use the automated preview of your doc -updates: - -1. Fork the [Goldydocs repo](https://github.com/google/docsy-example) on GitHub. -1. Make your changes and send a pull request (PR). -1. If you're not yet ready for a review, add "WIP" to the PR name to indicate - it's a work in progress. (**Don't** add the Hugo property - "draft = true" to the page front matter, because that prevents the - auto-deployment of the content preview described in the next point.) -1. Wait for the automated PR workflow to do some checks. When it's ready, - you should see a comment like this: **deploy/netlify — Deploy preview ready!** -1. Click **Details** to the right of "Deploy preview ready" to see a preview - of your updates. -1. Continue updating your doc and pushing your changes until you're happy with - the content. -1. When you're ready for a review, add a comment to the PR, and remove any - "WIP" markers. - -## Updating a single page - -If you've just spotted something you'd like to change while using the docs, Docsy has a shortcut for you: - -1. Click **Edit this page** in the top right hand corner of the page. -1. If you don't already have an up to date fork of the project repo, you are prompted to get one - click **Fork this repository and propose changes** or **Update your Fork** to get an up to date version of the project to edit. The appropriate page in your fork is displayed in edit mode. -1. Follow the rest of the [Quick start with Netlify](#quick-start-with-netlify) process above to make, preview, and propose your changes. - -## Previewing your changes locally - -If you want to run your own local Hugo server to preview your changes as you work: - -1. Follow the instructions in [Getting started](/docs/getting-started) to install Hugo and any other tools you need. You'll need at least **Hugo version 0.45** (we recommend using the most recent available version), and it must be the **extended** version, which supports SCSS. -1. Fork the [Goldydocs repo](https://github.com/google/docsy-example) repo into your own project, then create a local copy using `git clone`. Don’t forget to use `--recurse-submodules` or you won’t pull down some of the code you need to generate a working site. - - ``` - git clone --recurse-submodules --depth 1 https://github.com/google/docsy-example.git - ``` - -1. Run `hugo server` in the site root directory. By default your site will be available at http://localhost:1313/. Now that you're serving your site locally, Hugo will watch for changes to the content and automatically refresh your site. -1. Continue with the usual GitHub workflow to edit files, commit them, push the - changes up to your fork, and create a pull request. - -## Creating an issue - -If you've found a problem in the docs, but you're not sure how to fix it yourself, please create an issue in the [Goldydocs repo](https://github.com/google/docsy-example/issues). You can also create an issue about a specific page by clicking the **Create Issue** button in the top right hand corner of the page. - -## Useful resources - -* [Docsy user guide](https://www.docsy.dev/docs/): All about Docsy, including how it manages navigation, look and feel, and multi-language support. -* [Hugo documentation](https://gohugo.io/documentation/): Comprehensive reference for Hugo. -* [Github Hello World!](https://guides.github.com/activities/hello-world/): A basic introduction to GitHub concepts and workflow. - - diff --git a/content/en/docs/integrations/capsule-proxy/_index.md b/content/en/docs/integrations/capsule-proxy/_index.md index f830a3e..c205b86 100755 --- a/content/en/docs/integrations/capsule-proxy/_index.md +++ b/content/en/docs/integrations/capsule-proxy/_index.md @@ -15,4 +15,6 @@ The reason, as the error message reported, is that the RBAC list action is avail To overcome this problem, many Kubernetes distributions introduced mirrored custom resources supported by a custom set of ACL-filtered APIs. However, this leads to radically change the user's experience of Kubernetes by introducing hard customizations that make it painful to move from one distribution to another. -With Capsule, we took a different approach. As one of the key goals, we want to keep the same user experience on all the distributions of Kubernetes. We want people to use the standard tools they already know and love and it should just work. \ No newline at end of file +With Capsule, we took a different approach. As one of the key goals, we want to keep the same user experience on all the distributions of Kubernetes. We want people to use the standard tools they already know and love and it should just work. + + diff --git a/content/en/docs/integrations/capsule-proxy/configuration.md b/content/en/docs/integrations/capsule-proxy/configuration.md index 1da00ad..cadc384 100644 --- a/content/en/docs/integrations/capsule-proxy/configuration.md +++ b/content/en/docs/integrations/capsule-proxy/configuration.md @@ -4,4 +4,11 @@ description: > Configure the Capsule Proxy date: 2024-02-20 weight: 4 ---- \ No newline at end of file +--- + + + +## Tenants + +The Capsule Proxy is a multi-tenant application. Each tenant is a separate instance of the Capsule Proxy. The tenant is identified by the `tenantId` in the URL. The `tenantId` is a unique identifier for the tenant. The `tenantId` is used to identify the tenant in the Capsule Proxy. + diff --git a/content/en/project/_index.md b/content/en/project/_index.md new file mode 100644 index 0000000..d1a54ff --- /dev/null +++ b/content/en/project/_index.md @@ -0,0 +1,15 @@ +--- +title: 'Project' +linkTitle: 'Project' +isFolder: true +menu: + main: + weight: 50 +type: docs +cascade: + - type: "docs" + _target: + path: "/**" +--- + +Hello \ No newline at end of file diff --git a/content/en/project/branding.md b/content/en/project/branding.md new file mode 100644 index 0000000..8662989 --- /dev/null +++ b/content/en/project/branding.md @@ -0,0 +1,19 @@ +--- +title: Branding +description: "Branding and logos for the project" +menu: {main: {weight: 80}} +type: docs +weight: 15 +menu: + main: + weight: 10 + parent: 'Project' +--- + + + +## Icons + +Find all the available artworks and logos for the project in the CNCF Logo repository: + + * [https://github.com/cncf/artwork/tree/main/projects/capsule](https://github.com/cncf/artwork/tree/main/projects/capsule) \ No newline at end of file diff --git a/content/en/project/community/_index.md b/content/en/project/community/_index.md new file mode 100644 index 0000000..b382764 --- /dev/null +++ b/content/en/project/community/_index.md @@ -0,0 +1,12 @@ +--- +title: Community +menu: {main: {weight: 80}} +type: community +weight: 2 +menu: + main: + weight: 2 + parent: 'Project' +--- + + diff --git a/content/en/project/contributions/_index.md b/content/en/project/contributions/_index.md new file mode 100644 index 0000000..edf33c0 --- /dev/null +++ b/content/en/project/contributions/_index.md @@ -0,0 +1,12 @@ +--- +title: Contributions +menu: {main: {weight: 80}} +type: docs +weight: 1 +menu: + main: + weight: 1 + parent: 'Project' +--- + + diff --git a/content/en/project/contributions/adoption.md b/content/en/project/contributions/adoption.md new file mode 100644 index 0000000..1e26655 --- /dev/null +++ b/content/en/project/contributions/adoption.md @@ -0,0 +1,9 @@ +--- +title: Adoption +description: "Add your project/company to the list of adopters" +weight: 2 +--- + +Have your tried Capsule or are you using it in your project or company? Please consider adding your project/company to the list of adopters. This helps the Capsule community understand who is using Capsule and how it is being used. + +## Adding yourself \ No newline at end of file diff --git a/content/en/project/contributions/guidelines.md b/content/en/project/contributions/guidelines.md new file mode 100644 index 0000000..076c031 --- /dev/null +++ b/content/en/project/contributions/guidelines.md @@ -0,0 +1,168 @@ +--- +title: Guidelines +description: "Guidelines for submitting changes to the Capsule project" +weight: 1 +--- + +The following guidelines outline the semantics and processes which apply to technical contributions to the project. + +## Supported Versions +Versions follow [Semantic Versioning](https://semver.org/) terminology and are expressed as `x.y.z`: + +- where x is the major version +- y is the minor version +- and z is the patch version + +Security fixes, may be backported to the three most recent minor releases, depending on severity and feasibility. + +Prereleases are marked as `-rc.x` (release candidate) and may refere to any type of version bump. + +## Pull Requests + +The pull request title is checked according to the described [semantics](#semantics) (pull requests don't require a scope). However pull requests are currently not used to generate the changelog. Check if your pull requests body meets the following criteria: + +- reference a previously opened issue: https://docs.github.com/en/github/writing-on-github/autolinked-references-and-urls#issues-and-pull-requests +- splitting changes into several and documented small commits +- limit the git subject to 50 characters and write as the continuation of the + sentence "If applied, this commit will ..." +- explain what and why in the body, if more than a trivial change, wrapping at + 72 characters + +If your pull request in a draft state and not ready yet for review, you can prefix the title with `[WIP]`. This will indicate that work is still ongoing: + + [WIP] feat(controller): new cool feature + +### Create a Pull Request + +Head over to the project repository on GitHub and click the **"Fork"** button. With the forked copy, you can try new ideas and implement changes to the project. + +1. **Clone the repository to your device:** + +Get the link of your forked repository, paste it in your device terminal and clone it using the command. + +```sh +git clone https://hostname/YOUR-USERNAME/YOUR-REPOSITORY +``` + +2. **Create a branch:** + +Create a new brach and navigate to the branch using this command. + +```sh +git checkout -b +``` + +3. **Stage, Commit, and Push changes:** + +Now that we have implemented the required changes, use the command below to stage the changes and commit them. + +```sh +git add . +``` + +```sh +git commit -s -m "Commit message" +``` + +Go ahead and push your changes to GitHub using this command. + +```sh +git push +``` + +## Commits + +The commit message is checked according to the described [semantics](#semantics). Commits are used to generate the changelog and their author will be referenced in the changelog. + +### Reorganising commits + +To reorganise your commits, do the following (or use your way of doing it): + + +1. Pull upstream changes + +```bash +git remote add upstream git@github.com:projectcapsule/capsule.git +git pull upstream main +``` + +2. Pick the current upstream HEAD (the commit is marked with `(remote/main, main)`) + +```bash +git log +.... +commit 10bbf39ac1ac3ad4f8485422e54faa9aadf03315 (remote/main, main) +Author: Oliver Bähler +Date: Mon Oct 23 10:24:44 2023 +0200 + + docs(repo): add sbom reference + + Signed-off-by: Oliver Bähler +``` + +3. Soft reset to the commit of the upstream HEAD + +```bash +git reset --soft 10bbf39ac1ac3ad4f8485422e54faa9aadf03315 +``` + +4. Remove staged files (if any) + +```bash +git restore --staged . +``` + +5. Add files manually and create new [commits](#commits), until all files are included + +```bash +git add charts/capsule/ +git commit -s -m "feat(chart): add nodeselector value" + +... +``` + +6. Force push the changes to your fork + +```bash +git push origin main -f +``` + +### Sign-Off + +Developer Certificate of Origin (DCO) Sign off +For contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project, we are requiring everyone to acknowledge this by signing their work which indicates you agree to the DCO found here. + +To sign your work, just add a line like this at the end of your commit message: + +Signed-off-by: Random J Developer +This can easily be done with the -s command line option to append this automatically to your commit message. + + git commit -s -m 'This is my commit message' + +### Signature + +All commits must be signed with a GPG key. + +## Semantics + +The semantics should indicate the change and it's impact. The general format for commit messages and pull requests is the following: + + feat(ui): add `button` component + ^ ^ ^ + | | |__ Subject + | |_______ Scope + |____________ Type + + The commits are checked on pull-request. If the commit message does not follow the format, the workflow will fail. See the [Types](#types) for the supported types. The scope is not required but helps to provide more context for your changes. Try to use a scope if possible. + +### Types + +The following types are allowed for commits and pull requests: + + * `chore`: housekeeping changes, no production code change + * `ci`: changes to buillding process/workflows + * `docs`: changes to documentation + * `feat`: new features + * `fix`: bug fixes + * `test`: test related changes + * `sec`: security related changes diff --git a/content/en/project/governance.md b/content/en/project/governance.md new file mode 100644 index 0000000..d989183 --- /dev/null +++ b/content/en/project/governance.md @@ -0,0 +1,143 @@ +--- +title: Governance +menu: {main: {weight: 80}} +type: docs +weight: 1 +menu: + main: + weight: 10 + parent: 'Project' +--- + +The **Capsule** project is dedicated to creating a multi-tenancy and policy-based framework for Kubernetes. This governance explains how the project is run. + +- [Values](#values) +- [Maintainers](#maintainers) + - [Becoming a Maintainer](#becoming-a-maintainer) + - [Removing a Maintainer](#removing-a-maintainer) +- [Meetings](#meetings) +- [CNCF Resources](#cncf-resources) +- [Code of Conduct](#code-of-conduct) +- [Security Response Team](#security-response-team) +- [Voting](#voting) +- [Modifying this Charter](#modifying-this-charter) + +## Values + +The Capsule and its leadership embrace the following values: + +* Openness: Communication and decision-making happens in the open and is discoverable for future + reference. As much as possible, all discussions and work take place in public + Slack channels and open repositories. + +* Fairness: All stakeholders have the opportunity to provide feedback and submit + contributions, which will be considered on their merits. + +* Community over Product or Company: Sustaining and growing our community takes + priority over shipping code or sponsors' organizational goals. Each + contributor participates in the project as an individual. + +* Community Before Individual Demand: As a community-driven open source project, we emphasize + the importance of collaboration and contribution. Maintainers and contributors work together towards the project's growth, not to serve unilateral user demands. Users pretending features or enhancements for their sole benefit without contributing to the effort are not aligned with our community values. + +* Inclusivity: We innovate through different perspectives and skill sets, which + can only be accomplished in a welcoming and respectful environment. + +* Participation: Responsibilities within the project are earned through + participation, and there is a clear path up the contributor ladder into leadership + positions. + +## Maintainers + +Capsule Maintainers have write access to the [project GitHub repository](https://github.com/orgs/projectcapsule). They can merge their own patches or patches from others. The current maintainers +can be found in [MAINTAINERS.md](./MAINTAINERS.md). Maintainers collectively manage the project's +resources and contributors. + +This privilege is granted with some expectation of responsibility: maintainers +are people who care about the Capsule project and want to help it grow and +improve. A maintainer is not just someone who can make changes, but someone who +has demonstrated their ability to collaborate with the team, get the most +knowledgeable people to review code and docs. + +A maintainer is a contributor to the project's success and a citizen helping +the project succeed. The collective team of all Maintainers is known as the Maintainer Council, which +is the governing body for the project. + +### Becoming a Maintainer + +To become a Maintainer you need to demonstrate the following: + + * commitment to the project: + * participate in discussions, contributions, code and documentation reviews, + * perform reviews for non-trivial pull requests, + * contribute non-trivial pull requests and have them merged, + * ability to write quality code and/or documentation, + * ability to collaborate with the team, + * understanding of how the team works (policies, processes for testing and code review, etc), + * understanding of the project's purpose, code base and coding and documentation style. + +A new Maintainer must be proposed by an existing maintainer by sending a message to all the other existing Maintainers. A simple majority vote of existing Maintainers +approves the application. Maintainers nominations will be evaluated without prejudice +to employer or demographics. + +Maintainers who are selected will be granted the necessary GitHub rights. + +### Removing a Maintainer + +Maintainers may resign at any time if they feel that they will not be able to +continue fulfilling their project duties. + +Maintainers may also be removed after being inactive, failure to fulfill their +Maintainer responsibilities, violating the Code of Conduct, or other reasons. +A Maintainer may be removed at any time by a 2/3 vote of the remaining maintainers. + +Depending on the reason for removal, a Maintainer may be converted to Emeritus +status. Emeritus Maintainers will still be consulted on some project matters, +and can be rapidly returned to Maintainer status if their availability changes. + +## Meetings + +Time zones permitting, Maintainers are expected to participate in the public +developer meeting and/or public discussions. + +Maintainers will also have closed meetings in order to discuss security reports +or Code of Conduct violations. Such meetings should be scheduled by any +Maintainer on receipt of a security issue or CoC report. All current Maintainers +must be invited to such closed meetings, except for any Maintainer who is +accused of a CoC violation. + +## CNCF Resources + +Any Maintainer may suggest a request for CNCF resources. A simple majority of Maintainers +approves the request. The Maintainers may also choose to delegate working with the CNCF to non-Maintainer community members, who will then be added to the [CNCF's Maintainer List](https://github.com/cncf/foundation/blob/main/project-maintainers.csv) for that purpose. + +## Code of Conduct + +[Code of Conduct](./CODE_OF_CONDUCT.md) +violations by community members will be discussed and resolved in private Maintainer meetings. If a Maintainer is directly involved in the report, the Maintainers will instead designate two Maintainers to work with the CNCF Code of Conduct Committee in resolving it. + +## Security Response Team + +The Maintainers will appoint a Security Response Team to handle security reports. +This committee may simply consist of the Maintainer Council themselves. If this +responsibility is delegated, the Maintainers will appoint a team of at least two +contributors to handle it. The Maintainers will review who is assigned to this +at least once a year. + +The Security Response Team is responsible for handling all reports of security +holes and breaches according to the [security policy](TODO:Link to security.md). + +## Voting + +While most business in Capsule Project is conducted by "[lazy consensus](https://community.apache.org/committers/lazyConsensus.html)", +periodically the Maintainers may need to vote on specific actions or changes. +Any Maintainer may demand a vote be taken. + +Most votes require a simple majority of all Maintainers to succeed, except where +otherwise noted. Two-thirds majority votes mean at least two-thirds of all +existing maintainers. + +## Modifying this Charter + +Changes to this Governance and its supporting documents may be approved by +a 2/3 vote of the Maintainers. \ No newline at end of file diff --git a/content/en/community/_index.md b/content/en/resources/_index.md similarity index 87% rename from content/en/community/_index.md rename to content/en/resources/_index.md index 3f237b8..36cf555 100644 --- a/content/en/community/_index.md +++ b/content/en/resources/_index.md @@ -1,5 +1,5 @@ --- -title: Community +title: Resources menu: {main: {weight: 40}} --- diff --git a/content/en/resources/talks.md b/content/en/resources/talks.md new file mode 100644 index 0000000..81573b5 --- /dev/null +++ b/content/en/resources/talks.md @@ -0,0 +1,3 @@ +--- +title: Talks +--- \ No newline at end of file diff --git a/data/adopters.yaml b/data/adopters.yaml index 319e436..f745ecb 100644 --- a/data/adopters.yaml +++ b/data/adopters.yaml @@ -2,6 +2,7 @@ adopters: - name: Bedag Informatik AG link: https://www.bedag.ch/ logo: https://www.bedag.ch/wGlobal/wGlobal/layout/images/logo.svg + adoption: 2019 - name: EPAM Delivery Platform link: https://epam.github.io/edp-install/ logo: https://raw.githubusercontent.com/epam/edp-install/master/docs/assets/edp-logo-150x150-black.png diff --git a/data/resources.yaml b/data/resources.yaml new file mode 100644 index 0000000..832008e --- /dev/null +++ b/data/resources.yaml @@ -0,0 +1,19 @@ +resources: + - title: "Confused by Kubernetes Multi-Tenancy? A Workshop with Dario Tranchitella" + date: "2023-12-13" + link: "https://www.youtube.com/watch?v=m5TAb6UWlwA" + author: "" + event: "CIVO Navigate Europe 23" + type: + - "talk" + - title: "Multi-Tenant Kubernetes Cluster With Capsule" + link: "https://www.youtube.com/watch?v=H8bzEJN7fj8" + date: "2023-12-13" + type: + - "tutorial" + - title: "Multi-Tenancy in Kubernetes: How We Avoided Clusters Sprawl" + date: "2023-12-13" + link: "https://www.youtube.com/watch?v=H8bzEJN7fj8" + event: + type: + - "talk" diff --git a/layouts/partials/filter-panel.html b/layouts/partials/filter-panel.html new file mode 100644 index 0000000..162d343 --- /dev/null +++ b/layouts/partials/filter-panel.html @@ -0,0 +1,31 @@ +
+
+
Type
+
+ + +
+
+ + +
+
+
+
Year
+ {{ $resources := $.Site.Data.resources.resources }} + {{ $years := slice }} + {{ range $resources }} + {{- if .date }} + {{ $years = $years | append (time.Format "2006" .date) }} + {{ $years = uniq $years }} + {{- end }} + {{ end }} + {{ range $years }} + {{ $year := . }} +
+ + +
+ {{ end }} +
+
\ No newline at end of file diff --git a/layouts/partials/resource.html b/layouts/partials/resource.html new file mode 100644 index 0000000..5e6b4e0 --- /dev/null +++ b/layouts/partials/resource.html @@ -0,0 +1,44 @@ +{{ $youtube := .youtube }} +{{ $youtube_url := print "https://www.youtube.com/watch?v=" $youtube }} +{{ $thumbnail := printf "https://i3.ytimg.com/vi/%s/0.jpg" $youtube }} + +{{ if .thumbnail }} +{{ $thumbnail = printf "https://i3.ytimg.com/vi/%s/0.jpg" (.thumbnail) }} +{{ end }} + +{{ if .thumbnail_url }} +{{ $thumbnail = .thumbnail_url }} +{{ end }} + +{{ $url := .url | default $youtube_url }} +{{ $title := .title | default "Video title" }} + +{{ $t := .date }} +{{ $t = time.AsTime $t }} +{{ $format := "2 Jan, 2006" }} +{{ $dateTime := $t.Format $format }} + +
+ {{ $title | markdownify }} +

{{ $title | markdownify }}

+ + {{ .type }} + + + + {{ if .description }}
{{ .description }}
{{ end }} + +
+ + \ No newline at end of file diff --git a/layouts/partials/template-container.html b/layouts/partials/template-container.html new file mode 100644 index 0000000..01b420f --- /dev/null +++ b/layouts/partials/template-container.html @@ -0,0 +1,27 @@ + +
+ {{ partial "version-banner.html" . }} {{ .Content | markdownify }} + +
+ +
+ +

+ +

+ +
+ +
+
+
{{ partial "template-resource.html" . }}
+
+
+
+
\ No newline at end of file diff --git a/layouts/partials/template-resource.html b/layouts/partials/template-resource.html new file mode 100644 index 0000000..6665f53 --- /dev/null +++ b/layouts/partials/template-resource.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/layouts/resources/list.html b/layouts/resources/list.html new file mode 100644 index 0000000..3a9ed82 --- /dev/null +++ b/layouts/resources/list.html @@ -0,0 +1,57 @@ +{{ define "main" }} + +
+ {{ partial "filter-panel.html" . }} +
+ + +
+
+

Filter resources accordingly

+
+ +
+
+ {{ partial "filter-panel.html" . }} +
+ + + +
+ {{ partial "version-banner.html" . }} + {{ .Content | markdownify }} +
+ +
+ + {{ $resources := $.Site.Data.resources.resources }} + {{ $years := slice }} + {{ range $resources }} + {{ $years = $years | append (time.Format "2006" .date) }} + {{ $years = uniq $years }} + {{ end }} + {{ range $years }} + {{ $year := . }} +
+

{{ . }}

+ +
+
+
+ {{ range $resources }} + {{ if eq (time.Format "2006" .date) $year }} + {{ partial "resource.html" . }} + {{ end }} + {{ end }} +
+
+
+
+ {{ end }} +
+ + +{{ partial "template-container.html" . }} +{{ end }} \ No newline at end of file diff --git a/layouts/shortcodes/adopters.html b/layouts/shortcodes/adopters.html new file mode 100644 index 0000000..2f2bc68 --- /dev/null +++ b/layouts/shortcodes/adopters.html @@ -0,0 +1,24 @@ + +
+ +
+
+ {{ range sort $.Site.Data.adopters.adopters "name" }} +
+
+ +
+
+ {{ .name | safeHTML }} +
+
+
+ +
+ {{ end }} +
+
+ +
diff --git a/layouts/shortcodes/videos.html b/layouts/shortcodes/videos.html new file mode 100644 index 0000000..df278cb --- /dev/null +++ b/layouts/shortcodes/videos.html @@ -0,0 +1,60 @@ +{{ define "main" }} +
+
+
+
+
+ +
+

Self Service

+
+

Leave developers the freedom to self-provision their cluster resources according to the assigned boundaries.

+
+
+
+
+ +
+

Framework

+
+

Capsule is a framework is considered a framework which enables you to create your own multi-tenant platforms based on Kubernetes.

+
+
+
+
+
+ + + +
+ + +
+ + {{ range $.Site.Data.resources.resources }} +
+

{{ .title }}

+ {{ if .date }}

Date: {{ .date }}

{{ end }} + {{ if .author }}

Author: {{ .author }}

{{ end }} + {{ if .event }}

Event: {{ .event }}

{{ end }} +

Tags: {{ range .tags }}{{ . }} {{ end }}

+
+ {{ end }} +
+
+{{ end }} \ No newline at end of file diff --git a/resources/_gen/assets/scss/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content b/resources/_gen/assets/scss/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content index 5b80fad..371146b 100644 --- a/resources/_gen/assets/scss/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content +++ b/resources/_gen/assets/scss/scss/main.scss_3f90599f3717b4a4920df16fdcadce3d.content @@ -3,13 +3,25 @@ Add styles or override variables from the theme here. */ +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i&display=swap"); +.card-primary { + background-color: #280C53 !important; + color: #fff !important; } + +.card-secondary { + background-color: #802A78 !important; + color: #fff !important; } + +.card-dark { + background-color: #280C53 !important; + color: #fff !important; } + /*! * Bootstrap v5.2.3 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ -@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i&display=swap"); :root { --bs-blue: #0d6efd; --bs-indigo: #6610f2;