WIP: move to docsy

- use docsy theme
- move hero display out
- search bars
- a very messy branch

change the theme import

Authored-by: Alison Dowdney <alison@weave.works>
Signed-off-by: Daniel Holbach <daniel@weave.works>
This commit is contained in:
Alison Dowdney 2021-03-19 10:15:58 +00:00 committed by Daniel Holbach
parent b0bda191e8
commit bd8d4079e4
90 changed files with 4429 additions and 5214 deletions

File diff suppressed because it is too large Load Diff

22
assets/icons/logo.svg Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 56.3 (81716) - https://sketch.com -->
<title>flux-icon</title>
<desc>Created with Sketch.</desc>
<g id="flux-icon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group" transform="translate(11.000000, 2.000000)">
<path d="M0.803134615,15.7791346 C-0.246288462,15.0966346 -0.246288462,13.5602885 0.803134615,12.8783654 L20.1819808,0.279519231 C20.7554423,-0.0931730769 21.4944808,-0.0931730769 22.0679423,0.279519231 L41.4473654,12.8783654 C42.4967885,13.5602885 42.4967885,15.0966346 41.4473654,15.7791346 L22.0679423,28.3779808 C21.4944808,28.7506731 20.7554423,28.7506731 20.1819808,28.3779808 L0.803134615,15.7791346 Z" id="Fill-1" fill="#326CE5"></path>
<path d="M24.1851346,18.0023077 L25.5293654,18.0023077 C26.3145577,18.0023077 26.8055192,17.1525 26.4126346,16.4728846 L22.0084038,8.84423077 C21.6160962,8.16461538 20.63475,8.16461538 20.2418654,8.84423077 L15.8376346,16.4728846 C15.4453269,17.1525 15.9357115,18.0023077 16.7209038,18.0023077 L18.0657115,18.0023077 C18.6287885,18.0023077 19.0851346,18.4592308 19.0851346,19.0223077 L19.0851346,27.7298077 L19.9874423,28.3165385 C20.6791731,28.7665385 21.5710962,28.7665385 22.2628269,28.3165385 L23.1651346,27.7298077 L23.1651346,19.0223077 C23.1651346,18.4592308 23.6214808,18.0023077 24.1851346,18.0023077" id="Fill-3" fill="#C1D2F7"></path>
<path d="M27.8390769,34.8375577 L23.1648462,31.7989038 L23.1648462,33.2389038 C24.6902308,33.8919808 26.2588846,34.4008269 27.8390769,34.8375577" id="Fill-5" fill="#326CE5"></path>
<path d="M23.1650769,35.8280192 L23.1650769,37.8495577 C24.7095,38.3209038 26.2723846,38.7080192 27.8191154,39.0893654 C32.8706538,40.3349423 37.6418077,41.5107115 41.4783462,45.3478269 C41.6733462,45.54225 41.8562308,45.7407115 42.0373846,45.93975 C42.4308462,45.1880192 42.2335385,44.1957115 41.4466154,43.6845577 L33.8560385,38.7489808 C32.0133462,38.1409038 30.1360385,37.6759038 28.2806538,37.2189808 C26.5308462,36.7874423 24.8196923,36.3570577 23.1650769,35.8280192" id="Fill-7" fill="#326CE5"></path>
<path d="M19.08525,34.1699423 C18.4304423,33.8318654 17.7854423,33.4689808 17.1629423,33.0489808 L15.4269808,34.1774423 C16.5975577,35.0382115 17.8235192,35.7362885 19.08525,36.3212885 L19.08525,34.1699423 Z" id="Fill-9" fill="#326CE5"></path>
<path d="M24.8941731,40.6051154 C24.3137885,40.4620385 23.7374423,40.3195385 23.1651346,40.1735769 L23.1651346,42.1605 C23.5885962,42.2666538 24.0114808,42.3722308 24.4326346,42.4760769 C29.4841731,43.7210769 34.2553269,44.8968462 38.0924423,48.7339615 C38.0987885,48.7408846 38.1045577,48.7472308 38.1114808,48.7541538 L39.75225,47.6868462 C39.6524423,47.5824231 39.5584038,47.4751154 39.4545577,47.3718462 C35.2384038,43.1551154 29.9791731,41.8587692 24.8941731,40.6051154" id="Fill-11" fill="#326CE5"></path>
<path d="M19.08525,38.9907115 C16.8900577,38.2389808 14.8096731,37.2714808 12.9115962,35.8124423 L11.2119808,36.9178269 C13.6287115,38.9110962 16.3194808,40.1203269 19.08525,41.0168654 L19.08525,38.9907115 Z" id="Fill-13" fill="#326CE5"></path>
<path d="M19.08525,43.3809808 C15.3069808,42.3909808 11.7537115,41.18175 8.71794231,38.5388654 L7.04717308,39.6252115 C10.6125577,42.9102115 14.8540962,44.2832885 19.08525,45.3707885 L19.08525,43.3809808 Z" id="Fill-15" fill="#326CE5"></path>
<path d="M23.1650769,46.3935 C27.1175769,47.4140769 30.8341154,48.6342692 33.9823846,51.4381154 L35.6439231,50.3581154 C31.9654615,46.9000385 27.5514231,45.5194615 23.1650769,44.4048462 L23.1650769,46.3935 Z" id="Fill-17" fill="#326CE5"></path>
<path d="M4.57875,41.2299231 L2.92990385,42.3018462 C2.98759615,42.3612692 3.04009615,42.423 3.09951923,42.4818462 C7.31625,46.6985769 12.5743269,47.9949231 17.6599038,49.2485769 C22.0641346,50.3337692 26.2543269,51.3687692 29.7989423,54.1581923 L31.4893269,53.0591538 C27.4958654,49.6968462 22.7385577,48.5158846 18.1214423,47.3781923 C13.1206731,46.1453077 8.39567308,44.9758846 4.57875,41.2299231" id="Fill-19" fill="#326CE5"></path>
<path d="M1.07555769,44.5060962 C0.883442308,44.3139808 0.702865385,44.1184038 0.524019231,43.9216731 C-0.227711538,44.6745577 -0.139442308,45.9726346 0.80325,46.5853269 L6.50959615,50.2955192 C9.03536538,51.3409038 11.6765192,51.9945577 14.2738269,52.6349423 C18.3284423,53.6341731 22.2019038,54.5924423 25.5578654,56.9157115 L27.2834423,55.7930192 C23.4676731,52.9245577 19.0403654,51.8255192 14.7347885,50.7639808 C9.68382692,49.5189808 4.91267308,48.3432115 1.07555769,44.5060962" id="Fill-21" fill="#326CE5"></path>
<path d="M19.6441154,58.8342692 C20.0243077,59.0188846 20.3998846,59.2133077 20.7691154,59.4221538 C21.2093077,59.5150385 21.6771923,59.4383077 22.0683462,59.1838846 L23.0260385,58.5613846 C19.9493077,56.5035 16.5287308,55.461 13.1196923,54.5927308 L19.6441154,58.8342692 Z" id="Fill-23" fill="#326CE5"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1,24 +0,0 @@
document.addEventListener('DOMContentLoaded', () => {
// Get all "navbar-burger" elements
const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
// Check if there are any navbar burgers
if ($navbarBurgers.length > 0) {
// Add a click event on each of them
$navbarBurgers.forEach(el => {
el.addEventListener('click', () => {
// Get the target from the "data-target" attribute
const target = el.dataset.target;
const $target = document.getElementById(target);
// Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
el.classList.toggle('is-active');
$target.classList.toggle('is-active');
});
});
}
});

File diff suppressed because one or more lines are too long

View File

