Showing preview only (1,885K chars total). Download the full file or copy to clipboard to get everything.
Repository: devsecopsguides/devsecopsguides.github.io
Branch: main
Commit: 8c7583a669b0
Files: 245
Total size: 1.8 MB
Directory structure:
gitextract_kcmoh57o/
├── .devcontainer/
│ ├── Dockerfile
│ ├── base.Dockerfile
│ ├── devcontainer.json
│ └── post-create.sh
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ └── feature_request.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── ci.yml
│ ├── deploy.yml
│ ├── publish-gem.yml
│ └── update_jekyll-anchor-heading.yml
├── .gitignore
├── .prettierignore
├── .vscode/
│ └── tasks.json
├── 404.html
├── CNAME
├── Dockerfile
├── Gemfile
├── README.md
├── Rakefile
├── _config.yml
├── _includes/
│ ├── components/
│ │ ├── aux_nav.html
│ │ ├── breadcrumbs.html
│ │ ├── children_nav.html
│ │ ├── footer.html
│ │ ├── header.html
│ │ ├── mermaid.html
│ │ ├── search_footer.html
│ │ ├── search_header.html
│ │ └── sidebar.html
│ ├── css/
│ │ ├── callouts.scss.liquid
│ │ ├── custom.scss.liquid
│ │ └── just-the-docs.scss.liquid
│ ├── fix_linenos.html
│ ├── footer_custom.html
│ ├── head.html
│ ├── head_custom.html
│ ├── header_custom.html
│ ├── icons/
│ │ ├── code_copy.html
│ │ ├── document.html
│ │ ├── expand.html
│ │ ├── external_link.html
│ │ ├── icons.html
│ │ ├── link.html
│ │ ├── menu.html
│ │ └── search.html
│ ├── js/
│ │ └── custom.js
│ ├── lunr/
│ │ ├── custom-data.json
│ │ └── custom-index.js
│ ├── mermaid_config.js
│ ├── nav.html
│ ├── nav_footer_custom.html
│ ├── search_placeholder_custom.html
│ ├── title.html
│ ├── toc_heading_custom.html
│ └── vendor/
│ └── anchor_headings.html
├── _layouts/
│ ├── about.html
│ ├── default.html
│ ├── home.html
│ ├── minimal.html
│ ├── page.html
│ ├── post.html
│ ├── table_wrappers.html
│ └── vendor/
│ └── compress.html
├── _sass/
│ ├── base.scss
│ ├── buttons.scss
│ ├── code.scss
│ ├── color_schemes/
│ │ ├── dark.scss
│ │ ├── legacy_light.scss
│ │ └── light.scss
│ ├── content.scss
│ ├── custom/
│ │ ├── custom.scss
│ │ └── setup.scss
│ ├── labels.scss
│ ├── layout.scss
│ ├── modules.scss
│ ├── navigation.scss
│ ├── print.scss
│ ├── search.scss
│ ├── skiptomain.scss
│ ├── support/
│ │ ├── _functions.scss
│ │ ├── _variables.scss
│ │ ├── mixins/
│ │ │ ├── _buttons.scss
│ │ │ ├── _layout.scss
│ │ │ ├── _typography.scss
│ │ │ └── mixins.scss
│ │ └── support.scss
│ ├── tables.scss
│ ├── typography.scss
│ ├── utilities/
│ │ ├── _colors.scss
│ │ ├── _layout.scss
│ │ ├── _lists.scss
│ │ ├── _spacing.scss
│ │ ├── _typography.scss
│ │ └── utilities.scss
│ └── vendor/
│ ├── OneDarkJekyll/
│ │ ├── LICENSE
│ │ └── syntax.scss
│ ├── OneLightJekyll/
│ │ ├── LICENSE
│ │ └── syntax.scss
│ └── normalize.scss/
│ ├── README.md
│ └── normalize.scss
├── ads.txt
├── assets/
│ ├── css/
│ │ ├── just-the-docs-dark.scss
│ │ ├── just-the-docs-default.scss
│ │ └── just-the-docs-light.scss
│ ├── images/
│ │ ├── arti.drawio.xml
│ │ ├── change.drawio.xml
│ │ ├── cicd-initial.drawio.xml
│ │ ├── cred-key.drawio.xml
│ │ ├── cred-serv.drawio.xml
│ │ ├── crypto.drawio.xml
│ │ ├── dependency.drawio.xml
│ │ ├── depi.drawio.xml
│ │ ├── dos.drawio.xml
│ │ ├── endpoint.drawio.xml
│ │ ├── ex-pip.drawio.xml
│ │ ├── ex-pro.drawio.xml
│ │ ├── github.drawio.xml
│ │ ├── localdos.drawio.xml
│ │ ├── monitoring.drawio.xml
│ │ ├── per-arti.drawio.xml
│ │ ├── per-img.drawio.xml
│ │ ├── per-reg.drawio.xml
│ │ ├── per-service.drawio.xml
│ │ ├── ppe.drawio.xml
│ │ ├── priv-cert.drawio.xml
│ │ ├── priv-key.drawio.xml
│ │ ├── priv-pro.drawio.xml
│ │ ├── regi.drawio.xml
│ │ ├── registry.drawio.xml
│ │ ├── res-del.drawio.xml
│ │ ├── resources.drawio.xml
│ │ ├── scm.drawio.xml
│ │ ├── unprotected.drawio.xml
│ │ └── webhook.drawio.xml
│ └── js/
│ ├── just-the-docs.js
│ └── zzzz-search-data.json
├── bin/
│ └── just-the-docs
├── docker-compose.yml
├── docs/
│ ├── aisecops/
│ │ ├── aisecops.md
│ │ ├── azure.md
│ │ ├── biasandfairness.md
│ │ └── driver.md
│ ├── attacks/
│ │ ├── application.md
│ │ ├── attacks.md
│ │ ├── cloud.md
│ │ ├── container.md
│ │ └── pipeline.md
│ ├── build-test/
│ │ ├── artifacts.md
│ │ ├── build-test.md
│ │ ├── configuration-management.md
│ │ ├── dast.md
│ │ ├── iast.md
│ │ └── smoke-test.md
│ ├── checklists/
│ │ ├── apache.md
│ │ ├── argocd.md
│ │ ├── auth0.md
│ │ ├── aws.md
│ │ ├── ceph.md
│ │ ├── checklists.md
│ │ ├── consul.md
│ │ ├── couchdb.md
│ │ ├── docker.md
│ │ ├── ebpf.md
│ │ ├── elasticsearch.md
│ │ ├── etcd.md
│ │ ├── git.md
│ │ ├── gitlab.md
│ │ ├── glusterfs.md
│ │ ├── gradle.md
│ │ ├── graphite.md
│ │ ├── iis.md
│ │ ├── jenkins.md
│ │ ├── kubernetes.md
│ │ ├── maven.md
│ │ ├── memcached.md
│ │ ├── mongodb.md
│ │ ├── mysql.md
│ │ ├── nginx.md
│ │ ├── openshift.md
│ │ ├── redis.md
│ │ ├── saltstack.md
│ │ ├── sbom.md
│ │ ├── squid.md
│ │ ├── terraform.md
│ │ ├── tomcat.md
│ │ ├── weblogic.md
│ │ └── webservice
│ ├── code/
│ │ ├── code.md
│ │ ├── sast.md
│ │ ├── sca.md
│ │ └── secure-pipeline.md
│ ├── mlsecops/
│ │ ├── azure.md
│ │ ├── mlsecops.md
│ │ └── modelrobustnessandadversarialattacks.md
│ ├── model/
│ │ ├── model.md
│ │ └── simple.md
│ ├── operate/
│ │ ├── monitoring.md
│ │ ├── operate.md
│ │ └── virtual-patching.md
│ ├── plan-develop/
│ │ ├── appsec.md
│ │ ├── driver.md
│ │ ├── methodology.md
│ │ ├── plan-develop.md
│ │ └── threats.md
│ ├── privacy-policy/
│ │ └── privacy-policy.md
│ ├── production/
│ │ ├── cloud.md
│ │ ├── infrastructure.md
│ │ ├── production.md
│ │ ├── secrets-management.md
│ │ ├── threat-intelligence.md
│ │ └── vulnerability-assessment.md
│ ├── resources/
│ │ └── resources.md
│ ├── rules/
│ │ ├── android.md
│ │ ├── c.md
│ │ ├── cloudFormation.md
│ │ ├── cpp.md
│ │ ├── csharp.md
│ │ ├── django.md
│ │ ├── docker.md
│ │ ├── go.md
│ │ ├── java.md
│ │ ├── kotlin.md
│ │ ├── kubernetes.md
│ │ ├── laravel.md
│ │ ├── llm.md
│ │ ├── nodejs.md
│ │ ├── objectivec.md
│ │ ├── php.md
│ │ ├── python.md
│ │ ├── rails.md
│ │ ├── ruby.md
│ │ ├── rules.md
│ │ ├── scala.md
│ │ ├── swift.md
│ │ ├── terraform.md
│ │ └── xml.md
│ └── stories/
│ └── stories.md
├── fixtures/
│ ├── Gemfile-github-pages
│ └── README.md
├── index.md
├── just-the-docs.gemspec
├── lib/
│ └── tasks/
│ └── search.rake
└── package.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/Dockerfile
================================================
# [Choice] Debian OS version (use bullseye on local arm64/Apple Silicon): bullseye, buster
ARG VARIANT=bullseye
FROM mcr.microsoft.com/vscode/devcontainers/jekyll:0-${VARIANT}
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>
# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
================================================
FILE: .devcontainer/base.Dockerfile
================================================
# [Choice] Debian OS version (use 2.7-bullseye on local arm64/Apple Silicon): 2.7-bullseye, 2.7-buster
ARG VARIANT=2.7-bullseye
FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT}
COPY library-scripts/meta.env /usr/local/etc/vscode-dev-containers
# ENV Variables required by Jekyll
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
TZ=Etc/UTC \
LC_ALL=en_US.UTF-8 \
LANG=en_US.UTF-8 \
LANGUAGE=en_US
# Install bundler, latest jekyll, and github-pages for older jekyll
RUN gem install bundler jekyll github-pages
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here>
# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.224.2/containers/jekyll
{
"name": "DevSecOps Guides",
"build": {
"dockerfile": "Dockerfile",
"args": {
// Update 'VARIANT' to pick a Debian OS version: bullseye, buster
// Use bullseye when on local arm64/Apple Silicon.
"VARIANT": "bullseye",
// Enable Node.js: pick the latest LTS version
"NODE_VERSION": "lts/*"
}
},
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["GitHub.vscode-pull-request-github"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
// Jekyll server
4000,
// Live reload server
35729
],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "sh .devcontainer/post-create.sh",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
}
================================================
FILE: .devcontainer/post-create.sh
================================================
#!/bin/sh
# Install the version of Bundler.
if [ -f Gemfile.lock ] && grep "BUNDLED WITH" Gemfile.lock > /dev/null; then
cat Gemfile.lock | tail -n 2 | grep -C2 "BUNDLED WITH" | tail -n 1 | xargs gem install bundler -v
fi
# If there's a Gemfile, then run `bundle install`
# It's assumed that the Gemfile will install Jekyll too
if [ -f Gemfile ]; then
bundle install
fi
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Ask a question
url: https://github.com/just-the-docs/just-the-docs/discussions
about: Ask questions and discuss with other community members
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "10:00"
open-pull-requests-limit: 10
- package-ecosystem: bundler
directory: "/"
schedule:
interval: daily
time: "10:00"
open-pull-requests-limit: 10
================================================
FILE: .github/workflows/ci.yml
================================================
on:
push:
branches:
- main
pull_request:
branches:
- main
name: CI
jobs:
jekyll-build:
name: Build (jekyll gem)
strategy:
fail-fast: false
matrix:
jekyll-version: [3.9, 4.3]
os: [ ubuntu-latest, macos-latest, windows-latest ]
ruby-version: [2.7, 3.1]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Setup Ruby ${{ matrix.ruby-version }}
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: false
- name: Bundle Install
run: bundle install
- name: Install Jekyll ${{ matrix.jekyll-version }}
run: gem install jekyll -v ${{ matrix.jekyll-version }}
- name: Init Search
run: bundle exec rake search:init
- name: Build Site
run: bundle exec jekyll build
github-pages-build:
name: Build (github-pages gem)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
bundler-cache: false
- name: Bundle Install
run: BUNDLE_GEMFILE=fixtures/Gemfile-github-pages bundle install
- name: Build Site
run: BUNDLE_GEMFILE=fixtures/Gemfile-github-pages bundle exec jekyll build
assets:
name: Test CSS and JS
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
================================================
FILE: .github/workflows/deploy.yml
================================================
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
name: Deploy Jekyll site to Pages
on:
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1' # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
cache-version: 0 # Increment this number if you need to re-download cached gems
- name: Setup Pages
id: pages
uses: actions/configure-pages@v2
- name: Build with Jekyll
# Outputs to the './_site' directory by default
run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
env:
JEKYLL_ENV: production
- name: Upload artifact
# Automatically uploads an artifact from the './_site' directory by default
uses: actions/upload-pages-artifact@v1
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
================================================
FILE: .github/workflows/publish-gem.yml
================================================
name: Publish Ruby Gem
on:
workflow_dispatch
jobs:
build:
name: Publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Ruby 3.1
uses: actions/setup-ruby@v1
with:
ruby-version: 3.1
- name: Publish to GPR
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 0600 $HOME/.gem/credentials
printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
gem build *.gemspec
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
env:
GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
OWNER: ${{ github.repository_owner }}
# Disabled as this does not handle 2FA
# - name: Publish to RubyGems
# run: |
# mkdir -p $HOME/.gem
# touch $HOME/.gem/credentials
# chmod 0600 $HOME/.gem/credentials
# printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
# gem build *.gemspec
# gem push *.gem
# env:
# GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
================================================
FILE: .github/workflows/update_jekyll-anchor-heading.yml
================================================
name: Update Vendor plugin - jekyll-anchor-headings
on:
# schedule:
# # once per week
# - cron: "0 15 * * 0"
workflow_dispatch:
jobs:
update-deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Get latest release information
id: latest-release
uses: pozetroninc/github-action-get-latest-release@master
with:
owner: allejo
repo: jekyll-anchor-headings
excludes: prerelease, draft
- name: Update jekyll-anchor-headings
id: update
uses: suisei-cn/actions-download-file@v1.3.0
with:
url: "https://github.com/allejo/jekyll-anchor-headings/releases/download/${{ steps.latest-release.outputs.release }}/anchor_headings.html"
target: _includes/vendor/
- name: Create PR
uses: peter-evans/create-pull-request@v4
with:
commit-message: "chore[dependency]: Update `jekyll-anchor-headings` to `${{ steps.latest-release.outputs.release }}`"
title: "auto: Update `jekyll-anchor-headings` to `${{ steps.latest-release.outputs.release }}`"
body: |
Update `jekyll-anchor-headings` to `${{ steps.latest-release.outputs.release }}`
This is an automated pull request.
branch: update/vendor/jekyll-anchor-headings
delete-branch: true
labels: |
kind/update
area/dependency
add-paths: |
_includes/vendor/anchor_headings.html
token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
*.gem
.bundle
.ruby-version
.jekyll-cache
.sass-cache
_site
Gemfile.lock
node_modules
.DS_Store
================================================
FILE: .prettierignore
================================================
package-lock.json
_site
assets/css/just-the-docs-default.scss
assets/css/just-the-docs-light.scss
assets/css/just-the-docs-dark.scss
assets/js/vendor/lunr.min.js
assets/js/search-data.json
assets/js/zzzz-search-data.json
assets/js/just-the-docs.js
*.md
_includes/mermaid_config.js
================================================
FILE: .vscode/tasks.json
================================================
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Serve",
"type": "shell",
"command": "bundle exec jekyll serve --livereload",
"group": {
"kind": "test",
"isDefault": true
},
"isBackground": true
},
{
"label": "Build",
"type": "shell",
"command": "bundle exec jekyll build",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
================================================
FILE: 404.html
================================================
---
layout: default
title: 404
permalink: /404
nav_exclude: true
search_exclude: true
---
<h1>Page not found</h1>
<p>The page you requested could not be found. Try using the navigation {% if site.search_enabled != false %}or search {% endif %}to find what you're looking for or go to this <a href="{{ '/' | relative_url }}">site's home page</a>.</p>
================================================
FILE: CNAME
================================================
wiki.devsecopsguides.com
================================================
FILE: Dockerfile
================================================
FROM ruby:2.7
ENV LC_ALL C.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
WORKDIR /usr/src/app
COPY Gemfile just-the-docs.gemspec ./
RUN gem install bundler && bundle install
EXPOSE 4000
================================================
FILE: Gemfile
================================================
source "https://rubygems.org"
gemspec
gem "jekyll-github-metadata", ">= 2.15"
gem "webrick", "~> 1.7"
================================================
FILE: README.md
================================================
<p align="center">
<h1 align="center">DevSecOps Guides</h1>
<p align="center">Comprehensive resource for integrating security into the software development lifecycle.</p>
<br><br><br>
</p>
## About
Welcome to DevSecOpsGuides, a comprehensive resource for developers, security professionals, and operations teams who want to learn about the world of DevSecOps. DevSecOps is the practice of integrating security into the entire software development lifecycle, from code creation to deployment and beyond. This approach ensures that security is a top priority at every stage of the development process, leading to more secure and reliable applications.
Our guides cover a wide range of topics related to DevSecOps, including:
1. Secure coding practices: Learn how to write code that is resistant to common security threats such as SQL injection, cross-site scripting, and buffer overflow.
2. Threat modeling: Learn how to identify potential security vulnerabilities in your applications and prioritize them based on their impact and likelihood of occurrence.
3. Security testing: Learn about different types of security testing, such as penetration testing, vulnerability scanning, and code review, and how to incorporate them into your DevSecOps workflow.
4. Infrastructure security: Learn about securing the infrastructure that supports your applications, including servers, networks, and databases.
5. Compliance and regulations: Learn about compliance requirements and regulations such as GDPR, HIPAA, and PCI-DSS, and how to ensure that your applications meet these standards.
6. Incident response: Learn how to respond to security incidents quickly and effectively, minimizing the impact on your organization and customers.
Our guides are written by experts in the field of DevSecOps, and are designed to be accessible to developers, security professionals, and operations teams at all levels of experience. Whether you are just getting started with DevSecOps or are looking to deepen your knowledge and skills, DevSecOpsGuides is the perfect resource for you.
================================================
FILE: Rakefile
================================================
Dir.glob('lib/tasks/*.rake').each {|r| import r}
================================================
FILE: _config.yml
================================================
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole site, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing these this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'jekyll serve'. If you change this file, please restart the server process.
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: DevSecOps Guides
description: Guides for DevSecOps
baseurl: "/" # the subpath of your site, e.g. /blog
url: "https://devsecopsguides.github.io" # the base hostname & protocol for your site, e.g. http://example.com
repository: devsecopsguides/devsecopsguides.github.io # for github-metadata
permalink: pretty
exclude:
# from https://github.com/jekyll/jekyll/blob/master/lib/site_template/_config.yml:
- .sass-cache/
- .jekyll-cache/
- gemfiles/
- Gemfile
- Gemfile.lock
- node_modules/
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/
# specific to the theme website:
- bin/
- lib/
- "*.gemspec"
- "*.gem"
- LICENSE.txt
- package.json
- package-lock.json
- Rakefile
- README.md
- CODE_OF_CONDUCT.md
- docker-compose.yml
- Dockerfile
# theme test code
- fixtures/
# Set a path/url to a logo that will be displayed instead of the title
#logo: "/assets/images/just-the-docs.png"
# Enable or disable the site search
# Supports true (default) or false
search_enabled: true
search:
# Split pages into sections that can be searched individually
# Supports 1 - 6, default: 2
heading_level: 2
# Maximum amount of previews per search result
# Default: 3
previews: 2
# Maximum amount of words to display before a matched word in the preview
# Default: 5
preview_words_before: 3
# Maximum amount of words to display after a matched word in the preview
# Default: 10
preview_words_after: 3
# Set the search token separator
# Default: /[\s\-/]+/
# Example: enable support for hyphenated search words
tokenizer_separator: /[\s/]+/
# Display the relative url in search results
# Supports true (default) or false
rel_url: true
# Enable or disable the search button that appears in the bottom right corner of every page
# Supports true or false (default)
button: false
# For copy button on code
enable_copy_code_button: true
# By default, consuming the theme as a gem leaves mermaid disabled; it is opt-in
mermaid:
# Version of mermaid library
# Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/
version: "9.1.6"
# Put any additional configuration, such as setting the theme, in _includes/mermaid_config.js
# See also docs/ui-components/code
# To load mermaid from a local library, also use the `path` key to specify the location of the library; e.g.
# for (v10+):
# path: "/assets/js/mermaid.esm.min.mjs"
# for (<v10):
# path: "/assets/js/mermaid.min.js"
# Note: copy both `mermaid.esm.min.mjs` (v10+) or `mermaid.min.js` (<v10) and the associated `.map` file from the specified version of `mermaid/dist` to `/assets/js/`.
# Enable or disable heading anchors
heading_anchors: true
# Aux links for the upper right navigation
aux_links:
"DevSecOps Guides on GitHub":
- "//github.com/devsecopsguides/devsecopsguides.github.io"
# Makes Aux links open in a new tab. Default is false
aux_links_new_tab: false
# Sort order for navigation links
# nav_sort: case_insensitive # default, equivalent to nil
nav_sort: case_sensitive # Capital letters sorted before lowercase
# External navigation links
nav_external_links:
- title: DevSecOpsGuides on GitHub
url: https://github.com/devsecopsguides/devsecopsguides.github.io
# Footer content
# appears at the bottom of every page's main content
# Back to top link
back_to_top: true
back_to_top_text: "Back to top"
footer_content: "Copyright © 2019-2025."
# Footer last edited timestamp
last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter
last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html
# Footer "Edit this page on GitHub" link text
gh_edit_link: true # show or hide edit this page link
gh_edit_link_text: "Edit this page on GitHub"
gh_edit_repository: "https://github.com/devsecopsguides/devsecopsguides.github.io" # the github URL for your repo
gh_edit_branch: "main" # the branch that your docs is served from
# gh_edit_source: docs # the source that your files originate from
gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately
# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
color_scheme: light
callouts_level: quiet # or loud
callouts:
highlight:
color: yellow
important:
title: Important
color: blue
new:
title: New
color: green
note:
title: Note
color: purple
warning:
title: Warning
color: red
# Google Analytics Tracking (optional)
# Supports a CSV of tracking ID strings (eg. "UA-1234567-89,G-1AB234CDE5")
# Note: the main DevSecOps Guides does *not* use Google Analytics.
ga_tracking: G-G6GT6NYHBM
# ga_tracking_anonymize_ip: true # Use GDPR compliant Google Analytics settings (true/nil by default)
plugins:
- jekyll-seo-tag
- jekyll-github-metadata
kramdown:
syntax_highlighter_opts:
block:
line_numbers: false
compress_html:
clippings: all
comments: all
endings: all
startings: []
blanklines: false
profile: false
# ignore:
# envs: all
================================================
FILE: _includes/components/aux_nav.html
================================================
<nav aria-label="Auxiliary" class="aux-nav">
<ul class="aux-nav-list">
{% for link in site.aux_links %}
<li class="aux-nav-list-item">
<a href="{{ link.last }}" class="site-button"
{% if site.aux_links_new_tab %}
target="_blank" rel="noopener noreferrer"
{% endif %}
>
{{ link.first }}
</a>
</li>
{% endfor %}
</ul>
</nav>
================================================
FILE: _includes/components/breadcrumbs.html
================================================
{% unless page.url == "/" %}
{% if page.parent %}
<nav aria-label="Breadcrumb" class="breadcrumb-nav">
<ol class="breadcrumb-nav-list">
{% if page.grand_parent %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
<li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
{% else %}
<li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
{% endif %}
<li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
</ol>
</nav>
{% endif %}
{% endunless %}
================================================
FILE: _includes/components/children_nav.html
================================================
<hr>
{% include toc_heading_custom.html %}
<ul>
{% for child in include.toc_list %}
<li>
<a href="{{ child.url | relative_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}
</li>
{% endfor %}
</ul>
================================================
FILE: _includes/components/footer.html
================================================
{% capture footer_custom %}
{%- include footer_custom.html -%}
{% endcapture %}
{% if footer_custom != "" or site.last_edit_timestamp or site.gh_edit_link %}
<hr>
<footer>
{% if site.back_to_top %}
<p><a href="#top" id="back-to-top">{{ site.back_to_top_text }}</a></p>
{% endif %}
{{ footer_custom }}
{% if site.last_edit_timestamp or site.gh_edit_link %}
<div class="d-flex mt-2">
{% if site.last_edit_timestamp and site.last_edit_time_format and page.last_modified_date %}
<p class="text-small text-grey-dk-000 mb-0 mr-2">
Page last modified: <span class="d-inline-block">{{ page.last_modified_date | date: site.last_edit_time_format }}</span>.
</p>
{% endif %}
{% if
site.gh_edit_link and
site.gh_edit_link_text and
site.gh_edit_repository and
site.gh_edit_branch and
site.gh_edit_view_mode
%}
<p class="text-small text-grey-dk-000 mb-0">
<a href="{{ site.gh_edit_repository }}/{{ site.gh_edit_view_mode }}/{{ site.gh_edit_branch }}{% if site.gh_edit_source %}/{{ site.gh_edit_source }}{% endif %}{% if page.collection and site.collections_dir %}/{{ site.collections_dir }}{% endif %}/{{ page.path }}" id="edit-this-page">{{ site.gh_edit_link_text }}</a>
</p>
{% endif %}
</div>
{% endif %}
</footer>
{% endif %}
================================================
FILE: _includes/components/header.html
================================================
<div id="main-header" class="main-header">
{% if site.search_enabled != false %}
{% include components/search_header.html %}
{% else %}
<div></div>
{% endif %}
{% include header_custom.html %}
{% if site.aux_links %}
{% include components/aux_nav.html %}
{% endif %}
</div>
================================================
FILE: _includes/components/mermaid.html
================================================
{% comment %}
The complexity of this file comes from a breaking change in Mermaid v10; mermaid.init has been deprecated (and supposedly, didn't work earlier?).
So, we check whether the user's Mermaid version is >= 10; if not, we fall back to the previous init syntax.
If a user is using a custom mermaid file and doesn't specify a version, we default to the < v10 behaviour. Users who use version v10 or above should specify this in the version key.
{% endcomment %}
{% if site.mermaid.version %}
{% assign mermaid_major_version = site.mermaid.version | split: "." | first | plus: 0 %}
{% else %}
{% assign mermaid_major_version = 9 %}
{% endif %}
{% if mermaid_major_version > 9 %}
<script type="module">
{% if site.mermaid.path %}
import mermaid from '{{ site.mermaid.path | relative_url }}';
{% else %}
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.esm.min.mjs';
{% endif %}
var config = {% include mermaid_config.js %};
mermaid.initialize(config);
mermaid.run({
querySelector: '.language-mermaid',
});
</script>
{% else %}
{% if site.mermaid.path %}
<script src="{{ site.mermaid.path | relative_url }}"></script>
{% else %}
<script src="https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.min.js"></script>
{% endif %}
<script>
var config = {% include mermaid_config.js %};
mermaid.initialize(config);
window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));
</script>
{% endif %}
================================================
FILE: _includes/components/search_footer.html
================================================
{% if site.search.button %}
<a href="#" id="search-button" class="search-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-search"></use></svg>
</a>
{% endif %}
<div class="search-overlay"></div>
================================================
FILE: _includes/components/search_header.html
================================================
{% capture search_placeholder %}{% include search_placeholder_custom.html %}{% endcapture %}
<div class="search">
<div class="search-input-wrap">
<input type="text" id="search-input" class="search-input" tabindex="0" placeholder="{{ search_placeholder | strip_html | strip }}" aria-label="{{ search_placeholder | strip_html| strip }}" autocomplete="off">
<label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label>
</div>
<div id="search-results" class="search-results"></div>
</div>
================================================
FILE: _includes/components/sidebar.html
================================================
<div class="side-bar">
<div class="site-header">
<img style="width: 17%;" src="/assets/images/devsecopsguides.png"><a href="{{ '/' | relative_url }}" class="site-title lh-tight">{% include title.html %}</a>
<a href="#" id="menu-button" class="site-button">
<svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
</a>
</div>
<nav aria-label="Main" id="site-nav" class="site-nav">
{% assign pages_top_size = site.html_pages
| where_exp:"item", "item.title != nil"
| where_exp:"item", "item.parent == nil"
| where_exp:"item", "item.nav_exclude != true"
| size %}
{% if pages_top_size > 0 %}
{% include nav.html pages=site.html_pages key=nil %}
{% endif %}
{%- if site.nav_external_links -%}
<ul class="nav-list">
{%- for node in site.nav_external_links -%}
<li class="nav-list-item external">
<a href="{{ node.url | absolute_url }}" class="nav-list-link external">
{{ node.title }}
{% unless node.hide_icon %}<svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg>{% endunless %}
</a>
</li>
{%- endfor -%}
</ul>
{%- endif -%}
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% if collections_size > 1 or pages_top_size > 0 %}
{% if collection_value.nav_fold == true %}
<ul class="nav-list nav-category-list">
<li class="nav-list-item{% if page.collection == collection_key %} active{% endif %}">
{%- if collection.size > 0 -%}
<a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a>
{%- endif -%}
<div class="nav-category">{{ collection_value.name }}</div>
{% include nav.html pages=collection key=collection_key %}
</li>
</ul>
{% else %}
<div class="nav-category">{{ collection_value.name }}</div>
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% else %}
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
</nav>
{% capture nav_footer_custom %}
{%- include nav_footer_custom.html -%}
{% endcapture %}
{% if nav_footer_custom != "" %}
{{ nav_footer_custom }}
{% else %}
<footer class="site-footer">
<b>More</b><br>
<a href="https://blog.devsecopsguides.com/">Blog</a><br>
<a href="https://rules.devsecopsguides.com/">Rules</a><br>
<a href="https://github.com/orgs/DevSecOpsStuff/">Labs</a><br>
<a href="https://join.slack.com/t/devsecopsguides/shared_invite/zt-1yc37gckk-zeg3jnA0GdCSYqGlFs2Ppw">Slack</a>
</footer>
{% endif %}
</div>
================================================
FILE: _includes/css/callouts.scss.liquid
================================================
{%- comment -%}
{% include css/callouts.scss.liquid color_scheme = string %}
produces SCSS for all the callouts in site.callouts. For the "dark"
color scheme, the levels of the text and background colors are reversed.
{%- endcomment -%}
{%- assign callout_background_hue = "000" -%}
{%- assign callout_color_hue = "300" -%}
{%- if site.callouts_level == "loud" or include.color_scheme == "dark" and site.callouts_level != "quiet" -%}
{%- assign callout_background_hue = "300" -%}
{%- assign callout_color_hue = "000" -%}
{%- endif -%}
div.opaque {
background-color: $body-background-color;
}
{%- for callout in site.callouts %}
{%- assign callout_opacity = callout[1].opacity | default: site.callouts_opacity | default: 0.2 -%}
p.{{ callout[0] }}, blockquote.{{ callout[0] }} {
background: rgba(${{ callout[1].color }}-{{ callout_background_hue }}, {{ callout_opacity }});
border-left: $border-radius solid ${{ callout[1].color }}-{{ callout_color_hue }};
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
padding: .8rem;
{% if callout[1].title %}
&::before {
color: ${{ callout[1].color }}-{{ callout_color_hue }};
content: "{{ callout[1].title }}";
display: block;
font-weight: bold;
text-transform: uppercase;
font-size: .75em;
padding-bottom: .125rem;
}
{% endif %}
> .{{ callout[0] }}-title {
color: ${{ callout[1].color }}-{{ callout_color_hue }};
display: block;
font-weight: bold;
text-transform: uppercase;
font-size: .75em;
padding-bottom: .125rem;
}
}
p.{{ callout[0] }}-title, blockquote.{{ callout[0] }}-title {
background: rgba(${{ callout[1].color }}-{{ callout_background_hue }}, {{ callout_opacity }});
border-left: $border-radius solid ${{ callout[1].color }}-{{ callout_color_hue }};
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
padding: .8rem;
> p:first-child {
margin-top: 0;
margin-bottom: 0;
color: ${{ callout[1].color }}-{{ callout_color_hue }};
display: block;
font-weight: bold;
text-transform: uppercase;
font-size: .75em;
padding-bottom: .125rem;
}
}
blockquote.{{ callout[0] }} {
margin-left: 0;
margin-right: 0;
> p:first-child {
margin-top: 0;
}
> p:last-child {
margin-bottom: 0;
}
}
blockquote.{{ callout[0] }}-title {
margin-left: 0;
margin-right: 0;
> p:nth-child(2) {
margin-top: 0;
}
> p:last-child {
margin-bottom: 0;
}
}
{% endfor -%}
================================================
FILE: _includes/css/custom.scss.liquid
================================================
@import "./custom/custom";
================================================
FILE: _includes/css/just-the-docs.scss.liquid
================================================
{% if site.logo %}
$logo: "{{ site.logo | relative_url }}";
{% endif %}
@import "./support/support";
@import "./custom/setup";
@import "./color_schemes/light";
{% unless include.color_scheme == "light" %}
@import "./color_schemes/{{ include.color_scheme }}";
{% endunless %}
@import "./modules";
{% include css/callouts.scss.liquid color_scheme = include.color_scheme %}
{% include css/custom.scss.liquid %}
================================================
FILE: _includes/fix_linenos.html
================================================
{%- comment -%}
This file can be used to fix the HTML produced by Jekyll for highlighted
code with line numbers.
It works with `{% highlight some_language linenos %}...{% endhighlight %}`
and with the Kramdown option to add line numbers to fenced code.
The implementation was derived from the workaround provided by
Dmitry Hrabrov (DeXP) at
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901
EXPLANATION
The HTML produced by Rouge highlighting with lie numbers is of the form
`code table`. Jekyll (<= 4.1.1) always wraps the highlighted HTML
with `pre`. This wrapping is not only unnecessary, but also transforms
the conforming HTML produced by Rouge to non-conforming HTML, which
results in HTML validation error reports.
The fix removes the outer `pre` tags whenever they contain the pattern
`<table class="rouge-table">`.
Apart from avoiding HTML validation errors, the fix allows the use of
the [Jekyll layout for compressing HTML](http://jch.penibelst.de),
which relies on `pre` tags not being nested, according to
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-172069842
USAGE
(Any names can be used for `some_var` and `some_language`.)
{% capture some_var %}
{% highlight some_language linenos %}
Some code
{% endhighlight %}
{% endcapture %}
{% include fix_linenos.html code=some_var %}
For code fences:
{% capture some_var %}
```some_language
Some code
```
{% endcapture %}
{% assign some_var = some_var | markdownify %}
{% include fix_linenos.html code=some_var %}
CAVEATS
The above does not work when `Some code` happens to contain the matched string
`<table class="rouge-table">`.
The use of this file overwrites the variable `fix_linenos_code` with `nil`.
{%- endcomment -%}
{% assign fix_linenos_code = include.code %}
{% if fix_linenos_code contains '<table class="rouge-table">' %}
{% assign fix_linenos_code = fix_linenos_code | replace: '<pre class="highlight">', '<pre>' %}
{% assign fix_linenos_code = fix_linenos_code | replace: "<pre><code", "<code" %}
{% assign fix_linenos_code = fix_linenos_code | replace: "</code></pre>", "</code>" %}
{% endif %}
{{ fix_linenos_code }}
{% assign fix_linenos_code = nil %}
================================================
FILE: _includes/footer_custom.html
================================================
{%- if site.footer_content -%}
<p class="text-small text-grey-dk-100 mb-0">{{ site.footer_content }}</p>
{%- endif -%}
================================================
FILE: _includes/head.html
================================================
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="google-adsense-account" content="ca-pub-4288225696268534">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4288225696268534"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="{{ '/assets/css/just-the-docs-default.css' | relative_url }}">
{% if site.ga_tracking != nil %}
{% assign ga_tracking_ids = site.ga_tracking | split: "," %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ ga_tracking_ids.first }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
{% for ga_property in ga_tracking_ids %}
gtag('config', '{{ ga_property }}'{% unless site.ga_tracking_anonymize_ip == nil %}, { 'anonymize_ip': true }{% endunless %});
{% endfor %}
</script>
{% endif %}
{% if site.search_enabled != false %}
<script src="{{ '/assets/js/vendor/lunr.min.js' | relative_url }}"></script>
{% endif %}
<script src="{{ '/assets/js/just-the-docs.js' | relative_url }}"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
{% for file in site.static_files %}
{% if file.path == site.favicon_ico or file.path == '/favicon.ico' %}
{% assign favicon = true %}
{% endif %}
{% endfor %}
{% if favicon %}
<link rel="icon" href="{{ site.favicon_ico | default: '/favicon.ico' | relative_url }}" type="image/x-icon">
{% endif %}
{% seo %}
{% include head_custom.html %}
</head>
================================================
FILE: _includes/head_custom.html
================================================
================================================
FILE: _includes/header_custom.html
================================================
================================================
FILE: _includes/icons/code_copy.html
================================================
<!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
<symbol id="svg-copy" viewBox="0 0 16 16">
<title>Copy</title>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
<path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
</svg>
</symbol>
<symbol id="svg-copied" viewBox="0 0 16 16">
<title>Copied</title>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
<path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
</svg>
</symbol>
================================================
FILE: _includes/icons/document.html
================================================
<symbol id="svg-doc" viewBox="0 0 24 24">
<title>Document</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
</svg>
</symbol>
================================================
FILE: _includes/icons/expand.html
================================================
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
================================================
FILE: _includes/icons/external_link.html
================================================
<!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
<title id="svg-external-link-title">(external link)</title>
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
</symbol>
================================================
FILE: _includes/icons/icons.html
================================================
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
{% include icons/link.html %}
{% include icons/menu.html %}
{% include icons/expand.html %}
{% include icons/external_link.html %}
{% if site.search_enabled != false %}
{% include icons/document.html %}
{% include icons/search.html %}
{% endif %}
{% if site.enable_copy_code_button != false %}
{% include icons/code_copy.html %}
{% endif %}
</svg>
================================================
FILE: _includes/icons/link.html
================================================
<symbol id="svg-link" viewBox="0 0 24 24">
<title>Link</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
</svg>
</symbol>
================================================
FILE: _includes/icons/menu.html
================================================
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
================================================
FILE: _includes/icons/search.html
================================================
<symbol id="svg-search" viewBox="0 0 24 24">
<title>Search</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
</symbol>
================================================
FILE: _includes/js/custom.js
================================================
================================================
FILE: _includes/lunr/custom-data.json
================================================
================================================
FILE: _includes/lunr/custom-index.js
================================================
================================================
FILE: _includes/mermaid_config.js
================================================
{}
================================================
FILE: _includes/nav.html
================================================
{%- comment -%}
The `nav_order` values of pages affect the order in which they are shown in
the navigation panel and in the automatically generated tables of contents.
Sibling pages with the same `nav_order` value may be shown in any order.
Sibling pages with no `nav_order` value are shown after all pages that have
explicit `nav_order` values, ordered by their `title` values.
The `nav_order` and `title` values can be numbers or strings. To avoid build
failures, we sort numbers and strings separately. We sort numbers by their
values, and strings lexicographically. The case-sensitivity of string sorting
is determined by the configuration setting of `nav_sort`. Pages with no `title`
value are excluded from the navigation.
Note: Numbers used as `title` or `nav_order` values should not be in quotes,
unless you intend them to be lexicographically ordered. Numbers are written
without spaces or thousands-separators. Negative numbers are preceded by `-`.
Floats are written with the integral and fractional parts separated by `.`.
(Bounds on the magnitude and precision are presumably the same as in Liquid.)
{%- endcomment -%}
{%- assign title_pages = include.pages
| where_exp: "item", "item.title != nil" -%}
{%- comment -%}
A page with `nav_exclude: true` does not appear in the main navigation.
If it has a `parent`, it may appear in the parent's table of contents.
If it specifies `has_children: true`, it should appear in the breadcrumbs
of the child pages, but its order in relation to other pages is irrelevant.
Pages that never appear can be removed from the pages that need to be sorted.
This optimisation can be significant on a site with many pages.
In Jekyll 4, the pages to be sorted can be filtered by:
{%- assign title_pages = title_pages
| where_exp: "item", "item.nav_exclude != true or item.parent != nil" -%}
That filter is not allowed in Jekyll 3. The following iterative code gives the
same effect, but it is activated only when it will filter more than 50% of the
pages.
{%- endcomment -%}
{%- unless title_pages == empty -%}
{%- assign unsorted_pages = title_pages
| where_exp: "item", "item.parent == nil"
| where_exp: "item", "item.nav_exclude == true" -%}
{%- assign title_pages_size = title_pages.size -%}
{%- assign unsorted_pages_percent = unsorted_pages.size
| times: 100 | divided_by: title_pages_size -%}
{%- if unsorted_pages_percent > 50 -%}
{%- assign sorted_pages = "" | split: "" -%}
{%- for item in title_pages -%}
{%- if item.nav_exclude != true or item.parent -%}
{%- assign sorted_pages = sorted_pages | push: item -%}
{%- endif -%}
{%- endfor -%}
{%- assign title_pages = sorted_pages -%}
{%- endif -%}
{%- endunless -%}
{%- assign nav_order_pages = title_pages
| where_exp: "item", "item.nav_order != nil" -%}
{%- assign title_order_pages = title_pages
| where_exp: "item", "item.nav_order == nil" -%}
{%- comment -%}
Divide the arrays of `nav_order_pages` and `title_order_pages` according to
the type of value.
The first character of the result of `jsonify` is `"` only for strings.
Grouping by a single character also ensures the number of groups is small.
{%- endcomment -%}
{%- assign nav_number_pages = "" | split: "" -%}
{%- assign nav_string_pages = "" | split: "" -%}
{%- assign nav_order_groups = nav_order_pages
| group_by_exp: "item", "item.nav_order | jsonify | slice: 0" -%}
{%- for group in nav_order_groups -%}
{%- if group.name == '"' -%}
{%- assign nav_string_pages = group.items -%}
{%- else -%}
{%- assign nav_number_pages = nav_number_pages | concat: group.items -%}
{%- endif -%}
{%- endfor -%}
{%- unless nav_number_pages == empty -%}
{%- assign nav_number_pages = nav_number_pages | sort: "nav_order" -%}
{%- endunless -%}
{%- unless nav_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign nav_string_pages = nav_string_pages | sort_natural: "nav_order" -%}
{%- else -%}
{%- assign nav_string_pages = nav_string_pages | sort: "nav_order" -%}
{%- endif -%}
{%- endunless -%}
{%- assign title_number_pages = "" | split: "" -%}
{%- assign title_string_pages = "" | split: "" -%}
{%- assign title_order_groups = title_order_pages
| group_by_exp: "item", "item.title | jsonify | slice: 0" -%}
{%- for group in title_order_groups -%}
{%- if group.name == '"' -%}
{%- assign title_string_pages = group.items -%}
{%- else -%}
{%- assign title_number_pages = title_number_pages | concat: group.items -%}
{%- endif -%}
{%- endfor -%}
{%- unless title_number_pages == empty -%}
{%- assign title_number_pages = title_number_pages | sort: "title" -%}
{%- endunless -%}
{%- unless title_string_pages == empty -%}
{%- if site.nav_sort == 'case_insensitive' -%}
{%- assign title_string_pages = title_string_pages | sort_natural: "title" -%}
{%- else -%}
{%- assign title_string_pages = title_string_pages | sort: "title" -%}
{%- endif -%}
{%- endunless -%}
{%- assign pages_list = nav_number_pages | concat: nav_string_pages
| concat: title_number_pages | concat: title_string_pages -%}
{%- assign first_level_pages = pages_list
| where_exp: "item", "item.parent == nil" -%}
{%- assign second_level_pages = pages_list
| where_exp: "item", "item.parent != nil"
| where_exp: "item", "item.grand_parent == nil" -%}
{%- assign third_level_pages = pages_list
| where_exp: "item", "item.grand_parent != nil" -%}
{%- comment -%}
The order of sibling pages in `pages_list` determines the order of display of
links to them in lists of navigation links and in auto-generated TOCs.
Note that Liquid evaluates conditions from right to left (and it does not allow
the use of parentheses). Some conditions are not so easy to express clearly...
For example, consider the following condition:
C: page.collection = = include.key and
page.url = = node.url or
page.grand_parent = = node.title or
page.parent = = node.title and
page.grand_parent = = nil
Here, `node` is a first-level page. The last part of the condition
-- namely: `page.parent = = node.title and page.grand_parent = = nil` --
is evaluated first; it holds if and only if `page` is a child of `node`.
The condition `page.grand_parent = = node.title or ...` holds when
`page` is a grandchild of node, OR `...` holds.
The condition `page.url = = node.url or ...` holds when
`page` is `node`, OR `...` holds.
The condition C: `page.collection = = include.key and ...` holds when we are
generating the nav links for a collection that includes `page`, AND `...` holds.
{%- endcomment -%}
<ul class="nav-list">
{%- for node in first_level_pages -%}
{%- unless node.nav_exclude -%}
<li class="nav-list-item{% if page.collection == include.key and page.url == node.url or page.grand_parent == node.title or page.parent == node.title and page.grand_parent == nil %} active{% endif %}">
{%- if node.has_children -%}
<a href="#" class="nav-list-expander" aria-label="toggle links in {{ node.title }} category">
<svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg>
</a>
{%- endif -%}
<a href="{{ node.url | relative_url }}" class="nav-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a>
{%- if node.has_children -%}
{%- assign children_list = second_level_pages
| where: "parent", node.title -%}
{%- if node.child_nav_order == 'desc' or node.child_nav_order == 'reversed' -%}
{%- assign children_list = children_list | reverse -%}
{%- endif -%}
<ul class="nav-list">
{%- for child in children_list -%}
{%- unless child.nav_exclude -%}
<li class="nav-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}">
{%- if child.has_children -%}
<a href="#" class="nav-list-expander" aria-label="toggle links in {{ child.title }} category">
<svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg>
</a>
{%- endif -%}
<a href="{{ child.url | relative_url }}" class="nav-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
{%- if child.has_children -%}
{%- assign grand_children_list = third_level_pages
| where: "parent", child.title
| where: "grand_parent", node.title -%}
{%- if child.child_nav_order == 'desc' or child.child_nav_order == 'reversed' -%}
{%- assign grand_children_list = grand_children_list | reverse -%}
{%- endif -%}
<ul class="nav-list">
{%- for grand_child in grand_children_list -%}
{%- unless grand_child.nav_exclude -%}
<li class="nav-list-item {% if page.url == grand_child.url %} active{% endif %}">
<a href="{{ grand_child.url | relative_url }}" class="nav-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a>
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- endif -%}
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- endif -%}
</li>
{%- endunless -%}
{%- endfor -%}
</ul>
{%- comment -%}
`page.collection` is the name of the Jekyll collection that contains the page,
if any, and otherwise nil. Similarly for `include.key`.
If the current page is in the collection (if any) whose navigation is currently
being generated, the following code sets `first_level_url` to the URL used in
the page's top-level breadcrumb (if any), and `second_level_url` to that used
in the page's second-level breadcrumb (if any).
For pages with children, the code also sets `toc_list` to the list of child pages,
reversing the order if needed.
{%- endcomment -%}
{%- if page.collection == include.key -%}
{%- for node in first_level_pages -%}
{%- if page.grand_parent == node.title or page.parent == node.title and page.grand_parent == nil -%}
{%- assign first_level_url = node.url | relative_url -%}
{%- endif -%}
{%- if node.has_children -%}
{%- assign children_list = second_level_pages | where: "parent", node.title -%}
{%- for child in children_list -%}
{%- if child.has_children -%}
{%- if page.url == child.url or page.parent == child.title and page.grand_parent == child.parent -%}
{%- assign second_level_url = child.url | relative_url -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- if page.has_children == true and page.has_toc != false -%}
{%- assign toc_list = pages_list
| where: "parent", page.title
| where_exp: "item", "item.grand_parent == page.parent" -%}
{%- if page.child_nav_order == 'desc' or page.child_nav_order == 'reversed' -%}
{%- assign toc_list = toc_list | reverse -%}
{%- endif -%}
{%- endif -%}
{%- endif -%}
================================================
FILE: _includes/nav_footer_custom.html
================================================
================================================
FILE: _includes/search_placeholder_custom.html
================================================
Search {{site.title}}
================================================
FILE: _includes/title.html
================================================
{% if site.logo %}
<div class="site-logo"></div>
{% else %}
{{ site.title }}
{% endif %}
================================================
FILE: _includes/toc_heading_custom.html
================================================
<h2 class="text-delta">Table of contents</h2>
================================================
FILE: _includes/vendor/anchor_headings.html
================================================
{% capture headingsWorkspace %}
{% comment %}
Copyright (c) 2018 Vladimir "allejo" Jimenez
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.
{% endcomment %}
{% comment %}
Version 1.0.12
https://github.com/allejo/jekyll-anchor-headings
"Be the pull request you wish to see in the world." ~Ben Balter
Usage:
{% include anchor_headings.html html=content anchorBody="#" %}
Parameters:
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
Optional Parameters:
* beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
* headerAttrs (string) : '' - Any custom HTML attributes that will be added to the heading tag; you may NOT use `id`;
the `%heading%` and `%html_id%` placeholders are available
* anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title`;
the `%heading%` and `%html_id%` placeholders are available
* anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
* anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
* anchorTitle (string) : '' - The `title` attribute that will be used for anchors
* h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
* h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
* bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
* bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
* generateId (true) : false - Set to true if a header without id should generate an id to use.
Output:
The original HTML with the addition of anchors inside of all of the h1-h6 headings.
{% endcomment %}
{% assign minHeader = include.h_min | default: 1 %}
{% assign maxHeader = include.h_max | default: 6 %}
{% assign beforeHeading = include.beforeHeading %}
{% assign headerAttrs = include.headerAttrs %}
{% assign nodes = include.html | split: '<h' %}
{% capture edited_headings %}{% endcapture %}
{% for _node in nodes %}
{% capture node %}{{ _node | strip }}{% endcapture %}
{% if node == "" %}
{% continue %}
{% endif %}
{% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %}
{% assign headerLevel = nextChar | times: 1 %}
<!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's see if we need to fix it -->
{% if headerLevel == 0 %}
<!-- Split up the node based on closing angle brackets and get the first one. -->
{% assign firstChunk = node | split: '>' | first %}
<!-- If the first chunk does NOT contain a '<', that means we've broken another HTML tag that starts with 'h' -->
{% unless firstChunk contains '<' %}
{% capture node %}<h{{ node }}{% endcapture %}
{% endunless %}
{% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %}
{% continue %}
{% endif %}
{% capture _closingTag %}</h{{ headerLevel }}>{% endcapture %}
{% assign _workspace = node | split: _closingTag %}
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
{% assign escaped_header = header | strip_html | strip %}
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
{% assign _html_class = _classWorkspace[0] %}
{% if _html_class contains "no_anchor" %}
{% assign skip_anchor = true %}
{% else %}
{% assign skip_anchor = false %}
{% endif %}
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
{% if _idWorkspace[1] %}
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
{% assign html_id = _idWorkspace[0] %}
{% elsif include.generateId %}
<!-- If the header did not have an id we create one. -->
{% assign html_id = escaped_header | slugify %}
{% if html_id == "" %}
{% assign html_id = false %}
{% endif %}
{% capture headerAttrs %}{{ headerAttrs }} id="%html_id%"{% endcapture %}
{% endif %}
<!-- Build the anchor to inject for our heading -->
{% capture anchor %}{% endcapture %}
{% if skip_anchor == false and html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
{% if headerAttrs %}
{% capture _hAttrToStrip %}{{ _hAttrToStrip | split: '>' | first }} {{ headerAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}>{% endcapture %}
{% endif %}
{% capture anchor %}href="#{{ html_id }}"{% endcapture %}
{% if include.anchorClass %}
{% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
{% endif %}
{% if include.anchorTitle %}
{% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', escaped_header }}"{% endcapture %}
{% endif %}
{% if include.anchorAttrs %}
{% capture anchor %}{{ anchor }} {{ include.anchorAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}{% endcapture %}
{% endif %}
{% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', escaped_header | default: '' }}</a>{% endcapture %}
<!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it -->
{% if beforeHeading %}
{% capture anchor %}{{ anchor }} {% endcapture %}
{% else %}
{% capture anchor %} {{ anchor }}{% endcapture %}
{% endif %}
{% endif %}
{% capture new_heading %}
<h{{ _hAttrToStrip }}
{{ include.bodyPrefix }}
{% if beforeHeading %}
{{ anchor }}{{ header }}
{% else %}
{{ header }}{{ anchor }}
{% endif %}
{{ include.bodySuffix }}
</h{{ headerLevel }}>
{% endcapture %}
<!--
If we have content after the `</hX>` tag, then we'll want to append that here so we don't lost any content.
-->
{% assign chunkCount = _workspace | size %}
{% if chunkCount > 1 %}
{% capture new_heading %}{{ new_heading }}{{ _workspace | last }}{% endcapture %}
{% endif %}
{% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
{% endfor %}
{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}
================================================
FILE: _layouts/about.html
================================================
---
layout: default
---
{{ content }}
================================================
FILE: _layouts/default.html
================================================
---
layout: table_wrappers
---
<!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
<a class="skip-to-main" href="#main-content">Skip to main content</a>
{% include icons/icons.html %}
{% include components/sidebar.html %}
<div class="main" id="top">
{% include components/header.html %}
<div id="main-content-wrap" class="main-content-wrap">
{% include components/breadcrumbs.html %}
<div id="main-content" class="main-content" role="main">
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
{% include components/children_nav.html toc_list=toc_list %}
{% endif %}
{% include components/footer.html %}
</div>
</div>
{% if site.search_enabled != false %}
{% include components/search_footer.html %}
{% endif %}
</div>
{% if site.mermaid %}
{% include components/mermaid.html %}
{% endif %}
</body>
</html>
================================================
FILE: _layouts/home.html
================================================
---
layout: default
---
{{ content }}
================================================
FILE: _layouts/minimal.html
================================================
---
layout: table_wrappers
---
<!DOCTYPE html>
<html lang="{{ site.lang | default: 'en-US' }}">
{% include head.html %}
<body>
<a class="skip-to-main" href="#main-content">Skip to main content</a>
{% include icons/icons.html %}
{% comment %}
This is a bandaid fix to properly render breadcrumbs; as of now, there is some variable leakage between the sidebar component (which computes parents, grandparents) and the breadcrumbs component. We plan to remove this in a future release to deduplicate code.
For more context, see https://github.com/just-the-docs/just-the-docs/pull/1058#discussion_r1057014053
{% endcomment %}
{% capture nav %}
{% assign pages_top_size = site.html_pages
| where_exp:"item", "item.title != nil"
| where_exp:"item", "item.parent == nil"
| where_exp:"item", "item.nav_exclude != true"
| size %}
{% if pages_top_size > 0 %}
{% include nav.html pages=site.html_pages key=nil %}
{% endif %}
{% if site.just_the_docs.collections %}
{% assign collections_size = site.just_the_docs.collections | size %}
{% for collection_entry in site.just_the_docs.collections %}
{% assign collection_key = collection_entry[0] %}
{% assign collection_value = collection_entry[1] %}
{% assign collection = site[collection_key] %}
{% if collection_value.nav_exclude != true %}
{% include nav.html pages=collection key=collection_key %}
{% endif %}
{% endfor %}
{% endif %}
{% endcapture %}
<div id="main-content-wrap" class="main-content-wrap" id="top">
{% include components/breadcrumbs.html %}
<div id="main-content" class="main-content" role="main">
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#svg-link\"></use></svg>" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% if page.has_children == true and page.has_toc != false %}
{% include components/children_nav.html toc_list=toc_list %}
{% endif %}
{% include components/footer.html %}
</div>
</div>
{% if site.mermaid %}
{% include components/mermaid.html %}
{% endif %}
</body>
</html>
================================================
FILE: _layouts/page.html
================================================
---
layout: default
---
{{ content }}
================================================
FILE: _layouts/post.html
================================================
---
layout: default
---
{{ content }}
================================================
FILE: _layouts/table_wrappers.html
================================================
---
layout: vendor/compress
---
{% assign content_ = content | replace: '<table', '<div class="table-wrapper"><table' %}
{% assign content_ = content_ | replace: '</table>', '</table></div>' %}
{{ content_ }}
================================================
FILE: _layouts/vendor/compress.html
================================================
---
# Jekyll layout that compresses HTML
# v3.1.0
# http://jch.penibelst.de/
# © 2014–2015 Anatol Broder
# MIT License
---
{% capture _LINE_FEED %}
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
================================================
FILE: _sass/base.scss
================================================
// Base element style overrides
// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id
* {
box-sizing: border-box;
}
html {
@include fs-4;
scroll-behavior: smooth;
}
body {
font-family: $body-font-family;
font-size: inherit;
line-height: $body-line-height;
color: $body-text-color;
/*background-color: #1b1a1c;*/
background-color: #ffffff;
overflow-wrap: break-word;
}
ol,
ul,
dl,
pre,
address,
blockquote,
table,
div,
hr,
form,
fieldset,
noscript .table-wrapper {
margin-top: 0;
}
h1,
h2,
h3,
h4,
h5,
h6,
#toctitle {
margin-top: 0;
margin-bottom: 1em;
font-weight: 500;
line-height: $body-heading-line-height;
color: $body-heading-color;
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
a {
color: $link-color;
text-decoration: none;
}
a:not([class]) {
text-decoration: underline;
text-decoration-color: $border-color;
text-underline-offset: 2px;
&:hover {
text-decoration-color: rgba($link-color, 0.45);
}
}
code {
font-family: $mono-font-family;
font-size: 0.75em;
line-height: $body-line-height;
}
figure,
pre {
margin: 0;
}
li {
margin: 0.25em 0;
}
img {
max-width: 100%;
height: auto;
}
hr {
height: 1px;
padding: 0;
margin: $sp-6 0;
background-color: $border-color;
border: 0;
}
// adds a GitHub-style sidebar to blockquotes
blockquote {
margin: 10px 0;
// resets user-agent stylesheets for blockquotes
margin-block-start: 0;
margin-inline-start: 0;
padding-left: 15px;
border-left: 3px solid $border-color;
}
================================================
FILE: _sass/buttons.scss
================================================
// Buttons and things that look like buttons
// stylelint-disable color-named
.btn {
display: inline-block;
box-sizing: border-box;
padding: 0.3em 1em;
margin: 0;
font-family: inherit;
font-size: inherit;
font-weight: 500;
line-height: 1.5;
color: $link-color;
text-decoration: none;
vertical-align: baseline;
cursor: pointer;
background-color: $base-button-color;
border-width: 0;
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
appearance: none;
&:focus {
text-decoration: none;
outline: none;
box-shadow: 0 0 0 3px rgba(blue, 0.25);
}
&:focus:hover,
&.selected:focus {
box-shadow: 0 0 0 3px rgba(blue, 0.25);
}
&:hover,
&.zeroclipboard-is-hover {
color: darken($link-color, 2%);
}
&:hover,
&:active,
&.zeroclipboard-is-hover,
&.zeroclipboard-is-active {
text-decoration: none;
background-color: darken($base-button-color, 1%);
}
&:active,
&.selected,
&.zeroclipboard-is-active {
background-color: darken($base-button-color, 3%);
background-image: none;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
&.selected:hover {
background-color: darken(#dcdcdc, 5%);
}
&:disabled,
&.disabled {
&,
&:hover {
color: rgba(102, 102, 102, 0.5);
cursor: default;
background-color: rgba(229, 229, 229, 0.5);
background-image: none;
box-shadow: none;
}
}
}
.btn-outline {
color: $link-color;
background: transparent;
box-shadow: inset 0 0 0 2px $grey-lt-300;
&:hover,
&:active,
&.zeroclipboard-is-hover,
&.zeroclipboard-is-active {
color: darken($link-color, 4%);
text-decoration: none;
background-color: transparent;
box-shadow: inset 0 0 0 3px $grey-lt-300;
}
&:focus {
text-decoration: none;
outline: none;
box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);
}
&:focus:hover,
&.selected:focus {
box-shadow: inset 0 0 0 2px $grey-dk-100;
}
}
.btn-primary {
@include btn-color($white, $btn-primary-color);
}
.btn-purple {
@include btn-color($white, $purple-100);
}
.btn-blue {
@include btn-color($white, $blue-000);
}
.btn-green {
@include btn-color($white, $green-100);
}
================================================
FILE: _sass/code.scss
================================================
// Code and syntax highlighting
// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty
// {% raw %}
// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.
:not(pre, figure) {
& > code {
padding: 0.2em 0.15em;
font-weight: 400;
background-color: $code-background-color;
border: $border $border-color;
border-radius: $border-radius;
}
}
// Avoid appearance of dark border around visited code links in Safari
a:visited code {
border-color: $border-color;
}
// Content structure for highlighted code blocks using fences or Liquid
//
// ```[LANG]...```, no kramdown line_numbers:
// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code
//
// ```[LANG]...```, kramdown line_numbers = true:
// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code
// > div.table-wrapper > table.rouge-table > tbody > tr
// > td.rouge-gutter.gl > pre.lineno
// | td.rouge-code > pre
//
// {% highlight LANG %}...{% endhighlight %}:
// figure.highlight > pre > code.language-LANG
//
// {% highlight LANG linenos %}...{% endhighlight %}:
// figure.highlight > pre > code.language-LANG
// > div.table-wrapper > table.rouge-table > tbody > tr
// > td.gutter.gl > pre.lineno
// | td.code > pre
//
// ----...---- (AsciiDoc)
// div.listingblock > div.content > pre.rouge.highlight
//
// fix_linenos removes the outermost pre when it encloses table.rouge-table
//
// See docs/index-test.md for some tests.
//
// No kramdown line_numbers: fences and Liquid highlighting look the same.
// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?
// ```[LANG]...```
// or in AsciiDoc:
//
// ----
// ...
// ----
// the code may appear with 3 different types:
// container \ case: default case, code with line number, code with html rendering
// top level: div.highlighter-rouge, figure.highlight, figure.highlight
// second level: div.highlight, div.table-wrapper, pre.highlight
// third level: pre.highlight, td.code, absent
// last level: code, pre, code (optionality)
// highlighter level: span, span, span
// the spacing are only in the second level for case 1, 3 and in the third level for case 2
// in AsciiDoc, there is a parent container that contains optionally a title and the content.
// select top level container
div.highlighter-rouge,
div.listingblock > div.content,
figure.highlight {
margin-top: 0;
margin-bottom: $sp-3;
background-color: $code-background-color;
border-radius: $border-radius;
box-shadow: none;
-webkit-overflow-scrolling: touch;
position: relative;
padding: 0;
// copy button (or other button)
// the button appear only when there is a hover on the code or focus on button
> button {
width: $sp-3;
opacity: 0;
position: absolute;
top: 0;
right: 0;
border: $sp-3 solid $code-background-color;
background-color: $code-background-color;
color: $body-text-color;
box-sizing: content-box;
svg {
fill: $body-text-color;
}
&:active {
text-decoration: none;
outline: none;
opacity: 1;
}
&:focus {
opacity: 1;
}
}
// the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button
&:hover {
> button {
cursor: copy;
opacity: 1;
}
}
}
// setting the spacing and scrollbar on the second level for the first case
// remove all space on the second and third level
// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc
@mixin scroll-and-spacing($code-div, $pre-select) {
#{$code-div} {
overflow-x: auto;
padding: $sp-3;
margin: 0;
border: 0;
}
#{$pre-select},
code {
padding: 0;
margin: 0;
border: 0;
}
}
// for Markdown
div.highlighter-rouge {
@include scroll-and-spacing("div.highlight", "pre.highlight");
}
// for AsciiDoc. we also need to fix the margins for its parent container.
div.listingblock {
@include scroll-and-spacing("div.content", "div.content > pre");
margin-top: 0;
margin-bottom: $sp-3;
}
// {% highlight LANG %}...{% endhighlight %},
// {% highlight LANG linenos %}...{% endhighlight %}:
// setting the spacing and scrollbar on the second level for the thirt case
// the css rule are apply only to the last code enviroment
// setting the scroolbar
figure.highlight {
pre,
:not(pre) > code {
overflow-x: auto;
padding: $sp-3;
margin: 0;
border: 0;
}
}
// ```[LANG]...```, kramdown line_numbers = true,
// {% highlight LANG linenos %}...{% endhighlight %}:
// setting the spacing and scrollbar on the thirt level for the second case
.highlight .table-wrapper {
padding: $sp-3 0;
margin: 0;
border: 0;
box-shadow: none;
td,
pre {
@include fs-2;
min-width: 0;
padding: 0;
background-color: $code-background-color;
border: 0;
}
td.gl {
width: 1em;
padding-right: $sp-3;
padding-left: $sp-3;
}
pre {
margin: 0;
line-height: 2;
}
}
// Code examples: html render of a code
.code-example,
.listingblock > .title {
padding: $sp-3;
margin-bottom: $sp-3;
overflow: auto;
border: 1px solid $border-color;
border-radius: $border-radius;
+ .highlighter-rouge,
+ .sectionbody .listingblock,
+ .content,
+ figure.highlight {
position: relative;
margin-top: -$sp-4;
border-right: 1px solid $border-color;
border-bottom: 1px solid $border-color;
border-left: 1px solid $border-color;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
}
// Mermaid diagram code blocks should be left unstyled.
code.language-mermaid {
padding: 0;
background-color: inherit;
border: 0;
}
// Override OneDarkJekyll Colors for Code Blocks
.highlight,
pre.highlight {
background: $code-background-color; // Code Background
// For Backwards Compatibility Before $code-linenumber-color was added
@if variable-exists(code-linenumber-color) {
color: $code-linenumber-color; // Code Line Numbers
} @else {
color: $body-text-color; // Code Line Numbers
}
}
// Override OneDarkJekyll Colors for Code Blocks
.highlight pre {
background: $code-background-color; // Code Background
}
// {% endraw %}
================================================
FILE: _sass/color_schemes/dark.scss
================================================
$body-background-color: $grey-dk-300;
$body-heading-color: $grey-lt-000;
$body-text-color: $grey-lt-300;
$link-color: $blue-000;
$nav-child-link-color: $grey-dk-000;
$sidebar-color: $grey-dk-300;
$base-button-color: $grey-dk-250;
$btn-primary-color: $blue-200;
$code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid
$code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid
$feedback-color: darken($sidebar-color, 3%);
$table-background-color: $grey-dk-250;
$search-background-color: $grey-dk-250;
$search-result-preview-color: $grey-dk-000;
$border-color: $grey-dk-200;
@import "./vendor/OneDarkJekyll/syntax"; // this is the one-dark-vivid atom syntax theme
================================================
FILE: _sass/color_schemes/legacy_light.scss
================================================
// Moved from _sass/code.scss
.highlight .c {
color: #586e75;
} // comment //
.highlight .err {
color: #93a1a1;
} // error //
.highlight .g {
color: #93a1a1;
} // generic //
.highlight .k {
color: #859900;
} // keyword //
.highlight .l {
color: #93a1a1;
} // literal //
.highlight .n {
color: #93a1a1;
} // name //
.highlight .o {
color: #859900;
} // operator //
.highlight .x {
color: #cb4b16;
} // other //
.highlight .p {
color: #93a1a1;
} // punctuation //
.highlight .cm {
color: #586e75;
} // comment.multiline //
.highlight .cp {
color: #859900;
} // comment.preproc //
.highlight .c1 {
color: #586e75;
} // comment.single //
.highlight .cs {
color: #859900;
} // comment.special //
.highlight .gd {
color: #2aa198;
} // generic.deleted //
.highlight .ge {
font-style: italic;
color: #93a1a1;
} // generic.emph //
.highlight .gr {
color: #dc322f;
} // generic.error //
.highlight .gh {
color: #cb4b16;
} // generic.heading //
.highlight .gi {
color: #859900;
} // generic.inserted //
.highlight .go {
color: #93a1a1;
} // generic.output //
.highlight .gp {
color: #93a1a1;
} // generic.prompt //
.highlight .gs {
font-weight: bold;
color: #93a1a1;
} // generic.strong //
.highlight .gu {
color: #cb4b16;
} // generic.subheading //
.highlight .gt {
color: #93a1a1;
} // generic.traceback //
.highlight .kc {
color: #cb4b16;
} // keyword.constant //
.highlight .kd {
color: #268bd2;
} // keyword.declaration //
.highlight .kn {
color: #859900;
} // keyword.namespace //
.highlight .kp {
color: #859900;
} // keyword.pseudo //
.highlight .kr {
color: #268bd2;
} // keyword.reserved //
.highlight .kt {
color: #dc322f;
} // keyword.type //
.highlight .ld {
color: #93a1a1;
} // literal.date //
.highlight .m {
color: #2aa198;
} // literal.number //
.highlight .s {
color: #2aa198;
} // literal.string //
.highlight .na {
color: #555;
} // name.attribute //
.highlight .nb {
color: #b58900;
} // name.builtin //
.highlight .nc {
color: #268bd2;
} // name.class //
.highlight .no {
color: #cb4b16;
} // name.constant //
.highlight .nd {
color: #268bd2;
} // name.decorator //
.highlight .ni {
color: #cb4b16;
} // name.entity //
.highlight .ne {
color: #cb4b16;
} // name.exception //
.highlight .nf {
color: #268bd2;
} // name.function //
.highlight .nl {
color: #555;
} // name.label //
.highlight .nn {
color: #93a1a1;
} // name.namespace //
.highlight .nx {
color: #555;
} // name.other //
.highlight .py {
color: #93a1a1;
} // name.property //
.highlight .nt {
color: #268bd2;
} // name.tag //
.highlight .nv {
color: #268bd2;
} // name.variable //
.highlight .ow {
color: #859900;
} // operator.word //
.highlight .w {
color: #93a1a1;
} // text.whitespace //
.highlight .mf {
color: #2aa198;
} // literal.number.float //
.highlight .mh {
color: #2aa198;
} // literal.number.hex //
.highlight .mi {
color: #2aa198;
} // literal.number.integer //
.highlight .mo {
color: #2aa198;
} // literal.number.oct //
.highlight .sb {
color: #586e75;
} // literal.string.backtick //
.highlight .sc {
color: #2aa198;
} // literal.string.char //
.highlight .sd {
color: #93a1a1;
} // literal.string.doc //
.highlight .s2 {
color: #2aa198;
} // literal.string.double //
.highlight .se {
color: #cb4b16;
} // literal.string.escape //
.highlight .sh {
color: #93a1a1;
} // literal.string.heredoc //
.highlight .si {
color: #2aa198;
} // literal.string.interpol //
.highlight .sx {
color: #2aa198;
} // literal.string.other //
.highlight .sr {
color: #dc322f;
} // literal.string.regex //
.highlight .s1 {
color: #2aa198;
} // literal.string.single //
.highlight .ss {
color: #2aa198;
} // literal.string.symbol //
.highlight .bp {
color: #268bd2;
} // name.builtin.pseudo //
.highlight .vc {
color: #268bd2;
} // name.variable.class //
.highlight .vg {
color: #268bd2;
} // name.variable.global //
.highlight .vi {
color: #268bd2;
} // name.variable.instance //
.highlight .il {
color: #2aa198;
} // literal.number.integer.long //
================================================
FILE: _sass/color_schemes/light.scss
================================================
$body-background-color: $white !default;
$body-heading-color: $grey-dk-300 !default;
$body-text-color: $grey-dk-100 !default;
$link-color: $purple-000 !default;
$nav-child-link-color: $grey-dk-100 !default;
$sidebar-color: $grey-lt-000 !default;
$base-button-color: #f7f7f7 !default;
$btn-primary-color: $purple-100 !default;
$code-background-color: $grey-lt-000 !default;
$feedback-color: darken($sidebar-color, 3%) !default;
$table-background-color: $white !default;
$search-background-color: $white !default;
$search-result-preview-color: $grey-dk-000 !default;
@import "./vendor/OneLightJekyll/syntax";
================================================
FILE: _sass/content.scss
================================================
@charset "UTF-8";
// Styles for rendered markdown in the .main-content container
// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id
.main-content {
line-height: $content-line-height;
ol,
ul,
dl,
pre,
address,
blockquote,
.table-wrapper {
margin-top: 0.5em;
}
a {
overflow: hidden;
text-overflow: ellipsis;
}
ul,
ol {
padding-left: 1.5em;
}
li {
.highlight {
margin-top: $sp-1;
}
}
ol {
list-style-type: none;
counter-reset: step-counter;
> li {
position: relative;
&::before {
position: absolute;
top: 0.2em;
left: -1.6em;
color: $grey-dk-000;
content: counter(step-counter);
counter-increment: step-counter;
@include fs-3;
@include mq(sm) {
top: 0.11em;
}
}
ol {
counter-reset: sub-counter;
> li {
&::before {
content: counter(sub-counter, lower-alpha);
counter-increment: sub-counter;
}
}
}
}
}
ul {
list-style: none;
> li {
&::before {
position: absolute;
margin-left: -1.4em;
color: $grey-dk-000;
content: "•";
}
}
}
.task-list-item {
&::before {
content: "";
}
}
.task-list-item-checkbox {
margin-right: 0.6em;
margin-left: -1.4em;
// The same margin-left is used above for ul > li::before
}
hr + * {
margin-top: 0;
}
h1:first-of-type {
margin-top: 0.5em;
}
dl {
display: grid;
grid-template: auto / 10em 1fr;
}
dt,
dd {
margin: 0.25em 0;
}
dt {
grid-column: 1;
font-weight: 500;
text-align: right;
&::after {
content: ":";
}
}
dd {
grid-column: 2;
margin-bottom: 0;
margin-left: 1em;
blockquote,
div,
dl,
dt,
h1,
h2,
h3,
h4,
h5,
h6,
li,
ol,
p,
pre,
table,
ul,
.table-wrapper {
&:first-child {
margin-top: 0;
}
}
}
dd,
ol,
ul {
dl:first-child {
dt:first-child,
dd:nth-child(2) {
margin-top: 0;
}
}
}
.anchor-heading {
position: absolute;
right: -$sp-4;
width: $sp-5;
height: 100%;
padding-right: $sp-1;
padding-left: $sp-1;
overflow: visible;
@include mq(md) {
right: auto;
left: -$sp-5;
}
svg {
display: inline-block;
width: 100%;
height: 100%;
color: $link-color;
visibility: hidden;
}
}
.anchor-heading:hover,
.anchor-heading:focus,
h1:hover > .anchor-heading,
h2:hover > .anchor-heading,
h3:hover > .anchor-heading,
h4:hover > .anchor-heading,
h5:hover > .anchor-heading,
h6:hover > .anchor-heading {
svg {
visibility: visible;
}
}
summary {
cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
#toctitle {
position: relative;
margin-top: 1.5em;
margin-bottom: 0.25em;
+ table,
+ .table-wrapper,
+ .code-example,
+ .highlighter-rouge,
+ .sectionbody .listingblock {
margin-top: 1em;
}
+ p:not(.label) {
margin-top: 0;
}
}
> h1:first-child,
> h2:first-child,
> h3:first-child,
> h4:first-child,
> h5:first-child,
> h6:first-child,
> .sect1:first-child > h2,
> .sect2:first-child > h3,
> .sect3:first-child > h4,
> .sect4:first-child > h5,
> .sect5:first-child > h6 {
margin-top: $sp-2;
}
}
================================================
FILE: _sass/custom/custom.scss
================================================
// custom SCSS (or CSS) goes here
================================================
FILE: _sass/custom/setup.scss
================================================
// custom setup code goes here
================================================
FILE: _sass/labels.scss
================================================
// Labels (not the form kind)
.label,
.label-blue {
display: inline-block;
padding: 0.16em 0.56em;
margin-right: $sp-2;
margin-left: $sp-2;
color: $white;
text-transform: uppercase;
vertical-align: middle;
background-color: $blue-100;
@include fs-2;
border-radius: 12px;
}
.label-green {
background-color: $green-200;
}
.label-purple {
background-color: $purple-100;
}
.label-red {
background-color: $red-200;
}
.label-yellow {
color: $grey-dk-200;
background-color: $yellow-200;
}
================================================
FILE: _sass/layout.scss
================================================
// The basic two column layout
.side-bar {
z-index: 0;
display: flex;
flex-wrap: wrap;
/*background-color: #1b1a1c;*/
background-color: #ffffff;
@include mq(md) {
flex-flow: column nowrap;
position: fixed;
width: $nav-width-md;
height: 100%;
border-right: $border $border-color;
align-items: flex-end;
}
@include mq(lg) {
width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});
min-width: $nav-width;
}
}
.main {
@include mq(md) {
position: relative;
max-width: $content-width;
margin-left: $nav-width-md;
}
@include mq(lg) {
// stylelint-disable function-name-case
// disable for Max(), we want to use the CSS max() function
margin-left: Max(
#{$nav-width},
calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})
);
// stylelint-enable function-name-case
}
}
.main-content-wrap {
@include container;
padding-top: $gutter-spacing-sm;
padding-bottom: $gutter-spacing-sm;
@include mq(md) {
padding-top: $gutter-spacing;
padding-bottom: $gutter-spacing;
}
}
.main-header {
z-index: 0;
display: none;
background-color: #1b1a1c;
@include mq(md) {
display: flex;
justify-content: space-between;
height: $header-height;
background-color: $body-background-color;
border-bottom: $border $border-color;
}
&.nav-open {
display: block;
@include mq(md) {
display: flex;
}
}
}
.site-nav,
.site-header,
.site-footer {
width: 100%;
@include mq(lg) {
width: $nav-width;
}
}
.site-nav {
display: none;
&.nav-open {
display: block;
}
@include mq(md) {
display: block;
padding-top: $sp-8;
padding-bottom: $gutter-spacing-sm;
overflow-y: auto;
flex: 1 1 auto;
}
}
.site-header {
display: flex;
min-height: $header-height;
align-items: center;
@include mq(md) {
height: $header-height;
max-height: $header-height;
border-bottom: $border $border-color;
}
}
.site-title {
@include container;
flex-grow: 1;
display: flex;
height: 100%;
padding-right: 1rem !important;
padding-left: 1rem !important;
align-items: center;
padding-top: $sp-3;
padding-bottom: $sp-3;
color: $body-heading-color;
@include fs-6;
@include mq(md) {
padding-top: $sp-2;
padding-bottom: $sp-2;
}
}
@if variable-exists(logo) {
.site-logo {
width: 100%;
height: 100%;
background-image: url($logo);
background-repeat: no-repeat;
background-position: left center;
background-size: contain;
}
}
.site-button {
display: flex;
height: 100%;
padding: $gutter-spacing-sm;
align-items: center;
}
@include mq(md) {
.site-header .site-button {
display: none;
}
}
.site-title:hover {
background-image: linear-gradient(
-90deg,
rgba($feedback-color, 1) 0%,
rgba($feedback-color, 0.8) 80%,
rgba($feedback-color, 0) 100%
);
}
.site-button:hover {
background-image: linear-gradient(
-90deg,
rgba($feedback-color, 1) 0%,
rgba($feedback-color, 0.8) 100%
);
}
// stylelint-disable selector-max-type
body {
position: relative;
padding-bottom: $sp-10;
overflow-y: scroll;
@include mq(md) {
position: static;
padding-bottom: 0;
}
}
// stylelint-enable selector-max-type
.site-footer {
@include container;
position: absolute;
bottom: 0;
left: 0;
padding-top: $sp-4;
padding-bottom: $sp-4;
color: $grey-dk-000;
@include fs-2;
@include mq(md) {
position: static;
justify-self: end;
}
}
.icon {
width: $sp-5;
height: $sp-5;
color: $link-color;
}
================================================
FILE: _sass/modules.scss
================================================
// Import external dependencies
@import "./vendor/normalize.scss/normalize";
// Modules
@import "./base";
@import "./layout";
@import "./content";
@import "./navigation";
@import "./typography";
@import "./labels";
@import "./buttons";
@import "./search";
@import "./tables";
@import "./code";
@import "./utilities/utilities";
@import "./print";
@import "./skiptomain";
================================================
FILE: _sass/navigation.scss
================================================
// Main nav, breadcrumb, etc...
// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity
.nav-list {
padding: 0;
margin-top: 0;
margin-bottom: 0;
list-style: none;
.nav-list-item {
@include fs-4;
position: relative;
margin: 0;
@include mq(md) {
@include fs-3;
}
.nav-list-link {
display: block;
min-height: $nav-list-item-height-sm;
padding-top: $sp-1;
padding-bottom: $sp-1;
line-height: #{$nav-list-item-height-sm - 2 * $sp-1};
@if $nav-list-expander-right {
padding-right: $nav-list-item-height-sm;
padding-left: $gutter-spacing-sm;
} @else {
padding-right: $gutter-spacing-sm;
padding-left: $nav-list-item-height-sm;
}
@include mq(md) {
min-height: $nav-list-item-height;
line-height: #{$nav-list-item-height - 2 * $sp-1};
@if $nav-list-expander-right {
padding-right: $nav-list-item-height;
padding-left: $gutter-spacing;
} @else {
padding-right: $gutter-spacing;
padding-left: $nav-list-item-height;
}
}
&.external > svg {
width: $sp-4;
height: $sp-4;
vertical-align: text-bottom;
}
&.active {
font-weight: 600;
text-decoration: none;
}
&:hover,
&.active {
background-image: linear-gradient(
-90deg,
rgba($feedback-color, 1) 0%,
rgba($feedback-color, 0.8) 80%,
rgba($feedback-color, 0) 100%
);
}
}
.nav-list-expander {
position: absolute;
@if $nav-list-expander-right {
right: 0;
}
width: $nav-list-item-height-sm;
height: $nav-list-item-height-sm;
padding: #{$nav-list-item-height-sm * 0.25};
color: $link-color;
@include mq(md) {
width: $nav-list-item-height;
height: $nav-list-item-height;
padding: #{$nav-list-item-height * 0.25};
}
&:hover {
background-image: linear-gradient(
-90deg,
rgba($feedback-color, 1) 0%,
rgba($feedback-color, 0.8) 100%
);
}
@if $nav-list-expander-right {
svg {
transform: rotate(90deg);
}
}
}
> .nav-list {
display: none;
padding-left: $sp-3;
list-style: none;
.nav-list-item {
position: relative;
.nav-list-link {
color: $nav-child-link-color;
}
.nav-list-expander {
color: $nav-child-link-color;
}
}
}
&.active {
> .nav-list-expander svg {
@if $nav-list-expander-right {
transform: rotate(-90deg);
} @else {
transform: rotate(90deg);
}
}
> .nav-list {
display: block;
}
}
}
}
.nav-category {
padding: $sp-2 $gutter-spacing-sm;
font-weight: 600;
text-align: start;
text-transform: uppercase;
border-bottom: $border $border-color;
@include fs-2;
@include mq(md) {
padding: $sp-2 $gutter-spacing;
margin-top: $gutter-spacing-sm;
text-align: start;
&:first-child {
margin-top: 0;
}
}
}
.nav-list.nav-category-list {
> .nav-list-item {
margin: 0;
> .nav-list {
padding: 0;
> .nav-list-item {
> .nav-list-link {
color: $link-color;
}
> .nav-list-expander {
color: $link-color;
}
}
}
}
}
// Aux nav
.aux-nav {
height: 100%;
overflow-x: auto;
@include fs-2;
.aux-nav-list {
display: flex;
height: 100%;
padding: 0;
margin: 0;
list-style: none;
}
.aux-nav-list-item {
display: inline-block;
height: 100%;
padding: 0;
margin: 0;
}
@include mq(md) {
padding-right: $gutter-spacing-sm;
}
}
// Breadcrumb nav
.breadcrumb-nav {
@include mq(md) {
margin-top: -$sp-4;
}
}
.breadcrumb-nav-list {
padding-left: 0;
margin-bottom: $sp-3;
list-style: none;
}
.breadcrumb-nav-list-item {
display: table-cell;
@include fs-2;
&::before {
display: none;
}
&::after {
display: inline-block;
margin-right: $sp-2;
margin-left: $sp-2;
color: $grey-dk-000;
content: "/";
}
&:last-child {
&::after {
content: "";
}
}
}
================================================
FILE: _sass/print.scss
================================================
// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type
@media print {
.site-footer,
.site-button,
#edit-this-page,
#back-to-top,
.site-nav,
.main-header {
display: none !important;
}
.side-bar {
width: 100%;
height: auto;
border-right: 0 !important;
}
.site-header {
border-bottom: 1px solid $border-color;
}
.site-title {
font-size: $root-font-size !important;
font-weight: 700 !important;
}
.text-small {
font-size: 8pt !important;
}
pre.highlight {
border: 1px solid $border-color;
}
.main {
max-width: none;
margin-left: 0;
}
}
================================================
FILE: _sass/search.scss
================================================
// Search input and autocomplete
.search {
position: relative;
z-index: 2;
flex-grow: 1;
height: $sp-10;
padding: $sp-2;
transition: padding linear #{$transition-duration * 0.5};
@include mq(md) {
position: relative !important;
width: auto !important;
height: 100% !important;
padding: 0;
transition: none;
}
}
.search-input-wrap {
position: relative;
z-index: 1;
height: $sp-8;
overflow: hidden;
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
transition: height linear #{$transition-duration * 0.5};
@include mq(md) {
position: absolute;
width: 100%;
max-width: $search-results-width;
height: 100% !important;
border-radius: 0;
box-shadow: none;
transition: width ease $transition-duration;
}
}
.search-input {
position: absolute;
width: 100%;
height: 100%;
padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};
font-size: 16px;
color: $body-text-color;
background-color: #1b1a1c;
border-top: 0;
border-right: 0;
border-bottom: 0;
border-left: 0;
border-radius: 0;
@include mq(md) {
padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};
font-size: 14px;
background-color: $body-background-color;
transition: padding-left linear #{$transition-duration * 0.5};
}
&:focus {
outline: 0;
+ .search-label .search-icon {
color: $link-color;
}
}
}
.search-label {
position: absolute;
display: flex;
height: 100%;
padding-left: $gutter-spacing-sm;
@include mq(md) {
padding-left: $gutter-spacing;
transition: padding-left linear #{$transition-duration * 0.5};
}
.search-icon {
width: #{$sp-4 * 1.2};
height: #{$sp-4 * 1.2};
align-self: center;
color: $grey-dk-000;
}
}
.search-results {
position: absolute;
left: 0;
display: none;
width: 100%;
max-height: calc(100% - #{$sp-10});
overflow-y: auto;
background-color: $search-background-color;
border-bottom-right-radius: $border-radius;
border-bottom-left-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
@include mq(md) {
top: 100%;
width: $search-results-width;
max-height: calc(100vh - 200%) !important;
}
}
.search-results-list {
padding-left: 0;
margin-bottom: $sp-1;
list-style: none;
@include fs-4;
@include mq(md) {
@include fs-3;
}
}
.search-results-list-item {
padding: 0;
margin: 0;
}
.search-result {
display: block;
padding: $sp-1 $sp-3;
&:hover,
&.active {
background-color: $feedback-color;
}
}
.search-result-title {
display: block;
padding-top: $sp-2;
padding-bottom: $sp-2;
@include mq(sm) {
display: inline-block;
width: 40%;
padding-right: $sp-2;
vertical-align: top;
}
}
.search-result-doc {
display: flex;
align-items: center;
word-wrap: break-word;
&.search-result-doc-parent {
opacity: 0.5;
@include fs-3;
@include mq(md) {
@include fs-2;
}
}
.search-result-icon {
width: $sp-4;
height: $sp-4;
margin-right: $sp-2;
color: $link-color;
flex-shrink: 0;
}
.search-result-doc-title {
overflow: auto;
}
}
.search-result-section {
margin-left: #{$sp-4 + $sp-2};
word-wrap: break-word;
}
.search-result-rel-url {
display: block;
margin-left: #{$sp-4 + $sp-2};
overflow: hidden;
color: $search-result-preview-color;
text-overflow: ellipsis;
white-space: nowrap;
@include fs-1;
}
.search-result-previews {
display: block;
padding-top: $sp-2;
padding-bottom: $sp-2;
padding-left: $sp-4;
margin-left: $sp-2;
color: $search-result-preview-color;
word-wrap: break-word;
border-left: $border;
border-left-color: $border-color;
@include fs-2;
@include mq(sm) {
display: inline-block;
width: 60%;
padding-left: $sp-2;
margin-left: 0;
vertical-align: top;
}
}
.search-result-preview + .search-result-preview {
margin-top: $sp-1;
}
.search-result-highlight {
font-weight: bold;
}
.search-no-result {
padding: $sp-2 $sp-3;
@include fs-3;
}
.search-button {
position: fixed;
right: $sp-4;
bottom: $sp-4;
display: flex;
width: $sp-9;
height: $sp-9;
background-color: $search-background-color;
border: 1px solid rgba($link-color, 0.3);
border-radius: #{$sp-9 * 0.5};
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
align-items: center;
justify-content: center;
}
.search-overlay {
position: fixed;
top: 0;
left: 0;
z-index: 1;
width: 0;
height: 0;
background-color: rgba(0, 0, 0, 0.3);
opacity: 0;
transition: opacity ease $transition-duration, width 0s $transition-duration,
height 0s $transition-duration;
}
.search-active {
.search {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 0;
}
.search-input-wrap {
height: $sp-10;
border-radius: 0;
@include mq(md) {
width: $search-results-width;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
}
}
.search-input {
background-color: $search-background-color;
@include mq(md) {
padding-left: 2.3rem;
}
}
.search-label {
@include mq(md) {
padding-left: 0.6rem;
}
}
.search-results {
display: block;
}
.search-overlay {
width: 100%;
height: 100%;
opacity: 1;
transition: opacity ease $transition-duration, width 0s, height 0s;
}
@include mq(md) {
.main {
position: fixed;
right: 0;
left: 0;
}
}
.main-header {
padding-top: $sp-10;
@include mq(md) {
padding-top: 0;
}
}
}
================================================
FILE: _sass/skiptomain.scss
================================================
// Skipnav
// Skip to main content
a.skip-to-main {
left: -999px;
position: absolute;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
z-index: -999;
}
a.skip-to-main:focus,
a.skip-to-main:active {
color: $link-color;
background-color: $body-background-color;
left: auto;
top: auto;
width: 30%;
height: auto;
overflow: auto;
margin: 10px 35%;
padding: 5px;
border-radius: 15px;
border: 4px solid $btn-primary-color;
text-align: center;
font-size: 1.2em;
z-index: 999;
}
================================================
FILE: _sass/support/_functions.scss
================================================
@function rem($size, $unit: "") {
$rem-size: $size / $root-font-size;
@if $unit == false {
@return #{$rem-size};
} @else {
@return #{$rem-size}rem;
}
}
================================================
FILE: _sass/support/_variables.scss
================================================
// Typography
$body-font-family: system-ui, -apple-system, blinkmacsystemfont, "Segoe UI",
roboto, "Helvetica Neue", arial, sans-serif !default;
$mono-font-family: "SFMono-Regular", menlo, consolas, monospace !default;
$root-font-size: 16px !default; // Base font-size for rems
$body-line-height: 1.4 !default;
$content-line-height: 1.6 !default;
$body-heading-line-height: 1.25 !default;
// Font size
// `-sm` suffix is the size at the small (and above) media query
$font-size-1: 9px !default;
$font-size-1-sm: 10px !default;
$font-size-2: 11px !default; // h4 - uppercased!, h6 not uppercased, text-small
$font-size-3: 12px !default; // h5
$font-size-4: 14px !default;
$font-size-5: 16px !default; // h3
$font-size-6: 18px !default; // h2
$font-size-7: 20px !default;
$font-size-8: 32px !default; // h1
$font-size-9: 36px !default;
$font-size-10: 42px !default;
$font-size-10-sm: 48px !default;
// Colors
$white: #fff !default;
$grey-dk-000: #959396 !default;
$grey-dk-100: #5c5962 !default;
$grey-dk-200: #44434d !default;
$grey-dk-250: #302d36 !default;
$grey-dk-300: #1b1a1c !default;
$grey-lt-000: #f5f6fa !default;
$grey-lt-100: #eeebee !default;
$grey-lt-200: #ecebed !default;
$grey-lt-300: #e6e1e8 !default;
$purple-000: #7253ed !default;
$purple-100: #5e41d0 !default;
$purple-200: #4e26af !default;
$purple-300: #381885 !default;
$blue-000: #2c84fa !default;
$blue-100: #2869e6 !default;
$blue-200: #264caf !default;
$blue-300: #183385 !default;
$green-000: #41d693 !default;
$green-100: #11b584 !default;
$green-200: #009c7b !default;
$green-300: #026e57 !default;
$yellow-000: #ffeb82 !default;
$yellow-100: #fadf50 !default;
$yellow-200: #f7d12e !default;
$yellow-300: #e7af06 !default;
$red-000: #f77e7e !default;
$red-100: #f96e65 !default;
$red-200: #e94c4c !default;
$red-300: #dd2e2e !default;
// Spacing
$spacing-unit: 1rem; // 1rem == 16px
$spacers: (
sp-0: 0,
sp-1: $spacing-unit * 0.25,
sp-2: $spacing-unit * 0.5,
sp-3: $spacing-unit * 0.75,
sp-4: $spacing-unit,
sp-5: $spacing-unit * 1.5,
sp-6: $spacing-unit * 2,
sp-7: $spacing-unit * 2.5,
sp-8: $spacing-unit * 3,
sp-9: $spacing-unit * 3.5,
sp-10: $spacing-unit * 4,
) !default;
$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px
$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px
$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px
$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px
$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px
$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px
$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px
$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px
$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px
$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px
// Borders
$border: 1px solid !default;
$border-radius: 4px !default;
$border-color: $grey-lt-100 !default;
// Grid system
$gutter-spacing: $sp-6 !default;
$gutter-spacing-sm: $sp-4 !default;
$nav-width: 264px !default;
$nav-width-md: 248px !default;
$nav-list-item-height: $sp-6 !default;
$nav-list-item-height-sm: $sp-8 !default;
$nav-list-expander-right: true;
$content-width: 800px !default;
$header-height: 60px !default;
$search-results-width: $content-width - $nav-width !default;
$transition-duration: 400ms;
// Media queries in pixels
$media-queries: (
xs: 320px,
sm: 500px,
md: $content-width,
lg: $content-width + $nav-width,
xl: 1400px,
) !default;
================================================
FILE: _sass/support/mixins/_buttons.scss
================================================
// Colored button
@mixin btn-color($fg, $bg) {
color: $fg;
background-color: darken($bg, 2%);
background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);
&:hover,
&.zeroclipboard-is-hover {
color: $fg;
background-color: darken($bg, 4%);
background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));
}
&:active,
&.selected,
&.zeroclipboard-is-active {
background-color: darken($bg, 5%);
background-image: none;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
&.selected:hover {
background-color: darken($bg, 10%);
}
}
================================================
FILE: _sass/support/mixins/_layout.scss
================================================
// Media query
// Media query mixin
// Usage:
// @include mq(md) {
// ..medium and up styles
// }
@mixin mq($name) {
// Retrieves the value from the key
$value: map-get($media-queries, $name);
// If the key exists in the map
@if $value {
// Prints a media query based on the value
@media (min-width: rem($value)) {
@content;
}
} @else {
@warn "No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.";
}
}
// Responsive container
@mixin container {
padding-right: $gutter-spacing-sm;
padding-left: $gutter-spacing-sm;
@include mq(md) {
padding-right: $gutter-spacing;
padding-left: $gutter-spacing;
}
}
================================================
FILE: _sass/support/mixins/_typography.scss
================================================
@mixin fs-1 {
font-size: $font-size-1 !important;
@include mq(sm) {
font-size: $font-size-1-sm !important;
}
}
@mixin fs-2 {
font-size: $font-size-2 !important;
@include mq(sm) {
font-size: $font-size-3 !important;
}
}
@mixin fs-3 {
font-size: $font-size-3 !important;
@include mq(sm) {
font-size: $font-size-4 !important;
}
}
@mixin fs-4 {
font-size: $font-size-4 !important;
@include mq(sm) {
font-size: $font-size-5 !important;
}
}
@mixin fs-5 {
font-size: $font-size-5 !important;
@include mq(sm) {
font-size: $font-size-6 !important;
}
}
@mixin fs-6 {
font-size: $font-size-6 !important;
@include mq(sm) {
font-size: $font-size-7 !important;
line-height: $body-heading-line-height;
}
}
@mixin fs-7 {
font-size: $font-size-7 !important;
line-height: $body-heading-line-height;
@include mq(sm) {
font-size: $font-size-8 !important;
}
}
@mixin fs-8 {
font-size: $font-size-8 !important;
line-height: $body-heading-line-height;
@include mq(sm) {
font-size: $font-size-9 !important;
}
}
@mixin fs-9 {
font-size: $font-size-9 !important;
line-height: $body-heading-line-height;
@include mq(sm) {
font-size: $font-size-10 !important;
}
}
@mixin fs-10 {
font-size: $font-size-10 !important;
line-height: $body-heading-line-height;
@include mq(sm) {
font-size: $font-size-10-sm !important;
}
}
================================================
FILE: _sass/support/mixins/mixins.scss
================================================
@import "./layout";
@import "./buttons";
@import "./typography";
================================================
FILE: _sass/support/support.scss
================================================
@import "./variables";
@import "./functions";
@import "./mixins/mixins";
================================================
FILE: _sass/tables.scss
================================================
// Tables
// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type
.table-wrapper {
display: block;
width: 100%;
max-width: 100%;
margin-bottom: $sp-5;
overflow-x: auto;
border-radius: $border-radius;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
}
table {
display: table;
min-width: 100%;
border-collapse: separate;
}
th,
td {
@include fs-3;
min-width: 120px;
padding: $sp-2 $sp-3;
background-color: $table-background-color;
border-bottom: $border rgba($border-color, 0.5);
border-left: $border $border-color;
&:first-of-type {
border-left: 0;
}
}
tbody {
tr {
&:last-of-type {
th,
td {
border-bottom: 0;
}
td {
padding-bottom: $sp-3;
}
}
}
}
thead {
th {
border-bottom: $border $border-color;
}
}
================================================
FILE: _sass/typography.scss
================================================
// Typography
// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id
h1,
.text-alpha {
@include fs-8;
font-weight: 300;
}
h2,
.text-beta,
#toctitle {
@include fs-6;
}
h3,
.text-gamma {
@include fs-5;
}
h4,
.text-delta {
@include fs-2;
font-weight: 400;
text-transform: uppercase;
letter-spacing: 0.1em;
}
h4 code {
text-transform: none;
}
h5,
.text-epsilon {
@include fs-3;
}
h6,
.text-zeta {
@include fs-2;
}
.text-small {
@include fs-2;
}
.text-mono {
font-family: $mono-font-family !important;
}
.text-left {
text-align: left !important;
}
.text-center {
text-align: center !important;
}
.text-right {
text-align: right !important;
}
================================================
FILE: _sass/utilities/_colors.scss
================================================
// Utility classes for colors
// Text colors
.text-grey-dk-000 {
color: $grey-dk-000 !important;
}
.text-grey-dk-100 {
color: $grey-dk-100 !important;
}
.text-grey-dk-200 {
color: $grey-dk-200 !important;
}
.text-grey-dk-250 {
color: $grey-dk-250 !important;
}
.text-grey-dk-300 {
color: $grey-dk-300 !important;
}
.text-grey-lt-000 {
color: $grey-lt-000 !important;
}
.text-grey-lt-100 {
color: $grey-lt-100 !important;
}
.text-grey-lt-200 {
color: $grey-lt-200 !important;
}
.text-grey-lt-300 {
color: $grey-lt-300 !important;
}
.text-blue-000 {
color: $blue-000 !important;
}
.text-blue-100 {
color: $blue-100 !important;
}
.text-blue-200 {
color: $blue-200 !important;
}
.text-blue-300 {
color: $blue-300 !important;
}
.text-green-000 {
color: $green-000 !important;
}
.text-green-100 {
color: $green-100 !important;
}
.text-green-200 {
color: $green-200 !important;
}
.text-green-300 {
color: $green-300 !important;
}
.text-purple-000 {
color: $purple-000 !important;
}
.text-purple-100 {
color: $purple-100 !important;
}
.text-purple-200 {
color: $purple-200 !important;
}
.text-purple-300 {
color: $purple-300 !important;
}
.text-yellow-000 {
color: $yellow-000 !important;
}
.text-yellow-100 {
color: $yellow-100 !important;
}
.text-yellow-200 {
color: $yellow-200 !important;
}
.text-yellow-300 {
color: $yellow-300 !important;
}
.text-red-000 {
color: $red-000 !important;
}
.text-red-100 {
color: $red-100 !important;
}
.text-red-200 {
color: $red-200 !important;
}
.text-red-300 {
color: $red-300 !important;
}
// Background colors
.bg-grey-dk-000 {
background-color: $grey-dk-000 !important;
}
.bg-grey-dk-100 {
background-color: $grey-dk-100 !important;
}
.bg-grey-dk-200 {
background-color: $grey-dk-200 !important;
}
.bg-grey-dk-250 {
background-color: $grey-dk-250 !important;
}
.bg-grey-dk-300 {
background-color: $grey-dk-300 !important;
}
.bg-grey-lt-000 {
background-color: $grey-lt-000 !important;
}
.bg-grey-lt-100 {
background-color: $grey-lt-100 !important;
}
.bg-grey-lt-200 {
background-color: $grey-lt-200 !important;
}
.bg-grey-lt-300 {
background-color: $grey-lt-300 !important;
}
.bg-blue-000 {
background-color: $blue-000 !important;
}
.bg-blue-100 {
background-color: $blue-100 !important;
}
.bg-blue-200 {
background-color: $blue-200 !important;
}
.bg-blue-300 {
background-color: $blue-300 !important;
}
.bg-green-000 {
background-color: $green-000 !important;
}
.bg-green-100 {
background-color: $green-100 !important;
}
.bg-green-200 {
background-color: $green-200 !important;
}
.bg-green-300 {
background-color: $green-300 !important;
}
.bg-purple-000 {
background-color: $purple-000 !important;
}
.bg-purple-100 {
background-color: $purple-100 !important;
}
.bg-purple-200 {
background-color: $purple-200 !important;
}
.bg-purple-300 {
background-color: $purple-300 !important;
}
.bg-yellow-000 {
background-color: $yellow-000 !important;
}
.bg-yellow-100 {
background-color: $yellow-100 !important;
}
.bg-yellow-200 {
background-color: $yellow-200 !important;
}
.bg-yellow-300 {
background-color: $yellow-300 !important;
}
.bg-red-000 {
background-color: $red-000 !important;
}
.bg-red-100 {
background-color: $red-100 !important;
}
.bg-red-200 {
background-color: $red-200 !important;
}
.bg-red-300 {
background-color: $red-300 !important;
}
================================================
FILE: _sass/utilities/_layout.scss
================================================
// Utility classes for layout
// Display
.d-block {
display: block !important;
}
.d-flex {
display: flex !important;
}
.d-inline {
display: inline !important;
}
.d-inline-block {
display: inline-block !important;
}
.d-none {
display: none !important;
}
@each $media-query in map-keys($media-queries) {
@for $i from 1 through length($spacers) {
@include mq($media-query) {
$size: #{map-get($spacers, sp-#{$i - 1})};
$scale: #{$i - 1};
// .d-sm-block, .d-md-none, .d-lg-inline
.d-#{$media-query}-block {
display: block !important;
}
.d-#{$media-query}-flex {
display: flex !important;
}
.d-#{$media-query}-inline {
display: inline !important;
}
.d-#{$media-query}-inline-block {
display: inline-block !important;
}
.d-#{$media-query}-none {
display: none !important;
}
}
}
}
// Horizontal alignment
.float-left {
float: left !important;
}
.float-right {
float: right !important;
}
.flex-justify-start {
justify-content: flex-start !important;
}
.flex-justify-end {
justify-content: flex-end !important;
}
.flex-justify-between {
justify-content: space-between !important;
}
.flex-justify-around {
justify-content: space-around !important;
}
// Vertical alignment
.v-align-baseline {
vertical-align: baseline !important;
}
.v-align-bottom {
vertical-align: bottom !important;
}
.v-align-middle {
vertical-align: middle !important;
}
.v-align-text-bottom {
vertical-align: text-bottom !important;
}
.v-align-text-top {
vertical-align: text-top !important;
}
.v-align-top {
vertical-align: top !important;
}
================================================
FILE: _sass/utilities/_lists.scss
================================================
// Utility classes for lists
// stylelint-disable selector-max-type
.list-style-none {
padding: 0 !important;
margin: 0 !important;
list-style: none !important;
li {
&::before {
display: none !important;
}
}
}
================================================
FILE: _sass/utilities/_spacing.scss
================================================
// Utility classes for margins and padding
// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before
// Margin spacer utilities
.mx-auto {
margin-right: auto !important;
margin-left: auto !important;
}
@for $i from 1 through length($spacers) {
$size: #{map-get($spacers, sp-#{$i - 1})};
$scale: #{$i - 1};
// .m-0, .m-1, .m-2...
.m-#{$scale} {
margin: #{$size} !important;
}
.mt-#{$scale} {
margin-top: #{$size} !important;
}
.mr-#{$scale} {
margin-right: #{$size} !important;
}
.mb-#{$scale} {
margin-bottom: #{$size} !important;
}
.ml-#{$scale} {
margin-left: #{$size} !important;
}
.mx-#{$scale} {
margin-right: #{$size} !important;
margin-left: #{$size} !important;
}
.my-#{$scale} {
margin-top: #{$size} !important;
margin-bottom: #{$size} !important;
}
.mxn-#{$scale} {
margin-right: -#{$size} !important;
margin-left: -#{$size} !important;
}
.mx-#{$scale}-auto {
margin-right: auto !important;
margin-left: auto !important;
}
}
@each $media-query in map-keys($media-queries) {
@for $i from 1 through length($spacers) {
@include mq($media-query) {
$size: #{map-get($spacers, sp-#{$i - 1})};
$scale: #{$i - 1};
// .m-sm-0, .m-md-1, .m-lg-2...
.m-#{$media-query}-#{$scale} {
margin: #{$size} !important;
}
.mt-#{$media-query}-#{$scale} {
margin-top: #{$size} !important;
}
.mr-#{$media-query}-#{$scale} {
margin-right: #{$size} !important;
}
.mb-#{$media-query}-#{$scale} {
margin-bottom: #{$size} !important;
}
.ml-#{$media-query}-#{$scale} {
margin-left: #{$size} !important;
}
.mx-#{$media-query}-#{$scale} {
margin-right: #{$size} !important;
margin-left: #{$size} !important;
}
.my-#{$media-query}-#{$scale} {
margin-top: #{$size} !important;
margin-bottom: #{$size} !important;
}
.mxn-#{$media-query}-#{$scale} {
margin-right: -#{$size} !important;
margin-left: -#{$size} !important;
}
}
}
}
// Padding spacer utilities
@for $i from 1 through length($spacers) {
$size: #{map-get($spacers, sp-#{$i - 1})};
$scale: #{$i - 1};
// .p-0, .p-1, .p-2...
.p-#{$scale} {
padding: #{$size} !important;
}
.pt-#{$scale} {
padding-top: #{$size} !important;
}
.pr-#{$scale} {
padding-right: #{$size} !important;
}
.pb-#{$scale} {
padding-bottom: #{$size} !important;
}
.pl-#{$scale} {
padding-left: #{$size} !important;
}
.px-#{$scale} {
padding-right: #{$size} !important;
padding-left: #{$size} !important;
}
.py-#{$scale} {
padding-top: #{$size} !important;
padding-bottom: #{$size} !important;
}
}
@each $media-query in map-keys($media-queries) {
@include mq($media-query) {
@for $i from 1 through length($spacers) {
$size: #{map-get($spacers, sp-#{$i - 1})};
$scale: #{$i - 1};
// .p-sm-0, .p-md-1, .p-lg-2...
.p-#{$media-query}-#{$scale} {
padding: #{$size} !important;
}
.pt-#{$media-query}-#{$scale} {
padding-top: #{$size} !important;
}
.pr-#{$media-query}-#{$scale} {
padding-right: #{$size} !important;
}
.pb-#{$media-query}-#{$scale} {
padding-bottom: #{$size} !important;
}
.pl-#{$media-query}-#{$scale} {
padding-left: #{$size} !important;
}
.px-#{$media-query}-#{$scale} {
padding-right: #{$size} !important;
padding-left: #{$size} !important;
}
.py-#{$media-query}-#{$scale} {
padding-top: #{$size} !important;
padding-bottom: #{$size} !important;
}
}
}
}
================================================
FILE: _sass/utilities/_typography.scss
================================================
// Utility classes for typography
.fs-1 {
@include fs-1;
}
.fs-2 {
@include fs-2;
}
.fs-3 {
@include fs-3;
}
.fs-4 {
@include fs-4;
}
.fs-5 {
@include fs-5;
}
.fs-6 {
@include fs-6;
}
.fs-7 {
@include fs-7;
}
.fs-8 {
@include fs-8;
}
.fs-9 {
@include fs-9;
}
.fs-10 {
@include fs-10;
}
.fw-300 {
font-weight: 300 !important;
}
.fw-400 {
font-weight: 400 !important;
}
.fw-500 {
font-weight: 500 !important;
}
.fw-700 {
font-weight: 700 !important;
}
.lh-0 {
line-height: 0 !important;
}
.lh-default {
line-height: $body-line-height;
}
.lh-tight {
line-height: $body-heading-line-height;
}
.ls-5 {
letter-spacing: 0.05em !important;
}
.ls-10 {
letter-spacing: 0.1em !important;
}
.ls-0 {
letter-spacing: 0 !important;
}
.text-uppercase {
text-transform: uppercase !important;
}
================================================
FILE: _sass/utilities/utilities.scss
================================================
@import "./colors";
@import "./layout";
@import "./typography";
@import "./lists";
@import "./spacing";
================================================
FILE: _sass/vendor/OneDarkJekyll/LICENSE
================================================
MIT License
Copyright (c) 2016 Mihály Gyöngyösi
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.
================================================
FILE: _sass/vendor/OneDarkJekyll/syntax.scss
================================================
// Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme
.highlight,
pre.highlight {
background: #31343f;
color: #dee2f7;
}
.highlight pre {
background: #31343f;
}
.highlight .hll {
background: #31343f;
}
.highlight .c {
color: #63677e;
font-style: italic;
}
.highlight .err {
color: #960050;
background-color: #1e0010;
}
.highlight .k {
color: #e19ef5;
}
.highlight .l {
color: #a3eea0;
}
.highlight .n {
color: #dee2f7;
}
.highlight .o {
color: #dee2f7;
}
.highlight .p {
color: #dee2f7;
}
.highlight .cm {
color: #63677e;
font-style: italic;
}
.highlight .cp {
color: #63677e;
font-style: italic;
}
.highlight .c1 {
color: #63677e;
font-style: italic;
}
.highlight .cs {
color: #63677e;
font-style: italic;
}
.highlight .ge {
font-style: italic;
}
.highlight .gs {
font-weight: 700;
}
.highlight .kc {
color: #e19ef5;
}
.highlight .kd {
color: #e19ef5;
}
.highlight .kn {
color: #e19ef5;
}
.highlight .kp {
color: #e19ef5;
}
.highlight .kr {
color: #e19ef5;
}
.highlight .kt {
color: #e19ef5;
}
.highlight .ld {
color: #a3eea0;
}
.highlight .m {
color: #eddc96;
}
.highlight .s {
color: #a3eea0;
}
.highlight .na {
color: #eddc96;
}
.highlight .nb {
color: #fdce68;
}
.highlight .nc {
color: #fdce68;
}
.highlight .no {
color: #fdce68;
}
.highlight .nd {
color: #fdce68;
}
.highlight .ni {
color: #fdce68;
}
.highlight .ne {
color: #fdce68;
}
.highlight .nf {
color: #dee2f7;
}
.highlight .nl {
color: #fdce68;
}
.highlight .nn {
color: #dee2f7;
}
.highlight .nx {
color: #dee2f7;
}
.highlight .py {
color: #fdce68;
}
.highlight .nt {
color: #f9867b;
}
.highlight .nv {
color: #fdce68;
}
.highlight .ow {
font-weight: 700;
}
.highlight .w {
color: #f8f8f2;
}
.highlight .mf {
color: #eddc96;
}
.highlight .mh {
color: #eddc96;
}
.highlight .mi {
color: #eddc96;
}
.highlight .mo {
color: #eddc96;
}
.highlight .sb {
color: #a3eea0;
}
.highlight .sc {
color: #a3eea0;
}
.highlight .sd {
color: #a3eea0;
}
.highlight .s2 {
color: #a3eea0;
}
.highlight .se {
color: #a3eea0;
}
.highlight .sh {
color: #a3eea0;
}
.highlight .si {
color: #a3eea0;
}
.highlight .sx {
color: #a3eea0;
}
.highlight .sr {
color: #7be2f9;
}
.highlight .s1 {
color: #a3eea0;
}
.highlight .ss {
color: #7be2f9;
}
.highlight .bp {
color: #fdce68;
}
.highlight .vc {
color: #fdce68;
}
.highlight .vg {
color: #fdce68;
}
.highlight .vi {
color: #f9867b;
}
.highlight .il {
color: #eddc96;
}
.highlight .gu {
color: #75715e;
}
.highlight .gd {
color: #f92672;
}
.highlight .gi {
color: #a6e22e;
}
================================================
FILE: _sass/vendor/OneLightJekyll/LICENSE
================================================
OneLightJekyll relies on two works: OneDarkJekyll, and Atom's One Light theme. This file contains the licensing for all the related software.
---
OneLightJekyll (https://github.com/just-the-docs/OneLightJekyll/blob/main/LICENSE)
MIT License
Copyright (c) 2023 Matthew Wang
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.
---
OneDarkJekyll (https://github.com/mgyongyosi/OneDarkJekyll/blob/master/LICENSE)
MIT License
Copyright (c) 2016 Mihály Gyöngyösi
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.
---
Atom One Light (https://github.com/atom/atom/blob/master/LICENSE.md)
Copyright (c) 2011-2022 GitHub Inc.
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.
================================================
FILE: _sass/vendor/OneLightJekyll/syntax.scss
================================================
// Generated with OneLightJekyll applied to Atom's One Light theme
.highlight,
pre.highlight {
background: #f9f9f9;
color: #383942;
}
.highlight pre {
background: #f9f9f9;
}
.highlight .hll {
background: #f9f9f9;
}
.highlight .c {
color: #9fa0a6;
font-style: italic;
}
.highlight .err {
color: #fff;
background-color: #e05151;
}
.highlight .k {
color: #a625a4;
}
.highlight .l {
color: #50a04f;
}
.highlight .n {
color: #383942;
}
.highlight .o {
color: #383942;
}
.highlight .p {
color: #383942;
}
.highlight .cm {
color: #9fa0a6;
font-style: italic;
}
.highlight .cp {
color: #9fa0a6;
font-style: italic;
}
.highlight .c1 {
color: #9fa0a6;
font-style: italic;
}
.highlight .cs {
color: #9fa0a6;
font-style: italic;
}
.highlight .ge {
font-style: italic;
}
.highlight .gs {
font-weight: 700;
}
.highlight .kc {
color: #a625a4;
}
.highlight .kd {
color: #a625a4;
}
.highlight .kn {
color: #a625a4;
}
.highlight .kp {
color: #a625a4;
}
.highlight .kr {
color: #a625a4;
}
.highlight .kt {
color: #a625a4;
}
.highlight .ld {
color: #50a04f;
}
.highlight .m {
color: #b66a00;
}
.highlight .s {
color: #50a04f;
}
.highlight .na {
color: #b66a00;
}
.highlight .nb {
color: #ca7601;
}
.highlight .nc {
color: #ca7601;
}
.highlight .no {
color: #ca7601;
}
.highlight .nd {
color: #ca7601;
}
.highlight .ni {
color: #ca7601;
}
.highlight .ne {
color: #ca7601;
}
.highlight .nf {
color: #383942;
}
.highlight .nl {
color: #ca7601;
}
.highlight .nn {
color: #383942;
}
.highlight .nx {
color: #383942;
}
.highlight .py {
color: #ca7601;
}
.highlight .nt {
color: #e35549;
}
.highlight .nv {
color: #ca7601;
}
.highlight .ow {
font-weight: 700;
}
.highlight .w {
color: #f8f8f2;
}
.highlight .mf {
color: #b66a00;
}
.highlight .mh {
color: #b66a00;
}
.highlight .mi {
color: #b66a00;
}
.highlight .mo {
color: #b66a00;
}
.highlight .sb {
color: #50a04f;
}
.highlight .sc {
color: #50a04f;
}
.highlight .sd {
color: #50a04f;
}
.highlight .s2 {
color: #50a04f;
}
.highlight .se {
color: #50a04f;
}
.highlight .sh {
color: #50a04f;
}
.highlight .si {
color: #50a04f;
}
.highlight .sx {
color: #50a04f;
}
.highlight .sr {
color: #0083bb;
}
.highlight .s1 {
color: #50a04f;
}
.highlight .ss {
color: #0083bb;
}
.highlight .bp {
color: #ca7601;
}
.highlight .vc {
color: #ca7601;
}
.highlight .vg {
color: #ca7601;
}
.highlight .vi {
color: #e35549;
}
.highlight .il {
color: #b66a00;
}
.highlight .gu {
color: #75715e;
}
.highlight .gd {
color: #e05151;
}
.highlight .gi {
color: #43d089;
}
.highlight .language-json .w + .s2 {
color: #e35549;
}
.highlight .language-json .kc {
color: #0083bb;
}
================================================
FILE: _sass/vendor/normalize.scss/README.md
================================================
# normalize.scss
Normalize.scss is an SCSS copy of [normalize.css](http://necolas.github.io/normalize.css), a customisable CSS file that makes browsers render all elements more consistently and in line with modern standards.
The [normalize.scss fork](https://github.com/guerrero/normalize.scss) of [normalize.css](http://necolas.github.io/normalize.css) was archived in 2014, and has not been updated since v0.1.0.
[View the normalize.css test file](http://necolas.github.io/normalize.css/latest/test.html)
================================================
FILE: _sass/vendor/normalize.scss/normalize.scss
================================================
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input {
/* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select {
/* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}
================================================
FILE: ads.txt
================================================
google.com, pub-4288225696268534, DIRECT, f08c47fec0942fa0
================================================
FILE: assets/css/just-the-docs-dark.scss
================================================
---
---
{% include css/just-the-docs.scss.liquid color_scheme="dark" %}
================================================
FILE: assets/css/just-the-docs-default.scss
================================================
---
---
{% if site.color_scheme and site.color_scheme != "nil" %}
{% assign color_scheme = site.color_scheme %}
{% else %}
{% assign color_scheme = "light" %}
{% endif %}
{% include css/just-the-docs.scss.liquid color_scheme=color_scheme %}
================================================
FILE: assets/css/just-the-docs-light.scss
================================================
---
---
{% include css/just-the-docs.scss.liquid color_scheme="light" %}
================================================
FILE: assets/images/arti.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:08:46.104Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="d9A2AN_lAQRYwrKy4R8W" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="323" y="142" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="312" y="169" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="341.68" y="238.5" as="sourcePoint" />
<mxPoint x="341.68" y="202.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-89" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="249" y="277.68" as="sourcePoint" />
<mxPoint x="295" y="277.68" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-91" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="312" y="261" width="74" height="34" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-92" value="<font style="font-size: 8px;">CI/CD</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="319" y="299.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-93" value="" style="image;sketch=0;aspect=fixed;html=1;points=[];align=center;fontSize=12;image=img/lib/mscae/App_Registrations.svg;" vertex="1" parent="1">
<mxGeometry x="189" y="261" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-94" value="<font style="font-size: 8px;">Artifact</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="186" y="305" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/change.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:13:11.261Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="nKH0BHqsxYZHesD0NVE0" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="252.5" y="155" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="241.5" y="182" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="271.18" y="254" as="sourcePoint" />
<mxPoint x="271.18" y="218" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-89" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#030303;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="249" y="277.68" as="sourcePoint" />
<mxPoint x="295" y="277.68" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-91" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="312" y="261" width="74" height="34" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-92" value="<font style="font-size: 8px;">CI/CD</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="319" y="299.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-94" value="<span style="font-size: 8px;">VMs</span>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="186" y="305" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-95" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="196.9" y="255.37000000000003" width="38.2" height="49.63" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-103" value="<font style="font-size: 8px;">Change on the fly</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="268" y="220" width="83" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/cicd-initial.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T12:33:26.141Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="lgQCHXX3T_01_PRmRjqU" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-2" value="CI/CD Pipeline" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="266" y="311" width="88" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="458" y="249" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="451" y="316" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="368" y="272" as="sourcePoint" />
<mxPoint x="438" y="272" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="457" y="148" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="446" y="187" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-11" value="" style="endArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="476.68" y="214" as="sourcePoint" />
<mxPoint x="476.68" y="242" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-17" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
<mxGeometry x="275" y="258" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-18" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="125" y="234" width="54.19" height="70.41" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-19" value="Infrastructure" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="108" y="311" width="88" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-20" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="196" y="276" as="sourcePoint" />
<mxPoint x="266" y="276" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-21" value="" style="endArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="b94HZelUpRPoaxA_aSND-8">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="486.68" y="224" as="sourcePoint" />
<mxPoint x="370" y="254" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/cred-key.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:02:17.431Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="o5LFR1TEvehNPCIzrLUP" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-78" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="118" y="246" width="275" height="102" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="323" y="143" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="312" y="170" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="341.68" y="238.5" as="sourcePoint" />
<mxPoint x="341.68" y="202.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-62" value="" style="sketch=0;outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.git_repository;" vertex="1" parent="1">
<mxGeometry x="331" y="256.5" width="30" height="39" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-66" value="<font style="font-size: 8px;">Find Secret</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="339" y="200" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-73" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
<mxGeometry x="225" y="265.5" width="74" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-74" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="142" y="259" width="37.4" height="48.6" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-75" value="<font style="font-size: 8px;">Git</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="307.6" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-76" value="<font style="font-size: 8px;">CI/CD</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="232" y="312" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-77" value="<font style="font-size: 8px;">VMs</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130.7" y="317" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/cred-serv.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:04:35.232Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="kVUb1YBrKKA7AI7z6j6G" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-78" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="121" y="152" width="275" height="95" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="331" y="58" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="85" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="347" y="148" as="sourcePoint" />
<mxPoint x="347" y="112" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-62" value="" style="sketch=0;outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.git_repository;fillColor=#000000;fontColor=#ffffff;strokeColor=#6D1F00;" vertex="1" parent="1">
<mxGeometry x="331" y="256.5" width="30" height="39" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-66" value="<font style="font-size: 8px;">Find Service Credential</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="349" y="115" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-73" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
<mxGeometry x="225" y="265.5" width="74" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-74" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="142" y="259" width="37.4" height="48.6" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-75" value="<font style="font-size: 8px;">Git</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="307.6" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-76" value="<font style="font-size: 8px;">CI/CD</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="232" y="312" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-77" value="<font style="font-size: 8px;">VMs</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130.7" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-79" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="331" y="167" width="28" height="28" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-80" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="344.68" y="239" as="sourcePoint" />
<mxPoint x="344.68" y="203" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-81" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="248" y="167" width="28" height="28" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-82" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="261.68" y="239" as="sourcePoint" />
<mxPoint x="261.68" y="203" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-85" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="146.7" y="167" width="28" height="28" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-86" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160.38" y="239" as="sourcePoint" />
<mxPoint x="160.38" y="203" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/crypto.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:19:36.201Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="EUsQxfvUvAR1T3BUAbhp" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-111" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="185" y="256.5" width="212" height="90.5" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="268" y="160" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="257" y="187" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-92" value="<font style="font-size: 8px;">Git<br></font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="322.5" y="308.15" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-104" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.git_repository;" vertex="1" parent="1">
<mxGeometry x="337" y="271.75" width="28" height="36.4" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-112" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
<mxGeometry x="259.5" y="284.15" width="63" height="24" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-113" value="<font style="font-size: 8px;">CI/CD<br></font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="261" y="308.15" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-114" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="209" y="278.48" width="27.2" height="35.34" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-115" value="<font style="font-size: 8px;">VMs<br></font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="192.6" y="308.15" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-116" value="<font style="font-size: 8px;">Crypto Mining</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#FF0000;" vertex="1" parent="1">
<mxGeometry x="287" y="217" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-118" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="286.68" y="251" as="sourcePoint" />
<mxPoint x="286.68" y="217" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/dependency.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T12:49:22.282Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="2ZX446PhNSQkIxxzApX-" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="339" y="134" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="328" y="161" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="357.68" y="237.5" as="sourcePoint" />
<mxPoint x="357.68" y="201.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-48" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=#b85450;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;fillColor=#f8cecc;shape=mxgraph.mscae.oms.dependency_monitor" vertex="1" parent="1">
<mxGeometry x="328" y="253.5" width="50" height="49" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-49" value="Dependency" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="323" y="313" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/depi.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:10:09.668Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="7juTTuaSjsQ8ihrHSPWN" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-96" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="165" y="245" width="232" height="88" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="323" y="142" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="312" y="169" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="341.68" y="238.5" as="sourcePoint" />
<mxPoint x="341.68" y="202.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-89" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#030303;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="249" y="277.68" as="sourcePoint" />
<mxPoint x="295" y="277.68" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-91" value="" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="312" y="261" width="74" height="34" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-92" value="<font style="font-size: 8px;">CI/CD</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="319" y="299.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-94" value="<span style="font-size: 8px;">VMs</span>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="186" y="305" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-95" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/storage/Datacenter_Server_Half_Rack_ToR.svg;" vertex="1" parent="1">
<mxGeometry x="196.9" y="255.37000000000003" width="38.2" height="49.63" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
================================================
FILE: assets/images/dos.drawio.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2023-06-02T13:16:47.993Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="UFekpWU8xWAg8nGmmeOX" version="21.2.9">
<diagram name="Page-1" id="hAYbas8VQYhL70THEBTF">
<mxGraphModel dx="586" dy="345" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="b94HZelUpRPoaxA_aSND-111" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="185" y="256.5" width="212" height="90.5" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-3" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1">
<mxGeometry x="488.5" y="256.5" width="43" height="43" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-4" value="Users" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="485" y="317" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="402" y="273" as="sourcePoint" />
<mxPoint x="472" y="273" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-7" value="" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.users;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="330" y="159" width="38" height="37" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-8" value="<font style="font-size: 8px;">Attacker</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="319" y="186" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="b94HZelUpRPoaxA_aSND-40" va
gitextract_kcmoh57o/ ├── .devcontainer/ │ ├── Dockerfile │ ├── base.Dockerfile │ ├── devcontainer.json │ └── post-create.sh ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── dependabot.yml │ └── workflows/ │ ├── ci.yml │ ├── deploy.yml │ ├── publish-gem.yml │ └── update_jekyll-anchor-heading.yml ├── .gitignore ├── .prettierignore ├── .vscode/ │ └── tasks.json ├── 404.html ├── CNAME ├── Dockerfile ├── Gemfile ├── README.md ├── Rakefile ├── _config.yml ├── _includes/ │ ├── components/ │ │ ├── aux_nav.html │ │ ├── breadcrumbs.html │ │ ├── children_nav.html │ │ ├── footer.html │ │ ├── header.html │ │ ├── mermaid.html │ │ ├── search_footer.html │ │ ├── search_header.html │ │ └── sidebar.html │ ├── css/ │ │ ├── callouts.scss.liquid │ │ ├── custom.scss.liquid │ │ └── just-the-docs.scss.liquid │ ├── fix_linenos.html │ ├── footer_custom.html │ ├── head.html │ ├── head_custom.html │ ├── header_custom.html │ ├── icons/ │ │ ├── code_copy.html │ │ ├── document.html │ │ ├── expand.html │ │ ├── external_link.html │ │ ├── icons.html │ │ ├── link.html │ │ ├── menu.html │ │ └── search.html │ ├── js/ │ │ └── custom.js │ ├── lunr/ │ │ ├── custom-data.json │ │ └── custom-index.js │ ├── mermaid_config.js │ ├── nav.html │ ├── nav_footer_custom.html │ ├── search_placeholder_custom.html │ ├── title.html │ ├── toc_heading_custom.html │ └── vendor/ │ └── anchor_headings.html ├── _layouts/ │ ├── about.html │ ├── default.html │ ├── home.html │ ├── minimal.html │ ├── page.html │ ├── post.html │ ├── table_wrappers.html │ └── vendor/ │ └── compress.html ├── _sass/ │ ├── base.scss │ ├── buttons.scss │ ├── code.scss │ ├── color_schemes/ │ │ ├── dark.scss │ │ ├── legacy_light.scss │ │ └── light.scss │ ├── content.scss │ ├── custom/ │ │ ├── custom.scss │ │ └── setup.scss │ ├── labels.scss │ ├── layout.scss │ ├── modules.scss │ ├── navigation.scss │ ├── print.scss │ ├── search.scss │ ├── skiptomain.scss │ ├── support/ │ │ ├── _functions.scss │ │ ├── _variables.scss │ │ ├── mixins/ │ │ │ ├── _buttons.scss │ │ │ ├── _layout.scss │ │ │ ├── _typography.scss │ │ │ └── mixins.scss │ │ └── support.scss │ ├── tables.scss │ ├── typography.scss │ ├── utilities/ │ │ ├── _colors.scss │ │ ├── _layout.scss │ │ ├── _lists.scss │ │ ├── _spacing.scss │ │ ├── _typography.scss │ │ └── utilities.scss │ └── vendor/ │ ├── OneDarkJekyll/ │ │ ├── LICENSE │ │ └── syntax.scss │ ├── OneLightJekyll/ │ │ ├── LICENSE │ │ └── syntax.scss │ └── normalize.scss/ │ ├── README.md │ └── normalize.scss ├── ads.txt ├── assets/ │ ├── css/ │ │ ├── just-the-docs-dark.scss │ │ ├── just-the-docs-default.scss │ │ └── just-the-docs-light.scss │ ├── images/ │ │ ├── arti.drawio.xml │ │ ├── change.drawio.xml │ │ ├── cicd-initial.drawio.xml │ │ ├── cred-key.drawio.xml │ │ ├── cred-serv.drawio.xml │ │ ├── crypto.drawio.xml │ │ ├── dependency.drawio.xml │ │ ├── depi.drawio.xml │ │ ├── dos.drawio.xml │ │ ├── endpoint.drawio.xml │ │ ├── ex-pip.drawio.xml │ │ ├── ex-pro.drawio.xml │ │ ├── github.drawio.xml │ │ ├── localdos.drawio.xml │ │ ├── monitoring.drawio.xml │ │ ├── per-arti.drawio.xml │ │ ├── per-img.drawio.xml │ │ ├── per-reg.drawio.xml │ │ ├── per-service.drawio.xml │ │ ├── ppe.drawio.xml │ │ ├── priv-cert.drawio.xml │ │ ├── priv-key.drawio.xml │ │ ├── priv-pro.drawio.xml │ │ ├── regi.drawio.xml │ │ ├── registry.drawio.xml │ │ ├── res-del.drawio.xml │ │ ├── resources.drawio.xml │ │ ├── scm.drawio.xml │ │ ├── unprotected.drawio.xml │ │ └── webhook.drawio.xml │ └── js/ │ ├── just-the-docs.js │ └── zzzz-search-data.json ├── bin/ │ └── just-the-docs ├── docker-compose.yml ├── docs/ │ ├── aisecops/ │ │ ├── aisecops.md │ │ ├── azure.md │ │ ├── biasandfairness.md │ │ └── driver.md │ ├── attacks/ │ │ ├── application.md │ │ ├── attacks.md │ │ ├── cloud.md │ │ ├── container.md │ │ └── pipeline.md │ ├── build-test/ │ │ ├── artifacts.md │ │ ├── build-test.md │ │ ├── configuration-management.md │ │ ├── dast.md │ │ ├── iast.md │ │ └── smoke-test.md │ ├── checklists/ │ │ ├── apache.md │ │ ├── argocd.md │ │ ├── auth0.md │ │ ├── aws.md │ │ ├── ceph.md │ │ ├── checklists.md │ │ ├── consul.md │ │ ├── couchdb.md │ │ ├── docker.md │ │ ├── ebpf.md │ │ ├── elasticsearch.md │ │ ├── etcd.md │ │ ├── git.md │ │ ├── gitlab.md │ │ ├── glusterfs.md │ │ ├── gradle.md │ │ ├── graphite.md │ │ ├── iis.md │ │ ├── jenkins.md │ │ ├── kubernetes.md │ │ ├── maven.md │ │ ├── memcached.md │ │ ├── mongodb.md │ │ ├── mysql.md │ │ ├── nginx.md │ │ ├── openshift.md │ │ ├── redis.md │ │ ├── saltstack.md │ │ ├── sbom.md │ │ ├── squid.md │ │ ├── terraform.md │ │ ├── tomcat.md │ │ ├── weblogic.md │ │ └── webservice │ ├── code/ │ │ ├── code.md │ │ ├── sast.md │ │ ├── sca.md │ │ └── secure-pipeline.md │ ├── mlsecops/ │ │ ├── azure.md │ │ ├── mlsecops.md │ │ └── modelrobustnessandadversarialattacks.md │ ├── model/ │ │ ├── model.md │ │ └── simple.md │ ├── operate/ │ │ ├── monitoring.md │ │ ├── operate.md │ │ └── virtual-patching.md │ ├── plan-develop/ │ │ ├── appsec.md │ │ ├── driver.md │ │ ├── methodology.md │ │ ├── plan-develop.md │ │ └── threats.md │ ├── privacy-policy/ │ │ └── privacy-policy.md │ ├── production/ │ │ ├── cloud.md │ │ ├── infrastructure.md │ │ ├── production.md │ │ ├── secrets-management.md │ │ ├── threat-intelligence.md │ │ └── vulnerability-assessment.md │ ├── resources/ │ │ └── resources.md │ ├── rules/ │ │ ├── android.md │ │ ├── c.md │ │ ├── cloudFormation.md │ │ ├── cpp.md │ │ ├── csharp.md │ │ ├── django.md │ │ ├── docker.md │ │ ├── go.md │ │ ├── java.md │ │ ├── kotlin.md │ │ ├── kubernetes.md │ │ ├── laravel.md │ │ ├── llm.md │ │ ├── nodejs.md │ │ ├── objectivec.md │ │ ├── php.md │ │ ├── python.md │ │ ├── rails.md │ │ ├── ruby.md │ │ ├── rules.md │ │ ├── scala.md │ │ ├── swift.md │ │ ├── terraform.md │ │ └── xml.md │ └── stories/ │ └── stories.md ├── fixtures/ │ ├── Gemfile-github-pages │ └── README.md ├── index.md ├── just-the-docs.gemspec ├── lib/ │ └── tasks/ │ └── search.rake └── package.json
SYMBOL INDEX (1 symbols across 1 files)
FILE: assets/js/just-the-docs.js
function searchLoaded (line 115) | function searchLoaded(index, docs) {
Condensed preview — 245 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,931K chars).
[
{
"path": ".devcontainer/Dockerfile",
"chars": 779,
"preview": "# [Choice] Debian OS version (use bullseye on local arm64/Apple Silicon): bullseye, buster\nARG VARIANT=bullseye\nFROM mcr"
},
{
"path": ".devcontainer/base.Dockerfile",
"chars": 1139,
"preview": "# [Choice] Debian OS version (use 2.7-bullseye on local arm64/Apple Silicon): 2.7-bullseye, 2.7-buster\nARG VARIANT=2.7-b"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 1216,
"preview": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:\n// https://github.co"
},
{
"path": ".devcontainer/post-create.sh",
"chars": 380,
"preview": "#!/bin/sh\n\n# Install the version of Bundler.\nif [ -f Gemfile.lock ] && grep \"BUNDLED WITH\" Gemfile.lock > /dev/null; the"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 835,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe the "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 202,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Ask a question\n url: https://github.com/just-the-docs/just-the-d"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 604,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
},
{
"path": ".github/dependabot.yml",
"chars": 270,
"preview": "version: 2\nupdates:\n- package-ecosystem: npm\n directory: \"/\"\n schedule:\n interval: daily\n time: \"10:00\"\n open-p"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1669,
"preview": "on:\n push:\n branches:\n - main\n pull_request:\n branches:\n - main\n\nname: CI\n\njobs:\n jekyll-build:\n n"
},
{
"path": ".github/workflows/deploy.yml",
"chars": 1853,
"preview": "# This workflow uses actions that are not certified by GitHub.\n# They are provided by a third-party and are governed by\n"
},
{
"path": ".github/workflows/publish-gem.yml",
"chars": 1142,
"preview": "name: Publish Ruby Gem\n\non:\n workflow_dispatch\n\njobs:\n build:\n name: Publish\n runs-on: ubuntu-latest\n\n steps:"
},
{
"path": ".github/workflows/update_jekyll-anchor-heading.yml",
"chars": 1558,
"preview": "name: Update Vendor plugin - jekyll-anchor-headings\non:\n # schedule:\n # # once per week\n # - cron: \"0 15 * * 0\"\n "
},
{
"path": ".gitignore",
"chars": 96,
"preview": "*.gem\n.bundle\n.ruby-version\n.jekyll-cache\n.sass-cache\n_site\nGemfile.lock\nnode_modules\n.DS_Store\n"
},
{
"path": ".prettierignore",
"chars": 281,
"preview": "package-lock.json\n_site\nassets/css/just-the-docs-default.scss\nassets/css/just-the-docs-light.scss\nassets/css/just-the-do"
},
{
"path": ".vscode/tasks.json",
"chars": 555,
"preview": "{\n // See https://go.microsoft.com/fwlink/?LinkId=733558\n // for the documentation about the tasks.json format\n \"vers"
},
{
"path": "404.html",
"chars": 352,
"preview": "---\nlayout: default\ntitle: 404\npermalink: /404\nnav_exclude: true\nsearch_exclude: true\n---\n\n<h1>Page not found</h1>\n\n<p>T"
},
{
"path": "CNAME",
"chars": 25,
"preview": "wiki.devsecopsguides.com\n"
},
{
"path": "Dockerfile",
"chars": 196,
"preview": "FROM ruby:2.7\n\nENV LC_ALL C.UTF-8\nENV LANG en_US.UTF-8\nENV LANGUAGE en_US.UTF-8\n\nWORKDIR /usr/src/app\n\nCOPY Gemfile just"
},
{
"path": "Gemfile",
"chars": 104,
"preview": "source \"https://rubygems.org\"\ngemspec\n\ngem \"jekyll-github-metadata\", \">= 2.15\"\n\ngem \"webrick\", \"~> 1.7\"\n"
},
{
"path": "README.md",
"chars": 2091,
"preview": "\n<p align=\"center\">\n <h1 align=\"center\">DevSecOps Guides</h1>\n <p align=\"center\">Comprehensive resource for integr"
},
{
"path": "Rakefile",
"chars": 49,
"preview": "Dir.glob('lib/tasks/*.rake').each {|r| import r}\n"
},
{
"path": "_config.yml",
"chars": 6008,
"preview": "# Welcome to Jekyll!\n#\n# This config file is meant for settings that affect your whole site, values\n# which you are expe"
},
{
"path": "_includes/components/aux_nav.html",
"chars": 411,
"preview": "<nav aria-label=\"Auxiliary\" class=\"aux-nav\">\n <ul class=\"aux-nav-list\">\n {% for link in site.aux_links %}\n <li "
},
{
"path": "_includes/components/breadcrumbs.html",
"chars": 680,
"preview": "{% unless page.url == \"/\" %}\n {% if page.parent %}\n <nav aria-label=\"Breadcrumb\" class=\"breadcrumb-nav\">\n <ol c"
},
{
"path": "_includes/components/children_nav.html",
"chars": 250,
"preview": "<hr>\n{% include toc_heading_custom.html %}\n<ul>\n {% for child in include.toc_list %}\n <li>\n <a href=\"{{ child.u"
},
{
"path": "_includes/components/footer.html",
"chars": 1418,
"preview": "{% capture footer_custom %}\n {%- include footer_custom.html -%}\n{% endcapture %}\n{% if footer_custom != \"\" or site.last"
},
{
"path": "_includes/components/header.html",
"chars": 298,
"preview": "<div id=\"main-header\" class=\"main-header\">\n {% if site.search_enabled != false %}\n {% include components/search_head"
},
{
"path": "_includes/components/mermaid.html",
"chars": 1531,
"preview": "{% comment %}\nThe complexity of this file comes from a breaking change in Mermaid v10; mermaid.init has been deprecated "
},
{
"path": "_includes/components/search_footer.html",
"chars": 218,
"preview": "{% if site.search.button %}\n<a href=\"#\" id=\"search-button\" class=\"search-button\">\n <svg viewBox=\"0 0 24 24\" class=\"icon"
},
{
"path": "_includes/components/search_header.html",
"chars": 582,
"preview": "{% capture search_placeholder %}{% include search_placeholder_custom.html %}{% endcapture %}\n\n<div class=\"search\">\n <di"
},
{
"path": "_includes/components/sidebar.html",
"chars": 3354,
"preview": "<div class=\"side-bar\">\n <div class=\"site-header\">\n <img style=\"width: 17%;\" src=\"/assets/images/devsecopsguides.png\""
},
{
"path": "_includes/css/callouts.scss.liquid",
"chars": 2681,
"preview": "{%- comment -%}\n {% include css/callouts.scss.liquid color_scheme = string %}\n produces SCSS for all the callouts in s"
},
{
"path": "_includes/css/custom.scss.liquid",
"chars": 27,
"preview": "@import \"./custom/custom\";\n"
},
{
"path": "_includes/css/just-the-docs.scss.liquid",
"chars": 408,
"preview": "{% if site.logo %}\n$logo: \"{{ site.logo | relative_url }}\";\n{% endif %}\n@import \"./support/support\";\n@import \"./custom/s"
},
{
"path": "_includes/fix_linenos.html",
"chars": 2219,
"preview": "{%- comment -%}\nThis file can be used to fix the HTML produced by Jekyll for highlighted\ncode with line numbers.\n\nIt wor"
},
{
"path": "_includes/footer_custom.html",
"chars": 121,
"preview": "{%- if site.footer_content -%}\n <p class=\"text-small text-grey-dk-100 mb-0\">{{ site.footer_content }}</p>\n{%- endif -%}"
},
{
"path": "_includes/head.html",
"chars": 1653,
"preview": "<head>\n <meta charset=\"UTF-8\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\">\n <meta name=\"google-adsense-acc"
},
{
"path": "_includes/head_custom.html",
"chars": 0,
"preview": ""
},
{
"path": "_includes/header_custom.html",
"chars": 0,
"preview": ""
},
{
"path": "_includes/icons/code_copy.html",
"chars": 1346,
"preview": "<!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->\n<symbol id=\"svg-copy\" viewBox="
},
{
"path": "_includes/icons/document.html",
"chars": 426,
"preview": "<symbol id=\"svg-doc\" viewBox=\"0 0 24 24\">\n <title>Document</title>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\""
},
{
"path": "_includes/icons/expand.html",
"chars": 365,
"preview": "<symbol id=\"svg-arrow-right\" viewBox=\"0 0 24 24\">\n <title>Expand</title>\n <svg xmlns=\"http://www.w3.org/2000/svg\" widt"
},
{
"path": "_includes/icons/external_link.html",
"chars": 540,
"preview": "<!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->\n<symbol id=\"svg-external-link"
},
{
"path": "_includes/icons/icons.html",
"chars": 432,
"preview": "<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"d-none\">\n {% include icons/link.html %}\n {% include icons/menu.html %}\n"
},
{
"path": "_includes/icons/link.html",
"chars": 457,
"preview": "<symbol id=\"svg-link\" viewBox=\"0 0 24 24\">\n <title>Link</title>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" he"
},
{
"path": "_includes/icons/menu.html",
"chars": 432,
"preview": "<symbol id=\"svg-menu\" viewBox=\"0 0 24 24\">\n <title>Menu</title>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" he"
},
{
"path": "_includes/icons/search.html",
"chars": 398,
"preview": "<symbol id=\"svg-search\" viewBox=\"0 0 24 24\">\n <title>Search</title>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24"
},
{
"path": "_includes/js/custom.js",
"chars": 0,
"preview": ""
},
{
"path": "_includes/lunr/custom-data.json",
"chars": 0,
"preview": ""
},
{
"path": "_includes/lunr/custom-index.js",
"chars": 0,
"preview": ""
},
{
"path": "_includes/mermaid_config.js",
"chars": 3,
"preview": "{}\n"
},
{
"path": "_includes/nav.html",
"chars": 11445,
"preview": "{%- comment -%}\n The `nav_order` values of pages affect the order in which they are shown in\n the navigation panel and"
},
{
"path": "_includes/nav_footer_custom.html",
"chars": 0,
"preview": ""
},
{
"path": "_includes/search_placeholder_custom.html",
"chars": 22,
"preview": "Search {{site.title}}\n"
},
{
"path": "_includes/title.html",
"chars": 93,
"preview": "{% if site.logo %}\n <div class=\"site-logo\"></div>\n{% else %}\n {{ site.title }}\n{% endif %}\n"
},
{
"path": "_includes/toc_heading_custom.html",
"chars": 46,
"preview": "<h2 class=\"text-delta\">Table of contents</h2>\n"
},
{
"path": "_includes/vendor/anchor_headings.html",
"chars": 8003,
"preview": "{% capture headingsWorkspace %}\n {% comment %}\n Copyright (c) 2018 Vladimir \"allejo\" Jimenez\n\n Permission is here"
},
{
"path": "_layouts/about.html",
"chars": 39,
"preview": "---\nlayout: default\n---\n\n{{ content }}\n"
},
{
"path": "_layouts/default.html",
"chars": 1344,
"preview": "---\nlayout: table_wrappers\n---\n\n<!DOCTYPE html>\n\n<html lang=\"{{ site.lang | default: 'en-US' }}\">\n{% include head.html %"
},
{
"path": "_layouts/home.html",
"chars": 39,
"preview": "---\nlayout: default\n---\n\n{{ content }}\n"
},
{
"path": "_layouts/minimal.html",
"chars": 2402,
"preview": "---\nlayout: table_wrappers\n---\n\n<!DOCTYPE html>\n\n<html lang=\"{{ site.lang | default: 'en-US' }}\">\n{% include head.html %"
},
{
"path": "_layouts/page.html",
"chars": 39,
"preview": "---\nlayout: default\n---\n\n{{ content }}\n"
},
{
"path": "_layouts/post.html",
"chars": 39,
"preview": "---\nlayout: default\n---\n\n{{ content }}\n"
},
{
"path": "_layouts/table_wrappers.html",
"chars": 210,
"preview": "---\nlayout: vendor/compress\n---\n\n{% assign content_ = content | replace: '<table', '<div class=\"table-wrapper\"><table' %"
},
{
"path": "_layouts/vendor/compress.html",
"chars": 4534,
"preview": "---\n# Jekyll layout that compresses HTML\n# v3.1.0\n# http://jch.penibelst.de/\n# © 2014–2015 Anatol Broder\n# MIT License\n-"
},
{
"path": "_sass/base.scss",
"chars": 1565,
"preview": "// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, sele"
},
{
"path": "_sass/buttons.scss",
"chars": 2286,
"preview": "// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-siz"
},
{
"path": "_sass/code.scss",
"chars": 6624,
"preview": "// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-af"
},
{
"path": "_sass/color_schemes/dark.scss",
"chars": 712,
"preview": "$body-background-color: $grey-dk-300;\n$body-heading-color: $grey-lt-000;\n$body-text-color: $grey-lt-300;\n$link-color: $b"
},
{
"path": "_sass/color_schemes/legacy_light.scss",
"chars": 4062,
"preview": "// Moved from _sass/code.scss\n\n.highlight .c {\n color: #586e75;\n} // comment //\n.highlight .err {\n color: #93a1a1;\n} /"
},
{
"path": "_sass/color_schemes/light.scss",
"chars": 608,
"preview": "$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !def"
},
{
"path": "_sass/content.scss",
"chars": 3628,
"preview": "@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type,"
},
{
"path": "_sass/custom/custom.scss",
"chars": 34,
"preview": "// custom SCSS (or CSS) goes here\n"
},
{
"path": "_sass/custom/setup.scss",
"chars": 31,
"preview": "// custom setup code goes here\n"
},
{
"path": "_sass/labels.scss",
"chars": 518,
"preview": "// Labels (not the form kind)\n\n.label,\n.label-blue {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: "
},
{
"path": "_sass/layout.scss",
"chars": 3635,
"preview": "// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n /*background-color: #1b1"
},
{
"path": "_sass/modules.scss",
"chars": 371,
"preview": "// Import external dependencies\n@import \"./vendor/normalize.scss/normalize\";\n\n// Modules\n@import \"./base\";\n@import \"./la"
},
{
"path": "_sass/navigation.scss",
"chars": 4427,
"preview": "// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selector"
},
{
"path": "_sass/print.scss",
"chars": 677,
"preview": "// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media p"
},
{
"path": "_sass/search.scss",
"chars": 5762,
"preview": "// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padd"
},
{
"path": "_sass/skiptomain.scss",
"chars": 519,
"preview": "// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n "
},
{
"path": "_sass/support/_functions.scss",
"chars": 169,
"preview": "@function rem($size, $unit: \"\") {\n $rem-size: $size / $root-font-size;\n\n @if $unit == false {\n @return #{$rem-size}"
},
{
"path": "_sass/support/_variables.scss",
"chars": 3473,
"preview": "// Typography\n\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", "
},
{
"path": "_sass/support/mixins/_buttons.scss",
"chars": 673,
"preview": "// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: l"
},
{
"path": "_sass/support/mixins/_layout.scss",
"chars": 712,
"preview": "// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n"
},
{
"path": "_sass/support/mixins/_typography.scss",
"chars": 1421,
"preview": "@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n"
},
{
"path": "_sass/support/mixins/mixins.scss",
"chars": 65,
"preview": "@import \"./layout\";\n@import \"./buttons\";\n@import \"./typography\";\n"
},
{
"path": "_sass/support/support.scss",
"chars": 73,
"preview": "@import \"./variables\";\n@import \"./functions\";\n@import \"./mixins/mixins\";\n"
},
{
"path": "_sass/tables.scss",
"chars": 861,
"preview": "// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block"
},
{
"path": "_sass/typography.scss",
"chars": 728,
"preview": "// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n."
},
{
"path": "_sass/utilities/_colors.scss",
"chars": 3459,
"preview": "// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-10"
},
{
"path": "_sass/utilities/_layout.scss",
"chars": 1689,
"preview": "// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !importa"
},
{
"path": "_sass/utilities/_lists.scss",
"chars": 237,
"preview": "// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n marg"
},
{
"path": "_sass/utilities/_spacing.scss",
"chars": 3787,
"preview": "// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-sp"
},
{
"path": "_sass/utilities/_typography.scss",
"chars": 840,
"preview": "// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n."
},
{
"path": "_sass/utilities/utilities.scss",
"chars": 104,
"preview": "@import \"./colors\";\n@import \"./layout\";\n@import \"./typography\";\n@import \"./lists\";\n@import \"./spacing\";\n"
},
{
"path": "_sass/vendor/OneDarkJekyll/LICENSE",
"chars": 1073,
"preview": "MIT License\n\nCopyright (c) 2016 Mihály Gyöngyösi\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "_sass/vendor/OneDarkJekyll/syntax.scss",
"chars": 2624,
"preview": "// Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme\n\n.highlight,\npre.highlight {\n background: #31343"
},
{
"path": "_sass/vendor/OneLightJekyll/LICENSE",
"chars": 3597,
"preview": "OneLightJekyll relies on two works: OneDarkJekyll, and Atom's One Light theme. This file contains the licensing for all "
},
{
"path": "_sass/vendor/OneLightJekyll/syntax.scss",
"chars": 2726,
"preview": "// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n "
},
{
"path": "_sass/vendor/normalize.scss/README.md",
"chars": 510,
"preview": "# normalize.scss\n\nNormalize.scss is an SCSS copy of [normalize.css](http://necolas.github.io/normalize.css), a customisa"
},
{
"path": "_sass/vendor/normalize.scss/normalize.scss",
"chars": 6142,
"preview": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ==========================="
},
{
"path": "ads.txt",
"chars": 59,
"preview": "google.com, pub-4288225696268534, DIRECT, f08c47fec0942fa0\n"
},
{
"path": "assets/css/just-the-docs-dark.scss",
"chars": 72,
"preview": "---\n---\n{% include css/just-the-docs.scss.liquid color_scheme=\"dark\" %}\n"
},
{
"path": "assets/css/just-the-docs-default.scss",
"chars": 245,
"preview": "---\n---\n{% if site.color_scheme and site.color_scheme != \"nil\" %}\n {% assign color_scheme = site.color_scheme %}\n{% els"
},
{
"path": "assets/css/just-the-docs-light.scss",
"chars": 73,
"preview": "---\n---\n{% include css/just-the-docs.scss.liquid color_scheme=\"light\" %}\n"
},
{
"path": "assets/images/arti.drawio.xml",
"chars": 4538,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:08:46.104Z\" agent=\"Mozill"
},
{
"path": "assets/images/change.drawio.xml",
"chars": 4964,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:13:11.261Z\" agent=\"Mozill"
},
{
"path": "assets/images/cicd-initial.drawio.xml",
"chars": 4814,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:33:26.141Z\" agent=\"Mozill"
},
{
"path": "assets/images/cred-key.drawio.xml",
"chars": 5453,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:02:17.431Z\" agent=\"Mozill"
},
{
"path": "assets/images/cred-serv.drawio.xml",
"chars": 7394,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:04:35.232Z\" agent=\"Mozill"
},
{
"path": "assets/images/crypto.drawio.xml",
"chars": 5601,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:19:36.201Z\" agent=\"Mozill"
},
{
"path": "assets/images/dependency.drawio.xml",
"chars": 3543,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:49:22.282Z\" agent=\"Mozill"
},
{
"path": "assets/images/depi.drawio.xml",
"chars": 4855,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:10:09.668Z\" agent=\"Mozill"
},
{
"path": "assets/images/dos.drawio.xml",
"chars": 5534,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:16:47.993Z\" agent=\"Mozill"
},
{
"path": "assets/images/endpoint.drawio.xml",
"chars": 3672,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:34:43.921Z\" agent=\"Mozill"
},
{
"path": "assets/images/ex-pip.drawio.xml",
"chars": 4947,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:22:04.950Z\" agent=\"Mozill"
},
{
"path": "assets/images/ex-pro.drawio.xml",
"chars": 4744,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:24:36.516Z\" agent=\"Mozill"
},
{
"path": "assets/images/github.drawio.xml",
"chars": 4830,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:27:12.355Z\" agent=\"Mozill"
},
{
"path": "assets/images/localdos.drawio.xml",
"chars": 5969,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:18:51.318Z\" agent=\"Mozill"
},
{
"path": "assets/images/monitoring.drawio.xml",
"chars": 6377,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:11:55.984Z\" agent=\"Mozill"
},
{
"path": "assets/images/per-arti.drawio.xml",
"chars": 3189,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:53:56.648Z\" agent=\"Mozill"
},
{
"path": "assets/images/per-img.drawio.xml",
"chars": 4635,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:52:52.029Z\" agent=\"Mozill"
},
{
"path": "assets/images/per-reg.drawio.xml",
"chars": 4748,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:51:28.164Z\" agent=\"Mozill"
},
{
"path": "assets/images/per-service.drawio.xml",
"chars": 3365,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:55:29.477Z\" agent=\"Mozill"
},
{
"path": "assets/images/ppe.drawio.xml",
"chars": 6866,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:43:46.930Z\" agent=\"Mozill"
},
{
"path": "assets/images/priv-cert.drawio.xml",
"chars": 6188,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:59:13.142Z\" agent=\"Mozill"
},
{
"path": "assets/images/priv-key.drawio.xml",
"chars": 6146,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:00:06.948Z\" agent=\"Mozill"
},
{
"path": "assets/images/priv-pro.drawio.xml",
"chars": 5071,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:57:40.427Z\" agent=\"Mozill"
},
{
"path": "assets/images/regi.drawio.xml",
"chars": 4554,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:06:32.494Z\" agent=\"Mozill"
},
{
"path": "assets/images/registry.drawio.xml",
"chars": 4255,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:48:10.477Z\" agent=\"Mozill"
},
{
"path": "assets/images/res-del.drawio.xml",
"chars": 5605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:20:10.338Z\" agent=\"Mozill"
},
{
"path": "assets/images/resources.drawio.xml",
"chars": 7424,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:44:51.297Z\" agent=\"Mozill"
},
{
"path": "assets/images/scm.drawio.xml",
"chars": 4756,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:26:22.264Z\" agent=\"Mozill"
},
{
"path": "assets/images/unprotected.drawio.xml",
"chars": 5631,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T13:14:51.809Z\" agent=\"Mozill"
},
{
"path": "assets/images/webhook.drawio.xml",
"chars": 5269,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<mxfile host=\"app.diagrams.net\" modified=\"2023-06-02T12:37:43.024Z\" agent=\"Mozill"
},
{
"path": "assets/js/just-the-docs.js",
"chars": 17926,
"preview": "---\n---\n(function (jtd, undefined) {\n\n// Event handling\n\njtd.addEvent = function(el, type, handler) {\n if (el.attachEve"
},
{
"path": "assets/js/zzzz-search-data.json",
"chars": 3968,
"preview": "---\npermalink: /assets/js/search-data.json\n---\n{\n{%- assign i = 0 -%}\n{%- assign pages_array = \"\" | split: \"\" -%}\n{%- as"
},
{
"path": "bin/just-the-docs",
"chars": 500,
"preview": "#!/usr/bin/env ruby\n\ngem_dir = File.expand_path(\"..\",File.dirname(__FILE__))\n$LOAD_PATH.unshift gem_dir # Look in gem di"
},
{
"path": "docker-compose.yml",
"chars": 218,
"preview": "version: \"3.5\"\n\nservices:\n jekyll:\n build:\n context: ./\n ports:\n - 4000:4000\n volumes:\n - .:/us"
},
{
"path": "docs/aisecops/aisecops.md",
"chars": 142,
"preview": "---\nlayout: default\ntitle: AiSecOps\nnav_order: 8\nhas_children: true\npermalink: docs/aisecops\n---\n\n# AiSecOps\n{: .no_toc "
},
{
"path": "docs/aisecops/azure.md",
"chars": 6352,
"preview": "---\nlayout: default\ntitle: Azure\nparent: AiSecOps\n---\n\n# Azure \n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delt"
},
{
"path": "docs/aisecops/biasandfairness.md",
"chars": 17253,
"preview": "---\nlayout: default\ntitle: Bias and Fairness\nparent: AiSecOps\n---\n\n# Bias and Fairness\n{: .no_toc }\n\n## Table of content"
},
{
"path": "docs/aisecops/driver.md",
"chars": 501,
"preview": "---\nlayout: default\ntitle: Driver\nparent: AiSecOps\n---\n\n# Driver\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-del"
},
{
"path": "docs/attacks/application.md",
"chars": 120897,
"preview": "---\nlayout: default\ntitle: Application Attacks\nparent: Attacks\n---\n\n# Application Attacks\n{: .no_toc }\n\n\n## Table of con"
},
{
"path": "docs/attacks/attacks.md",
"chars": 138,
"preview": "---\nlayout: default\ntitle: Attacks\nnav_order: 10\nhas_children: true\npermalink: docs/rules\n---\n\n# Attacks\n{: .no_toc }\n\n{"
},
{
"path": "docs/attacks/cloud.md",
"chars": 87078,
"preview": "---\nlayout: default\ntitle: Cloud Attacks\nparent: Attacks\n---\n\n# Cloud Attacks\n{: .no_toc }\n\n\n## Table of contents\n{: .no"
},
{
"path": "docs/attacks/container.md",
"chars": 35832,
"preview": "---\nlayout: default\ntitle: Container Attacks\nparent: Attacks\n---\n\n# Container Attacks\n{: .no_toc }\n\n\n## Table of content"
},
{
"path": "docs/attacks/pipeline.md",
"chars": 23777,
"preview": "---\nlayout: default\ntitle: Pipeline Attacks\nparent: Attacks\n---\n\n# Pipeline Attacks\n{: .no_toc }\n\n\n## Table of contents\n"
},
{
"path": "docs/build-test/artifacts.md",
"chars": 3713,
"preview": "---\nlayout: default\ntitle: Artifacts\nparent: Build & Test\n---\n\n# Artifacts\n{: .no_toc }\n\n## Table of contents\n{: .no_toc"
},
{
"path": "docs/build-test/build-test.md",
"chars": 152,
"preview": "---\nlayout: default\ntitle: Build & Test\nnav_order: 4\nhas_children: true\npermalink: docs/build-test\n---\n\n# Build & Test\n{"
},
{
"path": "docs/build-test/configuration-management.md",
"chars": 5924,
"preview": "---\nlayout: default\ntitle: Configuration Management\nparent: Build & Test\n---\n\n# Configuration Management\n{: .no_toc }\n\n#"
},
{
"path": "docs/build-test/dast.md",
"chars": 3175,
"preview": "---\nlayout: default\ntitle: DAST\nparent: Build & Test\n---\n\n# DAST\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-del"
},
{
"path": "docs/build-test/iast.md",
"chars": 4091,
"preview": "---\nlayout: default\ntitle: IAST\nparent: Build & Test\n---\n\n# IAST\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-del"
},
{
"path": "docs/build-test/smoke-test.md",
"chars": 1737,
"preview": "---\nlayout: default\ntitle: Smoke Test\nparent: Build & Test\n---\n\n# Smoke Test\n{: .no_toc }\n\n## Table of contents\n{: .no_t"
},
{
"path": "docs/checklists/apache.md",
"chars": 1001,
"preview": "---\nlayout: default\ntitle: Apache\nparent: Checklists\n---\n\n# Apache Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/argocd.md",
"chars": 1896,
"preview": "---\nlayout: default\ntitle: ArgoCD\nparent: Checklists\n---\n\n# ArgoCD Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/auth0.md",
"chars": 954,
"preview": "---\nlayout: default\ntitle: auth0\nparent: Checklists\n---\n\n# auth0 Security Checklist for DevSecOps\n{: .no_toc }\n\n## Table"
},
{
"path": "docs/checklists/aws.md",
"chars": 1068,
"preview": "---\nlayout: default\ntitle: AWS\nparent: Checklists\n---\n\n# AWS Security Checklist for DevSecOps\n{: .no_toc }\n\n## Table of "
},
{
"path": "docs/checklists/ceph.md",
"chars": 1313,
"preview": "---\nlayout: default\ntitle: Ceph\nparent: Checklists\n---\n\n# Ceph Hardening for DevSecOps\n{: .no_toc }\n\n## Table of content"
},
{
"path": "docs/checklists/checklists.md",
"chars": 149,
"preview": "---\nlayout: default\ntitle: Checklists\nnav_order: 10\nhas_children: true\npermalink: docs/checklists\n---\n\n# Checklists\n{: ."
},
{
"path": "docs/checklists/consul.md",
"chars": 1653,
"preview": "---\nlayout: default\ntitle: Consul\nparent: Checklists\n---\n\n# Consul Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/couchdb.md",
"chars": 1504,
"preview": "---\nlayout: default\ntitle: CouchDB\nparent: Checklists\n---\n\n# CouchDB Hardening for DevSecOps\n{: .no_toc }\n\n## Table of c"
},
{
"path": "docs/checklists/docker.md",
"chars": 2424,
"preview": "---\nlayout: default\ntitle: Docker\nparent: Checklists\n---\n\n# Docker Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/ebpf.md",
"chars": 993,
"preview": "---\nlayout: default\ntitle: eBPF\nparent: Checklists\n---\n\n# eBPF Security Checklist for DevSecOps\n{: .no_toc }\n\n## Table o"
},
{
"path": "docs/checklists/elasticsearch.md",
"chars": 1548,
"preview": "---\nlayout: default\ntitle: Elasticsearch\nparent: Checklists\n---\n\n# Elasticsearch Hardening for DevSecOps\n{: .no_toc }\n\n#"
},
{
"path": "docs/checklists/etcd.md",
"chars": 747,
"preview": "---\nlayout: default\ntitle: etcd\nparent: Checklists\n---\n\n# etcd Hardening for DevSecOps\n{: .no_toc }\n\n## Table of content"
},
{
"path": "docs/checklists/git.md",
"chars": 1443,
"preview": "---\nlayout: default\ntitle: Git\nparent: Checklists\n---\n\n# Git Hardening for DevSecOps\n{: .no_toc }\n\n## Table of contents\n"
},
{
"path": "docs/checklists/gitlab.md",
"chars": 2692,
"preview": "---\nlayout: default\ntitle: Gitlab\nparent: Checklists\n---\n\n# Gitlab Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/glusterfs.md",
"chars": 1331,
"preview": "---\nlayout: default\ntitle: GlusterFS\nparent: Checklists\n---\n\n# GlusterFS Hardening for DevSecOps\n{: .no_toc }\n\n## Table "
},
{
"path": "docs/checklists/gradle.md",
"chars": 2032,
"preview": "---\nlayout: default\ntitle: Gradle\nparent: Checklists\n---\n\n# Gradle Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/graphite.md",
"chars": 1612,
"preview": "---\nlayout: default\ntitle: Graphite\nparent: Checklists\n---\n\n# Graphite Hardening for DevSecOps\n{: .no_toc }\n\n## Table of"
},
{
"path": "docs/checklists/iis.md",
"chars": 3273,
"preview": "---\nlayout: default\ntitle: IIS\nparent: Checklists\n---\n\n# IIS Hardening for DevSecOps\n{: .no_toc }\n\n## Table of contents\n"
},
{
"path": "docs/checklists/jenkins.md",
"chars": 1693,
"preview": "---\nlayout: default\ntitle: Jenkins\nparent: Checklists\n---\n\n# Jenkins Hardening for DevSecOps\n{: .no_toc }\n\n## Table of c"
},
{
"path": "docs/checklists/kubernetes.md",
"chars": 1711,
"preview": "---\nlayout: default\ntitle: Kubernetes\nparent: Checklists\n---\n\n# Kuberneties Hardening for DevSecOps\n{: .no_toc }\n\n## Tab"
},
{
"path": "docs/checklists/maven.md",
"chars": 1974,
"preview": "n---\nlayout: default\ntitle: Maven\nparent: Checklists\n---\n\n# Maven Hardening for DevSecOps\n{: .no_toc }\n\n## Table of cont"
},
{
"path": "docs/checklists/memcached.md",
"chars": 1476,
"preview": "---\nlayout: default\ntitle: Memcached\nparent: Checklists\n---\n\n# Memcached Hardening for DevSecOps\n{: .no_toc }\n\n## Table "
},
{
"path": "docs/checklists/mongodb.md",
"chars": 1739,
"preview": "---\nlayout: default\ntitle: MongoDB\nparent: Checklists\n---\n\n# MongoDB Hardening for DevSecOps\n{: .no_toc }\n\n## Table of c"
},
{
"path": "docs/checklists/mysql.md",
"chars": 1381,
"preview": "---\nlayout: default\ntitle: MySQL\nparent: Checklists\n---\n\n# MySQL Hardening for DevSecOps\n{: .no_toc }\n\n## Table of conte"
},
{
"path": "docs/checklists/nginx.md",
"chars": 1287,
"preview": "---\nlayout: default\ntitle: Nginx\nparent: Checklists\n---\n\n# Nginx Hardening for DevSecOps\n{: .no_toc }\n\n## Table of conte"
},
{
"path": "docs/checklists/openshift.md",
"chars": 1343,
"preview": "---\nlayout: default\ntitle: OpenShift\nparent: Checklists\n---\n\n# OpenShift Hardening for DevSecOps\n{: .no_toc }\n\n## Table "
},
{
"path": "docs/checklists/redis.md",
"chars": 1620,
"preview": "---\nlayout: default\ntitle: Redis\nparent: Checklists\n---\n\n# Redis Hardening for DevSecOps\n{: .no_toc }\n\n## Table of conte"
},
{
"path": "docs/checklists/saltstack.md",
"chars": 1650,
"preview": "---\nlayout: default\ntitle: SaltStack\nparent: Checklists\n---\n\n# SaltStack Hardening for DevSecOps\n{: .no_toc }\n\n## Table "
},
{
"path": "docs/checklists/sbom.md",
"chars": 1048,
"preview": "---\nlayout: default\ntitle: SBOM\nparent: Checklists\n---\n\n# SBOM Security Checklist for DevSecOps\n{: .no_toc }\n\n## Table o"
},
{
"path": "docs/checklists/squid.md",
"chars": 772,
"preview": "---\nlayout: default\ntitle: Squid\nparent: Checklists\n---\n\n# Squid Hardening for DevSecOps\n{: .no_toc }\n\n## Table of conte"
},
{
"path": "docs/checklists/terraform.md",
"chars": 1026,
"preview": "---\nlayout: default\ntitle: Terraform\nparent: Checklists\n---\n\n# Terraform Security Checklist for DevSecOps\n{: .no_toc }\n\n"
},
{
"path": "docs/checklists/tomcat.md",
"chars": 1630,
"preview": "---\nlayout: default\ntitle: Tomcat\nparent: Checklists\n---\n\n# Tomcat Hardening for DevSecOps\n{: .no_toc }\n\n## Table of con"
},
{
"path": "docs/checklists/weblogic.md",
"chars": 1992,
"preview": "---\nlayout: default\ntitle: Weblogic\nparent: Checklists\n---\n\n# Weblogic Hardening for DevSecOps\n{: .no_toc }\n\n## Table of"
},
{
"path": "docs/checklists/webservice",
"chars": 4588,
"preview": "---\nlayout: default\ntitle: Webservice\nparent: Checklists\n---\n\n# Webservice Security Checklist for DevSecOps\n{: .no_toc }"
},
{
"path": "docs/code/code.md",
"chars": 130,
"preview": "---\nlayout: default\ntitle: Code\nnav_order: 3\nhas_children: true\npermalink: docs/code\n---\n\n# Code\n{: .no_toc }\n\n{: .fs-6 "
},
{
"path": "docs/code/sast.md",
"chars": 14429,
"preview": "---\nlayout: default\ntitle: SAST\nparent: Code\n---\n\n# SAST\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1"
},
{
"path": "docs/code/sca.md",
"chars": 10197,
"preview": "---\nlayout: default\ntitle: SCA\nparent: Code\n---\n\n# SCA\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta }\n\n1. "
},
{
"path": "docs/code/secure-pipeline.md",
"chars": 33839,
"preview": "---\nlayout: default\ntitle: Secure Pipeline\nparent: Code\n---\n\n# Secure Pipeline\n{: .no_toc }\n\n## Table of contents\n{: .n"
},
{
"path": "docs/mlsecops/azure.md",
"chars": 1407,
"preview": "---\nlayout: default\ntitle: Azure\nparent: MlSecOps\n---\n\n\n# Azure \n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-del"
},
{
"path": "docs/mlsecops/mlsecops.md",
"chars": 142,
"preview": "---\nlayout: default\ntitle: MlSecOps\nnav_order: 7\nhas_children: true\npermalink: docs/mlsecops\n---\n\n# MlSecOps\n{: .no_toc "
},
{
"path": "docs/mlsecops/modelrobustnessandadversarialattacks.md",
"chars": 15837,
"preview": "---\nlayout: default\ntitle: Model Robustness and Adversarial Attacks\nparent: MlSecOps\n---\n\n# Model Robustness and Adversa"
},
{
"path": "docs/model/model.md",
"chars": 115,
"preview": "---\nlayout: default\ntitle: Model\nnav_order: 11\nhas_children: true\npermalink: docs/model\n---\n\n# Model\n{: .no_toc }\n\n"
},
{
"path": "docs/model/simple.md",
"chars": 3845,
"preview": "---\nlayout: default\ntitle: Simple\nparent: Model\n---\n\n# Simple\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .text-delta "
},
{
"path": "docs/operate/monitoring.md",
"chars": 25630,
"preview": "---\nlayout: default\ntitle: Monitoring\nparent: Operate\n---\n\n# Monitoring\n{: .no_toc }\n\n## Table of contents\n{: .no_toc .t"
},
{
"path": "docs/operate/operate.md",
"chars": 120,
"preview": "---\nlayout: default\ntitle: Operate\nnav_order: 6\nhas_children: true\npermalink: docs/operate\n---\n\n# Operate\n{: .no_toc }\n\n"
}
]
// ... and 45 more files (download for full content)
About this extraction
This page contains the full source code of the devsecopsguides/devsecopsguides.github.io GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 245 files (1.8 MB), approximately 424.9k tokens, and a symbol index with 1 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.