# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

baseURL = '//nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.3'
languageCode = 'en-us'
title = 'Apache Flink Kubernetes Operator'
enableGitInfo = false
theme = "book"
pygmentsUseClasses = true

[params]
  # Flag whether this is a stable version or not.
  # Used for the quickstart page.
  IsStable = true

  # Flag to indicate whether an outdated warning should be shown.
  ShowOutDatedWarning = false

  # This is the version referenced in the docs. Please only use these variables
  # to reference a specific Flink version, because this is the only place where
  # we change the version for the complete docs when forking of a release branch
  # etc.
  # The full version string as referenced in Maven (e.g. 1.2.1)
  Version = "1.3.0"

  # For stable releases, leave the bugfix version out (e.g. 1.2). For snapshot
  # release this should be the same as the regular version
  VersionTitle = "1.3.0"

  # The branch for this version of the Apache Flink Kubernetes Operator
  Branch = "release-1.3"

  # The github repository for the Apache Flink Kubernetes Operator
  Repo = "//github.com/apache/flink-kubernetes-operator"

  GithubRepo = "https://github.com/apache/flink-kubernetes-operator.git"

  # This suffix is appended to the Scala-dependent Maven artifact names
  ScalaVersion = "_2.12"

  ProjectHomepage = "//flink.apache.org"

  JavaDocs = "//nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.3/api/java/"

  # External links at the bottom
  # of the menu
  MenuLinks = [
    ["Project Homepage", "//flink.apache.org"],
    ["JavaDocs", "//nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.3/api/java/"]
  ]

  PreviousDocs = [
    ["1.2", "https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.2"],
    ["1.1", "https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1"],
    ["1.0", "https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.0"],
    ["0.1", "https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-0.1"]
  ]

[markup]
[markup.goldmark.renderer]
  unsafe = true