@ -1,80 +0,0 @@
/**
Copyright (c) 2020 by Ines Montani (https://codepen.io/ines/pen/NxzWpE)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
$terminal-border-radius: 10px
$terminal-width: 100%
.terminal
background: #ddd
border-radius: $terminal-border-radius
display: flex
flex-flow: row wrap
position: relative
width: $terminal-width
.terminal-title
flex: 1
text-align: center
padding: 0.75em
font-size: 14px
.icons
padding: 0.75em
position: absolute
span
@extend %icon
background: $warning
&:before
@extend %icon
content: ''
background: $red
&:after
@extend %icon
content: ''
background: $green
%icon
display: inline-block
float: left
width: 1em
height: 1em
border-radius: 50%
margin-right: 0.5em
pre
&.terminal-content
background: #222
border-bottom-left-radius: $terminal-border-radius
border-bottom-right-radius: $terminal-border-radius
color: #fff
overflow: scroll
padding: 0
font-size: 0
width: 100%
-webkit-font-smoothing: antialiased
.asciinema-theme-asciinema .asciinema-terminal
background: #222
border-color: #222

View File

@ -0,0 +1,3 @@
.td-navbar {
background: $flux-black;
}

View File

@ -0,0 +1,24 @@
// Other colors
$slack-green: #74cdb0;
$twitter-blue: #1da1f2;
$linkedin-blue: #0e76a8;
// Flux color palette
$flux-darkest-blue: #3570e3;
$flux-dark-blue: #2a7de3;
$flux-lighter-blue: #1b8de2;
$flux-light-blue: #0096e1;
$flux-black: #1a1a1a;
$primary: $flux-dark-blue;
$secondary: $flux-light-blue;
$dark: $flux-black;
$blue: $flux-dark-blue;
$google_font_name: "Montserrat";
$google_font_family: "Montserrat:300,300i,400,400i,600,600i,700,700i";
$navbar-dark-color: rgba($dark, 0.75) !default;
$navbar-dark-hover-color: rgba($white, 0.5) !default;
$navbar-dark-active-color: $dark !default;
$navbar-dark-disabled-color: rgba($dark, 0.25) !default;

View File

@ -0,0 +1 @@
@import "hero";

View File

@ -0,0 +1,41 @@
// A cover block is a full size cover with a fixed background for smaller screens.
@include td-box-height-modifiers(".td-hero-block");
.td-hero-logo {
margin-right: 0.5em;
}
.td-hero-block {
overflow: hidden;
padding-top: 5rem;
padding-bottom: 5rem;
background: {
repeat: no-repeat;
color: transparent;
// size: cover;
};
&::before {
position: absolute;
transform: skewY(-5deg);
right: 0;
bottom: 5vw;
width: 100%;
height: 150%;
content: "";
background: linear-gradient($flux-dark-blue 0%, $flux-dark-blue 25%, $flux-light-blue 30%, $flux-lighter-blue 39%, $flux-dark-blue);
}
&.td-overlay {
&::after {
top: -5vw;
transform: skewY(-5deg);
}
}
& > .byline {
position: absolute;
bottom: 2px;
right: 4px;
}
}

4
assets/scss/main.scss Normal file
View File

@ -0,0 +1,4 @@
@import "../../themes/docsy/assets/scss/main.scss";
@import "variables_project";
@import "blocks/hero";
@import "styles_project";

View File

@ -9,6 +9,8 @@ defaultContentLanguage = "en"
defaultContentLanguageInSubdir = false
enableMissingTranslationPlaceholders = true
theme = ["docsy"]
# Markup settings
# Ref: https://gohugo.io/getting-started/configuration-markup#goldmark
[markup]
@ -31,316 +33,58 @@ languageName = "English"
languageCode = "en-us"
time_format_default = "2006-01-02"
time_format_blog = "2006-01-02"
contentDir = "content/en"
[[menus.main]]
name = "Blog"
url = "/blog"
[params.ui]
# Enable to show the side bar menu in its compact state.
sidebar_menu_compact = true
# Set to true to disable breadcrumb navigation.
breadcrumb_disable = false
# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled)
sidebar_search_disable = false
# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar
navbar_logo = true
# Set to true to disable the About link in the site footer
footer_about_disable = false
[[menus.main]]
name = "Community"
url = "/community"
[[menus.main]]
identifier = "project"
name = "Project"
[[menus.main]]
name = "Code of Conduct"
parent = "project"
url = "https://github.com/fluxcd/community/blob/main/CODE_OF_CONDUCT.md"
weight = 1
[[menus.main]]
name = "Contributing"
parent = "project"
url = "/contributing"
weight = 30
[[menus.main]]
name = "Governance"
parent = "project"
url = "/governance"
weight = 40
[[menus.main]]
name = "Security"
parent = "project"
url = "/security"
weight = 50
[[menus.main]]
name = "Branding"
parent = "project"
url = "https://branding.cncf.io/projects/flux"
weight = 9999
[params.ui.readingtime]
enable = false
[params]
description = "Open and extensible continuous delivery solution for Kubernetes."
copyright = "The Flux authors"
github_repo = "fluxcd/flux2"
github_website_repo = "fluxcd/website"
slack = "https://cloud-native.slack.com/messages/flux"
twitter = "https://twitter.com/fluxcd"
linkedin = "https://linkedin.com/groups/8985374"
mailing_list = "https://lists.cncf.io/g/cncf-flux-dev"
youtube = "https://www.youtube.com/playlist?list=PLbx4FZ4kOKntmgJqaT-iJ8tn4xat150yL"
support = "/support"
rss = "/blog/index.xml"
font_awesome_version = "5.9.0"
[params.links]
# End user relevant links. These will show up on left side of footer and in the community page if you have one.
#notification = """
#"""
[[params.links.user]]
name ="Twitter"
url = "https://twitter.com/fluxcd"
icon = "fab fa-twitter"
desc = "Follow us on Twitter to get the latest news!"
[params.celebration]
emoji = "🎉"
description = "Flux is now a CNCF Incubation project!"
url = "/blog/2021/03/flux-is-a-cncf-incubation-project/"
[params.logos]
navbar = "flux-horizontal-white.png"
hero = "flux-horizontal-color.png"
footer = "flux-stacked-white.png"
cncf = "cncf-color.png"
[[params.fonts]]
name = "Montserrat"
sizes = [300,400,600,700]
type = "sans_serif"
# Flux hero element
[params.flux]
title = "Flux - the GitOps family of projects"
subtitle = """
Flux is a set of continuous and progressive delivery solutions
for Kubernetes, and they are open and extensible.
Flux v2 will be GA within the next few months! This means that Flux v1 will be deprecated
before the end of 2021, so now is a good time to start using v2.
"""
[[params.flux.buttons]]
text = "Get started"
color = "warning"
url = "https://toolkit.fluxcd.io/get-started/"
[[params.flux.buttons]]
text = "Learn more"
url = "https://toolkit.fluxcd.io"
# Overview hero element
[params.overview]
title = "GitOps at your fingertips"
summary = """
Flux is a collection of tools for keeping [Kubernetes](https://kubernetes.io) clusters in sync with
sources of configuration (like Git repositories), and automating updates to configuration when there
is new code to deploy.
"""
## Overview features
[[params.overview.features]]
icon = "fab fa-git-square fa-3x"
header = "Declarative"
text = """
Describe the entire desired state of your system in [Git](https://git-scm.com). This includes apps, configuration,
dashboards, monitoring, and everything else.
"""
[[params.overview.features]]
icon = "fas fa-robot fa-3x"
header = "Automated"
text = """
Use [YAML](https://yaml.org) to enforce conformance to the declared system. You don't need to run
[`kubectl`](https://kubectl.docs.kubernetes.io/) because all changes are synced automatically.
"""
[[params.overview.features]]
icon = "fas fa-code fa-3x"
header = "Auditable"
text = """
Everything is controlled through pull requests. Your Git history provides a sequence of transactions, allowing you to
recover state from any snapshot.
"""
[[params.overview.features]]
icon = "fas fa-drafting-compass fa-3x"
header = "Designed for Kubernetes"
text = """
Declaratively configurable using Custom Resources, state reports in the
[object's status](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)
and via [Kubernetes Events](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/),
and integrations with Kubernetes RBAC.
"""
[[params.overview.features]]
icon = "fas fa-box-open fa-3x"
header = "Out-of-the-box integrations"
text = """
Support for e.g. [Kustomize](https://kustomize.io), [Helm](https://helm.sh); GitHub, GitLab, Harbor and custom
webhooks; notifications to most team communication platforms; and many more.
"""
[[params.overview.features]]
icon = "fas fa-cube fa-3x"
header = "Extensible"
text = """
Easily create a continous delivery solution with only the components you need, or use the [GitOps Toolkit](#gitops-toolkit)
to extend Flux.
"""
# Resources hero element
[params.resources]
title = "Resources"
summary = """
If you are new to Flux, you might want to check out some of the following resources to get started.
"""
## Resource items
[[params.resources.items]]
title = "The Evolution of Flux v2 with Stefan Prodan"
description = """
Stefan introduces Flux v2, explains why it was reshaped into a composable continuous delivery solution that goes beyond Git sync to accommodate multi-tenancy, infrastructure dependencies and cluster-api fleet management.
"""
youtube = "nGLpUCPX8JE"
[[params.resources.items]]
title = "The Power of GitOps with Flux v2 & GitOps Toolkit with Leigh Capili"
description = """
Leigh demos bootstrapping with GitOps Toolkit, app deployment, and monitoring with Prometheus.
"""
youtube = "0v5bjysXTL8"
[[params.resources.items]]
title = "Flux v2 for Helm Users with Scott Rigby"
description = """
Scott covers what to keep in mind as Helm 2 support ends, the benefits of Helm Controller, and how to migrate from Helm Operator to Helm Controller.
"""
youtube = "JcKUawSQfQ0"
[[params.resources.items]]
title = "Managing Remote Clusters with Flux v2 (CAPI demo) with Leigh Capili"
description = """
Leigh covers cluster API integration, dependency management & ordering, security model updates, and delegation & multi-tenancy via users.
"""
youtube = "7W27tAv7Tvs"
[[params.resources.items]]
title = "Flux v2 overview, demo, & review with Viktor Farcic"
description = """
Viktor demos Flux v2's flexibility & powerful capabilities by showing bootstrapping, creating sources, deploying releases, and promoting to production."""
youtube = "R6OeIgb7lUI"
[[params.resources.items]]
title = "Flux v2 Deep Dive series with Geert Baeke"
description = """
In this 5 video series, Geert Baeke takes a deep dive of Flux v2 and the use of GitOps principles with an Intro to Flux v2, Intro to Kustomize, Deploying Manifests, Monitoring & Alerting, and Helm Basics.
"""
url = "https://www.youtube.com/playlist?list=PLG9qZAczREKmCq6on_LG8D0uiHMx1h3yn"
[params.family]
title = "Other Flux projects"
# Toolkit hero element
[params.toolkit]
title = "GitOps Toolkit"
subtitle = """
The set of APIs and controllers that make up the runtime for Flux.
You can use the GitOps Toolkit to extend Flux, and to build your
own systems for continuous delivery.
"""
image = "building-blocks.svg"
[[params.toolkit.buttons]]
text = "Get started"
color = "dark"
url = "https://toolkit.fluxcd.io/dev-guides/source-watcher/"
[[params.toolkit.buttons]]
text = "Learn more"
url = "https://toolkit.fluxcd.io/components/"
# Flagger hero element
[params.flagger]
title = "Flagger"
subtitle = """
Kubernetes Operator for the automation of promoting canary deployments using Istio,
Linkerd, App Mesh, NGINX, Skipper, Contour, Gloo or Traefik routing for traffic
shifting, and Prometheus metrics for canary analysis.
The canary analysis can be extended with webhooks for running system
integration/acceptance tests, load tests, or any other custom validation.
"""
image = "flagger-gitops.png"
[[params.flagger.buttons]]
text = "Get started"
color = "dark"
url = "https://docs.flagger.app/"
[[params.flagger.buttons]]
text = "Learn more"
url = "https://flagger.app/"
[params.v1]
title = "Flux v1 and Helm Operator"
subtitle = """
We owe our success and good reputation as GitOps project to Flux and Helm Operator. They are the v1 iteration of our project and currently in [maintenance mode](https://github.com/fluxcd/flux/issues/3320).
We strongly advise everyone to familiarise themselves with Flux v2 and start the process of migrating.
"""
image = "logos/flux-horizontal-color.png"
[[params.v1.buttons]]
text = "Flux v1 Documentation"
color = "info"
url = "https://docs.fluxcd.io/"
[[params.v1.buttons]]
text = "Helm Operator Documentation"
color = "info"
url = "https://docs.fluxcd.io/projects/helm-operator/"
# Community hero element
[params.community]
title = "Community"
summary = """
The Flux project aspires to be the vendor-neutral home for GitOps in a Cloud Native world.<br>
What we achieved up until today is only possible because of our community.
"""
[[params.community.highlights]]
title = "GitHub Discussions"
icon = "fab fa-github"
text = """
Join the conversation in GitHub Discussions. Everything Flux v2 related ranging from specificiations and feature planning to Show & Tell happens here.
[Join the discussion today](https://github.com/fluxcd/toolkit/discussions)!
"""
[[params.community.highlights]]
title = "Slack"
titleBgColor = "slack-green"
icon = "fab fa-slack"
text = """
If you want to talk to the Flux team and community in real-time, join us on Slack. This is a great way to get to know everyone.
[Get an invite](https://slack.cncf.io), or [go to the `#flux` channel](https://cloud-native.slack.com/messages/flux)
"""
[[params.community.highlights]]
title = "Mailing list"
titleBgColor = "info"
icon = "far fa-paper-plane"
text = """
Join our (low-traffic) mailing list to stay up to day on announcements and sporadic discussions.
[Join the mailing list](https://lists.cncf.io/g/cncf-flux-dev)!
"""
# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
[[params.links.developer]]
name = "Flux GitHub Org"
url = "https://github.com/fluxcd"
icon = "fab fa-github"
desc = "Development takes place here!"
[[params.links.developer]]
name = "Slack"
url = "https://cloud-native.slack.com/messages/flux-contributors"
icon = "fab fa-slack"
desc = "Chat with other project developers"
[[params.links.developer]]
name = "Developer mailing list"
url = "https://lists.cncf.io/g/cncf-flux-dev"
icon = "fa fa-envelope"
desc = "Discuss development issues around the project"
[[params.links.developer]]
name="Past Flux Meetings"
url = "https://www.youtube.com/playlist?list=PLbx4FZ4kOKntmgJqaT-iJ8tn4xat150yL"
icon = "fab fa-youtube"
desc = "Recordings of past flux dev meetings"

67
content/en/_index.md Normal file
View File

@ -0,0 +1,67 @@
---
title: Flux - the GitOps family of projects
description: >
Flux is a set of continuous and progressive delivery solutions for Kubernetes, and they are open and extensible.
Flux v2 will be GA within the next few months!
This means that Flux v1 will be deprecated before the end of 2021, so now is a good time to start using v2.
---
{{< blocks/hero title="Flux - the GitOps family of projects" color="primary" height="full" >}}
Aliqua adipisicing enim duis irure incididunt culpa reprehenderit nisi. In esse cillum proident anim in ullamco. Laborum in irure quis tempor incididunt amet magna nisi fugiat labore.
Labore magna dolore proident reprehenderit esse irure quis dolor occaecat laborum non dolore. Voluptate est aute duis sunt nisi amet aute elit amet nulla nostrud. Amet laborum culpa fugiat dolor incididunt aliqua sint tempor. In amet nulla amet officia duis pariatur.
{{< /blocks/hero >}}
{{% blocks/section color="white" %}}
{{% blocks/feature icon="fab fa-git-square fa-3x" title="Declarative" height="auto" color="blue" %}}
Describe the entire desired state of your system in [Git](https://git-scm.com). This includes apps, configuration,
dashboards, monitoring, and everything else.
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-robot fa-3x" title="Automated" height="auto" color="blue" %}}
Use [YAML](https://yaml.org) to enforce conformance to the declared system. You don't need to run
[`kubectl`](https://kubectl.docs.kubernetes.io/) because all changes are synced automatically.
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-code fa-3x" title="Auditable" height="auto" color="blue" %}}
Everything is controlled through pull requests. Your Git history provides a sequence of transactions, allowing you to
recover state from any snapshot.
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-drafting-compass fa-3x" title="Designed for Kubernetes" height="auto" color="blue" %}}
Declaratively configurable using Custom Resources, state reports in the
[object's status](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)
and via [Kubernetes Events](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/),
and integrations with Kubernetes RBAC
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-box-open fa-3x" title="Out-of-the-box integrations" height="auto" color="blue" %}}
Support for e.g. [Kustomize](https://kustomize.io), [Helm](https://helm.sh); GitHub, GitLab, Harbor and custom
webhooks; notifications to most team communication platforms; and many more.
{{% /blocks/feature %}}
{{% blocks/feature icon="fas fa-cube fa-3x" title="Extensible" height="auto" color="blue" %}}
Easily create a continous delivery solution with only the components you need, or use the [GitOps Toolkit](#gitops-toolkit)
to extend Flux.
{{% /blocks/feature %}}
{{< /blocks/section >}}

View File

@ -3,7 +3,6 @@ author: dholbach
date: 2020-12-01 12:30:00+00:00
title: December Update
description: This month's edition of updates on Flux v2 developments - 0.4.0 release, new website, new maintainer, new guides and more.
url: /blog/2020/12/december-update/
---
## Before we get started, what is GitOps?

View File

@ -3,7 +3,6 @@ author: dholbach
date: 2021-01-06 12:30:00+00:00
title: January 2021 Update
description: This month's edition of updates on Flux v2 developments - 0.5.0 release, Flagger as a Flux project, first Alpha of Image Update functionality, new guides and more.
url: /blog/2021/01/january-2021-update/
---
**Before we get started, what is GitOps?**

View File

@ -3,7 +3,6 @@ author: dholbach
date: 2021-02-01 08:30:00+00:00
title: February 2021 Update
description: This month's edition of updates on Flux v2 developments - 0.7 release, Flagger 1.6 release, project and website changes, new events and more.
url: /blog/2021/02/february-2021-update/
---
## Before we get started, what is GitOps?

View File

@ -3,7 +3,6 @@ author: dholbach
date: 2021-03-01 08:30:00+00:00
title: March 2021 Update
description: This month's edition of updates on Flux v2 developments - feature parity, 0.9 release, new Flagger logo, update on GA release, project and website changes, new events and more.
url: /blog/2021/03/march-2021-update/
---
## Before we get started, what is GitOps?

View File

@ -3,7 +3,6 @@ author: dholbach
date: 2021-03-10 06:30:00+00:00
title: Flux is a CNCF Incubation project
description: The Cloud Native Computing Foundation promoted Flux to Incubation status. We celebrate all the great work that turned Flux into a GitOps family of projects.
url: /blog/2021/03/flux-is-a-cncf-incubation-project/
---
![Incubation](/img/incubation.png)

View File

@ -1,3 +1,14 @@
---
title: Blog
type: section
menu:
main:
weight: 20
cascade:
- _target:
type: page
lang: en
path: /blog/*
---
this blog

View File

@ -1,10 +1,10 @@
---
title: "Documentation"
linkTitle: "Documentation"
title: "Flux Documentation"
linkTitle: "Docs"
weight: 0
menu:
main:
weight: 0
weight: 10
description: >
Flux v2 Documentation.
---
@ -57,11 +57,11 @@ the API.
## Where do I start?
{{% note title="Get started with Flux v2!" %}}
{{% alert title="Get started with Flux v2!" color="info" %}}
Following this [guide](get-started/index.md) will just take a couple of minutes to complete:
After installing the `flux` CLI and running a couple of very simple commands,
you will have a GitOps workflow setup which involves a staging and a production cluster.
{{% /note %}}
{{% /alert %}}
If you should need help, please refer to our **[Support page](https://fluxcd.io/support/)**.

View File

@ -6,9 +6,9 @@ description: >
Core Concepts of Flux v2
---
{{% note title="Work in progress" %}}
{{% alert color="warning" title="Work in progress" %}}
This document is a work in progress.
{{% /note %}}
{{% /alert %}}
These are some core concepts in Flux.

View File

@ -168,12 +168,12 @@ The behavior of Kustomize used by the controller is currently configured as foll
- `--load_restrictor` is set to `LoadRestrictionsNone`, so it allows loading files outside the dir containing `kustomization.yaml`.
- `--reorder` resources is done in the `legacy` mode, so the output will have namespaces and cluster roles/role bindings first, CRDs before CRs, and webhooks last.
{{% note title="kustomization.yaml validation" %}}
{{% alert color="info" title="kustomization.yaml validation" %}}
To validate changes before committing and/or merging, [a validation
utility script is available](https://github.com/fluxcd/flux2-kustomize-helm-example/blob/main/scripts/validate.sh),
it runs `kustomize` locally or in CI with the same set of flags as
the controller and validates the output using `kubeval`.
{{% /note %}}
{{% /alert %}}
## Helm questions

View File

@ -6,11 +6,11 @@ description: >
Get started with Flux v2
---
{{% note title="Basic knowledge" %}}
{{% alert color="info" title="Basic knowledge" %}}
This guide assumes you have some understanding of the core concepts and have read the introduction to Flux.
The core concepts used in this guide are [GitOps](../core-concepts/index.md#gitops),
[Sources](../core-concepts/index.md#sources), [Kustomization](../core-concepts/index.md#kustomization).
{{% /note %}}
{{% /alert %}}
In this tutorial, you will deploy an application to a kubernetes cluster with Flux
and manage the cluster in a complete GitOps manner.
@ -98,11 +98,11 @@ flux bootstrap github \
--personal
```
{{% note title="Multi-arch images" %}}
{{% alert color="info" title="Multi-arch images" %}}
The component images are published as [multi-arch container images](https://docs.docker.com/docker-for-mac/multi-arch/)
with support for Linux `amd64`, `arm64` and `armv7` (e.g. 32bit Raspberry Pi)
architectures.
{{% /note %}}
{{% /alert %}}
The bootstrap command creates a repository if one doesn't exist,
commits the manifests for the Flux components to the default branch at the specified path,
@ -149,13 +149,13 @@ deployment "notification-controller" successfully rolled out
If you prefer GitLab, export `GITLAB_TOKEN` env var and
use the command [flux bootstrap gitlab](../guides/installation.md#gitlab-and-gitlab-enterprise).
{{% note title="Idempotency" %}}
{{% alert color="info" title="Idempotency" %}}
It is safe to run the bootstrap command as many times as you want.
If the Flux components are present on the cluster,
the bootstrap command will perform an upgrade if needed.
You can target a specific Flux [version](https://github.com/fluxcd/flux2/releases)
with `flux bootstrap --version=<semver>`.
{{% /note %}}
{{% /alert %}}
## Clone the git repository
@ -286,10 +286,10 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
service/podinfo ClusterIP 10.100.149.126 <none> 9898/TCP,9999/TCP 108s
```
{{% note %}}
{{% alert color="info" %}}
From this moment forward, any changes made to the podinfo
Kubernetes manifests in the master branch will be synchronised with your cluster.
{{% /note %}}
{{% /alert %}}
If a Kubernetes manifest is removed from the podinfo repository, Flux will remove it from your cluster.
If you delete a `Kustomization` from the fleet-infra repository, Flux will remove all Kubernetes objects that

View File

@ -54,11 +54,11 @@ a push-based fetch can be introduced using [webhook receivers](webhook-receivers
The `url` can be any HTTP/S Helm repository URL.
{{% note title="Authentication" %}}
{{% alert color="info" title="Authentication" %}}
HTTP/S basic and TLS authentication can be configured for private
Helm repositories. See the [`HelmRepository` CRD docs](../components/source/helmrepositories.md)
for more details.
{{% /note %}}
{{% /alert %}}
### Git repository
Charts from Git repositories can be released by declaring a
@ -111,11 +111,11 @@ format](https://git-scm.com/docs/gitignore#_pattern_format).
The above example only includes the `charts` directory of the
repository and omits all other files.
{{% note title="Authentication" %}}
{{% alert color="info" title="Authentication" %}}
HTTP/S basic and SSH authentication can be configured for private
Git repositories. See the [`GitRepository` CRD docs](../components/source/gitrepositories.md)
for more details.
{{% /note %}}
{{% /alert %}}
### Cloud Storage
@ -237,12 +237,12 @@ The `chart.spec.version` can be a fixed semver, or any semver range
(i.e. `>=4.0.0 <5.0.0`). It is only taken into account for `HelmRelease`
resources that reference a `HelmRepository` source.
{{% note title="Advanced configuration" %}}
{{% alert color="info" title="Advanced configuration" %}}
The `HelmRelease` offers an extensive set of configurable flags
for finer grain control over how Helm actions are performed.
See the [`HelmRelease` CRD docs](../components/helm/helmreleases.md)
for more details.
{{% /note %}}
{{% /alert %}}
## Refer to values in `ConfigMap` and `Secret` resources
@ -276,20 +276,20 @@ The definition of the listed keys is as follows:
a single flat value. Defaults to `None` when omitted, which results
in the values getting merged at the root.
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
The `targetPath` supports the same formatting as you would supply
as an argument to the `helm` binary using `--set [path]=[value]`.
In addition to this, the referred value can contain the same
value formats (e.g. `{a,b,c}` for a list).
You can read more about the available formats and limitations in
the [Helm documentation](https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set).
{{% /note %}}
{{% /alert %}}
{{% note title="TargetPath and JSON values" color="warning" %}}
{{% alert color="info" title="TargetPath and JSON values" color="warning" %}}
When using `TargetPath` in combination with a JSON string, the
[limitations are the same as while using `helm`](https://github.com/helm/helm/issues/5618),
and require you to escape the full JSON string (including `=`, `[`, `,`, `.`).
{{% /note %}}
{{% /alert %}}
## Refer to values in `ConfigMaps` generated with Kustomize
@ -363,11 +363,11 @@ spec:
name: podinfo-values-2mh2t8m94h
```
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
Stale `ConfigMaps`, previously generated by Kustomize, will be
removed from the cluster by kustomize-controller if
[pruning](../components/kustomize/kustomization/#garbage-collection) is enabled.
{{% /note %}}
{{% /alert %}}
## Refer to values inside the chart
@ -494,8 +494,8 @@ With the above settings, when you upload a chart, the following happens:
* Source controller pulls the changes into the cluster and updates the `HelmChart` version
* Helm controller is notified about the version change and upgrades the release
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
Besides Harbor, you can define receivers for **GitHub**, **GitLab**, **Bitbucket**
and any other system that supports webhooks e.g. Jenkins, CircleCI, etc.
See the [Receiver CRD docs](../components/notification/receiver.md) for more details.
{{% /note %}}
{{% /alert %}}

View File

@ -15,10 +15,10 @@ For a container image you can configure Flux to:
- checkout a branch, commit and push the changes to the remote Git repository
- apply the changes in-cluster and rollout the container image
{{% note title="Alpha version" color="warning" %}}
{{% alert color="info" title="Alpha version" color="warning" %}}
Note that the image update feature is currently alpha,
see the [roadmap](../roadmap/index.md) for more details.
{{% /note %}}
{{% /alert %}}
For production environments, this feature allows you to automatically deploy application patches
(CVEs and bug fixes), and keep a record of all deployments in Git history.
@ -62,11 +62,11 @@ export GITHUB_USER=<your-username>
## Install Flux
{{% note title="Enable image automation components" %}}
{{% alert color="info" title="Enable image automation components" %}}
If you bootstrapped Flux before without the `--components-extra=` argument, you need to add
`--components-extra=image-reflector-controller,image-automation-controller` to your
bootstrapping routine as image automation components are not installed by default.
{{% /note %}}
{{% /alert %}}
Install Flux with the image automation components:
@ -85,12 +85,12 @@ The bootstrap command creates a repository if one doesn't exist, and commits the
Flux components to the default branch at the specified path. It then configures the target cluster to
synchronize with the specified path inside the repository.
{{% note title="GitLab and other Git platforms" %}}
{{% alert color="info" title="GitLab and other Git platforms" %}}
You can install Flux and bootstrap repositories hosted on GitLab, BitBucket, Azure DevOps and
any other Git provider that support SSH or token-based authentication.
When using SSH, make sure the deploy key is configured with write access.
Please see the [installation guide](installation.md) for more details.
{{% /note %}}
{{% /alert %}}
## Deploy a demo app
@ -169,10 +169,10 @@ spec:
name: regcred
```
{{% note title="Storing secrets in Git" %}}
{{% alert color="info" title="Storing secrets in Git" %}}
Note that if you want to store the image pull secret in Git, you can encrypt
the manifest with [Mozilla SOPS](mozilla-sops.md) or [Sealed Secrets](sealed-secrets.md).
{{% /note %}}
{{% /alert %}}
Create an `ImagePolicy` to tell Flux which semver range to use when filtering tags:
@ -199,17 +199,17 @@ spec:
range: 5.0.x
```
{{% note title="semver ranges" %}}
{{% alert color="info" title="semver ranges" %}}
A semver range that includes stable releases can be defined with
`1.0.x` (patch versions only) or `>=1.0.0 <2.0.0` (minor and patch versions).
If you want to include pre-release e.g. `1.0.0-rc.1`,
you can define a range like: `^1.x-0` or `>1.0.0-rc <2.0.0-rc`.
{{% /note %}}
{{% /alert %}}
{{% note title="Other policy examples" %}}
{{% alert color="info" title="Other policy examples" %}}
For policies that make use of CalVer, build IDs or alphabetical sorting,
have a look at [the examples](../components/image/imagepolicies.md#examples).
{{% /note %}}
{{% /alert %}}
Commit and push changes to main branch:
@ -434,11 +434,11 @@ Log in to DockerHub web interface, go to your image registry Settings and select
Fill the form "Webhook URL" by composing the address using the receiver
LB and the generated URL `http://<LoadBalancerAddress>/<ReceiverURL>`.
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
Besides DockerHub, you can define receivers for **Harbor**, **Quay**, **Nexus**, **GCR**,
and any other system that supports webhooks e.g. GitHub Actions, Jenkins, CircleCI, etc.
See the [Receiver CRD docs](../components/notification/receiver.md) for more details.
{{% /note %}}
{{% /alert %}}
## Incident management
@ -526,11 +526,11 @@ If relying on a cloud provider image repository, you might need to do some extra
work in order to configure the ImageRepository resource credentials. Here are
some common examples for the most popular cloud provider docker registries.
{{% note title="Workarounds" color="warning" %}}
{{% alert color="info" title="Workarounds" color="warning" %}}
The examples below are intended as workaround solutions until native
authentication mechanisms are implemented in Flux itself to support this in
a more straightforward manner.
{{% /note %}}
{{% /alert %}}
### AWS Elastic Container Registry
@ -643,12 +643,12 @@ spec:
--docker-password="$(</token/ecr-token)"
```
{{% note title="Using IAM Roles for Service Accounts (IRSA)" %}}
{{% alert color="info" title="Using IAM Roles for Service Accounts (IRSA)" %}}
If using IRSA, make sure the role attached to the service account has
readonly access to ECR. The AWS managed policy
`arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly` can be attached
to the role.
{{% /note %}}
{{% /alert %}}
Since the cronjob will not create a job right away, after applying the manifest,
you can manually create an init job using the following command:
@ -671,12 +671,12 @@ spec:
#### Using access token [short-lived]
{{% note title="Workload Identity" %}}
{{% alert color="info" title="Workload Identity" %}}
Please ensure that you enable workload identity for your cluster, create a GCP service account that has
access to the container registry and create an IAM policy binding between the GCP service account and
the Kubernetes service account so that the pods created by the cronjob can access GCP APIs and get the token.
Take a look at [this guide](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)
{{% /note %}}
{{% /alert %}}
The access token for GCR expires hourly.
Considering this limitation, one needs to ensure the credentials are being
@ -779,14 +779,14 @@ spec:
#### Using a JSON key [long-lived]
{{% note title="Less secure option" color="warning" %}}
{{% alert color="info" title="Less secure option" color="warning" %}}
From [Google documentation on authenticating container registry](https://cloud.google.com/container-registry/docs/advanced-authentication#json-key)
> A user-managed key-pair that you can use as a credential for a service account.
> Because the credential is long-lived, it is the least secure option of all the available authentication methods.
> When possible, use an access token or another available authentication method to reduce the risk of
> unauthorized access to your artifacts. If you must use a service account key,
> ensure that you follow best practices for managing credentials.
{{% /note %}}
{{% /alert %}}
A Json key doesn't expire, so we don't need a cronjob,
we just need to create the secret and reference it in the ImagePolicy.
@ -823,11 +823,11 @@ Your cluster should have `--enable-managed-identity` configured.
This software can be [installed via Helm](https://azure.github.io/aad-pod-identity/docs/getting-started/installation/) not managed by Azure.
Use Flux's `HelmRepository` and `HelmRelease` object to manage the aad-pod-identity installation from a bootstrap repository.
{{% note %}}
{{% alert color="info" %}}
As an alternative to Helm, the `--enable-aad-pod-identity` flag for the `az aks create` is currently in Preview.
Follow the Azure guide for [Creating an AKS cluster with AAD Pod Identity](https://docs.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity) if you would like to enable this feature with the Azure CLI.
{{% /note %}}
{{% /alert %}}
Once we have AAD Pod Identity installed, we can create a Deployment that frequently refreshes an image pull secret into
our desired Namespace.
@ -882,9 +882,9 @@ folder into your own repository or use a git submodule to vendor it if preferred
#### Using Static Credentials [long-lived]
{{% note %}}
{{% alert color="info" %}}
Using a static credential requires a Secrets management solution compatible with your GitOps workflow.
{{% /note %}}
{{% /alert %}}
Follow the official Azure documentation for [Creating an Image Pull Secret for ACR](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-kubernetes).
@ -896,6 +896,6 @@ Update the `ImageRepository.spec.secretRef` to point to it.
It is also possible to create [Repository Scoped Tokens](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-repository-scoped-permissions).
{{% note %}}
{{% alert color="info" %}}
Note that this feature is in preview and does have limitations.
{{% /note %}}
{{% /alert %}}

View File

@ -66,11 +66,11 @@ flux bootstrap <GIT-PROVIDER> \
--path=clusters/my-cluster
```
{{% note title="Multi-arch images" %}}
{{% alert color="info" title="Multi-arch images" %}}
The component images are published as [multi-arch container images](https://docs.docker.com/docker-for-mac/multi-arch/)
with support for Linux `amd64`, `arm64` and `armv7` (e.g. 32bit Raspberry Pi)
architectures.
{{% /note %}}
{{% /alert %}}
If you wish to install a specific version, use the Flux
[release tag](https://github.com/fluxcd/flux2/releases) e.g. `--version=v0.9.0`.
@ -97,10 +97,10 @@ cluster e.g. `clusters/staging` and `clusters/production`:
After running bootstrap you can place Kubernetes YAMLs inside a dir under path
e.g. `clusters/staging/my-app`, and Flux will reconcile them on your cluster.
{{% note title="Change the default branch" %}}
{{% alert color="info" title="Change the default branch" %}}
If you wish to change the branch to something else than main, create the repository manually,
push a branch to origin and then use `flux bootstrap <GIT-PROVIDER> --branch=your-branch`.
{{% /note %}}
{{% /alert %}}
For examples on how you can structure your Git repository see:
@ -128,12 +128,12 @@ flux bootstrap github \
--personal
```
{{% note title="Deploy key" %}}
{{% alert color="info" title="Deploy key" %}}
The bootstrap command creates an SSH key which it stores as a secret in the
Kubernetes cluster. The key is also used to create a deploy key in the GitHub
repository. The new deploy key will be linked to the personal access token used
to authenticate. **Removing the personal access token will also remove the deploy key.**
{{% /note %}}
{{% /alert %}}
Run the bootstrap for a repository owned by a GitHub organization:
@ -206,11 +206,11 @@ flux bootstrap gitlab \
--path=clusters/my-cluster
```
{{% note title="Authentication" %}}
{{% alert color="info" title="Authentication" %}}
When providing the `--ssh-hostname`, a read-only (SSH) deploy key will be added
to your repository, otherwise your GitLab personal token will be used to
authenticate against the HTTPS endpoint instead.
{{% /note %}}
{{% /alert %}}
Run the bootstrap for a repository owned by a GitLab (sub)group:
@ -340,7 +340,7 @@ flux create source git flux-system \
You will be prompted to add a deploy key to your repository.
If you don't specify the SSH algorithm, then `flux` will generate an RSA 2048 bits key.
{{% note title="Azure DevOps" %}}
{{% alert color="info" title="Azure DevOps" %}}
Azure DevOps requires a non-default Git implementation (`libgit2`) to be enabled, so that the Git v2 protocol is supported.
Note that this implementation does not support shallow cloning, and it is therefore advised to only resort to this option if a
connection fails with the default configuration.
@ -374,7 +374,7 @@ flux create source git flux-system \
Please consult the [Azure DevOps documentation](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page)
on how to generate personal access tokens for Git repositories.
{{% /note %}}
{{% /alert %}}
If your Git server supports basic auth, you can set the URL to HTTPS and specify the credentials with:
@ -561,10 +561,10 @@ flux create helmrelease nginx \
## Upgrade
{{% note title="Patch versions" %}}
{{% alert color="info" title="Patch versions" %}}
It is safe and advised to use the latest PATCH version when upgrading to a
new MINOR version.
{{% /note %}}
{{% /alert %}}
Update Flux CLI to the latest release with `brew upgrade fluxcd/tap/flux` or by
downloading the binary from [GitHub](https://github.com/fluxcd/flux2/releases).
@ -604,11 +604,11 @@ Verify that the controllers have been upgrade with:
flux check
```
{{% note title="Automated upgrades" %}}
{{% alert color="info" title="Automated upgrades" %}}
You can automate the components manifest update with GitHub Actions
and open a PR when there is a new Flux version available.
For more details please see [Flux GitHub Action docs](https://github.com/fluxcd/flux2/tree/main/action).
{{% /note %}}
{{% /alert %}}
### Terraform upgrade
@ -663,7 +663,7 @@ can skip the namespace deletion with:
flux uninstall --namespace=infra --keep-namespace
```
{{% note %}}
{{% alert color="info" %}}
Note that the `uninstall` command will not remove any Kubernetes objects
or Helm releases that were reconciled on the cluster by Flux.
{{% /note %}}
{{% /alert %}}

View File

@ -57,10 +57,10 @@ Cluster reconciliation dashboard [http://localhost:3000/d/gitops-toolkit-cluster
If you wish to use your own Prometheus and Grafana instances, then you can import the dashboards from
[GitHub](https://github.com/fluxcd/flux2/tree/main/manifests/monitoring/grafana/dashboards).
{{% note %}}
{{% alert color="info" %}}
Note that the toolkit controllers expose the `/metrics` endpoint on port `8080`.
When using Prometheus Operator you should create a `PodMonitor` object for each controller to configure scraping.
{{% /note %}}
{{% /alert %}}
```yaml
apiVersion: monitoring.coreos.com/v1

View File

@ -149,10 +149,10 @@ won't have to worry about specifying the proper key for the target cluster or na
`encrypted_regex` helps encrypt the the proper `data` and `stringData` fields for Secrets.
You may wish to add other fields if you are encrypting other types of Objects.
{{% note title="Hint" %}}
{{% alert color="info" title="Hint" %}}
Note that you should encrypt only the `data` or `stringData` section. Encrypting the Kubernetes
secret metadata, kind or apiVersion is not supported by kustomize-controller.
{{% /note %}}
{{% /alert %}}
Ignore all `.sops.yaml` files in a [`.sourceignore`](../components/source/gitrepositories#excluding-files) file at the root of your repo.
@ -276,9 +276,9 @@ spec:
name: sops-gpg
```
{{% note title="Hint" %}}
{{% alert color="info" title="Hint" %}}
You can generate the above manifests using `flux create <kind> --export > manifest.yaml`.
{{% /note %}}
{{% /alert %}}
Assuming a team member wants to deploy an application that needs to connect
to a database using a username and password, they'll be doing the following:

View File

@ -137,11 +137,11 @@ with the result and the commit hash it reconciled. Then notification-controller
when receiving the event.
![commit status flow](../_files/commit-status-flow.png)
{{% note title="Limitations" %}}
{{% alert color="info" title="Limitations" %}}
The git notification providers require that a commit hash present in the meta data
of the event. There for the the providers will only work with `Kustomization` as an
event source, as it is the only resource which includes this data.
{{% /note %}}
{{% /alert %}}
First follow the [get started guide](../../get-started) if you do not have a Kubernetes cluster with Flux installed in it.
You will need a authentication token to communicate with the API. The authentication method depends on

View File

@ -152,9 +152,9 @@ spec:
targetNamespace: flux-system
```
{{% note %}}
{{% alert color="info" %}}
You can generate the above manifests using `flux create <kind> --export > manifest.yaml`.
{{% /note %}}
{{% /alert %}}
Once the sealed-secrets controller is installed, the admin fetches the
public key and shares it with the teams that operate on the fleet clusters via Git.

View File

@ -75,10 +75,10 @@ spec:
branch: master
```
{{% note title="Authentication" %}}
{{% alert color="info" title="Authentication" %}}
SSH or token based authentication can be configured for private repositories.
See the [GitRepository CRD docs](../components/source/gitrepositories.md) for more details.
{{% /note %}}
{{% /alert %}}
## Define a Git repository receiver
@ -112,11 +112,11 @@ spec:
name: webapp
```
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
Besides GitHub, you can define receivers for **GitLab**, **Bitbucket**, **Harbor**
and any other system that supports webhooks e.g. Jenkins, CircleCI, etc.
See the [Receiver CRD docs](../components/notification/receiver.md) for more details.
{{% /note %}}
{{% /alert %}}
The notification controller generates a unique URL using the provided token and the receiver name/namespace.

View File

@ -375,10 +375,10 @@ spec:
image: ghcr.io/stefanprodan/podinfo:5.0.0
```
{{% note color="warning" %}}
{{% alert color="info" color="warning" %}}
A YAML file may have more than one manifest in it, separated with
`---`. Be careful to account for each manifest in a file.
{{% /note %}}
{{% /alert %}}
You may wish to try migrating the automation of just one file or manifest and follow it through to
the end of the guide, before returning here to do the remainder.
@ -435,10 +435,10 @@ spec:
interval: 5m0s
```
{{% note title="Note" %}}
{{% alert color="info" title="Note" %}}
If you are using the same image repository in several manifests, you only need one
`ImageRepository` object for it.
{{% /note %}}
{{% /alert %}}
##### Using image registry credentials for scanning

View File

@ -7,12 +7,12 @@ weight: 10
This guide walks you through migrating from Flux v1 to v2.
Read the [FAQ](../faq/index.md) to find out what differences are between v1 and v2.
{{% note title="Automated image updates" %}}
{{% alert color="info" title="Automated image updates" %}}
The image automation feature is under development in Flux v2.
Please consult the [roadmap](../roadmap/index.md) for more details.
{{% /note %}}
{{% /alert %}}
{{% note title="Feature parity" %}}
{{% alert color="info" title="Feature parity" %}}
"Feature parity" does not mean Flux v2 works exactly the same as v1 (or is
backward-compatible); it means you can accomplish the same results, while
accounting for the fact that it's a system with a substantially different
@ -20,7 +20,7 @@ design.
This may at times mean that you have to make adjustments to the way your
current cluster configuration is structured. If you are in this situation
and need help, please refer to the [support page](https://fluxcd.io/support/).
{{% /note %}}
{{% /alert %}}
## Prerequisites
@ -68,13 +68,13 @@ to define the state of your fleet of Kubernetes clusters.
For a detailed walk-through of the bootstrap procedure please see the [installation guide](installation.md).
{{% note color="warning" title="'flux bootstrap' target" %}}
{{% alert color="info" color="warning" title="'flux bootstrap' target" %}}
`flux bootstrap` should not be run against a Git branch or path
that is already being synchronized by Flux v1, as this will make
them fight over the resources. Instead, bootstrap to a **new Git
repository, branch or path**, and continue with moving the
manifests.
{{% /note %}}
{{% /alert %}}
After you've installed Flux v2 on your cluster using bootstrap,
you can delete the Flux v1 from your clusters and move the manifests from the
@ -82,11 +82,11 @@ Flux v1 repository to the bootstrap one.
## In-place migration
{{% note color="warning" %}}
{{% alert color="info" color="warning" %}}
For production use we recommend using the **bootstrap** procedure (see the [Gitops migration](#gitops-migration) section above),
but if you wish to install Flux v2 in the
same way as Flux v1 then follow along.
{{% /note %}}
{{% /alert %}}
### Flux read-only mode
@ -111,10 +111,10 @@ fluxctl identity --k8s-fwd-ns flux
fluxctl sync --k8s-fwd-ns flux
```
{{% note title="Uninstall Flux v1" %}}
{{% alert color="info" title="Uninstall Flux v1" %}}
Before you proceed, scale the Flux v1 deployment to zero
or delete its namespace and RBAC.
{{% /note %}}
{{% /alert %}}
If there are YAML files in your `deploy` dir that are not meant to be
applied on the cluster, you can exclude them by placing a `.sourceignore` in your repo root:
@ -227,10 +227,10 @@ patchUpdated:
patchFile: flux-patch.yaml
```
{{% note title="Uninstall Flux v1" %}}
{{% alert color="info" title="Uninstall Flux v1" %}}
Before you proceed, delete the Flux v1 namespace
and remove the `.flux.yaml` from your repo.
{{% /note %}}
{{% /alert %}}
Install Flux v2 in the `flux-system` namespace:

View File

@ -6,11 +6,11 @@ description: >
Timetable for Flux v2
---
{{% note title="💖 Flux Migration Commitment" %}}
{{% alert color="info" title="💖 Flux Migration Commitment" %}}
This public timetable clarifies our commitment to end users.
Its purpose is to help improve your experience in deciding how and when to plan infra decisions related to Flux versions.
Please refer to the [Roadmap](../../roadmap.md) for additional details.
{{% /note %}}
{{% /alert %}}
<!-- Note: this div allows us to set fixed column widths in custom.css -->
<!-- See: https://github.com/squidfunk/mkdocs-material/issues/118 -->

View File

@ -6,12 +6,12 @@ description: >
Roadmap for Flux v2
---
{{% note title="Production readiness" %}}
{{% alert color="info" title="Production readiness" %}}
The Flux custom resource definitions which are at `v1beta1` and `v2beta1`
and their controllers are considered stable and production ready.
Going forward, breaking changes to the beta CRDs will be accompanied by a conversion mechanism.
Please see the [Migration and Suport Timetable](../migration/timetable.md) for our commitment to end users.
{{% /note %}}
{{% /alert %}}
The following components (included by default in [flux bootstrap](../guides/installation.md#bootstrap))
are considered production ready:

7
content/en/project.md Normal file
View File

@ -0,0 +1,7 @@
---
title: "Project"
type: section
menu:
main:
weight: 30
---

View File

@ -344,10 +344,11 @@ main() {
fi
# checks if both the source and destination would be the same. If so
# skip updating.
if [[ "$file" != "$filename" ]]; then
mv "$file" "$filename"
echo "Renamed: $file to $filename"
fi
# Ignore this step
# if [[ "$file" != "$filename" ]]; then
# mv "$file" "$filename"
# echo "Renamed: $file to $filename"
# fi
fi
done < <(find_md_files "${TEMP_DIR}${srcs[i]}")
done

10
layouts/404.html Normal file
View File

@ -0,0 +1,10 @@
{{ define "main"}}
<main id="main">
<div>
<h1 id="title">Not found</h1>
<p>Oops! This page doesn't exist. Try going back to our <a href="{{ "/" | relURL }}">home page</a>.</p>
<p>You can learn how to make a 404 page like this in <a href="https://gohugo.io/templates/404/">Custom 404 Pages</a>.</p>
</div>
</main>
{{ end }}

View File

@ -0,0 +1,10 @@
{{ $link := .Destination }}
{{ $isRemote := strings.HasPrefix $link "http" }}
{{- if not $isRemote -}}
{{ $url := urls.Parse .Destination }}
{{- if $url.Path -}}
{{ $fragment := "" }}
{{- with $url.Fragment }}{{ $fragment = printf "#%s" . }}{{ end -}}
{{- with .Page.GetPage $url.Path }}{{ $link = printf "%s%s" .RelPermalink $fragment }}{{ end }}{{ end -}}
{{- end -}}
<a href="{{ $link | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if $isRemote }} target="_blank"{{ end }}>{{ .Text | safeHTML }}</a>

View File

@ -1,20 +0,0 @@
<!DOCTYPE>
<html lang="{{ site.LanguageCode }}">
<head>
{{ partial "meta.html" . }}
{{ partial "favicon.html" . }}
{{ partial "css.html" . }}
</head>
<body class="site has-navbar-fixed-top">
<header>
{{ partial "navbar.html" . }}
</header>
<main class="main">
{{ block "main" . }}
{{ end }}
</main>
{{ partial "footer.html" . }}
{{ partial "javascript.html" . }}
</body>
</html>

View File

@ -1,9 +0,0 @@
{{ define "main" }}
<main class="page container">
<div class="wrapper">
<article class="content">
{{ .Content }}
</article>
</div>
</main>
{{ end }}

View File

@ -1,25 +0,0 @@
{{ define "main" }}
<main class="blog container">
<div class="wrapper">
{{ range (.Paginate .Pages).Pages }}
<article class="content">
<header>
<h1 class="title"><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
<p class="subtitle is-6 py-3">
{{ partial "widgets/date" . }}
{{ partial "widgets/reading-time" . }}
</p>
</header>
<p>
{{ .Summary }}
</p>
{{ if .Truncated }}
<p>
<a href="{{ .RelPermalink }}">{{ T "ui_read_more" }}</a>
</p>
{{ end }}
</article>
{{ end }}
</div>
</main>
{{ end }}

View File

@ -1,27 +0,0 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
<link>{{ .Permalink }}</link>
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
{{ with .OutputFormats.Get "RSS" -}}
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
{{ end -}}
{{ range .Pages }}
<item>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
<guid>{{ .Permalink }}</guid>
<description>{{ .Summary | html }}</description>
<content type="html">{{ printf `<![CDATA[%s]]>` .Content | safeHTML }}</content>
</item>
{{ end }}
</channel>
</rss>

View File

@ -1,15 +0,0 @@
{{ define "main" }}
<main class="blog container">
<div class="wrapper">
<article class="content">
<h1 class="title">{{ .Title }}</h1>
<p class="subtitle is-6 py-3">
{{ partial "widgets/date" . }}
{{ partial "widgets/reading-time" . }}
</p>
{{ .Content }}
</article>
</div>
</main>
{{ end }}

View File

@ -1,20 +0,0 @@
<!DOCTYPE>
<html lang="{{ site.LanguageCode }}">
<head>
{{ partial "meta.html" . }}
{{ partial "favicon.html" . }}
{{ partial "css.html" . }}
</head>
<body class="site has-navbar-fixed-top">
<header>
{{ partial "navbar.html" . }}
</header>
<div class="main columns is-marginless is-multiline">
{{ partial "docs/nav.html" . }}
{{ partial "docs/meta.html" . }}
{{ block "main" . }}{{ end }}
</div>
{{ partial "footer.html" . }}
{{ partial "javascript.html" . }}
</body>
</html>

View File

@ -1,11 +0,0 @@
<div class="content">
<h1 class="title">{{ .Title }}</h1>
<p class="subtitle">
{{ partial "widgets/reading-time" . }}
</p>
{{ with .Params.description }}
<div class="content is-medium">{{ . | markdownify }}</div>
{{ end }}
{{ .Content }}
{{ partial "docs/lastmod.html" . }}
</div>

View File

@ -1,9 +0,0 @@
{{ define "main" }}
<main class="column is-full-tablet is-8-desktop">
{{ partial "widgets/breadcrumbs" . }}
<div class="container p-3">
{{ .Render "content" }}
{{ partial "docs/section-index.html" . }}
</div>
</main>
{{ end }}

View File

@ -1,9 +0,0 @@
{{ define "main" }}
<main class="column is-full-tablet is-8-desktop">
{{ partial "widgets/breadcrumbs" . }}
<div class="container p-3">
{{ .Render "content" }}
{{ partial "docs/pager.html" . }}
</div>
</main>
{{ end }}

View File

@ -1,8 +0,0 @@
{{ define "main" }}
{{ partial "home/flux.html" . }}
{{ partial "home/overview.html" . }}
{{ partial "home/resources.html" . }}
{{ partial "home/family.html" . }}
{{ partial "home/community.html" . }}
{{ partial "home/cncf.html" . }}
{{ end }}

View File

@ -1,23 +0,0 @@
{{ $description := site.Params.celebration.description | markdownify }}
{{ $emoji := site.Params.celebration.emoji | markdownify }}
{{ $url := site.Params.celebration.url }}
{{- if and ($description) (ne .RelPermalink $url) }}
<div class="notification no-radius is-warning mb-0 is-hidden-mobile">
<div class="container">
<div class="columns is-vcentered">
<div class="column is-1">
<p class="is-size-1 has-text-right">
{{ $emoji }}
</p>
</div>
<div class="column">
<p class="is-size-4 has-text-justified has-text-weight-semibold has-text-info">
<a href="{{ $url }}">
{{ $description }}
</a>
</p>
</div>
</div>
</div>
</div>
{{- end }}

View File

@ -1,3 +0,0 @@
{{- if .Site.DisqusShortname }}
{{ template "_internal/disqus.html" . }}
{{- end }}

View File

@ -1,23 +0,0 @@
{{ $serverMode := site.IsServer }}
{{ $sass := "sass/style.sass" }}
{{ $cssTarget := "css/style.css" }}
{{ $includePaths := (slice "node_modules") }}
{{ $cssDevOpts := (dict "targetPath" $cssTarget "includePaths" $includePaths "enableSourceMaps" true) }}
{{ $cssProdOpts := (dict "targetPath" $cssTarget "includePaths" $includePaths "outputStyle" "compressed") }}
{{ $cssOpts := cond $serverMode $cssDevOpts $cssProdOpts }}
{{ $css := resources.Get $sass | resources.ExecuteAsTemplate $sass . | toCSS $cssOpts }}
{{ $isHome := .IsHome }}
{{ if $serverMode }}
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
{{ else }}
{{ $prodCss := $css | fingerprint }}
<link rel="stylesheet" href="{{ $prodCss.RelPermalink }}" integrity="{{ $prodCss.Data.Integrity }}">
{{ end }}
{{ if $isHome }}
{{ $extraCss := (slice "asciinema-player") }}
{{ range $extraCss }}
{{ $path := printf "css/%s.css" . }}
{{ $css := resources.Get $path | fingerprint }}
<link rel="stylesheet" href="{{ $css.RelPermalink }}" integrity="{{ $css.Data.Integrity }}">
{{ end }}
{{ end }}

View File

@ -1,31 +0,0 @@
{{ if .Path }}
{{ $pathFormatted := replace .Path "\\" "/" }}
{{ $githubProjectRepo := ($.Param "github_repo") }}
{{ $githubWebsiteRepo := ($.Param "github_website_repo") }}
{{ $githubSubDir := ($.Param "github_subdir") }}
{{ $githubBranch := (default "main" ($.Param "github_branch")) }}
{{ if $githubWebsiteRepo }}
{{ $editURL := printf "https://github.com/%s/edit/%s/content/%s" . $githubWebsiteRepo $githubBranch $pathFormatted }}
{{ if and ($githubSubDir) (.Site.Language.Lang) }}
{{ $editURL = printf "https://github.com/%s/edit/%s/%s/content/%s/%s" $githubWebsiteRepo $githubBranch $githubSubDir ($.Site.Language.Lang) $pathFormatted }}
{{ else if .Site.Language.Lang }}
{{ $editURL = printf "https://github.com/%s/edit/%s/content/%s/%s" $githubWebsiteRepo $githubBranch ($.Site.Language.Lang) $pathFormatted }}
{{ else if $githubSubDir }}
{{ $editURL = printf "https://github.com/%s/edit/%s/%s/content/%s" $githubWebsiteRepo $githubBranch $githubSubDir $pathFormatted }}
{{ end }}
{{ $issuesURL := printf "https://github.com/%s/issues/new?title=%s" $githubWebsiteRepo (htmlEscape $.Title )}}
<div>
<a href="{{ $editURL }}" target="_blank"><i class="fa fa-edit fa-fw"></i> {{ T "docs_edit" }}</a>
</div>
<div>
<a href="{{ $issuesURL }}" target="_blank"><i class="fab fa-github fa-fw"></i> {{ T "docs_create_issue" }}
</a>
</div>
{{ if $githubProjectRepo }}
{{ $projectIssueURL := printf "https://github.com/%s/issues/new" $githubProjectRepo }}
<div>
<a href="{{ $projectIssueURL }}" target="_blank"><i class="fas fa-tasks fa-fw"></i> {{ T "docs_create_project_issue" }}</a>
</div>
{{ end }}
{{ end }}
{{ end }}

View File

@ -1,3 +0,0 @@
<p class="has-text-weight-light has-text-grey is-size-7">
{{ T "docs_last_mod"}} {{ .Lastmod.Format .Site.Params.time_format_default }}{{ with .GitInfo }}: <a href="{{ $.Site.Params.github_website_repo }}/commit/{{ .Hash }}">{{ .Subject }} <code>{{ .AbbreviatedHash }}</code></a>{{ end }}
</p>

View File

@ -1,11 +0,0 @@
<aside class="column is-meta is-2-desktop is-hidden-touch">
<div class="inner px-3">
{{ partial "docs/edit.html" . }}
{{ with .TableOfContents }}
{{ if ge (len .) 200 }}
<h2 class="menu-label">{{ T "docs_table_of_contents"}}</h2>
{{ . }}
{{ end }}
{{ end }}
</div>
</aside>

View File

@ -1,39 +0,0 @@
<div class="column is-nav is-full-tablet is-2-desktop">
<div class="inner">
<div class="field is-grouped is-grouped-centered">
<p class="control">
<a role="button" class="navbar-burger burger" aria-label="sidebar-menu" aria-expanded="false" data-target="sidebar-menu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</p>
</div>
<nav id="sidebar-menu">
{{ template "tree-nav" (dict "page" . "section" .FirstSection) }}
</nav>
</div>
</div>
{{ define "tree-nav" }}
{{ $s := .section }}
{{ $p := .page }}
{{ $active := eq $p $s }}
<ul>
<li class="align-left pl-0 pr-2">
<a href="{{ $s.RelPermalink }}" class="{{ if $active }}is-active{{ end }}">{{ $s.Title }}</a>
</li>
<ul>
<li>
{{ $pages := where (union $s.Pages $s.Sections).ByWeight ".Params.hidden" "!=" true }}
{{ range $pages }}
{{ if .IsPage }}
{{ $active := eq . $p }}
<a class="{{ if $active }}is-active{{ end }}" href="{{ .RelPermalink }}">{{ .Title }}</a>
{{ else }}
{{ template "tree-nav" (dict "page" $p "section" .) }}
{{ end }}
{{ end }}
</li>
</ul>
</ul>
{{ end }}

View File

@ -1,15 +0,0 @@
<hr>
<nav class="pagination">
<a {{ if .NextInSection }}href="{{ .NextInSection.RelPermalink }}"{{ end }} class="pagination-previous" {{ if not .NextInSection }} aria-disabled="true" disabled{{end}}>
<span class="icon" aria-hidden="true">
<i class="fas fa-arrow-left"></i>
</span>
{{ T "ui_pager_prev" }}
</a>
<a {{ if .PrevInSection }}href="{{ .PrevInSection.RelPermalink }}"{{ end }} class="pagination-next" {{ if not .PrevInSection }} aria-disabled="true" disabled{{end}}>
{{ T "ui_pager_next" }}
<span class="icon" aria-hidden="true">
<i class="fas fa-arrow-right"></i>
</span>
</a>
</nav>

View File

@ -1,54 +0,0 @@
{{ $pages := (where .Site.Pages "Section" .Section).ByWeight }}
{{ $parent := .Page }}
{{ if $parent.Params.no_list }}
{{/* Do not show a list of subpages */}}
{{ else if $parent.Params.simple_list }}
{{/* Show a simple bulleted list of subpages */}}
<hr>
<ul>
{{ range $pages }}
{{ if eq .Parent $parent }}
<li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
{{ end }}
{{ end }}
</ul>
{{ else if $parent.Params.detailed_list}}
{{/* Show a detailed list of subpages*/}}
<hr>
<div class="content">
{{ range $pages }}
{{ if eq .Parent $parent }}
<h3><a href="{{ .RelPermalink }}">{{ .Title}}</a></h3>
<p>{{ .Description}}</p>
{{ end }}
{{ end }}
</div>
{{ else }}
{{/* Show a nice formatted "card" list of subpages with page descriptions */}}
<hr>
<div class="columns is-multiline">
{{ range $pages }}
{{ if eq .Parent $parent }}
<div class="column is-one-third">
<a href="{{ .RelPermalink }}">
<div class="card with-hover">
<div class="card-content">
<div class="card-content">
<div class="content">
<p class="is-size-5 has-text-weight-bold">{{ .Title }}</p>
{{ with .Description }}
{{ . | markdownify }}
<i class="fas fa-angle-double-right"></i>
{{ end }}
</div>
</div>
</div>
</div>
</a>
</div>
{{ end }}
{{ end }}
</div>
{{ end }}

