diff --git a/.commitlint.json b/.commitlint.json new file mode 100644 index 0000000..0e5f369 --- /dev/null +++ b/.commitlint.json @@ -0,0 +1,6 @@ +{ + "parserPreset": "conventional-changelog-conventionalcommits", + "rules": { + "header-max-length": [2, "always", 72] + } +} diff --git a/.github/workflows/check-commits.yml b/.github/workflows/check-commits.yml new file mode 100644 index 0000000..2a9f74b --- /dev/null +++ b/.github/workflows/check-commits.yml @@ -0,0 +1,19 @@ +--- +name: Check Commit Messages +on: push + +jobs: + commitlint: + runs-on: ubuntu-latest + steps: + + - name: Checkout the code + uses: actions/checkout@v3.5.3 + with: + fetch-depth: 0 + + - name: Lint the commits + uses: wagoid/commitlint-github-action@v5.2.2 + with: + configFile: .commitlint.json + failOnWarnings: true diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml new file mode 100644 index 0000000..7ce09c2 --- /dev/null +++ b/.github/workflows/check-links.yml @@ -0,0 +1,21 @@ +--- +name: Markdown Links Validation + +on: [push, workflow_dispatch] + +jobs: + markdown-link-check: + + runs-on: ubuntu-latest + steps: + + - name: Checkout this repository + uses: actions/checkout@v3.5.3 + + - name: Validate Links Markdown + if: always() + uses: gaurav-nelson/github-action-markdown-link-check@1.0.15 + with: + config-file: '.markdownlinkcheck.json' + use-quiet-mode: 'yes' + file-extension: .md diff --git a/.github/workflows/check-markdown.yml b/.github/workflows/check-markdown.yml new file mode 100644 index 0000000..a207cde --- /dev/null +++ b/.github/workflows/check-markdown.yml @@ -0,0 +1,20 @@ +--- +name: Markdown Syntax Validation + +on: [push, workflow_dispatch] + +jobs: + markdown-check: + + runs-on: ubuntu-latest + steps: + - name: Checkout this repository + uses: actions/checkout@v3.5.3 + + - name: Validate Markdown + uses: DavidAnson/markdownlint-cli2-action@v9.0.0 + with: + command: config + globs: | + .markdownlint.json + **.md diff --git a/.github/workflows/check-signed.yml b/.github/workflows/check-signed.yml new file mode 100644 index 0000000..f110c78 --- /dev/null +++ b/.github/workflows/check-signed.yml @@ -0,0 +1,14 @@ +--- +name: Validate if commits in PR are signed +on: pull_request + +jobs: + signed-commits-check: + runs-on: ubuntu-latest + steps: + + - name: Check out code + uses: actions/checkout@v3.5.3 + + - name: Check signed commits in PR + uses: 1Password/check-signed-commits-action@v1 diff --git a/.github/workflows/check-syntax.yml b/.github/workflows/check-syntax.yml new file mode 100644 index 0000000..b2185b9 --- /dev/null +++ b/.github/workflows/check-syntax.yml @@ -0,0 +1,26 @@ +--- +name: Syntax Validation +on: [push, workflow_dispatch] + +jobs: + syntax-check: + name: vale + runs-on: ubuntu-latest + steps: + - name: Checkout this repository + uses: actions/checkout@v3.5.3 + + - name: Get latest version of Vale + id: lastversion + uses: dvershinin/lastversion-action@v0.0.3 + with: + repository: errata-ai/vale + + - name: Install Vale + run: | + wget https://github.com/errata-ai/vale/releases/download/v${{ steps.lastversion.outputs.last_version }}/vale_${{ steps.lastversion.outputs.last_version }}_Linux_64-bit.tar.gz -O vale.tar.gz + tar -xvzf vale.tar.gz vale + rm vale.tar.gz + + - name: Validate the syntax + run: ./vale --config=.vale.ini *.md diff --git a/.github/workflows/check-yaml.yml b/.github/workflows/check-yaml.yml new file mode 100644 index 0000000..776a934 --- /dev/null +++ b/.github/workflows/check-yaml.yml @@ -0,0 +1,19 @@ +--- +name: YAML Validation +on: [push, workflow_dispatch] + +jobs: + yaml-check: + runs-on: ubuntu-latest + steps: + + - name: Checkout this repository + uses: actions/checkout@v3.5.3 + + - name: Lint YAML files + uses: karancode/yamllint-github-action@v2.1.1 + with: + yamllint_config_datapath: .yamllint.yml + yamllint_strict: true + env: + GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/optimize-images.yml b/.github/workflows/optimize-images.yml new file mode 100644 index 0000000..05b345d --- /dev/null +++ b/.github/workflows/optimize-images.yml @@ -0,0 +1,45 @@ +--- +name: Optimize the Images +on: + push: + branches: + - main + paths: + - "**.png" + - "**.jpe?g" + - "**.svg" + - "**.gif" + workflow_dispatch: + +jobs: + optimize-images: + runs-on: ubuntu-latest + + steps: + - name: Checkout the docs repo + uses: actions/checkout@v3.5.3 + + - name: Optimize images + id: optimize-images + uses: Doist/optimize-images-action@v2 + + - name: Import the kube1st GPG key + id: import-gpg + uses: crazy-max/ghaction-import-gpg@v5.3.0 + with: + git_committer_name: "kube1st" + git_committer_email: "${{ secrets.GPG_EMAIL }}" + gpg_private_key: "${{ secrets.GPG_PRIVATE_KEY }}" + passphrase: "${{ secrets.GPG_PASSPHRASE }}" + git_user_signingkey: true + git_commit_gpgsign: true + + - name: Create a PR for the new version + uses: peter-evans/create-pull-request@v5.0.2 + with: + token: ${{ secrets.DOCS_PERMISSIONS_TOKEN }} + committer: "kube1st <${{ secrets.GPG_EMAIL }}>" + branch: "optimize/images" + title: "chore: optimize new images with lossless compression" + body: "" + commit-message: "docs: create v${{ github.event.inputs.version }} documentation\n\n${{ steps.optimize-images.outputs.summary }}" diff --git a/.markdownlinkcheck.json b/.markdownlinkcheck.json new file mode 100644 index 0000000..9cf1eba --- /dev/null +++ b/.markdownlinkcheck.json @@ -0,0 +1,70 @@ +{ + "ignorePatterns": [ + { + "pattern": "^https://www.linkedin.com.*" + }, + { + "pattern": ".*\\]$" + }, + { + "pattern": "https://www.enterprisetimes.co.uk*" + }, + { + "pattern": "https://www.pexels.com*" + }, + { + "pattern": "https://www.pngrepo.com" + }, + { + "pattern": "https://tdwi.org*" + }, + { + "pattern": "https://www.fakepersongenerator.com*" + }, + { + "pattern": "https://dash.readme.com*" + }, + { + "pattern": "https://cfpland.com*" + }, + { + "pattern": "https://n8n.io*" + }, + { + "pattern": "https://confs.tech*" + }, + { + "pattern": "https://businesswire.com*" + }, + { + "pattern": "https://www.tmcnet.com*" + }, + { + "pattern": "https://.*kubefirst.dev*" + }, + { + "pattern": "http://localhost*" + }, + { + "pattern": "https://gitlab.com*" + }, + { + "pattern": "https://.*vultr.com*" + } + ], + "replacementPatterns": [ + { + "pattern": "{require(\"(*)\").default}", + "replacement": "*" + }, + { + "pattern": "^/img/*", + "replacement": "/static/img/*" + } + ], + "timeout": "30s", + "retryOn429": true, + "retryCount": 2, + "fallbackRetryDelay": "1m", + "aliveStatusCodes": [200, 429] +} diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..4a29216 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,12 @@ +{ + "MD013": false, + "MD024": false, + "MD025": false, + "MD033": false, + "MD049": { + "style": "underscore" + }, + "MD050": { + "style": "asterisk" + } +} \ No newline at end of file diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 0000000..a3f608f --- /dev/null +++ b/.vale.ini @@ -0,0 +1,13 @@ +StylesPath = styles +Vocab = base + +[formats] +mdx = md + +[*.md] +BasedOnStyles = Custom +Packages = alex +IgnoredScopes = code +BlockIgnores = (?s) *(import.*?\n), \ + (?s) *(### gitops\n) +TokenIgnores = (?s) *(export.*?\n) diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000..6d62063 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,10 @@ +--- +extends: default + +rules: + line-length: disable + truthy: + check-keys: false + +ignore: | + charts/* diff --git a/README.md b/README.md index b618f40..4ae9477 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Kubefirst Live +# kubefirst Live -![Kubefirst Logo](img/kubefirst-light.svg#gh-dark-mode-only)![Kubefirst Logo](img/kubefirst-dark.svg#gh-light-mode-only) +![kubefirst Logo](img/kubefirst-light.svg#gh-dark-mode-only)![kubefirst Logo](img/kubefirst-dark.svg#gh-light-mode-only) -We have a [biweekly livestream](https://www.youtube.com/@kubefirst) named Kubefirst Live, where we are discussing not only kubefirst but anything cloud native. +We have a [biweekly livestream](https://www.youtube.com/@kubefirst) named kubefirst Live, where we are discussing not only kubefirst but anything cloud native. Here are some guidelines for our guests. @@ -26,7 +26,7 @@ The goal of the livestream is simple: we want to create valuable, fun, and educa ### Ambiance -If you don't know us much yet, we are a bunch of happy people doing something we love. We are tackling serious problems in the cloud native space, without taking ourselves seriously. Kubefirst Live is no different: we are laid back. Do not stress out, it will be a fun discussion between friends. Demos may go wrong; that's OK. Internet connections may be flaky: that's OK. You may forget to say something important: that's OK. That's real life, so again, let's have fun, and things will be good. +If you don't know us much yet, we are a bunch of happy people doing something we love. We are tackling serious problems in the cloud native space, without taking ourselves seriously. kubefirst Live is no different: we are laid back. Do not stress out, it will be a fun discussion between friends. Demos may go wrong; that's OK. Internet connections may be flaky: that's OK. You may forget to say something important: that's OK. That's real life, so again, let's have fun, and things will be good. ### Format @@ -58,7 +58,7 @@ To ensure the preparation and the livestream go well, we'll need some things fro ### Platform -We use [StreamYard](https://streamyard.com) as our livestream platform. The platform will stream the show on Kubefirst [YouTube channel](https://www.youtube.com/@kubefirst), [Twitter](https://twitter.com/kubefirst) account, [LinkedIn](https://www.linkedin.com/company/kubefirst/) page, [Twitch](https://www.twitch.tv/kubefirst) channel, and on [Kubeshop YouTube channel](https://www.youtube.com/@thekubeshop) (our parent company). You'll receive the link a couple of days before the livestream: you should open it to test everything is working. You'll need to give permission access to your webcam and microphone. +We use [StreamYard](https://streamyard.com) as our livestream platform. The platform will stream the show on kubefirst [YouTube channel](https://www.youtube.com/@kubefirst), [Twitter](https://twitter.com/kubefirst) account, [LinkedIn](https://www.linkedin.com/company/kubefirst/) page, [Twitch](https://www.twitch.tv/kubefirst) channel, and on [Kubeshop YouTube channel](https://www.youtube.com/@thekubeshop) (our parent company). You'll receive the link a couple of days before the livestream: you should open it to test everything is working. You'll need to give permission access to your webcam and microphone. All [you need](https://support.streamyard.com/hc/en-us/articles/360043291612-Guest-instructions) is a modern browser, with a proper internet connection, a microphone, webcam, and headphones. We highly suggest you use headphones/earphones so there's no echo happening due to the microphone picking audio from the livestream. @@ -66,11 +66,11 @@ All [you need](https://support.streamyard.com/hc/en-us/articles/360043291612-Gue _Click on the image for [a small video](https://youtu.be/H6YXleBZVRU) showing how to configure StreamYard_ -When asked to enter your name: you can either add your full name or just your first one, whatever floats your boat. We only ask that if you are using Twitter, to add ` | @username` after your name. Lastly, be sure that in `Settings` > `Camera`, the `Camera resolution` combobox has `Full High Definition (1080p)` selected, for best video quality. +When asked to enter your name: you can either add your full name or just your first one, whatever floats your boat. We only ask that if you are using Twitter, to add `ㅤ| @username` after your name. Lastly, be sure that in `Settings` > `Camera`, the `Camera resolution` combobox has `Full High Definition (1080p)` selected, for best video quality. ### Promotion -A couple of days before the stream, we will share on our [Twitter account](https://twitter.com/kubefirst), [LinkedIn page](https://www.linkedin.com/company/kubefirst/), [Slack community](https://kubefirst.io/slack), and in other related communities. We will tag your company. To help us spread the words, a retweet and reshare with your company's social media or even your personal ones are more than welcome. +A couple of days before the stream, we will share on our [Twitter account](https://twitter.com/kubefirst), [LinkedIn page](https://www.linkedin.com/company/kubefirst/), [Slack community](https://kubefirst.io/slack), and in other related communities. We will tag your company. To help us spread the words, a retweet and repost with your company's social media or even your personal ones are more than welcome. ### During the Show @@ -90,23 +90,37 @@ Lastly, we try to keep things fun, and one way to do that is by using some audio The previous items were specific to your participation to our livestream. We also want to share with you generic tips which could help you, and the audience to have a better experience when you are participating to any livestream, including ours. +### Prepare your computer + - Reboot your machine: it ensures things will run smoothly. - Close all unneeded applications: it frees up some memory, and CPU, which will be needed for the video, and may make any demos faster. - If you will use the browser for showing or demo something, close all unneeded the tabs: it ensures the viewers are focusing on the right thing, and free up resources. - Zoom your browser tabs as when the page is text heavy, it may not show well (i.e.: viewing a GitHub repository content in the browser). - Zoom the font in your IDE, terminal, and anything text-based so it shows well on any viewers' screen. -- As mentioned in the [Platform section](#platform), use earphones or headphones to prevent audio feedback. To check the audio quality of your microphone, use this [free tool from Adobe](https://podcast.adobe.com/miccheck). -- Ensure the lightning is good which may mean to close the blinds so there's no sun reflections on the webcam, open your ceiling lights even if it's daytime or anything else that can help you see your face properly. - Activate the Do Not Disturb / Focus mode so there's no notification popups while you share your screen, nor any sound from notifications. There are tools that do this automatically for you, like the free [Muzzle application](https://muzzleapp.com) for macOS. - Do the same with your phone, or at a minimum, put it on vibration. If you do the latter, don't leave it on the desk to prevent vibrations noises. + +### Prepare your environment + +- As mentioned in the [Platform section](#platform), use earphones or headphones to prevent audio feedback. To check the audio quality of your microphone, use this [free tool from Adobe](https://podcast.adobe.com/miccheck). +- Ensure the lightning is good which may mean to close the blinds so there's no sun reflections on the webcam, open your ceiling lights even if it's daytime or anything else that can help you see your face properly. - If you are not living alone or are at the office, find a room where you can be alone, and close the door if possible. It will also be better for them. With that said, if your kids or animals want to be on the show, we're good with that! + +### Prepare your demonstration + - If your demo is complicated, require multiple steps, is too long, or if you think something could go wrong, for whatever reasons, prepare a final version with the end result as a safeguard. An example, when we want to show how to create an AWS cluster with kubefirst, we will show how to get started, but because the full process is about 25 minutes (multiple resources are needed on AWS to create a production-ready Kubernetes cluster), we will have another cluster already created. - If you are using macOS Sonoma or later version, you should [deactivate the reactions feature](https://support.apple.com/en-ca/105117#reactions). +### During the show + +- If you have multiple monitors, ensure that the one you use to do your demonstration and the one you use for the StreamYard interface is the one where the webcam is, so you look like you talk to us, and the audience, and not someone else. +- If there are noises you can't control, mute yourself when you're not speaking. Same goes if you type on your keyboard when you are not doing a demonstration at the moment. +- When you share your screen, StreamYard (or your browser) will show a window overlay at the bottom of your screen written something along the lines of "streamyard.com is sharing your screen". If you have multiple monitors, move it to the monitor you aren't sharing in the stream. You also have the option to hide it: if you do, you can stop sharing within the StreamYard interface or Fred can do it for you. + ## Anything else? -If at any moments you need help with your slides, wants some feedback, have questions about kubefirst or the livestream itself, contact [Fred](mailtohttps://fred.dev@kubeshop.io). +If at any moments you need help with your slides, wants some feedback, have questions about kubefirst or the livestream itself, contact [Fred](mailto:fred@kubeefirst.io). Looking forward to discussing your technology, and dropping some knowledge bomb to our audience with you. - — The Kubefirst team + — The kubefirst team diff --git a/styles/.DS_Store b/styles/.DS_Store new file mode 100644 index 0000000..6c176e5 Binary files /dev/null and b/styles/.DS_Store differ diff --git a/styles/Custom/ignore.txt b/styles/Custom/ignore.txt new file mode 100644 index 0000000..aec6662 --- /dev/null +++ b/styles/Custom/ignore.txt @@ -0,0 +1,77 @@ +# A +argo +argocd +atlantis +aws + +# B + +# C +chartmuseum +civo +cli +config +cronjob + +# D + +# E +ecr +eks + +# F + +# G +gcp +github +gitlab +gitops + +# H +https + +# I +iam + +# J + +# K +kubeconfig +kubefirst +kubernetes + +# L + +# M + +# N + +# O +oidc + +# P + +# Q + +# R +repo + +# S + +# T +terraform + +# U +ui +url + +# V +vpc + +# W + +# X + +# Y + +# Z diff --git a/styles/Custom/spelling.yml b/styles/Custom/spelling.yml new file mode 100644 index 0000000..8bbf5ab --- /dev/null +++ b/styles/Custom/spelling.yml @@ -0,0 +1,6 @@ +--- +extends: spelling +message: "Did you really mean '%s'?" +level: error +ignore: + - styles/Custom/ignore.txt diff --git a/styles/Custom/substitutions.yml b/styles/Custom/substitutions.yml new file mode 100644 index 0000000..146291c --- /dev/null +++ b/styles/Custom/substitutions.yml @@ -0,0 +1,57 @@ +--- +extends: substitution +message: Consider using '%s' instead of '%s' +ignorecase: false +level: error +swap: + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )argo [C|c][D|d](?=$| |\.)': Argo CD + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )Argo [C|c][D|d](?=$| |\.)': Argo CD + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )[A|a]rgo[C|c][D|d](?=$| |\.)': Argo CD + 'argo [W|w]orkflows?': Argo Workflows + 'Argo [W|w]orkflows?': Argo Workflows + atlantis: Atlantis + chartmuseum: ChartMuseum + cli: CLI + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )civo(?=$| |\.)': Civo + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )CIVO(?=$| |\.)': Civo + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )configs?(?=$| |\.)': configurations + cronjob: CronJob + ecr: ECR + eks: EKS + 'digital[o|O]cean': DigitalOcean + '[d|D]igitalocean': DigitalOcean + docker: Docker + gcp: Google Cloud + gcp cloud: Google Cloud + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '[G|g]ithub': GitHub + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + 'git[H|h]ub': GitHub + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )[G|g]itlab(?=$| |\.)': GitLab + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )git[L|l]ab(?=$| |\.)': GitLab + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )gitops(?=$| |\.)': GitOps for the term or put gitops as inline code for the repository + google: Google + helm: Helm + https: HTTPS + iam: IAM + Kubefirst: kubefirst + kubernetes: Kubernetes + mongo: MongoDB + oidc: OIDC + repo: repository + SSH: SSH + # Starting or with a space before, and ending with a dot or space (so not working used in a path, caused of MDX) + '(?<=^| )terraform(?=$| |\.)': Terraform + ui: UI + url: URL + vpc: VPC + vultr: Vultr diff --git a/styles/Vocab/.DS_Store b/styles/Vocab/.DS_Store new file mode 100644 index 0000000..935f341 Binary files /dev/null and b/styles/Vocab/.DS_Store differ diff --git a/styles/Vocab/base/accept.txt b/styles/Vocab/base/accept.txt new file mode 100644 index 0000000..fc4cb8a --- /dev/null +++ b/styles/Vocab/base/accept.txt @@ -0,0 +1,100 @@ +# A +admunition +anonymize +auditable +automation + +# B + +# C +CLI' +ClusterIssuer +combobox +containerd +CPU +CWFT + +# D +Datadog +deprovision +Dockerfile +Docusaurus +Dum + +# E + +# F + +# G + +# H +hotfix + +# I +interoperate + +# J + +# K +kbot +KMS +kubectl +Kubeshop + +# L +livestream + +# M +markdownlint +mkcert +multinode + +# N +namespace +nerdctl +Noooooo +npm +ngrok +Nginx + +# O +onboarding + +# P +preconfigure + +# Q + +# R +Reloader +routable + +# S +statestore +subnet + +# T +teardown +todo +toolset +Traefik +truststore +Tss +Typesense + +# U +uncomment +unmuted + +# V +vale +Vultr + +# W +walkthrough + +# X + +# Y + +# Z