mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-09-20 23:14:17 +00:00
Hugo migration (#2720)
* Move files to a Hugo structure Signed-off-by: Tony Batard <tbatard@pivotal.io>
This commit is contained in:
+3
-9
@@ -38,14 +38,8 @@ Tiltfile
|
||||
.vscode
|
||||
*.diff
|
||||
|
||||
# Jekyll compiled data
|
||||
site/_site
|
||||
site/.sass-cache
|
||||
site/.jekyll
|
||||
site/.jekyll-metadata
|
||||
site/.jekyll-cache
|
||||
site/.bundle
|
||||
site/vendor
|
||||
.ruby-version
|
||||
# Hugo compiled data
|
||||
site/public
|
||||
site/resources
|
||||
|
||||
.vs
|
||||
|
||||
@@ -36,6 +36,8 @@ BUILDER_IMAGE_TAG := $(shell git log -1 --pretty=%h hack/build-image/Dockerfile)
|
||||
BUILDER_IMAGE := $(REGISTRY)/build-image:$(BUILDER_IMAGE_TAG)
|
||||
BUILDER_IMAGE_CACHED := $(shell docker images -q ${BUILDER_IMAGE} 2>/dev/null )
|
||||
|
||||
HUGO_IMAGE := hugo-builder
|
||||
|
||||
# Which architecture to build - see $(ALL_ARCH) for options.
|
||||
# if the 'local' rule is being run, detect the ARCH from 'go env'
|
||||
# if it wasn't specified by the caller.
|
||||
@@ -264,6 +266,9 @@ push-build-image:
|
||||
@# credentials needed to accomplish this.
|
||||
docker push $(BUILDER_IMAGE)
|
||||
|
||||
build-image-hugo:
|
||||
cd site && docker build --pull -t $(HUGO_IMAGE) .
|
||||
|
||||
clean:
|
||||
# if we have a cached image then use it to run go clean --modcache
|
||||
# this test checks if we there is an image id in the BUILDER_IMAGE_CACHED variable.
|
||||
@@ -272,6 +277,7 @@ ifneq ($(strip $(BUILDER_IMAGE_CACHED)),)
|
||||
docker rmi -f $(BUILDER_IMAGE) || true
|
||||
endif
|
||||
rm -rf .go _output
|
||||
docker rmi $(HUGO_IMAGE)
|
||||
|
||||
|
||||
.PHONY: modules
|
||||
@@ -314,14 +320,13 @@ release:
|
||||
PUBLISH=$(PUBLISH) \
|
||||
./hack/goreleaser.sh'"
|
||||
|
||||
serve-docs:
|
||||
serve-docs: build-image-hugo
|
||||
docker run \
|
||||
--rm \
|
||||
-v "$$(pwd)/site:/srv/jekyll" \
|
||||
-it -p 4000:4000 \
|
||||
jekyll/jekyll \
|
||||
jekyll serve --livereload --incremental
|
||||
|
||||
-v "$$(pwd)/site:/srv/hugo" \
|
||||
-it -p 1313:1313 \
|
||||
$(HUGO_IMAGE) \
|
||||
hugo server --bind=0.0.0.0 --enableGitInfo=false
|
||||
# gen-docs generates a new versioned docs directory under site/docs. It follows
|
||||
# the following process:
|
||||
# 1. Copies the contents of the most recently tagged docs directory into the new
|
||||
@@ -333,7 +338,7 @@ serve-docs:
|
||||
# 4. Copies the previous version's ToC file and runs 'git add' to establish
|
||||
# a useful baseline to diff against.
|
||||
# 5. Replaces the content of the new ToC file with the master ToC.
|
||||
# 6. Update site/_config.yml and site/_data/toc-mapping.yml to include entries
|
||||
# 6. Update site/config.yaml and site/_data/toc-mapping.yml to include entries
|
||||
# for the new version.
|
||||
#
|
||||
# The unstaged changes in the working directory can now easily be diff'ed against the
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Migrate site from Jekyll to Hugo
|
||||
+44
-38
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2019 the Velero contributors.
|
||||
# Copyright 2020 the Velero contributors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -21,88 +21,94 @@ set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
DOCS_DIRECTORY=site/content/docs
|
||||
DATA_DOCS_DIRECTORY=site/data/docs
|
||||
CONFIG_FILE=site/config.yaml
|
||||
MAIN_BRANCH=main
|
||||
|
||||
# don't run if there's already a directory for the target docs version
|
||||
if [[ -d site/docs/$NEW_DOCS_VERSION ]]; then
|
||||
echo "ERROR: site/docs/$NEW_DOCS_VERSION already exists"
|
||||
if [[ -d $DOCS_DIRECTORY/$NEW_DOCS_VERSION ]]; then
|
||||
echo "ERROR: $DOCS_DIRECTORY/$NEW_DOCS_VERSION already exists"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# get the alphabetically last item in site/docs to use as PREVIOUS_DOCS_VERSION
|
||||
# get the alphabetically last item in $DOCS_DIRECTORY to use as PREVIOUS_DOCS_VERSION
|
||||
# if not explicitly specified by the user
|
||||
if [[ -z "${PREVIOUS_DOCS_VERSION:-}" ]]; then
|
||||
echo "PREVIOUS_DOCS_VERSION was not specified, getting the latest version"
|
||||
PREVIOUS_DOCS_VERSION=$(ls -1 site/docs/ | tail -n 1)
|
||||
PREVIOUS_DOCS_VERSION=$(ls -1 $DOCS_DIRECTORY/ | tail -n 1)
|
||||
fi
|
||||
|
||||
# make a copy of the previous versioned docs dir
|
||||
echo "Creating copy of docs directory site/docs/$PREVIOUS_DOCS_VERSION in site/docs/$NEW_DOCS_VERSION"
|
||||
cp -r site/docs/${PREVIOUS_DOCS_VERSION}/ site/docs/${NEW_DOCS_VERSION}/
|
||||
echo "Creating copy of docs directory $DOCS_DIRECTORY/$PREVIOUS_DOCS_VERSION in $DOCS_DIRECTORY/$NEW_DOCS_VERSION"
|
||||
cp -r $DOCS_DIRECTORY/${PREVIOUS_DOCS_VERSION}/ $DOCS_DIRECTORY/${NEW_DOCS_VERSION}/
|
||||
|
||||
# 'git add' the previous version's docs as-is so we get a useful diff when we copy the main docs in
|
||||
# 'git add' the previous version's docs as-is so we get a useful diff when we copy the $MAIN_BRANCH docs in
|
||||
echo "Running 'git add' for previous version's doc contents to use as a base for diff"
|
||||
git add site/docs/${NEW_DOCS_VERSION}
|
||||
git add -f $DOCS_DIRECTORY/${NEW_DOCS_VERSION}
|
||||
|
||||
# now copy the contents of site/docs/main into the same directory so we can get a nice
|
||||
# now copy the contents of $DOCS_DIRECTORY/$MAIN_BRANCH into the same directory so we can get a nice
|
||||
# git diff of what changed since previous version
|
||||
echo "Copying site/docs/main/ to site/docs/${NEW_DOCS_VERSION}/"
|
||||
rm -rf site/docs/${NEW_DOCS_VERSION}/ && cp -r site/docs/main/ site/docs/${NEW_DOCS_VERSION}/
|
||||
echo "Copying $DOCS_DIRECTORY/$MAIN_BRANCH/ to $DOCS_DIRECTORY/${NEW_DOCS_VERSION}/"
|
||||
rm -rf $DOCS_DIRECTORY/${NEW_DOCS_VERSION}/ && cp -r $DOCS_DIRECTORY/$MAIN_BRANCH/ $DOCS_DIRECTORY/${NEW_DOCS_VERSION}/
|
||||
|
||||
# make a copy of the previous versioned ToC
|
||||
NEW_DOCS_TOC="$(echo ${NEW_DOCS_VERSION} | tr . -)-toc"
|
||||
PREVIOUS_DOCS_TOC="$(echo ${PREVIOUS_DOCS_VERSION} | tr . -)-toc"
|
||||
|
||||
echo "Creating copy of site/_data/$PREVIOUS_DOCS_TOC.yml at site/_data/$NEW_DOCS_TOC.yml"
|
||||
cp site/_data/$PREVIOUS_DOCS_TOC.yml site/_data/$NEW_DOCS_TOC.yml
|
||||
echo "Creating copy of $DATA_DOCS_DIRECTORY/$PREVIOUS_DOCS_TOC.yml at $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml"
|
||||
cp $DATA_DOCS_DIRECTORY/$PREVIOUS_DOCS_TOC.yml $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml
|
||||
|
||||
# 'git add' the previous version's ToC content as-is so we get a useful diff when we copy the main ToC in
|
||||
# 'git add' the previous version's ToC content as-is so we get a useful diff when we copy the $MAIN_BRANCH ToC in
|
||||
echo "Running 'git add' for previous version's ToC to use as a base for diff"
|
||||
git add site/_data/$NEW_DOCS_TOC.yml
|
||||
git add $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml
|
||||
|
||||
# now copy the main ToC so we can get a nice git diff of what changed since previous version
|
||||
echo "Copying site/_data/main-toc.yml to site/_data/$NEW_DOCS_TOC.yml"
|
||||
rm site/_data/$NEW_DOCS_TOC.yml && cp site/_data/main-toc.yml site/_data/$NEW_DOCS_TOC.yml
|
||||
# now copy the $MAIN_BRANCH ToC so we can get a nice git diff of what changed since previous version
|
||||
echo "Copying $DATA_DOCS_DIRECTORY/$MAIN_BRANCH-toc.yml to $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml"
|
||||
rm $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml && cp $DATA_DOCS_DIRECTORY/$MAIN_BRANCH-toc.yml $DATA_DOCS_DIRECTORY/$NEW_DOCS_TOC.yml
|
||||
|
||||
# replace known version-specific links -- the sed syntax is slightly different in OS X and Linux,
|
||||
# so check which OS we're running on.
|
||||
if [[ $(uname) == "Darwin" ]]; then
|
||||
echo "[OS X] updating version-specific links"
|
||||
find site/docs/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i '' "s|https://velero.io/docs/main|https://velero.io/docs/$VELERO_VERSION|g"
|
||||
find site/docs/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i '' "s|https://github.com/vmware-tanzu/velero/blob/main|https://github.com/vmware-tanzu/velero/blob/$VELERO_VERSION|g"
|
||||
find $DOCS_DIRECTORY/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i '' "s|https://velero.io/docs/$MAIN_BRANCH|https://velero.io/docs/$VELERO_VERSION|g"
|
||||
find $DOCS_DIRECTORY/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i '' "s|https://github.com/vmware-tanzu/velero/blob/$MAIN_BRANCH|https://github.com/vmware-tanzu/velero/blob/$VELERO_VERSION|g"
|
||||
find $DOCS_DIRECTORY/${NEW_DOCS_VERSION} -type f -name "_index.md" | xargs sed -i '' "s|version: $MAIN_BRANCH|version: $NEW_DOCS_VERSION|g"
|
||||
|
||||
echo "[OS X] Updating latest version in _config.yml"
|
||||
sed -i '' "s/latest: ${PREVIOUS_DOCS_VERSION}/latest: ${NEW_DOCS_VERSION}/" site/_config.yml
|
||||
echo "[OS X] Updating latest version in $CONFIG_FILE"
|
||||
sed -i '' "s/latest: ${PREVIOUS_DOCS_VERSION}/latest: ${NEW_DOCS_VERSION}/" $CONFIG_FILE
|
||||
|
||||
# newlines and lack of indentation are requirements for this sed syntax
|
||||
# which is doing an append
|
||||
echo "[OS X] Adding latest version to versions list in _config.yml"
|
||||
sed -i '' "/- main/a\\
|
||||
- ${NEW_DOCS_VERSION}
|
||||
" site/_config.yml
|
||||
echo "[OS X] Adding latest version to versions list in $CONFIG_FILE"
|
||||
sed -i '' "/- $MAIN_BRANCH/a\\
|
||||
\ \ \ \ - ${NEW_DOCS_VERSION}
|
||||
" $CONFIG_FILE
|
||||
|
||||
echo "[OS X] Adding ToC mapping entry"
|
||||
sed -i '' "/main: main-toc/a\\
|
||||
sed -i '' "/$MAIN_BRANCH: $MAIN_BRANCH-toc/a\\
|
||||
${NEW_DOCS_VERSION}: ${NEW_DOCS_TOC}
|
||||
" site/_data/toc-mapping.yml
|
||||
" $DATA_DOCS_DIRECTORY/toc-mapping.yml
|
||||
|
||||
else
|
||||
echo "[Linux] updating version-specific links"
|
||||
find site/docs/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i'' "s|https://velero.io/docs/main|https://velero.io/docs/$VELERO_VERSION|g"
|
||||
find site/docs/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i'' "s|https://github.com/vmware-tanzu/velero/blob/main|https://github.com/vmware-tanzu/velero/blob/$VELERO_VERSION|g"
|
||||
find $DOCS_DIRECTORY/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i'' "s|https://velero.io/docs/$MAIN_BRANCH|https://velero.io/docs/$VELERO_VERSION|g"
|
||||
find $DOCS_DIRECTORY/${NEW_DOCS_VERSION} -type f -name "*.md" | xargs sed -i'' "s|https://github.com/vmware-tanzu/velero/blob/$MAIN_BRANCH|https://github.com/vmware-tanzu/velero/blob/$VELERO_VERSION|g"
|
||||
|
||||
echo "[Linux] Updating latest version in _config.yml"
|
||||
sed -i'' "s/latest: ${PREVIOUS_DOCS_VERSION}/latest: ${NEW_DOCS_VERSION}/" site/_config.yml
|
||||
echo "[Linux] Updating latest version in $CONFIG_FILE"
|
||||
sed -i'' "s/latest: ${PREVIOUS_DOCS_VERSION}/latest: ${NEW_DOCS_VERSION}/" $CONFIG_FILE
|
||||
|
||||
echo "[Linux] Adding latest version to versions list in _config.yml"
|
||||
sed -i'' "/- main/a - ${NEW_DOCS_VERSION}" site/_config.yml
|
||||
echo "[Linux] Adding latest version to versions list in $CONFIG_FILE"
|
||||
sed -i'' "/- $MAIN_BRANCH/a - ${NEW_DOCS_VERSION}" $CONFIG_FILE
|
||||
|
||||
echo "[Linux] Adding ToC mapping entry"
|
||||
sed -i'' "/main: main-toc/a ${NEW_DOCS_VERSION}: ${NEW_DOCS_TOC}" site/_data/toc-mapping.yml
|
||||
sed -i'' "/$MAIN_BRANCH: $MAIN_BRANCH-toc/a ${NEW_DOCS_VERSION}: ${NEW_DOCS_TOC}" $DATA_DOCS_DIRECTORY/toc-mapping.yml
|
||||
fi
|
||||
|
||||
echo "Success! site/docs/$NEW_DOCS_VERSION has been created."
|
||||
echo "Success! $DOCS_DIRECTORY/$NEW_DOCS_VERSION has been created."
|
||||
echo ""
|
||||
echo "The next steps are:"
|
||||
echo " 1. Consult site/README-JEKYLL.md for further manual steps required to finalize the new versioned docs generation."
|
||||
echo " 1. Consult site/README-HUGO.md for further manual steps required to finalize the new versioned docs generation."
|
||||
echo " 2. Run a 'git diff' to review all changes made to the docs since the previous version."
|
||||
echo " 3. Make any manual changes/corrections necessary."
|
||||
echo " 4. Run 'git add' to stage all unstaged changes, then 'git commit'."
|
||||
|
||||
+8
-6
@@ -1,10 +1,12 @@
|
||||
[build]
|
||||
base = "site/"
|
||||
command = "jekyll build"
|
||||
publish = "site/_site"
|
||||
command = "hugo --gc --minify --baseURL $BASE_URL"
|
||||
publish = "site/public"
|
||||
|
||||
# Using the * -> :splat rule should redirect anything under master to the matching file under main
|
||||
[[redirects]]
|
||||
from = "/docs/master/*"
|
||||
to = "/docs/main/:splat"
|
||||
[context.production.environment]
|
||||
HUGO_VERSION = "0.73.0"
|
||||
BASE_URL = "https://velero.io"
|
||||
|
||||
[context.deploy-preview.environment]
|
||||
HUGO_VERSION = "0.73.0"
|
||||
BASE_URL = "https://deploy-preview-2720--velero.netlify.app"
|
||||
@@ -0,0 +1,9 @@
|
||||
FROM ubuntu:20.04
|
||||
|
||||
RUN apt update
|
||||
RUN apt install -y hugo
|
||||
|
||||
WORKDIR /srv/hugo
|
||||
|
||||
EXPOSE 1313
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
source 'https://rubygems.org'
|
||||
gem 'jekyll', '~> 4.1.0'
|
||||
gem 'jekyll-feed', '~> 0.13.0'
|
||||
gem 'jekyll-optional-front-matter', '~> 0.3.2'
|
||||
gem 'jekyll-paginate', '~> 1.1'
|
||||
gem 'jekyll-readme-index', '~> 0.3.0'
|
||||
gem 'jekyll-redirect-from', '~> 0.16.0'
|
||||
gem 'jekyll-relative-links', '~> 0.6.1'
|
||||
gem 'jekyll-sitemap', '~> 1.4'
|
||||
gem 'jekyll-titles-from-headings', '~> 0.5.3'
|
||||
gem 'jekyll-seo-tag', '~> 2.6', '>= 2.6.1'
|
||||
gem 'jemoji'
|
||||
@@ -1,116 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.3.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.6)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.7)
|
||||
ffi (1.13.1)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.1)
|
||||
html-pipeline (2.13.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (1.8.3)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.1.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 1.0)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 2.1)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.4.0)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 3.0)
|
||||
safe_yaml (~> 1.0)
|
||||
terminal-table (~> 1.8)
|
||||
jekyll-feed (0.13.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-optional-front-matter (0.3.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.3.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-redirect-from (0.16.0)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-relative-links (0.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-sass-converter (2.1.0)
|
||||
sassc (> 2.0.1, < 3.0)
|
||||
jekyll-seo-tag (2.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-titles-from-headings (0.5.3)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.12.0)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
kramdown (2.3.0)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.2.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.4.0)
|
||||
mini_portile2 (2.4.0)
|
||||
minitest (5.14.1)
|
||||
nokogiri (1.10.9)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (4.0.5)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.4)
|
||||
rouge (3.20.0)
|
||||
safe_yaml (1.0.5)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.7.0)
|
||||
zeitwerk (2.3.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (~> 4.1.0)
|
||||
jekyll-feed (~> 0.13.0)
|
||||
jekyll-optional-front-matter (~> 0.3.2)
|
||||
jekyll-paginate (~> 1.1)
|
||||
jekyll-readme-index (~> 0.3.0)
|
||||
jekyll-redirect-from (~> 0.16.0)
|
||||
jekyll-relative-links (~> 0.6.1)
|
||||
jekyll-seo-tag (~> 2.6, >= 2.6.1)
|
||||
jekyll-sitemap (~> 1.4)
|
||||
jekyll-titles-from-headings (~> 0.5.3)
|
||||
jemoji
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
@@ -0,0 +1,46 @@
|
||||
# Running in Docker
|
||||
|
||||
To run this site in a Docker container, you can use `make serve-docs` from the root directory.
|
||||
|
||||
# Dependencies for MacOS
|
||||
|
||||
Install the following for an easy to use dev environment:
|
||||
|
||||
* `brew install hugo`
|
||||
|
||||
# Dependencies for Linux
|
||||
If you are running a build on Ubuntu you will need the following packages:
|
||||
* hugo
|
||||
|
||||
|
||||
# Local Development
|
||||
1. Clone down your own fork, or clone the main repo `git clone https://github.com/vmware-tanzu/velero` and add your own remote.
|
||||
1. `cd velero/site`
|
||||
1. Serve the site and watch for markup/sass changes `hugo serve`.
|
||||
1. View your website at http://127.0.0.1:1313/
|
||||
1. Commit any changes and push everything to your fork.
|
||||
1. Once you're ready, submit a PR of your changes. Netlify will automatically generate a preview of your changes.
|
||||
|
||||
# Jetbrains IDE setup (IntelliJ, Goland, etc)
|
||||
1. Install the `Hugo Integration` plugin: https://plugins.jetbrains.com/plugin/13215-hugo-integration
|
||||
- Under `Preferences...` -> `Plugins`
|
||||
1. Create a new configuration:
|
||||
- Click `Edit Configurations...`
|
||||
- Click the `+` button to create a new configuration and select `Hugo`
|
||||
- Select `hugo serve` and make sure it is running under the `site` directory
|
||||
- Save and run the new Configuration
|
||||
- View your website at http://127.0.0.1:1313/
|
||||
- Any changes in `site` will reload the website automatically
|
||||
|
||||
# Adding a New Docs Version
|
||||
|
||||
To add a new set of versioned docs to go with a new Velero release:
|
||||
|
||||
1. In the root of the repository, run:
|
||||
|
||||
```bash
|
||||
# set to the appropriate version numbers
|
||||
NEW_DOCS_VERSION=vX.Y VELERO_VERSION=vX.Y.Z make gen-docs
|
||||
```
|
||||
|
||||
1. [Pre-release only] In `site/config.yaml`, revert the change to the `latest` field, so the pre-release docs do not become the default.
|
||||
@@ -1,49 +0,0 @@
|
||||
# Running in Docker
|
||||
|
||||
To run this site in a Docker container, you can use `make serve-docs` from the root directory.
|
||||
|
||||
# Dependencies for MacOS
|
||||
|
||||
Install the following for an easy to use dev environment:
|
||||
|
||||
* `brew install rbenv`
|
||||
* `rbenv install 2.6.3`
|
||||
* `gem install bundler`
|
||||
|
||||
# Dependencies for Linux
|
||||
If you are running a build on Ubuntu you will need the following packages:
|
||||
* ruby
|
||||
* ruby-dev
|
||||
* ruby-bundler
|
||||
* build-essential
|
||||
* zlib1g-dev
|
||||
* nginx (or apache2)
|
||||
|
||||
|
||||
# Local Development
|
||||
1. Install Jekyll and plug-ins in one fell swoop. `gem install github-pages`
|
||||
This mirrors the plug-ins used by GitHub Pages on your local machine including Jekyll, Sass, etc.
|
||||
2. Clone down your own fork, or clone the main repo `git clone https://github.com/vmware-tanzu/velero` and add your own remote.
|
||||
3. `cd velero/site`
|
||||
4. `rbenv local 2.6.3`
|
||||
5. `bundle install`
|
||||
6. Serve the site and watch for markup/sass changes `jekyll serve --livereload --incremental`. You may need to run `bundle exec jekyll serve --livereload --incremental`.
|
||||
7. View your website at http://127.0.0.1:4000/
|
||||
8. Commit any changes and push everything to your fork.
|
||||
9. Once you're ready, submit a PR of your changes. Netlify will automatically generate a preview of your changes.
|
||||
|
||||
|
||||
# Adding a New Docs Version
|
||||
|
||||
To add a new set of versioned docs to go with a new Velero release:
|
||||
|
||||
1. In the root of the repository, run:
|
||||
|
||||
```bash
|
||||
# set to the appropriate version numbers
|
||||
NEW_DOCS_VERSION=vX.Y VELERO_VERSION=vX.Y.Z make gen-docs
|
||||
```
|
||||
|
||||
1. In `site/_config.yml`, under the `defaults` field, add an entry for the new version just under `main` by copying the most recent version's entry and updating the version numbers.
|
||||
|
||||
1. [Pre-release only] In `site/_config.yml`, revert the change to the `latest` field, so the pre-release docs do not become the default.
|
||||
@@ -1,233 +0,0 @@
|
||||
# Site settings
|
||||
title: Velero
|
||||
email:
|
||||
author: Velero Authors
|
||||
description: Backup and migrate Kubernetes resources and persistent volumes
|
||||
#url: velero.io
|
||||
logo: Velero.svg
|
||||
twitter:
|
||||
username: projectvelero
|
||||
card: summary
|
||||
vm_logo: vm-logo.png
|
||||
gh_repo: https://github.com/vmware-tanzu/velero
|
||||
markdown: kramdown
|
||||
hero:
|
||||
background-color: med-blue
|
||||
footer:
|
||||
title: Getting Started
|
||||
content: To help you get started, see the documentation.
|
||||
cta_title: ''
|
||||
cta_url: /docs
|
||||
cta_text: Documentation
|
||||
vm-link: http://vmware.github.io/
|
||||
|
||||
footer_social_links:
|
||||
Twitter:
|
||||
fa_icon: fab fa-twitter
|
||||
url: https://twitter.com/projectvelero
|
||||
Slack:
|
||||
fa_icon: fab fa-slack
|
||||
url: https://kubernetes.slack.com/messages/velero
|
||||
Google Groups:
|
||||
fa_icon: fas fa-users
|
||||
url: https://groups.google.com/forum/#!forum/projectvelero
|
||||
RSS:
|
||||
fa_icon: fa fa-rss
|
||||
url: feed.xml
|
||||
GitHub:
|
||||
fa_icon: fab fa-github
|
||||
url: https://github.com/vmware-tanzu/velero
|
||||
|
||||
defaults:
|
||||
- scope:
|
||||
path: "" # an empty string here means all files in the project
|
||||
type: "posts"
|
||||
values:
|
||||
layout: "posts"
|
||||
- scope:
|
||||
path: ""
|
||||
type: "pages"
|
||||
values:
|
||||
layout: "default"
|
||||
- scope:
|
||||
path: docs/main
|
||||
values:
|
||||
version: main
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/main
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.4
|
||||
values:
|
||||
version: v1.4
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.4.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.3.2
|
||||
values:
|
||||
version: v1.3.2
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.3.2
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.3.1
|
||||
values:
|
||||
version: v1.3.1
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.3.1
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.3.0
|
||||
values:
|
||||
version: v1.3.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.3.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.2.0
|
||||
values:
|
||||
version: v1.2.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.2.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.1.0
|
||||
values:
|
||||
version: v1.1.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v1.1.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v1.0.0
|
||||
values:
|
||||
version: v1.0.0
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v1.0.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.11.0
|
||||
values:
|
||||
version: v0.11.0
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v0.11.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.10.0
|
||||
values:
|
||||
version: v0.10.0
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v0.10.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.9.0
|
||||
values:
|
||||
version: v0.9.0
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v0.9.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.8.1
|
||||
values:
|
||||
version: v0.8.1
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v0.8.1
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.8.0
|
||||
values:
|
||||
version: v0.8.0
|
||||
gh: https:/github.com/vmware-tanzu/velero/tree/v0.8.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.7.1
|
||||
values:
|
||||
version: v0.7.1
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.7.1
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.7.0
|
||||
values:
|
||||
version: v0.7.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.7.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.6.0
|
||||
values:
|
||||
version: v0.6.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.6.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.5.0
|
||||
values:
|
||||
version: v0.5.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.5.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.4.0
|
||||
values:
|
||||
version: v0.4.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.4.0
|
||||
layout: "docs"
|
||||
- scope:
|
||||
path: docs/v0.3.0
|
||||
values:
|
||||
version: v0.3.0
|
||||
gh: https://github.com/vmware-tanzu/velero/tree/v0.3.0
|
||||
layout: "docs"
|
||||
|
||||
page_gen:
|
||||
- data: shortlinks
|
||||
template: redirect
|
||||
name: key
|
||||
dir: docs
|
||||
|
||||
collections:
|
||||
- contributors
|
||||
- casestudies
|
||||
- plugin-list
|
||||
|
||||
versioning: true
|
||||
latest: v1.4
|
||||
versions:
|
||||
- main
|
||||
- v1.4
|
||||
- v1.3.2
|
||||
- v1.3.1
|
||||
- v1.3.0
|
||||
- v1.2.0
|
||||
- v1.1.0
|
||||
- v1.0.0
|
||||
- v0.11.0
|
||||
- v0.10.0
|
||||
- v0.9.0
|
||||
- v0.8.1
|
||||
- v0.8.0
|
||||
- v0.7.1
|
||||
- v0.7.0
|
||||
- v0.6.0
|
||||
- v0.5.0
|
||||
- v0.4.0
|
||||
- v0.3.0
|
||||
|
||||
# Build settings
|
||||
permalink: /blog/:title/
|
||||
sass:
|
||||
sass_dir: css
|
||||
style: :compressed
|
||||
|
||||
# Use the following plug-ins
|
||||
plugins:
|
||||
- jekyll-readme-index # use README.md as index.html
|
||||
- jekyll-sitemap # Create a sitemap using the official Jekyll sitemap gem
|
||||
- jekyll-feed # Create an Atom feed using the official Jekyll feed gem
|
||||
- jekyll-relative-links # Used to auto generate md links to html links
|
||||
- jekyll-optional-front-matter # Parse Markdown files that do not have front-matter callouts
|
||||
- jekyll-titles-from-headings # pull the page title from the first Markdown heading when none is specified.
|
||||
- jekyll-paginate # pagination object for collections (e.g. posts)
|
||||
- jekyll-redirect-from
|
||||
- jekyll-seo-tag
|
||||
- jemoji
|
||||
|
||||
# Include these subdirectories
|
||||
include:
|
||||
- CONTRIBUTING.md
|
||||
- README.md
|
||||
|
||||
# Exclude these files from your production _site
|
||||
exclude:
|
||||
- Gemfile
|
||||
- Gemfile.lock
|
||||
- README-JEKYLL.md
|
||||
- LICENSE
|
||||
- CNAME
|
||||
- Runbook.docx
|
||||
- '*.sh'
|
||||
@@ -1,48 +0,0 @@
|
||||
toc:
|
||||
- title: Introduction
|
||||
subfolderitems:
|
||||
- page: About Ark
|
||||
url: /index.html
|
||||
- page: Getting started
|
||||
url: /quickstart
|
||||
- page: How Ark works
|
||||
url: /about
|
||||
- title: Run Ark
|
||||
subfolderitems:
|
||||
- page: Create a backup
|
||||
url: /run-backup
|
||||
- page: Restore from backup
|
||||
url: /restore
|
||||
- title: Customize Ark
|
||||
subfolderitems:
|
||||
- page: Build from source
|
||||
url: /build-from-scratch
|
||||
- page: Extend
|
||||
url: /extend
|
||||
- page: Extend with plugins
|
||||
url: /plugins
|
||||
- page: Extend with hooks
|
||||
url: /hooks
|
||||
- title: Reference
|
||||
subfolderitems:
|
||||
- page: Backup file format
|
||||
url: /output-file-format
|
||||
- page: API types
|
||||
url: /api-types
|
||||
- title: Tutorials
|
||||
subfolderitems:
|
||||
- page: Disaster Recovery
|
||||
url: /use-cases
|
||||
- page: Cluster migration
|
||||
url: /use-cases.html#cluster-migration
|
||||
- title: Troubleshooting
|
||||
subfolderitems:
|
||||
- page: Troubleshooting
|
||||
url: /troubleshooting
|
||||
- page: Troubleshoot an install or setup
|
||||
url: /debugging-install
|
||||
- page: Troubleshoot a backup delete
|
||||
url: /debugging-deletes
|
||||
- page: Troubleshoot a restore
|
||||
url: /debugging-restores
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
- title: Troubleshooting
|
||||
key: troubleshooting
|
||||
destination: troubleshooting
|
||||
- title: Supported Providers
|
||||
key: supported-providers
|
||||
destination: supported-providers
|
||||
- title: ZenHub
|
||||
key: zenhub
|
||||
destination: zenhub
|
||||
- title: Install Overview
|
||||
key: install-overview
|
||||
destination: basic-install
|
||||
- title: Start Contributing
|
||||
key: start-contributing
|
||||
destination: start-contributing
|
||||
- title: Customize Installation
|
||||
key: customize-installation
|
||||
destination: customize-installation
|
||||
- title: Frequently Asked Questions
|
||||
key: faq
|
||||
destination: faq
|
||||
- title: Container Storage Interface Snapshot Support in Velero
|
||||
key: csi
|
||||
destination: csi
|
||||
@@ -1,13 +0,0 @@
|
||||
<div class="row">
|
||||
{% for post in site.tags[page.tag] %}
|
||||
{% include blog-post-card.html %}
|
||||
{% if limit > 0 and forloop.index >= limit %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% assign row = forloop.index | modulo: 3 %}
|
||||
{% if row == 0 %}
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,13 +0,0 @@
|
||||
<div class="row">
|
||||
{% for post in site.posts %}
|
||||
{% include blog-post-card.html %}
|
||||
{% if limit > 0 and forloop.index >= limit %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% assign row = forloop.index | modulo: 3 %}
|
||||
{% if row == 0 %}
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,26 +0,0 @@
|
||||
{{casestudy_background}}
|
||||
<div class="alternating-cards">
|
||||
{% for casestudy in site.casestudies %}
|
||||
<div class="row no-gutters align-items-center">
|
||||
{% if casestudy.icon %}
|
||||
<div class="order-xs-first col-md-3 match-height icon bg-color-{{ page.backgrounds.case_study }} {% cycle('order-md-first', 'order-md-last') %}">
|
||||
<img src="/img/case-study-icons/{{ casestudy.icon }}" alt="{{ casestudy.title }}"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="order-xs-last col-md-9 {% cycle('order-md-last', 'order-md-first') %}">
|
||||
<div class="card-body">
|
||||
{% if casestudy.title != blank %}
|
||||
<h5 class="card-title">{{ casestudy.title }}</h5>
|
||||
{% endif %}
|
||||
<p class="card-text">{{ casestudy.content | markdownify }}</p>
|
||||
{% for link in casestudy.links %}
|
||||
<a class="card-link btn btn-primary btn-sm" href="{{ link[1] }}">{{ link[0] }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if limit > 0 and forloop.index >= limit %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,21 +0,0 @@
|
||||
<div class="row">
|
||||
{% for casestudy in site.casestudies %}
|
||||
<div class="card card-dark col-md-12 mb-3 mb-sm-0 {% if forloop.index > 1 %}mt-3{% endif %}">
|
||||
<div class="card-body match-height text-center">
|
||||
{% if casestudy.title != blank %}
|
||||
<h5 class="card-title">{{ casestudy.title }}</h5>
|
||||
{% endif %}
|
||||
{% if casestudy.subtitle != blank %}
|
||||
<h6 class="card-subtitle mb-2">{{ casestudy.subtitle }}</h6>
|
||||
{% endif %}
|
||||
<p class="card-text">{{ casestudy.content | markdownify }}</p>
|
||||
{% for link in casestudy.links %}
|
||||
<a class="card-link btn btn-primary" href="{{ link[1] }}">{{ link[0] }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% if limit > 0 and forloop.index >= limit %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,26 +0,0 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h2 class="mb-2">The {{ site.title }} Team</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<p>{{ site.title }} is released as open source software and provides community support through our GitHub project page.
|
||||
If you encounter an issue or have a question, feel free to reach out on the <strong><a href="{{ site.gh_repo }}/issues" class="light">GitHub issues page for {{ site.title }}</a></strong>.</p>
|
||||
<p>The Velero project team welcomes contributions from the community, please see our <strong><a href="https://velero.io/docs/main/start-contributing/" class="light">contributing documentation</a></strong>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row thumbnail-grid mt-5">
|
||||
{% for person in site.contributors %}
|
||||
<div class="col-xs-12 col-sm-6 col-md-4">
|
||||
<div class="media thumbnail-item">
|
||||
<img src="{{ person.image }}" class="rounded-circle" alt="Person" />
|
||||
<div class="media-body align-self-center">
|
||||
<h6><a href="https://github.com/{{ person.github_handle }}">{{ person.first_name }} {{ person.last_name }}</a></h6>
|
||||
{{ person.content | markdownify }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,52 +0,0 @@
|
||||
<div class="section section-background-darkest-blue">
|
||||
<div class="section-content">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-8">
|
||||
<h5>{{ site.footer.title }}</h5>
|
||||
<p>{{ site.footer.content }}</p>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 offset-lg-1">
|
||||
<p><strong>{{ site.footer.cta_title }}</strong></p>
|
||||
<a href="{{ site.footer.cta_url }}" class="btn btn-sm btn-primary btn-no-border">{{ site.footer.cta_text }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="section site-footer">
|
||||
<div class="section-content">
|
||||
<div class="row justify-content-between align-items-center">
|
||||
<div class="col-12 col-md-8 mb-3 mb-md-0">
|
||||
<ul class="social-links text-center text-md-left">
|
||||
{% for link in site.footer_social_links %}
|
||||
<li>
|
||||
{% if(link[1].fa_icon != false) %}
|
||||
<i class="{{ link[1].fa_icon }} fa-lg fa-fw mr-1"></i>
|
||||
{% endif %}
|
||||
<a href="{{ link[1].url }}">{{ link[0] }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-12 col-md-4 text-center text-md-right">
|
||||
<a href="/" aria-label="Velero homepage"><img src="/img/{{ site.logo }}" class="logo" alt="Homepage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-center">
|
||||
<div class="col copyright text-center text-md-right mt-4">
|
||||
© {{ site.time | date: '%Y' }} {{ site.author }}.
|
||||
<a href="{{ site.footer.vm-link }}" class="vm-logo">A VMware-backed project. <img src="/img/{{ site.vm_logo }}" alt="VMware logo"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- JS -->
|
||||
<script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js" integrity="sha384-g5uSoOSBd7KkhAMlnQILrecXvzst9TdC09/VM+pjDTCM+1il8RHz5fKANTFFb+gQ" crossorigin="anonymous"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" crossorigin="anonymous"></script>
|
||||
|
||||
<script src="/js/jquery.matchHeight.js?{{site.time | date: '%s%N'}}"></script>
|
||||
<script src="/js/scripts.js?{{site.time | date: '%s%N'}}"></script>
|
||||
@@ -1,9 +0,0 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/css/styles.css?{{site.time | date: '%s%N'}}">
|
||||
{% seo %}
|
||||
</head>
|
||||
@@ -1,10 +0,0 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/css/styles.css?{{site.time | date: '%s%N'}}">
|
||||
<title>{{ site.title }} {{page.title}}</title>
|
||||
{% seo %}
|
||||
</head>
|
||||
@@ -1,24 +0,0 @@
|
||||
<nav class="navigation">
|
||||
<!-- If new pages are added to the site and the TOC needs to be updated, it
|
||||
can be overridden, using toc-mapping.yml -->
|
||||
{% assign tocTemplateName = site.data.toc-mapping[page.version] %}
|
||||
{% if tocTemplateName == null %}
|
||||
{% assign tocTemplateName = 'default' %}
|
||||
{% endif %}
|
||||
{% assign toc = site.data[tocTemplateName].toc %}
|
||||
|
||||
{% for item in toc %}
|
||||
<h3>{{ item.title }}</h3>
|
||||
<ul>
|
||||
{% for entry in item.subfolderitems %}
|
||||
<li>
|
||||
{% if entry.github %}
|
||||
<a href="{{ entry.url | prepend: page.gh }}" target="_blank">{{ entry.page }}</a>
|
||||
{% else %}
|
||||
<a href="{{ entry.url | prepend: page.version | prepend: "/docs/" | relative_url }}">{{ entry.page }}</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</nav>
|
||||
@@ -1,81 +0,0 @@
|
||||
<div class="section section-card section-card-offset-top promo-cards">
|
||||
<div class="section-content">
|
||||
<div class="row">
|
||||
{% for plugin in site.plugin-list %}
|
||||
<div class="col-md">
|
||||
<div class="card card-light mb-3 mb-md-0 shadow-sm">
|
||||
<div class="card-body match-height">
|
||||
{% if plugin.supported-by-velero-team == "true" %}
|
||||
{% if plugin.link.size > 0 %}
|
||||
<h5><a href="{{ plugin.link }}" class="dark">{{ plugin.title }}</a></h5>
|
||||
{% else %}
|
||||
<h5>{{ plugin.title }}</h5>
|
||||
{% endif %}
|
||||
<p>{{ plugin.content }}</p>
|
||||
{% if plugin.object-storage %}
|
||||
<img src="https://img.shields.io/badge/Object Storage-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.volumesnapshotter %}
|
||||
<img src="https://img.shields.io/badge/VolumeSnapshotter-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.local-storage %}
|
||||
<img src="https://img.shields.io/badge/Local Storage-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.supported-by-velero-team %}
|
||||
<img src="https://img.shields.io/badge/Supported%20By-Velero%20team-blue">
|
||||
{% endif %}
|
||||
{% if plugin.BackupItemAction %}
|
||||
<img src="https://img.shields.io/badge/BackupItemAction-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.RestoreItemAction %}
|
||||
<img src="https://img.shields.io/badge/RestoreItemAction-supported-green">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card card-light mb-3 mb-md-0 shadow-sm">
|
||||
<div class="card-body match-height">
|
||||
{% if plugin.supported-by-velero-team != "true" && plugin.prototype != "true" %}
|
||||
{% if plugin.link.size > 0 %}
|
||||
<h5><a href="{{ plugin.link }}" class="dark">{{ plugin.title }}</a></h5>
|
||||
{% else %}
|
||||
<h5>{{ plugin.title }}</h5>
|
||||
{% endif %}
|
||||
<p>{{ plugin.content }}</p>
|
||||
{% if plugin.object-storage %}
|
||||
<img src="https://img.shields.io/badge/Object Storage-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.volumesnapshotter %}
|
||||
<img src="https://img.shields.io/badge/VolumeSnapshotter-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.local-storage %}
|
||||
<img src="https://img.shields.io/badge/Local Storage-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.supported-by-velero-team %}
|
||||
<img src="https://img.shields.io/badge/Supported%20By-Velero%20team-blue">
|
||||
{% endif %}
|
||||
{% if plugin.BackupItemAction %}
|
||||
<img src="https://img.shields.io/badge/BackupItemAction-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.RestoreItemAction %}
|
||||
<img src="https://img.shields.io/badge/RestoreItemAction-supported-green">
|
||||
{% endif %}
|
||||
{% if plugin.beta %}
|
||||
<img src="https://img.shields.io/badge/Beta-true-yellow">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if limit > 0 and forloop.index >= limit %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% assign row = forloop.index | modulo: 3 %}
|
||||
{% if row == 0 %}
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,10 +0,0 @@
|
||||
<h5 class="font-color-darker">Related Content</h5>
|
||||
<div class="row">
|
||||
{% for category in site.categories limit:1 %}
|
||||
|
||||
{% for post in category[1] limit:2 %}
|
||||
{% include blog-post-card.html %}
|
||||
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,26 +0,0 @@
|
||||
{% if page.version != site.latest %}
|
||||
<div class="alert alert-primary" role="alert">
|
||||
{% if page.version == 'main' %}
|
||||
<p>
|
||||
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
This is the documentation for the latest development version of Velero. Both code and docs may be
|
||||
unstable, and these docs are not guaranteed to be up to date or correct. See the
|
||||
<a href="{{latest_url}}">latest version</a>.
|
||||
</p>
|
||||
{% elsif page.version contains 'beta' or page.version contains 'alpha' or page.version contains 'rc' or page.version contains 'pre' %}
|
||||
<p>
|
||||
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
This is the documentation for the latest pre-production version of Velero. Both code and docs may be
|
||||
unstable, and these docs only a best-guess effort at being up to date or correct. See the
|
||||
<a href="{{latest_url}}">latest version</a>.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
Documentation for version {{ page.version }} is no longer actively maintained.
|
||||
The version you are currently viewing is a static snapshot.
|
||||
For up-to-date documentation, see the <a href="{{latest_url}}">latest version</a>.
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -1,21 +0,0 @@
|
||||
<div class="row">
|
||||
<div class="dropdown mb-2">
|
||||
{% if site.versioning %}
|
||||
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{ page.version }}
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
{% assign original_version = page.version | prepend: '/' | append: '/' %}
|
||||
{% assign latest_url = page.url | replace: page.version, site.latest | relative_url %}
|
||||
|
||||
|
||||
{% for version in site.versions %}
|
||||
{% assign new_version = version | prepend: '/' | append: '/' %}
|
||||
<a class="dropdown-item" href="{{ page.url | replace: original_version, new_version | relative_url }}">{{ version }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<span>{{ site.latest }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,15 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% include head.html %}
|
||||
|
||||
<body id="{{ page.id }}">
|
||||
<div class="container-fluid site-outer-container">
|
||||
<div class="site-container">
|
||||
{% include site-header.html %}
|
||||
{{ content }}
|
||||
{% include footer.html %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,62 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% include head-docs.html %}
|
||||
{% if page.version != "main" %}
|
||||
<!-- Block google from indexing versioned docs -->
|
||||
<meta name="robots" content="noindex">
|
||||
{% endif %}
|
||||
{% if page.name != "README.md" %}
|
||||
<title>{{ site.title }} Docs - {{page.title}}</title>
|
||||
{% endif %}
|
||||
{% if page.name == "README.md" %}
|
||||
<title>{{ site.title }} Docs - Overview</title>
|
||||
{% endif %}
|
||||
|
||||
<body id="docs">
|
||||
<div class="container-fluid site-outer-container">
|
||||
<div class="site-container">
|
||||
{% include site-header.html %}
|
||||
<div class="post-single-hero post-single-hero-short bg-color-{{ site.hero.background-color }}">
|
||||
<div class="section">
|
||||
<div class="section-content">
|
||||
<h1>Documentation</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section section-card pt-4 pb-0">
|
||||
<div class="container container-max">
|
||||
<div class="row">
|
||||
<div class="col-md-3 toc">
|
||||
{% include versions.html %}
|
||||
<br />
|
||||
<form class="d-flex align-items-center">
|
||||
<span class="algolia-autocomplete" style="position: relative; display: inline-block; direction: ltr;">
|
||||
<input type="search" class="form-control docsearch-input" id="search-input" placeholder="Search..." aria-label="Search for..." autocomplete="off" spellcheck="false" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-owns="algolia-autocomplete-listbox-0" dir="auto" style="position: relative; vertical-align: top;">
|
||||
</span>
|
||||
</form>
|
||||
{% include nav.html %}
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
{% include version-warning.html %}
|
||||
<div class="documentation-container">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include footer.html %}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
|
||||
<script type="text/javascript"> docsearch({
|
||||
apiKey: '3d80f66bb5ecf85f8e2760caef383f24',
|
||||
indexName: 'velero',
|
||||
inputSelector: '.docsearch-input',
|
||||
algoliaOptions: { 'facetFilters': ["version:{{ page.version }}"] },
|
||||
debug: false // Set debug to true if you want to inspect the dropdown
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,28 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% include head.html %}
|
||||
|
||||
<body id="{{ page.id }}">
|
||||
<div class="container-fluid site-outer-container">
|
||||
<div class="site-container">
|
||||
{% include site-header.html %}
|
||||
<div class="post-single-hero bg-color-{{ site.hero.background-color }}">
|
||||
<div class="section">
|
||||
<div class="section-content">
|
||||
<h1>{{ page.title }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-single-body">
|
||||
<div class="section section-card">
|
||||
<div class="section-content pt-4 pb-0">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include footer.html %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,55 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% include head.html %}
|
||||
|
||||
<body id="blog">
|
||||
<div class="container-fluid site-outer-container">
|
||||
<div class="site-container">
|
||||
{% include site-header.html %}
|
||||
<div class="post-single-hero bg-color-{{ site.hero.background-color }}">
|
||||
<div class="section">
|
||||
<div class="section-content">
|
||||
<h1>{{ page.title }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-single-body">
|
||||
<div class="section section-card">
|
||||
<div class="section-content pt-4 pb-0">
|
||||
<div class="post-single-meta">
|
||||
<div class="post-single-meta-author">
|
||||
{% if page.author_avatar %}
|
||||
<div class="post-single-meta-author-avatar">
|
||||
<img src="{{ page.author_avatar }}" alt="{{ page.author_name }}">
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="post-single-meta-author-name">
|
||||
<a href="/tags/{{ page.author_name | urlencode }}">{{ page.author_name }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-single-meta-date">
|
||||
{{ page.date | date: "%B %d, %Y" }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="post-single-content">
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section pt-3">
|
||||
<div class="section-content section-content-thin">
|
||||
{% include related-posts.html %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include footer.html %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,15 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
{% if page.dir contains "/docs/" %}
|
||||
<meta http-equiv="refresh" content="0; url=/docs/{{ site.latest }}/{{ page.destination }}" />
|
||||
<script type="text/javascript">
|
||||
window.location.href = "/docs/{{ site.latest }}/{{ page.destination }}"
|
||||
</script>
|
||||
<title>Redirecting to docs...</title>
|
||||
</head>
|
||||
<body>
|
||||
Redirecting to {{ page.destination }}. If it doesn't load, click <a href="/docs/{{ site.latest }}/{{ page.destination }}" />here</a>.
|
||||
</body>
|
||||
</html>
|
||||
{% endif %}
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
type: standard
|
||||
caption: 'Tag Index'
|
||||
id: blog
|
||||
---
|
||||
<div class="post-single-hero bg-color-{{ site.hero.background-color }}">
|
||||
<div class="section">
|
||||
<div class="section-content">
|
||||
<h1>{{ page.title }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="post-single-body">
|
||||
<div class="section section-card">
|
||||
<div class="section-content pt-4 pb-0">
|
||||
{% include blog-posts-tag.html %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,135 +0,0 @@
|
||||
# coding: utf-8
|
||||
# Generate pages from individual records in yml files
|
||||
# (c) 2014-2016 Adolfo Villafiorita
|
||||
# Distributed under the conditions of the MIT License
|
||||
|
||||
module Jekyll
|
||||
|
||||
module Sanitizer
|
||||
# strip characters and whitespace to create valid filenames, also lowercase
|
||||
def sanitize_filename(name)
|
||||
if(name.is_a? Integer)
|
||||
return name.to_s
|
||||
end
|
||||
return name.tr(
|
||||
"ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÑñÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž",
|
||||
"AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz"
|
||||
).downcase.strip.gsub(' ', '-').gsub(/[^\w.-]/, '')
|
||||
end
|
||||
end
|
||||
|
||||
# this class is used to tell Jekyll to generate a page
|
||||
class DataPage < Page
|
||||
include Sanitizer
|
||||
|
||||
# - site and base are copied from other plugins: to be honest, I am not sure what they do
|
||||
#
|
||||
# - `index_files` specifies if we want to generate named folders (true) or not (false)
|
||||
# - `dir` is the default output directory
|
||||
# - `data` is the data defined in `_data.yml` of the record for which we are generating a page
|
||||
# - `name` is the key in `data` which determines the output filename
|
||||
# - `template` is the name of the template for generating the page
|
||||
# - `extension` is the extension for the generated file
|
||||
def initialize(site, base, index_files, dir, data, name, template, extension)
|
||||
@site = site
|
||||
@base = base
|
||||
|
||||
# @dir is the directory where we want to output the page
|
||||
# @name is the name of the page to generate
|
||||
#
|
||||
# the value of these variables changes according to whether we
|
||||
# want to generate named folders or not
|
||||
if data[name] == nil
|
||||
puts "error (datapage_gen). empty value for field '#{name}' in record #{data}"
|
||||
else
|
||||
filename = sanitize_filename(data[name]).to_s
|
||||
|
||||
@dir = dir + (index_files ? "/" + filename + "/" : "")
|
||||
@name = (index_files ? "index" : filename) + "." + extension.to_s
|
||||
|
||||
self.process(@name)
|
||||
self.read_yaml(File.join(base, '_layouts'), template + ".html")
|
||||
self.data['title'] = data[name]
|
||||
# add all the information defined in _data for the current record to the
|
||||
# current page (so that we can access it with liquid tags)
|
||||
self.data.merge!(data)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DataPagesGenerator < Generator
|
||||
safe true
|
||||
|
||||
# generate loops over _config.yml/page_gen invoking the DataPage
|
||||
# constructor for each record for which we want to generate a page
|
||||
|
||||
def generate(site)
|
||||
# page_gen_dirs determines whether we want to generate index pages
|
||||
# (name/index.html) or standard files (name.html). This information
|
||||
# is passed to the DataPage constructor, which sets the @dir variable
|
||||
# as required by this directive
|
||||
index_files = site.config['page_gen-dirs'] == true
|
||||
|
||||
# data contains the specification of the data for which we want to generate
|
||||
# the pages (look at the README file for its specification)
|
||||
data = site.config['page_gen']
|
||||
if data
|
||||
data.each do |data_spec|
|
||||
index_files_for_this_data = data_spec['index_files'] != nil ? data_spec['index_files'] : index_files
|
||||
template = data_spec['template'] || data_spec['data']
|
||||
name = data_spec['name']
|
||||
dir = data_spec['dir'] || data_spec['data']
|
||||
extension = data_spec['extension'] || "html"
|
||||
|
||||
if site.layouts.key? template
|
||||
# records is the list of records defined in _data.yml
|
||||
# for which we want to generate different pages
|
||||
records = nil
|
||||
data_spec['data'].split('.').each do |level|
|
||||
if records.nil?
|
||||
records = site.data[level]
|
||||
else
|
||||
records = records[level]
|
||||
end
|
||||
end
|
||||
|
||||
# apply filtering conditions:
|
||||
# - filter requires the name of a boolean field
|
||||
# - filter_condition evals a ruby expression
|
||||
records = records.select { |r| r[data_spec['filter']] } if data_spec['filter']
|
||||
records = records.select { |record| eval(data_spec['filter_condition']) } if data_spec['filter_condition']
|
||||
|
||||
records.each do |record|
|
||||
site.pages << DataPage.new(site, site.source, index_files_for_this_data, dir, record, name, template, extension)
|
||||
end
|
||||
else
|
||||
puts "error (datapage_gen). could not find template #{template}" if not site.layouts.key? template
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module DataPageLinkGenerator
|
||||
include Sanitizer
|
||||
|
||||
# use it like this: {{input | datapage_url: dir}}
|
||||
# to generate a link to a data_page.
|
||||
#
|
||||
# the filter is smart enough to generate different link styles
|
||||
# according to the data_page-dirs directive ...
|
||||
#
|
||||
# ... however, the filter is not smart enough to support different
|
||||
# extensions for filenames.
|
||||
#
|
||||
# Thus, if you use the `extension` feature of this plugin, you
|
||||
# need to generate the links by hand
|
||||
def datapage_url(input, dir)
|
||||
extension = Jekyll.configuration({})['page_gen-dirs'] ? '/' : '.html'
|
||||
"#{dir}/#{sanitize_filename(input)}#{extension}"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Liquid::Template.register_filter(Jekyll::DataPageLinkGenerator)
|
||||
@@ -1,32 +0,0 @@
|
||||
module Jekyll
|
||||
|
||||
class TagPage < Page
|
||||
def initialize(site, base, dir, tag)
|
||||
@site = site
|
||||
@base = base
|
||||
@dir = dir
|
||||
@name = 'index.html'
|
||||
|
||||
self.process(@name)
|
||||
self.read_yaml(File.join(base, '_layouts'), 'tag-index.html')
|
||||
self.data['tag'] = tag
|
||||
|
||||
tag_title_prefix = site.config['tag_title_prefix'] || 'Posts by '
|
||||
self.data['title'] = "#{tag_title_prefix}#{tag}"
|
||||
end
|
||||
end
|
||||
|
||||
class TagPageGenerator < Generator
|
||||
safe true
|
||||
|
||||
def generate(site)
|
||||
if site.layouts.key? 'tag-index'
|
||||
dir = site.config['tag_dir'] || 'tags'
|
||||
site.tags.keys.each do |tag|
|
||||
site.pages << TagPage.new(site, site.source, File.join(dir, tag), tag)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,123 +0,0 @@
|
||||
# Title: YouTube plugin for Jekyll
|
||||
# Description: Liquid tag to generate a YouTube embed.
|
||||
# Authors:
|
||||
# - Joey Hoer (@joeyhoer | https://joeyhoer.com)
|
||||
#
|
||||
# Link: https://developers.google.com/youtube/player_parameters#Parameters
|
||||
#
|
||||
# Syntax: {% youtube [video_id] [width] [height] [query_param:value]... %}
|
||||
#
|
||||
# Examples:
|
||||
# {% youtube dQw4w9WgXcQ %}
|
||||
# {% youtube dQw4w9WgXcQ 600 rel:0 modestbranding:1 %}
|
||||
#
|
||||
|
||||
module Jekyll
|
||||
class YouTube < Liquid::Tag
|
||||
|
||||
## Constants
|
||||
|
||||
@@ATTRIBUTES = %w(
|
||||
autoplay
|
||||
cc_load_policy
|
||||
color
|
||||
controls
|
||||
disablekb
|
||||
enablejsapi
|
||||
end
|
||||
fs
|
||||
hl
|
||||
iv_load_policy
|
||||
list
|
||||
listType
|
||||
loop
|
||||
modestbranding
|
||||
origin
|
||||
playlist
|
||||
playsinline
|
||||
rel
|
||||
showinfo
|
||||
start
|
||||
widget_referrer
|
||||
)
|
||||
|
||||
@ytid = nil
|
||||
@width = ''
|
||||
@height = ''
|
||||
|
||||
def initialize(tag_name, markup, tokens)
|
||||
@content=markup
|
||||
|
||||
@config = {}
|
||||
|
||||
# Override configuration with values defined within _config.yml
|
||||
if Jekyll.configuration({}).has_key?('youtube')
|
||||
config = Jekyll.configuration({})['youtube']
|
||||
override_config(config)
|
||||
end
|
||||
|
||||
params = markup.split
|
||||
|
||||
if params.shift =~ /(?:(?:https?:\/\/)?(?:www.)?(?:youtube.com\/(?:embed\/|watch\?v=)|youtu.be\/)?(\S+)(?:\?rel=\d)?)/i
|
||||
@video_id = $1
|
||||
end
|
||||
|
||||
@width = (params[0].to_i > 0) ? params.shift.to_i : 560
|
||||
@height = (params[0].to_i > 0) ? params.shift.to_i : (@width / 16.0 * 9).ceil
|
||||
|
||||
if params.size > 0
|
||||
# Override configuration with parameters defined within Liquid tag
|
||||
config = {} # Reset local config
|
||||
params.each do |param|
|
||||
param = param.gsub /\s+/, '' # Remove whitespaces
|
||||
key, value = param.split(':',2) # Split first occurrence of ':' only
|
||||
config["#{key}"] = value
|
||||
end
|
||||
override_config(config)
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def override_config(config)
|
||||
config.each{ |key,value| @config[key] = value }
|
||||
end
|
||||
|
||||
def render(context)
|
||||
ouptut = super
|
||||
|
||||
if !@video_id
|
||||
@video_id = "#{context[@content.strip]}"
|
||||
end
|
||||
|
||||
if @video_id
|
||||
template_path = File.join(Dir.pwd, "_includes", "youtube.html")
|
||||
if File.exist?(template_path)
|
||||
site = context.registers[:site]
|
||||
|
||||
partial = File.read(template_path)
|
||||
template = Liquid::Template.parse(partial)
|
||||
|
||||
template.render!(({"video_id" => @video_id, "width" => @width, "height" => @height, "query_string" => render_query_string()}).merge(site.site_payload))
|
||||
else
|
||||
"<iframe width=\"#{@width}\" height=\"#{@height}\" src=\"https://www.youtube.com/embed/#{@video_id}#{render_query_string()}\" frameborder=\"0\" allowfullscreen></iframe>"
|
||||
end
|
||||
else
|
||||
puts "YouTube Embed: Error processing input, expected syntax {% youtube video_id [width] [height] [data-attr:value] %}"
|
||||
end
|
||||
end
|
||||
|
||||
def render_query_string
|
||||
result = []
|
||||
@config.each do |key,value|
|
||||
if @@ATTRIBUTES.include?(key.to_s)
|
||||
result << "#{key}=#{value}"
|
||||
end
|
||||
end
|
||||
return (!(result.empty?) ? '?' : '') + result.join('&')
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('youtube', Jekyll::YouTube)
|
||||
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Vendored
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user