View File

@ -1,2 +0,0 @@
{{ $favicon := "favicon.png" | absURL }}
<link rel="shortcut icon" type="image/png" href="{{ $favicon }}">

View File

@ -1,138 +0,0 @@
{{ $title := site.Title }}
{{ $desc := site.Params.description | markdownify }}
{{ $logo := printf "img/logos/%s" site.Params.logos.footer | relURL }}
{{ $menu := site.Menus.main }}
{{ $year := now.Year }}
{{ $author := site.Params.copyright }}
{{ $github := printf "https://github.com/%s" site.Params.github_repo }}
{{ $support := site.Params.support }}
{{ $slack := site.Params.slack }}
{{ $mail := site.Params.mailing_list }}
{{ $twitter := site.Params.twitter }}
{{ $linkedin := site.Params.linkedin }}
{{ $youtube := site.Params.youtube }}
{{ $rss := site.Params.rss }}
<footer class="footer has-background-black">
<div class="container">
<div class="columns is-vcentered">
<div class="column is-one-quarter">
<img class="is-footer-logo" src="{{ $logo }}" alt="{{ $title }} footer logo">
</div>
<div class="column">
<p class="title is-size-3 is-size-4-mobile has-text-white has-text-weight-light">
{{ $desc }}
</p>
<hr class="has-background-dark" />
<div class="columns is-vcentered">
<div class="column">
{{ range $menu }}
{{ if .HasChildren }}
<p class="is-size-5 is-size-6-mobile has-text-white has-text-weight-bold">
{{ .Name }}
</p>
{{ range .Children }}
<a class="is-indented has-text-grey" href="{{ .URL }}" target="_blank">
{{ .Name }}
</a>
<br />
{{ end }}
{{ else }}
<a class="is-size-5 is-size-6-mobile has-text-white has-text-weight-bold" href="{{ .URL }}" target="_blank">
{{ .Name }}
</a>
{{ end }}
{{ end }}
</div>
<div class="column">
<div class="buttons">
<a class="button is-black is-inverted is-outlined" href="{{ $github }}" target="_blank">
<span class="icon">
<i class="fab fa-github"></i>
</span>
<span>
GitHub
</span>
</a>
<a class="button is-slack-green is-inverted is-outlined" href="{{ $support }}" target="_blank">
<span class="icon">
<i class="fa fa-comments"></i>
</span>
<span>
Support
</span>
</a>
<a class="button is-slack-green is-inverted is-outlined" href="{{ $slack }}" target="_blank">
<span class="icon">
<i class="fab fa-slack"></i>
</span>
<span>
Slack
</span>
</a>
<a class="button is-info is-inverted is-outlined" href="{{ $mail }}" target="_blank">
<span class="icon">
<i class="far fa-paper-plane"></i>
</span>
<span>
Mailing list
</span>
</a>
<a class="button is-twitter-blue is-inverted is-outlined" href="{{ $twitter }}" target="_blank">
<span class="icon">
<i class="fab fa-twitter"></i>
</span>
<span>
Twitter
</span>
</a>
<a class="button is-linkedin-blue is-inverted is-outlined" href="{{ $linkedin }}" target="_blank">
<span class="icon">
<i class="fab fa-linkedin"></i>
</span>
<span>
LinkedIn
</span>
</a>
<a class="button is-black is-inverted is-outlined" href="{{ $youtube }}" target="_blank">
<span class="icon">
<i class="fab fa-youtube"></i>
</span>
<span>
YouTube
</span>
</a>
{{with (not (in (.Site.Language.Get "disableKinds") "RSS")) }}
<a class="button is-black is-inverted is-outlined" href="{{ $rss }}" target="_blank" title="rss">
<span class="icon">
<i class="fa fa-rss"></i>
</span>
<span>
RSS feed
</span>
</a>
{{ end }}
</div>
</div>
</div>
<hr class="has-background-dark" />
<p class="has-text-light has-text-weight-light">
Copyright &copy; {{ $year }} {{ $author}}
</p>
</div>
</div>
</div>
</footer>

