# 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 = 'https://flink.apache.org'
languageCode = "en-us"
title = "Apache Flink"
enableGitInfo = false
theme = "book"
pygmentsUseClasses = true

[permalinks]
posts = "/:year/:month/:day/:title/"

[params]
  DocsBaseUrl = "//nightlies.apache.org/flink/"

  # The github repository for Apache Flink project website
  Repo = "//github.com/apache/flink-web"

  # The link to Flink's Jira issues
  FlinkIssuesUrl = "https://issues.apache.org/jira/projects/FLINK/issues/"

  # Apache Flink uses a free plan for Slack, i.e. the number of users that can register via a
  # invite link is limited which makes it necessary to update this link every now and then.
  #
  # Any member of the Apache Flink Slack workspace can perform the following steps to generate the link:
  #  1. In the Apache Flink Slack workspace, click on "Apache Flink" in the top-left corner of your Slack app.
  #  2. In the dropdown menu, click on "Invite people to Apache Flink"
  #  3. Click "Edit link settings" and select "Never expires". Save the change.
  #  4. Copy the invitation link by clicking on "Copy invite link".
  FlinkSlackInviteUrl = "https://join.slack.com/t/apache-flink/shared_invite/zt-1t4khgllz-Fm1CnXzdBbUchBz4HzJCAg"

  FlinkStableVersion = "1.19.0"
  FlinkStableShortVersion = "1.19"
  StateFunStableVersion = "3.3.0"
  StateFunStableShortVersion = "3.3"
  FlinkMLStableVersion = "2.3.0"
  FlinkMLStableShortVersion = "2.3"
  FlinkCDCStableVersion = "3.0.0"
  FlinkCDCStableShortVersion = "3.0"
  FlinkKubernetesOperatorStableVersion = "1.8.0"
  FlinkKubernetesOperatorStableShortVersion = "1.8"
  ScalaVersion = "2.12.7"
  ScalaShortVersion = "2.12"
  JavaVersion = "1.8"

  # External links at the bottom
  # of the menu
  MenuLinks = [
    ["Flink on GitHub", "https://github.com/apache/flink"],
    ["@ApacheFlink", "https://twitter.com/apacheflink"]
  ]

[markup]
[markup.goldmark.renderer]
  unsafe = true
[markup.tableOfContents]
  startLevel = 0

[languages]
[languages.en]
  languageName = 'English'
  contentDir = 'content'
  weight = 1

[languages.zh]
  languageName = '中文版'
  contentDir = 'content.zh'
  weight = 2
