# 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-statefun-docs-master'
languageCode = "en-us"
title = "Apache Flink Stateful Functions"
enableGitInfo = false
theme = "book"
pygmentsUseClasses = true

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

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

  # This are 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 = "3.1-SNAPSHOT"

  # 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 = "3.1-SNAPSHOT"

  # The branch for this version of Apache Flink Stateful Functions
  Branch = "master"

  # The github repository for Apache Flink Stateful Functions
  Repo = "//github.com/apache/flink-statefun"

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

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

  ProjectHomepage = "//flink.apache.org"

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

  PreviousDocs = [
    ["3.0", "https://nightlies.apache.org/flink/flink-statefun-docs-release-3.0"],
    ["2.2", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.2"],
    ["2.1", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.1"],
    ["2.0", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.2"]
  ]

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