View File

@ -1,12 +0,0 @@
{{ $logo := printf "img/logos/%s" site.Params.logos.cncf | relURL }}
<section class="hero is-light">
<div class="hero-body">
<div class="container has-text-centered">
<p class="title is-size-4 has-text-weight-light">
Flux is a <a href="https://cncf.io">Cloud Native Computing Foundation</a> sandbox project
</p>
<img class="is-cncf-logo" src="{{ $logo }}" alt="Cloud Native Computing Foundation logo">
</div>
</div>
</section>

View File

@ -1,35 +0,0 @@
{{ $title := site.Params.community.title }}
{{ $summary := site.Params.community.summary | markdownify }}
{{ $img := printf "img/%s" site.Params.community.image | relURL }}
{{ $highlights := site.Params.community.highlights }}
<section class="hero is-medium is-light">
<div class="hero-body">
<div class="container has-text-centered">
<div class="content">
<a id="community"><h2 class="title is-1">{{ $title }}</h2></a>
<p>{{ $summary }}</p>
</div>
<div class="columns is-multiline has-text-left my-3">
{{ range $highlights }}
<div class="column is-one-third is-flex">
<div class="card">
<div class="card-header">
<p class="card-header-title has-background-{{ .titleBgColor | default "dark" }} has-text-{{ .titleColor | default "white" }}">
<span class="icon">
<i class="{{ .icon | default "fas fa-info" }}" aria-hidden="true"></i>
</span>
{{ .title }}
</p>
</div>
<div class="card-content">
<div class="content">
{{ .text | markdownify }}
</div>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</div>
</section>

