#  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.

languageCode: en-us
title: Heron
author: Luc Perkins
canonifyurls: true
baseurl: https://apache.github.io/incubator-heron

# Site-level config
metadataformat: yaml
newcontenteditor: atom
taxonomies:
  tag: tags

# Pygments syntax highlighting
pygmentsUseClasses: true
pygmentsCodeFences: true

# Site-level parameters available through .Site.Params.{key}
params:
  author: Twitter, Inc.
  description: A realtime, distributed, fault-tolerant stream processing engine from Twitter
  versions:
    heron: 0.17.8
    bazel: 0.26.0
    heronpy: 0.17.8
  assets:
    favicon:
      small: /img/favicon-16x16.png
      large: /img/favicon-32x32.png
    logo: /img/logo54x54.png #logo.png
    textlogo: /img/HeronTextLogo.png #logo.png
    textLogoSmall: /img/HeronTextLogo-small.png #logo.png
    incubator: /img/incubator_feather_egg_logo.png
    js:
      - https://code.jquery.com/jquery-2.2.1.min.js
      - /js/app.min.js
  tagline: A realtime, distributed, fault-tolerant stream processing engine from Twitter
  github:
    home: https://github.com/apache/incubator-heron
    master: https://github.com/apache/incubator-heron/tree/master
    issues: https://github.com/apache/incubator-heron/issues
  social:
    twitter: https://twitter.com/heronstreaming
    slack: https://heronusers.slack.com
    googleGroup: https://groups.google.com/forum/#!forum/heron-users
  seo:
    opengraph:
      - property: locale
        content: en_US
      - property: type
        content: article
    twittercards:
      - name: card
        content: summary
      - name: site
        content: "@heronstreaming"