View File

@ -1,14 +0,0 @@
{{ $title := site.Params.family.title }}
{{ $summary := site.Params.family.summary | markdownify }}
<section class="hero is-medium">
<div class="hero-body">
<div class="container has-text-centered">
<div class="content">
<h2 class="title is-1">{{ $title }}</h2>
{{ partial "home/family/toolkit.html" . }}
{{ partial "home/family/flagger.html" . }}
{{ partial "home/family/v1.html" . }}
</div>
</div>
</div>
</section>

View File

@ -1,26 +0,0 @@
{{ $title := site.Params.flagger.title }}
{{ $subtitle := site.Params.flagger.subtitle | markdownify }}
{{ $img := printf "img/%s" site.Params.flagger.image | relURL }}
{{ $buttons := site.Params.flagger.buttons }}
<section id="flagger" class="container box has-background-success has-text-white p-6 my-6">
<div class="columns is-vcentered">
<div class="column is-half">
<div class="content has-text-left">
<h1 class="title is-2">{{ $title }}</h1>
<div class="subtitle is-5">
{{ $subtitle }}
</div>
<div class="buttons">
{{ range $buttons }}
<a href="{{ .url }}" class="button is-medium is-{{ .color | default "white" }}">{{ .text }}</a>
{{ end }}
</div>
</div>
</div>
<div class="column is-half is-hidden-mobile">
<figure class="image">
<img src="{{ $img }}" alt="{{ $title }} illustration">
</figure>
</div>
</div>
</section>

View File

@ -1,24 +0,0 @@
{{ $title := site.Params.toolkit.title }}
{{ $subtitle := site.Params.toolkit.subtitle | markdownify }}
{{ $img := printf "img/%s" site.Params.toolkit.image | relURL }}
{{ $buttons := site.Params.toolkit.buttons }}
<section id="gitops-toolkit" class="container box is-toolkit p-6 my-6">
<div class="columns is-vcentered">
<div class="column is-half is-hidden-mobile">
<figure class="image is-2by1">
<img src="{{ $img }}" alt="{{ $title }} illustration">
</figure>
</div>
<div class="column is-half">
<div class="content has-text-right">
<h1 class="title is-2">{{ $title }}</h1>
<p class="subtitle is-4">{{ $subtitle }}</p>
<div class="buttons is-right">
{{ range $buttons }}
<a href="{{ .url }}" class="button is-medium is-{{ .color | default "white" }}">{{ .text }}</a>
{{ end }}
</div>
</div>
</div>
</div>
</section>

View File

@ -1,26 +0,0 @@
{{ $title := site.Params.v1.title }}
{{ $subtitle := site.Params.v1.subtitle | markdownify }}
{{ $img := printf "img/%s" site.Params.v1.image | relURL }}
{{ $buttons := site.Params.v1.buttons }}
<section id="v1" class="container box p-6 my-6">
<div class="columns is-vcentered">
<div class="column is-half">
<div class="content has-text-left">
<h1 class="title is-2">{{ $title }}</h1>
<div class="subtitle is-5">
{{ $subtitle }}
</div>
<div class="buttons">
{{ range $buttons }}
<a href="{{ .url }}" class="button is-medium is-{{ .color | default "white" }}">{{ .text }}</a>
{{ end }}
</div>
</div>
</div>
<div class="column is-half is-hidden-mobile">
<figure class="image">
<img src="{{ $img }}" alt="{{ $title }} illustration">
</figure>
</div>
</div>
</section>

View File

@ -1,35 +0,0 @@
{{ $title := site.Params.flux.title | default site.Title }}
{{ $subtitle := site.Params.flux.subtitle | default site.Params.description | markdownify }}
{{ $logo := printf "img/logos/%s" site.Params.logos.hero | relURL }}
{{ $buttons := site.Params.flux.buttons }}
<section class="hero is-medium is-flux">
<div class="hero-body">
<div class="container">
<div class="columns is-vcentered">
<div class="column is-half">
<div class="content">
<h1 class="title is-1">{{ $title }}</h1>
<div class="subtitle is-4">{{ $subtitle }}</div>
</div>
<div class="field is-grouped">
{{ range $buttons }}
<div class="control">
<a href="{{ .url }}" class="button is-medium is-{{ .color | default "white" }}">{{ .text }}</a>
</div>
{{ end }}
</div>
</div>
<div class="column is-half is-hidden-touch">
<div class="terminal">
<div class="icons"><span></span></div>
<div class="terminal-title">Terminal</div>
<pre class="terminal-content">
<asciinema-player loop autoplay font-size="14px" rows=14 src="flux.cast"></asciinema-player>
</pre>
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -1,26 +0,0 @@
{{ $title := site.Params.overview.title }}
{{ $summary := site.Params.overview.summary | markdownify }}
{{ $features := site.Params.overview.features }}
<section class="hero pb-6">
<div class="hero-body">
<div class="container has-text-centered">
<div class="content">
<a id="overview"><h2 class="title is-1">{{ $title }}</h2></a>
<p>{{ $summary }}</p>
</div>
<div class="columns is-multiline">
{{ range $features }}
<div class="column is-one-third my-3">
<span class="icon is-large has-text-primary">
<i class="{{ .icon }}"></i>
</span>
<div class="content">
<h3 class="title is-5 m-3">{{ .header }}</h3>
<p>{{ .text | markdownify }}</p>
</div>
</div>
{{ end }}
</div>
</div>
</div>
</section>

View File

@ -1,35 +0,0 @@
{{ $title := site.Params.resources.title }}
{{ $summary := site.Params.resources.summary | markdownify }}
{{ $resources := site.Params.resources.items }}
<section class="hero is-medium is-light">
<div class="hero-body">
<div class="container has-text-centered">
<div class="content">
<a id="resources"><h2 class="title is-1">{{ $title }}</h2></a>
<p>{{ $summary }}</p>
</div>
<div class="columns is-multiline has-text-left my-3">
{{ range $resources }}
{{ if .youtube }}
<a href="https://www.youtube.com/watch?v={{ .youtube }}" class="column is-one-third is-flex">
{{ else }}
<a href="{{ .url }}" class="column is-one-third is-flex">
{{ end }}
<div class="card with-hover">
<div class="card-content">
<div class="content">
{{ if .youtube }}
<img src="https://i3.ytimg.com/vi/{{ .youtube }}/mqdefault.jpg"></img>
{{ end }}
<h4>{{ .title }}</h4>
{{ .description }}
<i class="fas fa-angle-double-right"></i>
</div>
</div>
</div>
</a>
{{ end }}
</div>
</div>
</div>
</section>

View File

@ -1,12 +0,0 @@
{{ $isHome := .IsHome }}
{{ $js := resources.Get "js/app.js" | fingerprint }}
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}"></script>
{{ if $isHome }}
{{ $extraJs := (slice "asciinema-player") }}
{{ range $extraJs }}
{{ $path := printf "js/%s.js" . }}
{{ $js := resources.Get $path | fingerprint }}
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}"></script>
{{ end }}
{{ end }}

View File

@ -1,30 +0,0 @@
{{ $isHome := .IsHome }}
{{ $desc := .Param "description" }}
{{ $title := cond $isHome site.Title .Title }}
{{ $url := .Permalink }}
{{ $locale := "en_US" }}
{{ $type := "website" }}
{{ $image := printf "img/logos/%s" site.Params.logos.hero | absURL }}
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<meta name="description" content="{{ $desc }}">
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
<!-- OpenGraph -->
<meta property="og:title" content="{{ $title }}">
<meta property="og:url" content="{{ $url }}">
<meta property="og:locale" content="{{ $locale }}">
{{ if not $isHome }}
<meta property="og:site_name" content="{{ site.Title }}">
{{ end }}
<meta property="og:description" content="{{ $desc }}">
<meta property="og:type" content="{{ $type }}">
<meta property="og:image" content="{{ $image }}">
<meta name="og:image:alt" content="Flux project logo">
<meta name="og:image:type" content="image/png">
<link rel="canonical" content="{{ $url }}">
<!-- Site generator -->
{{ hugo.Generator }}

View File

@ -1,82 +1,47 @@
{{ $home := site.BaseURL }}
{{ $title := site.Title }}
{{ $logo := printf "img/logos/%s" site.Params.logos.navbar | relURL }}
{{ $menu := site.Menus.main }}
{{ $repo := site.Params.github_repo }}
{{ $github := printf "https://github.com/%s" $repo }}
{{ $support := site.Params.support }}
{{ $mail := site.Params.mailing_list }}
<nav class="navbar is-black is-fixed-top">
<div class="container">
<div class="navbar-brand">
<a class="navbar-item" href="{{ $home }}">
<img src="{{ $logo }}" alt="{{ $title }} navbar logo">
</a>
<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navbar-menu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="navbar-menu" class="navbar-menu">
<div class="navbar-end">
{{ range $menu }}
{{ $cover := .HasShortcode "blocks/cover" }}
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark {{ if $cover}} td-navbar-cover {{ end }}flex-column flex-md-row td-navbar">
<a class="navbar-brand" href="{{ .Site.Home.RelPermalink }}">
<span class="navbar-logo">{{ if .Site.Params.ui.navbar_logo }}{{ with resources.Get "icons/logo.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }}{{ end }}</span><span>{{ .Site.Title }}</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
<ul class="navbar-nav mt-2 mt-lg-0">
{{ $p := . }}
{{ range .Site.Menus.main }}
<li class="nav-item mr-4 mb-2 mb-lg-0">
{{ $active := or ($p.IsMenuCurrent "main" .) ($p.HasMenuCurrent "main" .) }}
{{ with .Page }}
{{ $active = or $active ( $.IsDescendant .) }}
{{ end }}
{{ $url := urls.Parse .URL }}
{{ $baseurl := urls.Parse $.Site.Params.Baseurl }}
{{ if .HasChildren }}
<div class="navbar-item has-dropdown is-hoverable has-text-weight-bold is-uppercase">
<a class="navbar-link is-arrowless"{{ with .URL }} href="{{ . }}"{{ end }}>
{{ .Name }}
</a>
<div class="navbar-dropdown">
{{ range .Children }}
<a class="navbar-item" href="{{ .URL }}">
{{ .Name }}
</a>
{{ end }}
</div>
</div>
{{ else }}
<a class="navbar-item has-text-weight-medium has-text-weight-bold is-uppercase" href="{{ .URL }}">
{{ .Name }}
</a>
{{ end }}
{{ end }}
<div class="navbar-item">
<div class="buttons">
<a class="button is-light" href="{{ $github }}" target="_blank">
<span class="icon">
<i class="fab fa-github"></i>
</span>
<span class="has-text-weight-bold">
{{ $repo }}
</span>
</a>
<a class="button is-success" href="{{ $support }}" target="_blank">
<span class="icon">
<i class="fa fa-comments"></i>
</span>
<span class="has-text-weight-bold">
Support
</span>
</a>
<a class="button is-info" href="{{ $mail }}" target="_blank">
<span class="icon">
<i class="far fa-paper-plane"></i>
</span>
<span class="has-text-weight-bold">
Mailing list
</span>
</a>
</div>
</div>
</div>
</div>
</div>
<li class="nav-item dropdown d-none d-lg-block">
<a class="nav-link {{if $active }} active{{end}} dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ .Name }}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
{{ range .Children }}
{{ $childrenurl := urls.Parse .URL }}
<a class="dropdown-item" href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if ne $childrenurl.Host $baseurl.Host }}target="_blank" {{ end }}>{{ .Name }}</a>
{{ end }}
</div>
</li>
{{ else }}
<a class="nav-link{{if $active }} active{{end}}" href="{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}" {{ if ne $url.Host $baseurl.Host }}target="_blank" {{ end }}><span{{if $active }} class="active"{{end}}>{{ .Name }}</span></a>
</li>
{{ end }}
{{ end }}
{{ if .Site.Params.versions }}
<li class="nav-item dropdown d-none d-lg-block">
{{ partial "navbar-version-selector.html" . }}
</li>
{{ end }}
{{ if (gt (len .Site.Home.Translations) 0) }}
<li class="nav-item dropdown d-none d-lg-block">
{{ partial "navbar-lang-selector.html" . }}
</li>
{{ end }}
</ul>
</div>
<div class="navbar-nav d-none d-lg-block">{{ partial "search-input.html" . }}</div>
</nav>
{{ partial "celebration.html" . }}
{{ partial "notification.html" . }}

View File

@ -1,8 +0,0 @@
{{ $notification := site.Params.notification | markdownify }}
{{- if $notification }}
<div class="notification no-radius is-warning mb-0 is-hidden-mobile">
<div class="container">
{{ $notification }}
</div>
</div>
{{- end }}

View File

@ -1,18 +0,0 @@
<nav aria-label="breadcrumbs" class="breadcrumb pt-3 pl-3">
<ul>
{{ template "breadcrumb-nav" (dict "p1" . "p2" .) }}
</ul>
</nav>
{{ define "breadcrumb-nav" }}
{{ if .p1.Parent }}
{{ if not .p1.Parent.IsHome }}
{{ template "breadcrumb-nav" (dict "p1" .p1.Parent "p2" .p2 ) }}
{{ end }}
{{ else if not .p1.IsHome }}
{{ template "breadcrumb-nav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
{{ end }}
{{ $isActive := eq .p1 .p2 }}
<li{{ if $isActive }} class="is-active"{{ end }}{{ if $isActive }} aria-current="page"{{ end }}>
<a href="{{ .p1.Permalink }}">{{ .p1.LinkTitle }}</a>
</li>
{{ end }}

View File

@ -1,3 +0,0 @@
<span class="pr-3">
<i class="fa fa-calendar" aria-hidden="true"></i>&nbsp;<time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">{{ .Date.Format (.Site.Language.Get "time_format_blog") }}</time>
</span>

View File

@ -1,5 +0,0 @@
{{if .ReadingTime}}
<span class="pr-3">
<i class="fa fa-clock" aria-hidden="true"></i>&nbsp;{{ .ReadingTime }} {{ T "ui_minute_read" }}
</span>
{{end}}

View File

@ -0,0 +1,50 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $blockID := printf "td-cover-block-%d" .Ordinal }}
{{ $promo_image := (.Page.Resources.ByType "image").GetMatch "**background*" }}
{{ $logo_image := (.Page.Resources.ByType "image").GetMatch "**logo*" }}
{{ $col_id := .Get "color" | default "dark" }}
{{ $image_anchor := .Get "image_anchor" | default "smart" }}
{{ $logo_anchor := .Get "logo_anchor" | default "smart" }}
{{/* Height can be one of: auto, min, med, max, full. */}}
{{ $height := .Get "height" | default "max" }}
{{ $byline := .Get "byline" | default "" }}
{{ with $promo_image }}
{{ $promo_image_big := (.Fill (printf "1920x1080 %s" $image_anchor)) }}
{{ $promo_image_small := (.Fill (printf "960x540 %s" $image_anchor)) }}
<link rel="preload" as="image" href="{{ $promo_image_small.RelPermalink }}" media="(max-width: 1200px)">
<link rel="preload" as="image" href="{{ $promo_image_big.RelPermalink }}" media="(min-width: 1200px)">
<style>
#{{ $blockID }} {
background-image: url({{ $promo_image_small.RelPermalink }});
}
@media only screen and (min-width: 1200px) {
#{{ $blockID }} {
background-image: url({{ $promo_image_big.RelPermalink }});
}
}
</style>
{{ end }}
<section id="{{ $blockID }}" class="row td-hero-block js-td-cover td-overlay -bg-{{ $col_id }} ">
<div class="container td-overlay__inner" style="padding: 20px;">
<div class="row">
<div class="col-md">
{{ with .Get "title" }}<h1 class="display-1">{{ $title := . }}{{ with $logo_image }}{{ $logo_image_resized := (.Fit (printf "70x70 %s" $logo_anchor)) }}<img class="td-hero-logo" src="{{ $logo_image_resized.RelPermalink }}" alt="{{ $title | html }} Logo">{{ end }}{{ $title | html }}</h1>{{ end }}
{{ with .Get "subtitle" }}<p>{{ . | html }}</p>{{ end }}
</div>
<div class="col-md">
{{ if eq .Page.File.Ext "md" }}
{{ .Inner | markdownify }}
{{ else }}
{{ .Inner | htmlUnescape | safeHTML }}
{{ end }}
</div>
</div>
</div>
{{ if $byline }}
<div class="byline">
<small>{{ $byline }}</small>
</div>
{{ end }}
</section>

View File

@ -1,12 +0,0 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $color := .Get "color" | default "primary" }}
<div class="message is-{{ $color }}">
{{ with .Get "title" }}
<div class="message-header">
<p>{{ . | safeHTML }}</p>
</div>
{{ end }}
<div class="message-body">
{{ .Inner | markdownify | emojify }}
</div>
</div>

View File

@ -1,13 +0,0 @@
{{ $_hugo_config := `{ "version": 1 }` }}
{{ $color := .Get "color" | default "primary" }}
{{ $class := .Get "class" | default "" }}
{{ $container := .Get "container" | default false }}
<div class="notification is-{{ $color }}{{ with $class }} {{ . }}{{ end }}">
{{ if $container }}
<div class="container">
{{ .Inner | markdownify | emojify }}
</div>
{{ else }}
{{ .Inner | markdownify | emojify }}
{{ end }}
</div>

View File

@ -0,0 +1,121 @@
$font-size: 16px;
$width: 800px;
$border-radius: 10px;
$black: #222;
$grey-dark: #999;
$grey-light: #ddd;
$blue: #09a3d5;
$purple: #8130c9;
$red: #e4514f;
$yellow: #f4c025;
$green: #3ec930;
* {
padding: 0;
margin: 0;
}
body {
align-items: center;
background: $blue;
display: flex;
font: bold $font-size 'Lato', arial, sans-serif;
height: 100vh;
justify-content: center;
width: 100vw;
}
.window {
background: $grey-light;
border-radius: $border-radius;
display: flex;
flex-flow: row wrap;
position: relative;
width: $width;
}
.title {
flex: 1;
text-align: center;
padding: 0.75em;
}
.icons {
padding: 0.75em;
position: absolute;
span {
@extend icon;
background: $yellow;
}
&:before {
@extend icon;
content: '';
background: $red;
}
&:after {
@extend icon;
content: '';
background: $green;
}
}
icon {
display: inline-block;
float: left;
width: 1em;
height: 1em;
border-radius: 50%;
margin-right: 0.5em;
}
pre {
background: #222;
border-bottom-left-radius: $border-radius;
border-bottom-right-radius: $border-radius;
color: #fff;
overflow: scroll;
padding: 2.5em;
width: 100%;
-webkit-font-smoothing: antialiased;
code {
font: bold #{1em}/#{1.75} 'Source Code Pro', monospace;
&:after {
animation: blink 0.9s infinite;
font: initial;
display: block;
opacity: 1;
content: '\258b';
}
}
}
.token.punctuation {
color: $grey-dark;
}
.token.boolean,
.token.number {
color: $purple;
}
.token.keyword {
color: $blue;
}
.token.operator {
color: $red;
}
@keyframes blink {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@media (max-width: #{$width}) {
pre {
font-size: 10px;
}
.window {
width: 70%;
}
};

View File

@ -0,0 +1,8 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="terminal">
<div class="icons"><span></span></div>
<div class="terminal-title">Terminal</div>
<pre class="terminal-content">
<asciinema-player loop autoplay font-size="14px" rows=14 src="{{ index .Params 0 }}"></asciinema-player>
</pre>
</div>

3853
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,8 @@
"devDependencies": {
"autoprefixer": "^10.2.5",
"bulma": "^0.9.2",
"hugo-extended": "^0.81.0",
"postcss": "^8.2.8",
"postcss-cli": "^8.3.1"
}
}