From 4cacad586503e857fb31e52c2b27377d7e5bcace Mon Sep 17 00:00:00 2001 From: Jakub Sadowski Date: Wed, 16 Dec 2020 09:19:37 +0100 Subject: [PATCH 01/32] contribution-guide --- website/www/site/assets/scss/lists.scss | 95 ++++++ website/www/site/assets/scss/main.scss | 3 +- .../www/site/content/en/contribute/_index.md | 300 +++++++++--------- website/www/site/layouts/partials/head.html | 103 +++--- .../site/static/images/arrow-icon_list.svg | 22 ++ website/www/site/static/js/expandable-list.js | 20 ++ 6 files changed, 334 insertions(+), 209 deletions(-) create mode 100644 website/www/site/assets/scss/lists.scss create mode 100644 website/www/site/static/images/arrow-icon_list.svg create mode 100644 website/www/site/static/js/expandable-list.js diff --git a/website/www/site/assets/scss/lists.scss b/website/www/site/assets/scss/lists.scss new file mode 100644 index 000000000000..ac137cc7fdda --- /dev/null +++ b/website/www/site/assets/scss/lists.scss @@ -0,0 +1,95 @@ +/*! + * 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. + */ +@import "media"; + +.arrow-list{ + margin-top: 26px; + ul{ + font-size: 16px; + font-weight: normal; + line-height: 1.63; + letter-spacing: 0.43px; + position: relative; + li:before { + content: "\2192"; + position: absolute; + color: #ff6d05; + font-size: 24px; + line-height: 20px; + left: 0; + } + li{ + list-style-type: none; + list-style-position: outside; + margin-bottom: 6px; + p{ + margin: 0; + } + } + } +} +.arrow-lists-desktop{ + margin-top: 36px; +} +.arrow-lists-mobile{ + display: none; + .arrow-list-header{ + font-size: 28px; + font-weight: 500; + line-height: 1.29; + letter-spacing: normal; + color: #333333; + text-decoration: none; + display: flex; + img{ + margin-top: 17px; + width: 18px; + height: 18px; + padding-right: 16px; + transform: rotate(-90deg); + + } + } + .rotate{ + img{ + transform: rotate(0deg); + margin-top: 26px; + } + + } + +} +@media (max-width: $mobile){ + .arrow-lists-desktop{ + display: none; + } + .arrow-lists-mobile{ + display: block; + } +} +pre{ + background:rgba(255, 109, 0, 0.03); + border-radius: 8px; + border: solid 0.6px #ff6d05; + font-family: Menlo; + font-size: 16px; + font-weight: normal; + line-height: 1.63; + letter-spacing: 0.43px; + padding: 24px; + max-width: 848px; +} \ No newline at end of file diff --git a/website/www/site/assets/scss/main.scss b/website/www/site/assets/scss/main.scss index e4075a1fe51a..170909847401 100644 --- a/website/www/site/assets/scss/main.scss +++ b/website/www/site/assets/scss/main.scss @@ -42,4 +42,5 @@ @import "_section-nav.sass"; @import "_page-nav.sass"; @import "_table-wrapper.sass"; -@import "_calendar.scss"; \ No newline at end of file +@import "_calendar.scss"; +@import "lists.scss"; \ No newline at end of file diff --git a/website/www/site/content/en/contribute/_index.md b/website/www/site/content/en/contribute/_index.md index 417565bba1c3..dfbda1b2b6d3 100644 --- a/website/www/site/content/en/contribute/_index.md +++ b/website/www/site/content/en/contribute/_index.md @@ -21,57 +21,64 @@ See the License for the specific language governing permissions and limitations under the License. --> -# Apache Beam Contribution Guide +# Contribution guide -The Apache Beam community welcomes contributions from anyone! +
-If you have questions, please [reach out to the Beam community](/contribute/get-help). +
-There are lots of opportunities to contribute: +## Overview + +
+ +There are lots of opportunities to contribute. You can for example: + +
- ask or answer questions on [user@beam.apache.org](/community/contact-us/) or [stackoverflow](https://stackoverflow.com/questions/tagged/apache-beam) - review proposed design ideas on [dev@beam.apache.org](/community/contact-us/) - - improve the documentation - file [bug reports](https://issues.apache.org/jira/projects/BEAM/issues) - - test releases - review [changes](https://github.com/apache/beam/pulls) - - write new examples - - improve your favorite language SDK (Java, Python, Go, etc) - - improve specific runners (Apache Flink, Apache Spark, Google - Cloud Dataflow, etc) - - improve or add IO connectors - - add new transform libraries (statistics, ML, image processing, etc) - work on the core programming model (what is a Beam pipeline and how does it run?) - improve the developer experience (for example, Windows guides) - - add answers to the [contribution FAQ]( - https://cwiki.apache.org/confluence/display/BEAM/Contributor+FAQ) - organize local meetups of users or contributors to Apache Beam + +
-Most importantly, if you have an idea of how to contribute, then do it! +...and many more. Most importantly, if you have an idea of how to contribute, then do it! + +
## Contributing code +
+ Below is a tutorial for contributing code to Beam, covering our tools and typical process in detail. +
+ ### Prerequisites -To contribute code, you need +
- a GitHub account - a Linux, macOS, or Microsoft Windows development environment with Java JDK 8 installed - [Docker](https://www.docker.com/) installed for some tasks including building worker containers and testing this website changes locally - [Go](https://golang.org) 1.12 or later installed for Go SDK development - - Python 2.7, 3.5, 3.6, and 3.7. Yes, you need all four versions installed. - - pip, setuptools, virtualenv, and tox installed for Python development + - Python 3.6, 3.7, and 3.8. Yes, you need all four versions installed. + + pip, setuptools, virtualenv, and tox installed for Python development - for large contributions, a signed [Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf) (ICLA) to the Apache Software Foundation (ASF). -To install these in a Debian-based distribution: +
+ +
``` sudo apt-get install \ @@ -83,203 +90,182 @@ sudo apt-get install \ docker-ce ``` +
+ You also need to [install Go](https://golang.org/doc/install). +
+ Once Go is installed, install goavro: +
+ ``` $ export GOPATH=`pwd`/sdks/go/examples/.gogradle/project_gopath $ go get github.com/linkedin/goavro ``` -gLinux users should configure their machines for sudoless Docker. +
+ +Linux users should configure their machines for sudoless Docker. + +
### Connect With the Beam community -1. Consider subscribing to the [dev@ mailing list](/community/contact-us/), especially + +
+ +- Consider subscribing to the [dev@ mailing list](/community/contact-us/), especially if you plan to make more than one change or the change will be large. All decisions happen on the public dev list. -1. (Optionally) Join the [#beam channel of the ASF slack](/community/contact-us/). -1. Create an account on [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues) +- (Optionally) Join the [#beam channel of the ASF slack](/community/contact-us/). +- Create an account on [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues) (anyone can do this). +
+ +
### Share your intent -1. Find or create an issue in the [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues). +
+ +- Find or create an issue in the [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues). Tracking your work in an issue will avoid duplicated or conflicting work, and provide a place for notes. Later, your pull request will be linked to the issue as well. -1. If you want to get involved but don't have a project in mind, check our list of open starter tasks, +- If you want to get involved but don't have a project in mind, check our list of open starter tasks, [https://s.apache.org/beam-starter-tasks](https://s.apache.org/beam-starter-tasks). -1. Assign the issue to yourself. To get the permission to do so, email +- Assign the issue to yourself. To get the permission to do so, email the [dev@ mailing list](/community/contact-us) to introduce yourself and to be added as a contributor in the Beam issue tracker including your ASF Jira Username. For example [this welcome email]( https://lists.apache.org/thread.html/e6018c2aaf7dc7895091434295e5b0fafe192b975e3e3761fcf0cda7@%3Cdev.beam.apache.org%3E). -1. If your change is large or it is your first change, it is a good idea to +- If your change is large or it is your first change, it is a good idea to [discuss it on the dev@ mailing list](/community/contact-us/). -1. For large changes create a design doc +- For large changes create a design doc ([template](https://s.apache.org/beam-design-doc-template), [examples](https://s.apache.org/beam-design-docs)) and email it to the [dev@ mailing list](/community/contact-us). -### Development Setup - -1. If you need help with git forking, cloning, branching, committing, pull requests, and squashing commits, see - [Git workflow tips](https://cwiki.apache.org/confluence/display/BEAM/Git+Tips) -1. Familiarize yourself with gradle and the project structure. At the root of the git repository, run: - - $ ./gradlew projects - - Examine the available tasks in a project. For the default set of tasks, use: - - $ ./gradlew tasks - - For a given module, use: +
+
- $ ./gradlew -p sdks/java/io/cassandra tasks +
- For an exhaustive list of tasks, use: + -1. Make sure you can build and run tests +
- Run the entire set of tests with: +There are lots of opportunities to contribute. You can for example: - $ ./gradlew check - - You can limit testing to a particular module. Gradle will build just the necessary things to run those tests. For example: - - $ ./gradlew -p sdks/go check - $ ./gradlew -p sdks/java/io/cassandra check - $ ./gradlew -p runners/flink check - -1. Now you may want to set up your preferred IDE and other aspects of your development - environment. See the Developers' wiki for tips, guides, and FAQs on: - - [IntelliJ](https://cwiki.apache.org/confluence/display/BEAM/Using+IntelliJ+IDE) - - [Java](https://cwiki.apache.org/confluence/display/BEAM/Java+Tips) - - [Python](https://cwiki.apache.org/confluence/display/BEAM/Python+Tips) - - [Go](https://cwiki.apache.org/confluence/display/BEAM/Go+Tips) - - [Website](https://cwiki.apache.org/confluence/display/BEAM/Website+Tips) - - [Gradle](https://cwiki.apache.org/confluence/display/BEAM/Gradle+Tips) - - [Jenkins](https://cwiki.apache.org/confluence/display/BEAM/Jenkins+Tips) - - [FAQ](https://cwiki.apache.org/confluence/display/BEAM/Contributor+FAQ) - -### Make your change - -1. Make your code change. Every source file needs to include the Apache license header. Every new dependency needs to - have an open source license [compatible](https://www.apache.org/legal/resolved.html#criteria) with Apache. - -1. Add unit tests for your change. - -1. Use descriptive commit messages that make it easy to identify changes and provide a clear history. - -1. When your change is ready to be reviewed and merged, create a pull request. - -1. Format commit messages and the pull request title like `[BEAM-XXX] Fixes bug in ApproximateQuantiles`, - where you replace BEAM-XXX with the appropriate JIRA issue. - This will automatically link the pull request to the issue. - -1. The pull request and any changes pushed to it will trigger [pre-commit - jobs](https://cwiki.apache.org/confluence/display/BEAM/Contribution+Testing+Guide#ContributionTestingGuide-Pre-commit). If a test fails and appears unrelated to your - change, you can cause tests to be re-run by adding a single line comment on your - PR - - retest this please - - Pull request template has a link to a [catalog of trigger phrases](https://github.com/apache/beam/blob/master/.test-infra/jenkins/README.md) - that start various post-commit tests suites. Use these sparingly because post-commit tests consume shared development resources. - -1. Pull requests can only be merged by a - [Beam committer](https://home.apache.org/phonebook.html?pmc=beam). - To find a committer for your area, either: - - look in the OWNERS file of the directory where you changed files, or - - look for similar code merges, or - - ask on [dev@beam.apache.org](/community/contact-us/) - - Use `R: @username` in the pull request to notify a reviewer. - -1. If you don't get any response in 3 business days, email the [dev@ mailing list](/community/contact-us) to ask for someone to look at your pull - request. + - ask or answer questions on [user@beam.apache.org](/community/contact-us/) or +[stackoverflow](https://stackoverflow.com/questions/tagged/apache-beam) + - review proposed design ideas on [dev@beam.apache.org](/community/contact-us/) + - file [bug reports](https://issues.apache.org/jira/projects/BEAM/issues) + - review [changes](https://github.com/apache/beam/pulls) + - work on the core programming model (what is a Beam pipeline and how does it + run?) + - improve the developer experience (for example, Windows guides) + - organize local meetups of users or contributors to Apache Beam + +...and many more. Most importantly, if you have an idea of how to contribute, then do it! -### Make the reviewer's job easier +
-1. Provide context for your changes in the associated JIRA issue and/or PR description. + -1. Review feedback typically leads to follow-up changes. It is easier to review follow-up changes when they are added as additional "fixup" commits to the - existing PR/branch. This allows reviewer(s) to track the incremental progress and focus on new changes, - and keeps comment threads attached to the code. - Please refrain from squashing new commits into reviewed commits before review is completed. - Because squashing reviewed and unreviewed commits often makes it harder to - see the the difference between the review iterations, reviewers may ask you to unsquash new changes. +
-1. After review is complete and the PR is accepted, fixup commits should be squashed (see [Git workflow tips](https://cwiki.apache.org/confluence/display/BEAM/Git+Tips)). - Beam committers [can squash](https://beam.apache.org/contribute/committer-guide/#merging-it) - all commits in the PR during merge, however if a PR has a mixture of independent changes that should not be squashed, and fixup commits, - then the PR author should help squashing fixup commits to maintain a clean commmit history. +Below is a tutorial for contributing code to Beam, covering our tools and typical process in +detail. -## When will my change show up in an Apache Beam release? + - a GitHub account + - a Linux, macOS, or Microsoft Windows development environment with Java JDK 8 installed + - [Docker](https://www.docker.com/) installed for some tasks including building worker containers and testing this website + changes locally + - [Go](https://golang.org) 1.12 or later installed for Go SDK development + - Python 3.6, 3.7, and 3.8. Yes, you need all four versions installed. -Apache Beam makes minor releases every 6 weeks. Apache Beam has a -[calendar](https://calendar.google.com/calendar/embed?src=0p73sl034k80oob7seouanigd0%40group.calendar.google.com) for -cutting the next release branch. Your change needs to be checked into master before the release branch is cut -to make the next release. + pip, setuptools, virtualenv, and tox installed for Python development + - for large contributions, a signed [Individual Contributor License + Agreement](https://www.apache.org/licenses/icla.pdf) (ICLA) to the Apache + Software Foundation (ASF). -## Stale pull requests +
-The community will close stale pull requests in order to keep the project -healthy. A pull request becomes stale after its author fails to respond to -actionable comments for 60 days. Author of a closed pull request is welcome to -reopen the same pull request again in the future. The associated JIRAs will be -unassigned from the author but will stay open. +
-## Accounts and Permissions +``` +sudo apt-get install \ + openjdk-8-jdk \ + python-setuptools \ + python-pip \ + virtualenv \ + tox \ + docker-ce +``` +
-- [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues): - Anyone can access it and browse issues. Anyone can register an account and login - to create issues or add comments. Only contributors can be assigned issues. If - you want to be assigned issues, a PMC member can add you to the project contributor - group. Email the [dev@ mailing list](/community/contact-us) - to ask to be added as a contributor in the Beam issue tracker, and include your ASF Jira username. +You also need to [install Go](https://golang.org/doc/install). -- [Beam Wiki Space](https://cwiki.apache.org/confluence/display/BEAM/Apache+Beam): - Anyone has read access. If you wish to contribute changes, please create an account and request edit access on the - [dev@ mailing list](/community/contact-us) (include your Wiki account user ID). +
-- Pull requests can only be merged by a - [Beam committer](https://home.apache.org/phonebook.html?pmc=beam). +Once Go is installed, install goavro: -- [Voting on a release](https://www.apache.org/foundation/voting.html): Everyone can vote. Only - [Beam PMC](https://home.apache.org/phonebook.html?pmc=beam) members should mark their votes as binding. +
-## Communication +``` +$ export GOPATH=`pwd`/sdks/go/examples/.gogradle/project_gopath +$ go get github.com/linkedin/goavro +``` -All communication is expected to align with the [Code of Conduct](https://www.apache.org/foundation/policies/conduct). +
-Discussion about contributing code to Beam happens on the [dev@ mailing list](/community/contact-us/). Introduce yourself! +Linux users should configure their machines for sudoless Docker. -Questions can be asked on the [#beam channel of the ASF slack](/community/contact-us/). Introduce yourself! +
-## Additional resources +### Connect With the Beam community -If you are contributing a `PTransform` to Beam, we have an extensive -[PTransform Style Guide](/contribute/ptransform-style-guide). +
-If you are contributing a Runner to Beam, refer to the -[Runner authoring guide](/contribute/runner-guide/) +- Consider subscribing to the [dev@ mailing list](/community/contact-us/), especially + if you plan to make more than one change or the change will be large. All decisions happen on the + public dev list. +- (Optionally) Join the [#beam channel of the ASF slack](/community/contact-us/). +- Create an account on [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues) + (anyone can do this). +
-Review [design documents](https://s.apache.org/beam-design-docs). +
-A great way to contribute is to join an existing effort. For the most -intensive efforts, check out the [roadmap](/roadmap/). +### Share your intent -You can also find a more exhaustive list on the [Beam developers' wiki]( -https://cwiki.apache.org/confluence/display/BEAM/Apache+Beam) +
-## Troubleshooting +- Find or create an issue in the [Beam issue tracker (JIRA)](https://issues.apache.org/jira/projects/BEAM/issues). + Tracking your work in an issue will avoid duplicated or conflicting work, and provide + a place for notes. Later, your pull request will be linked to the issue as well. +- If you want to get involved but don't have a project in mind, check our list of open starter tasks, + [https://s.apache.org/beam-starter-tasks](https://s.apache.org/beam-starter-tasks). +- Assign the issue to yourself. To get the permission to do so, email + the [dev@ mailing list](/community/contact-us) + to introduce yourself and to be added as a contributor in the Beam issue tracker including your + ASF Jira Username. For example [this welcome email]( + https://lists.apache.org/thread.html/e6018c2aaf7dc7895091434295e5b0fafe192b975e3e3761fcf0cda7@%3Cdev.beam.apache.org%3E). +- If your change is large or it is your first change, it is a good idea to + [discuss it on the dev@ mailing list](/community/contact-us/). +- For large changes create a design doc + ([template](https://s.apache.org/beam-design-doc-template), + [examples](https://s.apache.org/beam-design-docs)) and email it to the [dev@ mailing list](/community/contact-us). -If you run into any issues, check out the [contribution FAQ](https://cwiki.apache.org/confluence/display/BEAM/Contributor+FAQ) or ask on the [dev@ mailing list](/community/contact-us/) or [#beam channel of the ASF slack](/community/contact-us/). +
-If you didn't find the information you were looking for in this guide, please -[reach out to the Beam community](/community/contact-us). +
\ No newline at end of file diff --git a/website/www/site/layouts/partials/head.html b/website/www/site/layouts/partials/head.html index b3773320be6d..f160a0a2f7d5 100644 --- a/website/www/site/layouts/partials/head.html +++ b/website/www/site/layouts/partials/head.html @@ -1,56 +1,57 @@ {{/* - Licensed 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. See accompanying LICENSE file. -*/}} + Licensed 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. See accompanying LICENSE file. + */}} + + + + - - - - -{{ if .Title }}{{ .Title }}{{ else }}{{ .Site.Title }}{{ end }} - + {{ if .Title }}{{ .Title }}{{ else }}{{ .Site.Title }}{{ end }} + + + + + {{ $scssMain := "scss/main.scss"}} + {{ if .Site.IsServer }} + {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) | postCSS }} + + {{ else }} + {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }} + + + {{ end }} - + -{{ $scssMain := "scss/main.scss"}} -{{ if .Site.IsServer }} - {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) | postCSS }} - -{{ else }} - {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }} - - -{{ end }} - - - - - - - - - - - - - - - + - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/www/site/static/images/arrow-icon_list.svg b/website/www/site/static/images/arrow-icon_list.svg new file mode 100644 index 000000000000..6d2566b351d8 --- /dev/null +++ b/website/www/site/static/images/arrow-icon_list.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/static/js/expandable-list.js b/website/www/site/static/js/expandable-list.js new file mode 100644 index 000000000000..9197db2ef89f --- /dev/null +++ b/website/www/site/static/js/expandable-list.js @@ -0,0 +1,20 @@ +// Licensed 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. + +$(document).ready(function() { + function rotate() { + $(".arrow-list-header").click(function(){ + $(this).toggleClass('rotate'); + }) + } + rotate(); +}); From f97933e03808240d136c4e78535253491b8ed099 Mon Sep 17 00:00:00 2001 From: Jakub Sadowski Date: Wed, 16 Dec 2020 09:52:32 +0100 Subject: [PATCH 02/32] become a committer and twitter --- .../become a commiter/beam-logo-icon.svg | 46 ++ .../become a commiter/code-icon.svg | 22 + .../become a commiter/diamond-icon.svg | 20 + .../become a commiter/file-icon.svg | 23 + .../become a commiter/messages-icon.svg | 28 ++ .../become a commiter/tool-icon.svg | 22 + website/www/site/assets/scss/_calendar.scss | 445 +++++++++--------- website/www/site/assets/scss/_global.sass | 36 +- website/www/site/assets/scss/_typography.scss | 246 ++++++---- website/www/site/assets/scss/lists.scss | 58 ++- website/www/site/assets/scss/main.scss | 3 +- website/www/site/assets/scss/traits.scss | 48 ++ .../en/contribute/become-a-committer.md | 86 +--- website/www/site/data/en/commiter_traits.yaml | 21 + .../site/data/en/ways_of_contribution.yaml | 21 + website/www/site/layouts/index.html | 408 ++++++++-------- website/www/site/layouts/partials/head.html | 2 +- .../layouts/partials/traits/traits-item.html | 24 + .../contributor/list_with_icons.html | 18 + .../shortcodes/contributor/row_of_traits.html | 18 + 20 files changed, 999 insertions(+), 596 deletions(-) create mode 100644 website/www/site/assets/icons/contributor/become a commiter/beam-logo-icon.svg create mode 100644 website/www/site/assets/icons/contributor/become a commiter/code-icon.svg create mode 100644 website/www/site/assets/icons/contributor/become a commiter/diamond-icon.svg create mode 100644 website/www/site/assets/icons/contributor/become a commiter/file-icon.svg create mode 100644 website/www/site/assets/icons/contributor/become a commiter/messages-icon.svg create mode 100644 website/www/site/assets/icons/contributor/become a commiter/tool-icon.svg create mode 100644 website/www/site/assets/scss/traits.scss create mode 100644 website/www/site/data/en/commiter_traits.yaml create mode 100644 website/www/site/data/en/ways_of_contribution.yaml create mode 100644 website/www/site/layouts/partials/traits/traits-item.html create mode 100644 website/www/site/layouts/shortcodes/contributor/list_with_icons.html create mode 100644 website/www/site/layouts/shortcodes/contributor/row_of_traits.html diff --git a/website/www/site/assets/icons/contributor/become a commiter/beam-logo-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/beam-logo-icon.svg new file mode 100644 index 000000000000..587667d29cc9 --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/beam-logo-icon.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/www/site/assets/icons/contributor/become a commiter/code-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/code-icon.svg new file mode 100644 index 000000000000..338acf8e8de1 --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/code-icon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/assets/icons/contributor/become a commiter/diamond-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/diamond-icon.svg new file mode 100644 index 000000000000..566bf9bf57ef --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/diamond-icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/website/www/site/assets/icons/contributor/become a commiter/file-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/file-icon.svg new file mode 100644 index 000000000000..a198565b15a4 --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/file-icon.svg @@ -0,0 +1,23 @@ + + + + + + diff --git a/website/www/site/assets/icons/contributor/become a commiter/messages-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/messages-icon.svg new file mode 100644 index 000000000000..0f710d68e9f6 --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/messages-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/website/www/site/assets/icons/contributor/become a commiter/tool-icon.svg b/website/www/site/assets/icons/contributor/become a commiter/tool-icon.svg new file mode 100644 index 000000000000..46e30c82ab1a --- /dev/null +++ b/website/www/site/assets/icons/contributor/become a commiter/tool-icon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/assets/scss/_calendar.scss b/website/www/site/assets/scss/_calendar.scss index 69e2bf81a291..c75b39d86ea2 100644 --- a/website/www/site/assets/scss/_calendar.scss +++ b/website/www/site/assets/scss/_calendar.scss @@ -15,224 +15,227 @@ * limitations under the License. */ -@import "media"; - -.calendar { - padding: $pad-l $pad; - - .calendar-title { - @extend .component-title; - - text-align: center; - } - - .calendar-content { - display: flex; - justify-content: center; - align-items: flex-start; - margin-top: 84px; - - a { - text-decoration: none; - } - - // Left card - .calendar-card-big { - width: 100%; - max-width: 381px; - height: 468px; - border-radius: 16px; - box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), - 0 4px 4px 0 rgba(0, 0, 0, 0.06); - background-color: $color-white; - padding: 32px 24px; - transition: 0.2s; - - .calendar-card-big-title { - @extend .component-large-header; - - margin-top: 48px; - margin-bottom: 24px; - } - } - - .calendar-card-big-left:hover { - box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.24), - 0 4px 6px 0 rgba(0, 0, 0, 0.24); - } - - // Middle cards - .calendar-card-box { - margin: 0 37px; - min-height: 468px; - display: flex; - flex-direction: column; - justify-content: space-between; - - .calendar-card-small { - width: 100%; - max-width: 381px; - height: 216px; - border-radius: 16px; - box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), - 0 4px 4px 0 rgba(0, 0, 0, 0.06); - background-color: $color-white; - padding: 32px 24px; - transition: 0.2s; - - .calendar-card-small-title { - @extend .component-small-header; - - margin-top: 40px; - margin-bottom: 12px; - } - } - - .calendar-card-small:hover { - box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.24), - 0 4px 6px 0 rgba(0, 0, 0, 0.24); - } - } - - // Right card - .calendar-card-big-right { - .calendar-card-event-title { - @extend .component-header; - } - - .calendar-card-events { - margin-top: 30px; - margin-bottom: 70px; - - .calendar-event { - display: flex; - padding: 14px; - - .calendar-event-icon { - margin-right: 12px; - } - - .calendar-event-description { - .calendar-event-title { - @extend .component-label; - } - - .calendar-event-place { - @extend .component-tag; - } - - .calendar-event-time { - @extend .component-tag; - } - } - } - - .calendar-event:hover { - background-color: rgba(196, 196, 196, 0.16); - border-radius: 16px; - } - - :last-child { - margin-bottom: 0; - } - } - - .calendar-card-events-button { - width: 115px; - height: 36px; - border-radius: 100px; - background-color: $color-sun; - border: none; - outline: none; - float: right; - - span { - @extend .component-label; - - font-size: 14px; - color: $color-white; - } - } - - button:hover { - opacity: 0.84; - } - } - } -} - -// Category for left and middle cards -.calendar-category { - display: flex; - justify-content: space-between; - - .calendar-category-tag { - @extend .component-tag; - - font-size: 14px; - font-weight: 500; - text-transform: uppercase; - } - - .calendar-category-date { - @extend .component-tag; - } -} - -// Author for left and middle cards -.calendar-card-author { - @extend .component-tag; -} - -@media (max-width: $tablet) { - .calendar { - padding: $pad-md $pad-s; - - .calendar-content { - flex-direction: column; - align-items: center; - margin-top: 64px; - - .calendar-card-big { - max-width: 327px; - height: 356px; - padding: 32px 20px; - - .calendar-card-big-title { - margin-top: 35px; - margin-bottom: 16px; - } - } - - .calendar-card-box { - margin: 24px 0px; - min-height: 456px; - - .calendar-card-small { - max-width: 327px; - height: 216px; - padding: 24px 20px; - - .calendar-card-small-title { - margin-top: 30px; - margin-bottom: 10px; - width: 280px; - } - } - } - - .calendar-card-big-right { - height: 404px; - - .calendar-card-events { - margin-top: 20px; - margin-bottom: 15px; - - .calendar-event { - padding: 14px 5px; - } - } - } - } - } -} + @import "media"; + + .calendar { + padding: $pad-l $pad; + + .calendar-title { + @extend .component-title; + + text-align: center; + } + + .calendar-content { + display: flex; + justify-content: center; + align-items: flex-start; + margin-top: 84px; + + a { + text-decoration: none; + } + + // Left card + .calendar-card-big { + width: 100%; + max-width: 381px; + height: 468px; + border-radius: 16px; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + background-color: $color-white; + padding: 32px 24px; + transition: 0.2s; + + .calendar-card-big-title { + @extend .component-large-header; + + margin-top: 48px; + margin-bottom: 24px; + } + } + + .calendar-card-big-left{ + padding: 0 !important; + &:hover { + box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.24), + 0 4px 6px 0 rgba(0, 0, 0, 0.24); + } + } + // Middle cards + .calendar-card-box { + margin: 0 37px; + min-height: 468px; + display: flex; + flex-direction: column; + justify-content: space-between; + + .calendar-card-small { + width: 100%; + max-width: 381px; + height: 216px; + border-radius: 16px; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + background-color: $color-white; + padding: 32px 24px; + transition: 0.2s; + + .calendar-card-small-title { + @extend .component-small-header; + + margin-top: 40px; + margin-bottom: 12px; + } + } + + .calendar-card-small:hover { + box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.24), + 0 4px 6px 0 rgba(0, 0, 0, 0.24); + } + } + + // Right card + .calendar-card-big-right { + .calendar-card-event-title { + @extend .component-header; + } + + .calendar-card-events { + margin-top: 30px; + margin-bottom: 70px; + + .calendar-event { + display: flex; + padding: 14px; + + .calendar-event-icon { + margin-right: 12px; + } + + .calendar-event-description { + .calendar-event-title { + @extend .component-label; + } + + .calendar-event-place { + @extend .component-tag; + } + + .calendar-event-time { + @extend .component-tag; + } + } + } + + .calendar-event:hover { + background-color: rgba(196, 196, 196, 0.16); + border-radius: 16px; + } + + :last-child { + margin-bottom: 0; + } + } + + .calendar-card-events-button { + width: 115px; + height: 36px; + border-radius: 100px; + background-color: $color-sun; + border: none; + outline: none; + float: right; + + span { + @extend .component-label; + + font-size: 14px; + color: $color-white; + } + } + + button:hover { + opacity: 0.84; + } + } + } + } + + // Category for left and middle cards + .calendar-category { + display: flex; + justify-content: space-between; + + .calendar-category-tag { + @extend .component-tag; + + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + } + + .calendar-category-date { + @extend .component-tag; + } + } + + // Author for left and middle cards + .calendar-card-author { + @extend .component-tag; + } + + @media (max-width: $tablet) { + .calendar { + padding: $pad-md $pad-s; + + .calendar-content { + flex-direction: column; + align-items: center; + margin-top: 64px; + + .calendar-card-big { + max-width: 327px; + height: 356px; + padding: 32px 20px; + + .calendar-card-big-title { + margin-top: 35px; + margin-bottom: 16px; + } + } + + .calendar-card-box { + margin: 24px 0px; + min-height: 456px; + + .calendar-card-small { + max-width: 327px; + height: 216px; + padding: 24px 20px; + + .calendar-card-small-title { + margin-top: 30px; + margin-bottom: 10px; + width: 280px; + } + } + } + + .calendar-card-big-right { + height: 404px; + + .calendar-card-events { + margin-top: 20px; + margin-bottom: 15px; + + .calendar-event { + padding: 14px 5px; + } + } + } + } + } + } + \ No newline at end of file diff --git a/website/www/site/assets/scss/_global.sass b/website/www/site/assets/scss/_global.sass index a4dd35517e26..ff02e3ccdb4e 100644 --- a/website/www/site/assets/scss/_global.sass +++ b/website/www/site/assets/scss/_global.sass @@ -26,13 +26,14 @@ body .body background: #fff margin: 0 auto - padding-top: 130px &:not(.body--index) .body__contained + @media (max-width: $ak-breakpoint-lg) + padding: 0 padding: 0 30px max-width: 1280px - + figure img width: 100% @@ -66,5 +67,32 @@ body width: 100% .container-main-content - padding: 0 20px - position: relative \ No newline at end of file + @media (max-width: $ak-breakpoint-lg) + padding: 0 24px + + padding: 0 22px + position: relative + background-color: #fff + margin-top: 85px + + @media (min-width: $tablet) + margin-top: 0 +.desktop + @media (max-width: $ak-breakpoint-lg) + display: none +.mobile + display: none + @media (max-width: $ak-breakpoint-lg) + display: block + +pre + background:rgba(255, 109, 0, 0.03) !important + border-radius: 8px + border: solid 0.6px #ff6d05 + font-family: Menlo + font-size: 16px + font-weight: normal + line-height: 1.63 + letter-spacing: 0.43px + padding: 24px + max-width: 848px diff --git a/website/www/site/assets/scss/_typography.scss b/website/www/site/assets/scss/_typography.scss index 99eacfe4ca04..a47d09966285 100644 --- a/website/www/site/assets/scss/_typography.scss +++ b/website/www/site/assets/scss/_typography.scss @@ -14,85 +14,171 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - @import "media"; - -.component-title { - font-size: 36px; - font-weight: normal; - font-style: normal; - line-height: 1.1; - letter-spacing: normal; - margin: 0; - color: $color-gray; -} - -.component-large-header { - font-size: 30px; - font-weight: 500; - font-style: normal; - line-height: 1.4; - letter-spacing: normal; - margin: 0; - color: $color-gray; -} - -.component-header { - font-size: 22px; - font-weight: 500; - font-style: normal; - line-height: 1.45; - letter-spacing: 0.43px; - margin: 0; - color: $color-gray; -} - -.component-small-header { - font-size: 18px; - font-weight: 500; - font-style: normal; - line-height: 1.56; - letter-spacing: 0.43px; - margin: 0; - color: $color-gray; -} -.component-text { - font-size: 16px; - font-weight: normal; - font-style: normal; - line-height: 1.63; - letter-spacing: 0.43px; - margin: 0; - color: $color-gray; -} - -.component-label { - font-size: 16px; - font-weight: bold; - font-stretch: normal; - font-style: normal; - line-height: 1.5; - letter-spacing: 0.43px; - margin: 0; - color: $color-gray; -} - -.component-tag { - font-size: 16px; - font-weight: normal; - font-style: normal; - line-height: 1.63; - letter-spacing: 0.43px; - margin: 0; - color: $color-smoke; -} + @import "media"; -@media (max-width: $tablet) { - .component-title { - font-size: 28px; - } - .component-large-header { - font-size: 24px; - } -} \ No newline at end of file + .component-title { + font-size: 36px; + font-weight: normal; + font-style: normal; + line-height: 1.1; + letter-spacing: normal; + margin: 0; + color: $color-gray; + } + + .component-large-header { + font-size: 30px; + font-weight: 500; + font-style: normal; + line-height: 1.4; + letter-spacing: normal; + margin: 0; + color: $color-gray; + } + + .component-header { + font-size: 22px; + font-weight: 500; + font-style: normal; + line-height: 1.45; + letter-spacing: 0.43px; + margin: 0; + color: $color-gray; + } + + .component-small-header { + font-size: 18px; + font-weight: 500; + font-style: normal; + line-height: 1.56; + letter-spacing: 0.43px; + margin: 0; + color: $color-gray; + } + + .component-text { + font-size: 16px; + font-weight: normal; + font-style: normal; + line-height: 1.63; + letter-spacing: 0.43px; + margin: 0; + color: $color-gray; + } + + .component-label { + font-size: 16px; + font-weight: bold; + font-stretch: normal; + font-style: normal; + line-height: 1.5; + letter-spacing: 0.43px; + margin: 0; + color: $color-gray; + } + + .component-tag { + font-size: 16px; + font-weight: normal; + font-style: normal; + line-height: 1.63; + letter-spacing: 0.43px; + margin: 0; + color: $color-smoke; + } + + .component-quote { + font-size: 20px; + font-weight: normal; + font-stretch: normal; + font-style: italic; + line-height: 1.44; + letter-spacing: 0.43px; + text-align: center; + color: $color-gray; + } + + .hero-title { + font-size: 16px; + font-weight: normal; + font-style: normal; + line-height: 1.88; + letter-spacing: 0.8px; + color: $color-white; + } + + .hero-heading { + font-size: 46px; + font-weight: 500; + font-style: normal; + line-height: 1; + letter-spacing: normal; + color: $color-white; + } + + .hero-subheading { + font-size: 20px; + font-weight: normal; + font-style: normal; + line-height: 1.44; + letter-spacing: normal; + color: $color-white; + } + + @media (max-width: $tablet) { + .component-title { + font-size: 28px; + } + .component-large-header { + font-size: 24px; + } + } + + h1{ + @media (max-width: $tablet){ + font-size: 32px; + line-height: 1.19; + font-weight: 500; + letter-spacing: normal; + } + font-size: 46px; + font-weight: 500; + line-height: 1; + letter-spacing: normal; + } + h2{ + @media (max-width: $tablet){ + font-size: 28px; + line-height: 1.29; + font-weight: 500; + letter-spacing: normal; + } + font-size: 36px; + line-height: 1.1; + letter-spacing: normal; + font-weight: 500; + } + h3{ + @media (max-width: $tablet){ + font-size: 24px; + line-height: 1.25; + font-weight: 500; + letter-spacing: normal; + } + font-size: 29px; + line-height: 1.24; + letter-spacing: normal; + font-weight: 500; + } + p{ + font-size: 16px; + font-weight: normal; + line-height: 1.63; + letter-spacing: 0.43px; + } + .hero-heading { + font-size: 32px; + } + + \ No newline at end of file diff --git a/website/www/site/assets/scss/lists.scss b/website/www/site/assets/scss/lists.scss index ac137cc7fdda..cbad80a530b5 100644 --- a/website/www/site/assets/scss/lists.scss +++ b/website/www/site/assets/scss/lists.scss @@ -92,4 +92,60 @@ pre{ letter-spacing: 0.43px; padding: 24px; max-width: 848px; -} \ No newline at end of file +} +.icon-list{ + + .list{ + margin-top: 64px; + max-width: 640px; + } + .list-item{ + display:flex; + margin-bottom: 31px; + + .list-item-icon{ + width: 44px; + height: 44px; + display: block; + margin-right: 25px; + } + .list-item-header{ + font-size: 22px; + font-weight: normal; + letter-spacing: normal; + line-height: 1.36; + @media (max-width: $mobile){ + font-weight: 500; + } + } + } + .pillars-item { + display: flex; + align-items: center; + margin-bottom: 14px; + .pillars-item-icon { + margin-right: 28px; + } + + .pillars-item-description { + width: 100%; + max-width: 684px; + + .pillars-item-header { + font-size: 16px; + font-weight: bold; + line-height: 1.2; + letter-spacing: 0.43px; + margin-bottom: 6px; + } + + .pillars-item-text { + font-size: 14px; + font-weight: normal; + line-height: 1.57; + letter-spacing: 0.43px; + } + } + } + } + \ No newline at end of file diff --git a/website/www/site/assets/scss/main.scss b/website/www/site/assets/scss/main.scss index 170909847401..1c4b222d3327 100644 --- a/website/www/site/assets/scss/main.scss +++ b/website/www/site/assets/scss/main.scss @@ -43,4 +43,5 @@ @import "_page-nav.sass"; @import "_table-wrapper.sass"; @import "_calendar.scss"; -@import "lists.scss"; \ No newline at end of file +@import "lists.scss"; +@import "traits.scss"; diff --git a/website/www/site/assets/scss/traits.scss b/website/www/site/assets/scss/traits.scss new file mode 100644 index 000000000000..c8bf3e69d530 --- /dev/null +++ b/website/www/site/assets/scss/traits.scss @@ -0,0 +1,48 @@ +/** + Licensed 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. +*/ +@import "media"; + +.row_of_traits{ + display: flex; + justify-content: space-between; + flex-direction: row; + + .traits-item{ + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + margin-top: 64px; + .traits-item-icon{ + width: 112px; + height: 112px; + margin-bottom: 48px; + } + .traits-item-description{ + max-width: 228px; + text-align: center; + font-size: 14px; + line-height: 1.57; + letter-spacing: 0.43px; + .font-weight-bold{ + font-weight: bold; + } + } + } +} +@media (max-width: $mobile) { + .row_of_traits{ + flex-direction: column; + } +} \ No newline at end of file diff --git a/website/www/site/content/en/contribute/become-a-committer.md b/website/www/site/content/en/contribute/become-a-committer.md index 5d86beb471e0..45f3208a3235 100644 --- a/website/www/site/content/en/contribute/become-a-committer.md +++ b/website/www/site/content/en/contribute/become-a-committer.md @@ -15,83 +15,29 @@ See the License for the specific language governing permissions and limitations under the License. --> -# Become a Committer +# Become a Beam Committer -An Apache Beam -[committer](https://www.apache.org/foundation/how-it-works.html#committers) has -write access to the repository for merging pull requests, but you don't have -to be a code contributor to become a committer. Becoming a committer means that -you have the project's trust. Read the [ASF -documentation](https://www.apache.org/dev/committers.html#committer-responsibilities) -for more about being a committer in the Apache Software Foundation. +
-The [PMC](https://www.apache.org/foundation/how-it-works.html#pmc-members) -makes someone a committer via nomination, discussion, and then majority vote. -We use data from as many sources as possible to inform our reasoning. Here are -some examples: +An Apache Beam [committer](https://www.apache.org/foundation/how-it-works.html#committers) takes many forms. There are many actions other than coding that build the trust we place in a committer - code review, design discussion, user support, community outreach, improving infrastructure, documentation, project management, etc. - - [dev@ archives](https://lists.apache.org/list.html?dev@beam.apache.org) and [statistics](https://lists.apache.org/trends.html?dev@beam.apache.org) - - [user@ archives](https://lists.apache.org/list.html?user@beam.apache.org) and [statistics](https://lists.apache.org/trends.html?user@beam.apache.org) - - [`apache-beam` StackOverflow tag](https://stackoverflow.com/questions/tagged/apache-beam) - - Git metrics for [Beam](https://github.com/apache/beam/graphs/contributors) - - Code reviews given and received on - [Beam](https://github.com/apache/beam/pulls) - - Clear areas of ownership (a runner, a DSL, IO connector, documentation, - etc.) - - Public events - - Firsthand PMC testimonials +
-The PMC has assembled the following set of guidelines for becoming a committer. +### What does it mean being a commiter? -## An Apache Beam committer... +
-### Takes many forms +An Apache Beam committer has write access to the repository for merging pull requests, but you don’t have to be a code contributor to become a committer. Becoming a committer means that you have the project’s trust. Read the [ASF documentation](https://www.apache.org/dev/committers.html#committer-responsibilities) for more about being a committer in the Apache Software Foundation. -There are many actions other than coding that build the trust we place in a -committer - code review, design discussion, user support, community outreach, improving -infrastructure, documentation, project management, etc. +The [PMC](https://www.apache.org/foundation/how-it-works.html#pmc-members) makes someone a committer via nomination, discussion, and then majority vote. We use data from as many sources as possible to inform our reasoning. -### Knows, upholds, and reinforces the Apache Software Foundation code of conduct +
-See the [ASF -documentation](https://www.apache.org/foundation/policies/conduct.html). In -particular, they manifestly strive to: - - - Be open - - Be empathetic - - Be welcoming - - Be friendly - - Be patient - - Be collaborative - - Be inquisitive - - Be careful in the words that they choose - -### Knows, upholds, and reinforces the responsibilities of an Apache Software Foundation committer - -See the [ASF documentation](https://www.apache.org/dev/committers.html#committer-responsibilities). - - - They help create a product that will outlive the interest of any particular - volunteer (including themselves) - - They grow and maintain the health of the Apache community - - They help out with surrounding work, such as the website & documentation - - They help users - - They can be trusted to decide when code is ready for release, or when to ask - someone else to make the judgment - - They can be trusted to decide when to merge code (if a code contributor) or - when to ask someone else to make the judgment - -### Knows, upholds, and reinforces the Beam community’s practices - - - They have a proven commitment to the project - - They share their intentions with the community - - They accept and integrate community feedback in their plans, designs, - code, etc. - - They earnestly try to make Beam better with their contributions - - In particular, if a code contributor: - - They earnestly try to make Beam better with their own code - - They earnestly try to make Beam better with code review - - They accept and integrate feedback on their code - - They know, follow, and enforce Beam’s practices while - reviewing/merging code - style, documentation, testing, backward - compatibility, etc. +### Different ways you can contribute to the Apache Beam +
+{{< contributor/list_with_icons >}} +
+### What are the traits of an Apache Beam Commiter? +{{< contributor/row_of_traits >}} +
\ No newline at end of file diff --git a/website/www/site/data/en/commiter_traits.yaml b/website/www/site/data/en/commiter_traits.yaml new file mode 100644 index 000000000000..e57b610eb576 --- /dev/null +++ b/website/www/site/data/en/commiter_traits.yaml @@ -0,0 +1,21 @@ +# Licensed 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. + +- body: To learn more see the ASF documentation. + bolded: Knows, upholds, and reinforces the Apache Software Foundation code of conduct. + icon: icons/contributor/become a commiter/messages-icon.svg +- body: To learn more see the ASF documentation. + bolded: Knows, upholds, and reinforces the responsibilities of an Apache Software Foundation committer. + icon: icons/contributor/become a commiter/beam-logo-icon.svg +- body: To learn more see our best practices! + bolded: Knows, upholds, and reinforces the Beam community’s practices. + icon: icons/contributor/become a commiter/diamond-icon.svg diff --git a/website/www/site/data/en/ways_of_contribution.yaml b/website/www/site/data/en/ways_of_contribution.yaml new file mode 100644 index 000000000000..2acd6dd8b314 --- /dev/null +++ b/website/www/site/data/en/ways_of_contribution.yaml @@ -0,0 +1,21 @@ +# Licensed 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. + +- title: Beam Technical commiters + body: Short description with hyperlinks. + icon: icons/contributor/become a commiter/code-icon.svg +- title: Non-technical commiters + body: Short description with hyperlinks. + icon: icons/contributor/become a commiter/file-icon.svg +- title: Website maintainers + body: Short description with hyperlinks. + icon: icons/contributor/become a commiter/tool-icon.svg \ No newline at end of file diff --git a/website/www/site/layouts/index.html b/website/www/site/layouts/index.html index bbfdf71b9132..b574984ce232 100644 --- a/website/www/site/layouts/index.html +++ b/website/www/site/layouts/index.html @@ -1,219 +1,191 @@ {{/* - Licensed 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. See accompanying LICENSE file. -*/}} - -{{ define "hero-section" }} -
-
-
- -
-
-
- {{ T "home-hero-blog-title" }} -
-
- - {{ range ( where site.RegularPages "Section" "blog" | first 3 ) }} - -
{{ .Title }}
-
{{ .Date.Format "Jan 2, 2006" }}
-
- {{ end }} - -
-
-
-
-
-
-{{ end }} - -{{ define "pillars-section" }} -
-

- {{ T "home-pillars-title" }} -

-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $pillar := $data.pillars }} - {{ partial "pillars/pillars-item" (dict "logo" $pillar.icon "header" $pillar.title "text" $pillar.body) }} - {{ end }} -
-
-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $pillars_social := $data.pillars_social }} - {{ partial "pillars/pillars-social" (dict "icon" $pillars_social.icon "url" $pillars_social.url "name" $pillars_social.name) }} - {{ end }} -
-

- {{ T "home-pillars-social-text" }} -

-
-
-{{ end }} - -{{ define "graphic-section" }} -
-
- Beam architecture -
-
-{{ end }} - -{{/* - TODO: - This is the implementation of the design. - The event sync functionality will be implemented when we have the event page. -*/}} -{{ define "calendar-section" }} - -{{ end }} - -{{ define "logos-section" }} -
-
- {{ T "home-logos-title" }} -
-
- {{ range $logo := $.Site.Data.works_with }} - - {{ end }} -
-
-{{ end }} - -{{ define "cards-section" }} -
-
-
- {{ T "home-cards-title" }} -
-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $card := $data.cards }} -
-
- {{ $card.quote }} -
-
- {{/* TODO: Implement icons (Original comment from Jekyll) -
-
- */}} -
- {{ $card.name }} -
-
-
- {{ end }} -
-
- {{ T "home-cards-body" }} {{ T "home-contribute" }} {{ T "home-section" }}. -
-
-
-{{ end }} - -{{ define "ctas-section" }} - -{{ end }} + Licensed 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. See accompanying LICENSE file. + */}} + + {{ define "hero-section" }} +
+ +
+
+
+

{{ T "home-hero-title" }}

+

{{ T "home-hero-heading" }}

+

{{ T "home-hero-subheading" }}

+
+
+ {{ end }} + + {{ define "pillars-section" }} +
+

+ {{ T "home-pillars-title" }} +

+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $pillar := $data.pillars }} + {{ partial "pillars/pillars-item" (dict "logo" $pillar.icon "header" $pillar.title "text" $pillar.body) }} + {{ end }} +
+
+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $pillars_social := $data.pillars_social }} + {{ partial "pillars/pillars-social" (dict "icon" $pillars_social.icon "url" $pillars_social.url "name" $pillars_social.name) }} + {{ end }} +
+

+ {{ T "home-pillars-social-text" }} +

+
+
+ {{ end }} + + {{ define "graphic-section" }} +
+
+ Beam architecture +
+
+ {{ end }} + + {{/* + TODO: + This is the implementation of the design. + The event sync functionality will be implemented when we have the event page. + */}} + {{ define "calendar-section" }} +
+

+ {{ T "home-calendar-title" }} +

+
+ + +
+

{{ T "home-calendar-card-events-title" }}

+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $event := $data.calendar_events }} + {{ partial "calendar/calendar-events" (dict "icon" $event.icon "title" $event.title "place" $event.place "time" $event.time "url" $event.url) }} + {{ end }} +
+ + + +
+
+
+ {{ end }} + + {{ define "quotes-section" }} +
+
+ {{ T "home-quotes-title" }} +
+ +
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $quote := $data.quotes }} + {{ partial "quotes/quote.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} + {{ end }} +
+ + {{/* + The id "my-keen-slider" and "dots" should be named as defaults to make the external library (Keen Slider) works well + */}} +
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $quote := $data.quotes }} + {{ partial "quotes/quote-mobile.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} + {{ end }} +
+
+
+ {{ end }} + + {{ define "logos-section" }} +
+
+ {{ T "home-logos-title" }} +
+
+ {{ range $logo := $.Site.Data.works_with }} + + {{ end }} +
+
+ {{ end }} + + {{ define "ctas-section" }} + + {{ end }} + \ No newline at end of file diff --git a/website/www/site/layouts/partials/head.html b/website/www/site/layouts/partials/head.html index f160a0a2f7d5..2cb880669dbe 100644 --- a/website/www/site/layouts/partials/head.html +++ b/website/www/site/layouts/partials/head.html @@ -41,7 +41,7 @@ - + diff --git a/website/www/site/layouts/partials/traits/traits-item.html b/website/www/site/layouts/partials/traits/traits-item.html new file mode 100644 index 000000000000..ff4f4f8f1dcb --- /dev/null +++ b/website/www/site/layouts/partials/traits/traits-item.html @@ -0,0 +1,24 @@ +{{/* + Licensed 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. See accompanying LICENSE file. + */}} + +
+
+ {{ with resources.Get .logo }} + {{ .Content | safeHTML }} + {{ end }} +
+
+ {{ .bolded | markdownify }} + {{ .text | markdownify }} +
+
+ \ No newline at end of file diff --git a/website/www/site/layouts/shortcodes/contributor/list_with_icons.html b/website/www/site/layouts/shortcodes/contributor/list_with_icons.html new file mode 100644 index 000000000000..4777c129a4c0 --- /dev/null +++ b/website/www/site/layouts/shortcodes/contributor/list_with_icons.html @@ -0,0 +1,18 @@ +{{/* + Licensed 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. See accompanying LICENSE file. + */}} + + {{ $data := index $.Site.Data .Site.Language.Lang }} +
+ {{ range $item := $data.ways_of_contribution }} + {{ partial "pillars/pillars-item" (dict "logo" .icon "header" .title "text" .body) }} + {{ end }} +
\ No newline at end of file diff --git a/website/www/site/layouts/shortcodes/contributor/row_of_traits.html b/website/www/site/layouts/shortcodes/contributor/row_of_traits.html new file mode 100644 index 000000000000..ccd93f394baf --- /dev/null +++ b/website/www/site/layouts/shortcodes/contributor/row_of_traits.html @@ -0,0 +1,18 @@ +{{/* + Licensed 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. See accompanying LICENSE file. + */}} + + {{ $data := index $.Site.Data .Site.Language.Lang }} +
+ {{ range $item := $data.commiter_traits }} + {{ partial "traits/traits-item" (dict "logo" .icon "text" .body "bolded" .bolded) }} + {{ end }} +
\ No newline at end of file From 89b99b15b71d52434825bc6504f79ec8e4fe210d Mon Sep 17 00:00:00 2001 From: Jakub Sadowski Date: Wed, 16 Dec 2020 10:38:13 +0100 Subject: [PATCH 03/32] fix --- website/www/site/assets/scss/_global.sass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/www/site/assets/scss/_global.sass b/website/www/site/assets/scss/_global.sass index ff02e3ccdb4e..39339999778f 100644 --- a/website/www/site/assets/scss/_global.sass +++ b/website/www/site/assets/scss/_global.sass @@ -75,7 +75,7 @@ body background-color: #fff margin-top: 85px - @media (min-width: $tablet) + @media (min-width: $ak-breakpoint-lg) margin-top: 0 .desktop @media (max-width: $ak-breakpoint-lg) From ca91cc2144f3c310770dbd73bf93a3ad1596a74d Mon Sep 17 00:00:00 2001 From: Jakub Sadowski Date: Wed, 16 Dec 2020 10:55:52 +0100 Subject: [PATCH 04/32] update files --- .../site/assets/icons/install-button-icon.svg | 22 + .../site/assets/icons/navbar-arrow-icon.svg | 23 ++ .../icons/navbar-documentation-icon.svg | 22 + website/www/site/assets/icons/quote-icon.svg | 22 + website/www/site/assets/scss/_global.sass | 3 +- website/www/site/assets/scss/_graphic.sass | 2 + .../www/site/assets/scss/_hero-mobile.scss | 62 +++ website/www/site/assets/scss/_hero.scss | 128 ++++++ .../www/site/assets/scss/_keen-slider.scss | 40 ++ .../www/site/assets/scss/_navbar-desktop.scss | 174 ++++++++ .../www/site/assets/scss/_navbar-mobile.sass | 97 +++++ website/www/site/assets/scss/_quotes.scss | 151 +++++++ .../www/site/assets/scss/_section-nav.sass | 4 +- website/www/site/assets/scss/_vars.sass | 4 + website/www/site/assets/scss/main.scss | 12 +- .../site/content/en/community/powered-by.md | 2 + .../sql/extensions/create-external-table.md | 132 ++++++ .../en/documentation/io/developing-io-java.md | 3 + .../io/developing-io-overview.md | 80 ++-- .../documentation/io/developing-io-python.md | 3 + .../en/documentation/programming-guide.md | 2 +- .../documentation/sdks/python-dependencies.md | 12 +- .../content/en/get-started/quickstart-py.md | 4 +- .../en/get-started/wordcount-example.md | 2 +- website/www/site/data/en/quotes.yaml | 23 ++ website/www/site/i18n/home/en.yaml | 4 - website/www/site/i18n/home/hero/en.yaml | 20 + website/www/site/i18n/home/quotes/en.yaml | 14 + website/www/site/i18n/navbar/en.yaml | 4 +- website/www/site/layouts/_default/baseof.html | 4 +- website/www/site/layouts/index.html | 380 +++++++++--------- website/www/site/layouts/partials/head.html | 104 ++--- website/www/site/layouts/partials/header.html | 58 ++- .../site/layouts/partials/hooks/body-end.html | 17 + .../layouts/partials/quotes/quote-mobile.html | 21 + .../site/layouts/partials/quotes/quote.html | 21 + .../site/static/images/quote-paypal-logo.png | Bin 0 -> 16047 bytes .../www/site/static/js/hero/hero-desktop.js | 21 + .../www/site/static/js/hero/hero-mobile.js | 21 + .../site/static/js/hero/lottie-light.min.js | 18 + website/www/site/static/js/keen-slider.min.js | 15 + website/www/site/static/js/quotes-slider.js | 42 ++ website/www/site/static/js/section-nav.js | 2 +- 43 files changed, 1485 insertions(+), 310 deletions(-) create mode 100644 website/www/site/assets/icons/install-button-icon.svg create mode 100644 website/www/site/assets/icons/navbar-arrow-icon.svg create mode 100644 website/www/site/assets/icons/navbar-documentation-icon.svg create mode 100644 website/www/site/assets/icons/quote-icon.svg create mode 100644 website/www/site/assets/scss/_hero-mobile.scss create mode 100644 website/www/site/assets/scss/_hero.scss create mode 100644 website/www/site/assets/scss/_keen-slider.scss create mode 100644 website/www/site/assets/scss/_navbar-desktop.scss create mode 100644 website/www/site/assets/scss/_navbar-mobile.sass create mode 100644 website/www/site/assets/scss/_quotes.scss create mode 100644 website/www/site/data/en/quotes.yaml create mode 100644 website/www/site/i18n/home/hero/en.yaml create mode 100644 website/www/site/i18n/home/quotes/en.yaml create mode 100644 website/www/site/layouts/partials/hooks/body-end.html create mode 100644 website/www/site/layouts/partials/quotes/quote-mobile.html create mode 100644 website/www/site/layouts/partials/quotes/quote.html create mode 100644 website/www/site/static/images/quote-paypal-logo.png create mode 100644 website/www/site/static/js/hero/hero-desktop.js create mode 100644 website/www/site/static/js/hero/hero-mobile.js create mode 100644 website/www/site/static/js/hero/lottie-light.min.js create mode 100644 website/www/site/static/js/keen-slider.min.js create mode 100644 website/www/site/static/js/quotes-slider.js diff --git a/website/www/site/assets/icons/install-button-icon.svg b/website/www/site/assets/icons/install-button-icon.svg new file mode 100644 index 000000000000..39c3ffcfbd31 --- /dev/null +++ b/website/www/site/assets/icons/install-button-icon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/assets/icons/navbar-arrow-icon.svg b/website/www/site/assets/icons/navbar-arrow-icon.svg new file mode 100644 index 000000000000..78724e930331 --- /dev/null +++ b/website/www/site/assets/icons/navbar-arrow-icon.svg @@ -0,0 +1,23 @@ + + + + + + diff --git a/website/www/site/assets/icons/navbar-documentation-icon.svg b/website/www/site/assets/icons/navbar-documentation-icon.svg new file mode 100644 index 000000000000..11c165b0feba --- /dev/null +++ b/website/www/site/assets/icons/navbar-documentation-icon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/assets/icons/quote-icon.svg b/website/www/site/assets/icons/quote-icon.svg new file mode 100644 index 000000000000..0a32eea254ad --- /dev/null +++ b/website/www/site/assets/icons/quote-icon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/website/www/site/assets/scss/_global.sass b/website/www/site/assets/scss/_global.sass index 39339999778f..c5357048e684 100644 --- a/website/www/site/assets/scss/_global.sass +++ b/website/www/site/assets/scss/_global.sass @@ -75,13 +75,14 @@ body background-color: #fff margin-top: 85px - @media (min-width: $ak-breakpoint-lg) + @media (min-width: $tablet) margin-top: 0 .desktop @media (max-width: $ak-breakpoint-lg) display: none .mobile display: none + @media (max-width: $ak-breakpoint-lg) display: block diff --git a/website/www/site/assets/scss/_graphic.sass b/website/www/site/assets/scss/_graphic.sass index f01c72a12528..cd171f7db00b 100644 --- a/website/www/site/assets/scss/_graphic.sass +++ b/website/www/site/assets/scss/_graphic.sass @@ -16,6 +16,8 @@ */ .graphic + padding: $pad-l $pad + .graphic__image text-align: center line-height: 0 diff --git a/website/www/site/assets/scss/_hero-mobile.scss b/website/www/site/assets/scss/_hero-mobile.scss new file mode 100644 index 000000000000..343c279f4c90 --- /dev/null +++ b/website/www/site/assets/scss/_hero-mobile.scss @@ -0,0 +1,62 @@ +/*! + * 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. + */ + +@import "media"; + +.hero-mobile { + position: relative; + margin-bottom: 0; + display: none; + + .hero-content { + position: absolute; + z-index: 1; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + width: 100%; + max-width: 506px; + + h3 { + @extend .hero-title; + + text-transform: uppercase; + margin: 0 auto 16px auto; + } + + h1 { + @extend .hero-heading; + + width: 300px; + margin: 0 auto 24px auto; + } + + h2 { + @extend .hero-subheading; + + width: 300px; + margin: 0 auto; + } + } +} + +@media (max-width: $mobile) { + .hero-mobile { + display: inherit; + } +} diff --git a/website/www/site/assets/scss/_hero.scss b/website/www/site/assets/scss/_hero.scss new file mode 100644 index 000000000000..e204d1bf015d --- /dev/null +++ b/website/www/site/assets/scss/_hero.scss @@ -0,0 +1,128 @@ +/*! + * 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. + */ + +@import "media"; + +.hero-desktop { + position: relative; + margin-bottom: 0; + width: 100%; + height: 100%; + display: inherit; + margin-top: -30px; + + .hero-content { + position: absolute; + z-index: 1; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + + h3 { + @extend .hero-title; + + text-transform: uppercase; + margin: 0 auto 24px auto; + } + + h1 { + @extend .hero-heading; + width: 506px; + + margin: 0 auto 36px auto; + } + + h2 { + @extend .hero-subheading; + + width: 344px; + margin: 0 auto 56px auto; + } + + a { + text-decoration: none; + } + + button { + width: 184px; + height: 46px; + padding: 15px 28px 15px 26px; + border-radius: 100px; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + background-color: $color-white; + display: flex; + align-items: center; + justify-content: center; + margin: 0 auto; + border: none; + outline: none; + + span { + text-transform: uppercase; + font-size: 14px; + font-weight: bold; + letter-spacing: 0.6px; + color: $color-sun; + } + } + + button:hover { + background-color: $color-white; + box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.24), + 0 4px 6px 0 rgba(0, 0, 0, 0.24); + } + + button:focus { + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + } + } +} + +@media (max-width: $tablet) { + .hero-desktop { + margin-top: 70px; + + .hero-content { + h3 { + margin: 0 auto 16px auto; + } + + h1 { + width: 300px; + margin: 0 auto 24px auto; + } + + h2 { + width: 300px; + margin: 0 auto; + } + + button { + display: none; + } + } + } +} + +@media (max-width: $mobile) { + .hero-desktop { + display: none; + } +} diff --git a/website/www/site/assets/scss/_keen-slider.scss b/website/www/site/assets/scss/_keen-slider.scss new file mode 100644 index 000000000000..08a4326e0042 --- /dev/null +++ b/website/www/site/assets/scss/_keen-slider.scss @@ -0,0 +1,40 @@ +/** + * keen-slider 5.3.2 + * The HTML touch slider carousel with the most native feeling you will get. + * https://keen-slider.io + * Copyright 2020-2020 Eric Beyer + * License: MIT + * Released on: 2020-11-10 + */ + +/*# sourceMappingURL=keen-slider.min.css.map */ +// This is pulled from "https://cdn.jsdelivr.net/npm/keen-slider@5.3.2/keen-slider.min.css" to serve the consistency +.keen-slider { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; + -khtml-user-select: none; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} +.keen-slider, +.keen-slider__slide { + overflow: hidden; + position: relative; +} +.keen-slider__slide { + width: 100%; + min-height: 100%; +} +.keen-slider[data-keen-slider-v] { + flex-wrap: wrap; +} +.keen-slider[data-keen-slider-v] .keen-slider__slide { + width: 100%; +} +.keen-slider[data-keen-slider-moves] * { + pointer-events: none; +} diff --git a/website/www/site/assets/scss/_navbar-desktop.scss b/website/www/site/assets/scss/_navbar-desktop.scss new file mode 100644 index 000000000000..57eb63350808 --- /dev/null +++ b/website/www/site/assets/scss/_navbar-desktop.scss @@ -0,0 +1,174 @@ +/*! + * 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. + */ + +@import "media"; + +.navigation-bar-mobile { + display: none; +} + +.navigation-bar-desktop { + display: flex; + height: 96px; + width: 100%; + align-items: center; + justify-content: space-between; + margin-bottom: 30px; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.06); + background-color: $color-white; + z-index: 10000; // just to make sure that navbar always on top of other elements + + a { + @extend .component-text; + + color: $color-dark-gray; + letter-spacing: 0.2; + margin-right: 56px; + text-decoration: none; + cursor: pointer; + } + + .navbar-logo { + margin-left: 58px; + + img { + width: 88px; + } + } + + .navbar-links { + display: flex; + align-items: center; + justify-content: space-between; + z-index: 10000; + + :last-child { + margin-right: 0; + } + + .navbar-link { + display: inline-block; + position: relative; + margin-bottom: 2px; + } + + .navbar-link::before { + transition: 0.3; + content: ""; + position: absolute; + background-color: $color-sun; + height: 0%; + width: 100%; + bottom: 0px; + border-radius: 5px; + } + + .navbar-link:hover::before { + height: 2px; + } + + .navbar-dropdown-documentation { + list-style-type: none; + + .dropdown-toggle { + margin: 0; + } + + ul { + width: 209px; + left: -25%; + text-align: center; + border: none; + box-shadow: none; + padding-top: 34px; + padding-bottom: 0; + + a { + @extend .component-text; + } + } + } + } + + .navbar-dropdown-apache { + margin-right: 90px; + list-style-type: none; + + .dropdown-toggle { + margin: 0; + } + + ul { + width: 209px; + left: 70%; + transform: translateX(-50%); + text-align: center; + border: none; + box-shadow: none; + padding-top: 35px; + padding-bottom: 0; + + a { + @extend .component-text; + + margin-right: 0 !important; + } + } + + .arrow-icon { + position: absolute; + top: 3px; + right: -30px; + } + } + + .navbar-dropdown-apache:hover { + .arrow-icon { + opacity: 0.84; + } + } + + .navbar-dropdown { + .dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: $color-dropdown-link-hover-text; + background-color: $color-dropdown-link-hover-bg; + } + } + } + + .dropdown:hover .dropdown-menu { + display: block; + margin-top: 0; + } +} + +@media (max-width: $tablet) { + .navigation-bar-desktop { + display: none; + } + + .navigation-bar-mobile { + display: block; + } + + .page-nav { + margin-top: 30px; + } +} \ No newline at end of file diff --git a/website/www/site/assets/scss/_navbar-mobile.sass b/website/www/site/assets/scss/_navbar-mobile.sass new file mode 100644 index 000000000000..762b5e517b9a --- /dev/null +++ b/website/www/site/assets/scss/_navbar-mobile.sass @@ -0,0 +1,97 @@ +/*! + * 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. + */ + +.navbar + padding: 15px 0 + + .navbar-nav > li > a + text-transform: uppercase + + .navbar-header + margin-left: $pad + float: none + + .navbar-brand + +md + margin-right: $pad + + .navbar-right + margin-right: $pad + a + color: $color-dark-gray + &:hover + color: $color-brand + span + color: $color-brand + span + color: $color-dark-gray + + .navbar-toggle + margin-right: 24px + + .icon-bar + background-color: $color-sun + height: 3px + + @media (max-width: $tablet) + display: block + + .navbar-container + @media (max-width: $tablet) + background-color: $color-white + bottom: 0 + min-height: 100vh + max-width: 256px + padding: 15px + position: fixed + top: 0 + transition: transform 100ms linear + width: calc(100% - 32px) + right: 0 + + .navbar-nav > li + width: 100% + + &.closed + transform: translateX(100%) + + &.open + transform: translateX(0) + + .navbar-mask + background: #212121 + bottom: 0 + display: none + min-height: 100vh + position: fixed + top: 0 + transition: opacity 200ms + + @media (max-width: $tablet) + display: block + + &.closed + opacity: 0 + width: 0 + + &.open + opacity: 0.5 + width: 100% + + @media (max-width: $tablet) + .navbar-right + margin-right: -15px diff --git a/website/www/site/assets/scss/_quotes.scss b/website/www/site/assets/scss/_quotes.scss new file mode 100644 index 000000000000..6d59798289f0 --- /dev/null +++ b/website/www/site/assets/scss/_quotes.scss @@ -0,0 +1,151 @@ +/*! + * 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. + */ + +@import "media"; + +.quotes { + padding: $pad-l $pad; + background-color: $color-medium-gray; + + .quotes-title { + @extend .component-title; + + text-align: center; + border: none; + } + + .quotes-desktop { + display: flex; + justify-content: center; + + .quote-card { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + width: 100%; + max-width: 381px; + height: 474px; + margin: 86px 36px 0 0; + padding: 55px 20px 24px 20px; + border-radius: 16px; + background-color: $color-white; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + margin-right: 36px; + + .quote-text { + @extend .component-quote; + + margin: 108px 0 20px 0; + } + + img { + width: 172px; + } + } + + :last-child { + margin-right: 0; + } + } + + // Sliding feature is only displayed on mobile version + .keen-slider { + display: none; + } + + .dots { + display: none; + } + + .keen-slider { + width: 327px; + margin: 0 auto; + border-radius: 16px; + background-color: $color-white; + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16), + 0 4px 4px 0 rgba(0, 0, 0, 0.06); + + .keen-slider__slide { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + width: 100%; + max-width: 327px; + height: 468px; + padding: 55px 24px 24px 24px; + + .quote-text { + @extend .component-quote; + + margin: 108px 0 20px 0; + } + + img { + width: 172px; + } + } + } + + .dots { + display: none; + padding: 10px 0; + justify-content: center; + margin-top: 46px; + } + + .dot { + border: none; + width: 13px; + height: 13px; + background: $color-smoke; + border-radius: 50%; + margin: 0 5px; + padding: 4px; + cursor: pointer; + } + + .dot:focus { + outline: none; + } + + .dot--active { + background: $color-sun; + } +} + +@media (max-width: $tablet) { + .quotes { + .quotes-title { + margin-bottom: 64px; + } + + .quotes-desktop { + display: none; + } + + .keen-slider { + display: flex; + } + + .dots { + display: flex; + } + } +} diff --git a/website/www/site/assets/scss/_section-nav.sass b/website/www/site/assets/scss/_section-nav.sass index 61aff9f462ea..d8c4ed195b83 100644 --- a/website/www/site/assets/scss/_section-nav.sass +++ b/website/www/site/assets/scss/_section-nav.sass @@ -97,7 +97,7 @@ @media (max-width: $ak-breakpoint-lg) background-color: $color-light-gray bottom: 0 - left: 0 + right: 0 max-width: 256px position: fixed top: 0 @@ -110,7 +110,7 @@ overflow-y: auto &.closed - transform: translateX(-100%) + transform: translateX(100%) &.open transform: translateX(0) diff --git a/website/www/site/assets/scss/_vars.sass b/website/www/site/assets/scss/_vars.sass index df4276a042b1..626313d993b2 100644 --- a/website/www/site/assets/scss/_vars.sass +++ b/website/www/site/assets/scss/_vars.sass @@ -24,6 +24,10 @@ $color-gray: #333333 $color-smoke: #8C8B8E $color-sun: #F26628 $color-silver: #C4C4C4 +$color-medium-gray: #FBFBFB + +$color-dropdown-link-hover-text: #E65D21 +$color-dropdown-link-hover-bg: #FFEDE5 $pad-sm: 15px $pad-s: 24px diff --git a/website/www/site/assets/scss/main.scss b/website/www/site/assets/scss/main.scss index 1c4b222d3327..5a4cf734ccfe 100644 --- a/website/www/site/assets/scss/main.scss +++ b/website/www/site/assets/scss/main.scss @@ -20,28 +20,30 @@ // Globals. @import "_vars.sass"; +@import "_media.scss"; @import "_breakpoints.sass"; @import "_type.sass"; @import "_global.sass"; -@import "_navbar.sass"; +@import "_navbar-mobile.sass"; @import "_typography.scss"; -@import "_media.scss"; // Components. @import "_button.sass"; // Modules. -@import "_cards.sass"; @import "_ctas.sass"; @import "_footer.sass"; @import "_graphic.sass"; @import "_header.sass"; -@import "_hero.sass"; +@import "_hero.scss"; +@import "_hero-mobile.scss"; @import "_logos.scss"; @import "_pillars.scss"; @import "_section-nav.sass"; @import "_page-nav.sass"; @import "_table-wrapper.sass"; @import "_calendar.scss"; -@import "lists.scss"; +@import "_quotes.scss"; +@import "navbar-desktop.scss"; @import "traits.scss"; +@import "lists.scss"; \ No newline at end of file diff --git a/website/www/site/content/en/community/powered-by.md b/website/www/site/content/en/community/powered-by.md index ad22039388b9..dd45ece15b4b 100644 --- a/website/www/site/content/en/community/powered-by.md +++ b/website/www/site/content/en/community/powered-by.md @@ -22,4 +22,6 @@ To add yourself to the list, please open a [pull request](https://github.com/apa Apache Beam pipelines within the Google Cloud Platform ecosystem. * **[TensorFlow Extended (TFX)](https://www.tensorflow.org/tfx):** TensorFlow Extended (TFX) is an end-to-end platform for deploying production ML pipelines. +* **[Apache Hop (incubating)](http://hop.apache.org):** Hop provides a complete data orchestration (ETL / DI) toolset with visual pipeline development. It supports execution on the main Apache Beam runners. + diff --git a/website/www/site/content/en/documentation/dsls/sql/extensions/create-external-table.md b/website/www/site/content/en/documentation/dsls/sql/extensions/create-external-table.md index 38ba4fab7ec9..2182b4b8f438 100644 --- a/website/www/site/content/en/documentation/dsls/sql/extensions/create-external-table.md +++ b/website/www/site/content/en/documentation/dsls/sql/extensions/create-external-table.md @@ -67,6 +67,7 @@ tableElement: columnName fieldType [ NOT NULL ] [Identifier](/documentation/dsls/sql/calcite/lexical/#identifiers) with one of the following values: * `bigquery` + * `bigtable` * `pubsub` * `kafka` * `text` @@ -204,6 +205,137 @@ TYPE bigquery LOCATION 'testing-integration:apache.users' ``` +## Cloud Bigtable + +### Syntax + +``` +CREATE EXTERNAL TABLE [ IF NOT EXISTS ] tableName ( + key VARCHAR NOT NULL, + family ROW + [, family ROW< qualifier cells [, qualifier cells ]* > ]* +) +TYPE bigtable +LOCATION 'googleapis.com/bigtable/projects/[PROJECT_ID]/instances/[INSTANCE_ID]/tables/[TABLE]' +``` + +* `key`: key of the Bigtable row +* `family`: name of the column family +* `qualifier`: the column qualifier +* `cells`: Either of each value: + * `TYPE` + * `ARRAY` +* `LOCATION`: + * `PROJECT_ID`: ID of the Google Cloud Project. + * `INSTANCE_ID`: Bigtable instance ID. + * `TABLE`: Bigtable Table ID. +* `TYPE`: `SIMPLE_TYPE` or `CELL_ROW` +* `CELL_ROW`: `ROW [NOT NULL]]` +* `SIMPLE_TYPE`: on of the following: + * `BINARY` + * `VARCHAR` + * `BIGINT` + * `INTEGER` + * `SMALLINT` + * `TINYINT` + * `DOUBLE` + * `FLOAT` + * `BOOLEAN` + * `TIMESTAMP` + +An alternative syntax with a flat schema: +``` +CREATE EXTERNAL TABLE [ IF NOT EXISTS ] tableName ( + key VARCHAR NOT NULL, + qualifier SIMPLE_TYPE + [, qualifier SIMPLE_TYPE ]* +) +TYPE bigtable +LOCATION 'googleapis.com/bigtable/projects/[PROJECT_ID]/instances/[INSTANCE_ID]/tables/[TABLE]' +TBLPROPERTIES '{ + "columnsMapping": "family:qualifier[,family:qualifier]*" +}' +``` + +* `key`: key of the Bigtable row +* `family`: name of the column family +* `qualifier`: the column qualifier +* `LOCATION`: + * `PROJECT_ID`: ID of the Google Cloud Project. + * `INSTANCE_ID`: Bigtable instance ID. + * `TABLE`: Bigtable Table ID. +* `TBLPROPERTIES`: JSON object containing columnsMapping key with comma-separated + key-value pairs separated by a colon +* `SIMPLE_TYPE`: the same as in the previous syntax + +### Read Mode + +Beam SQL supports reading rows with mandatory `key` field, at least one `family` +with at least one `qualifier`. Cells are represented as simple types (`SIMPLE_TYPE`) or +ROW type with a mandatory `val` field, optional `timestampMicros` and optional `labels`. Both +read the latest cell in the column. Cells specified as Arrays of simple types +(`ARRAY`) allow to read all the column's values. + +For flat schema only `SIMPLE_TYPE` values are allowed. Every field except for `key` must correspond +to the key-values pairs specified in `columnsMapping`. + +Not all existing column families and qualifiers have to be provided to the schema. + +### Write Mode + +Supported for flat schema only. + +### Example + +``` +CREATE EXTERNAL TABLE beamTable( + key VARCHAR NOT NULL, + beamFamily ROW< + boolLatest BOOLEAN NOT NULL, + longLatestWithTs ROW< + val BIGINT NOT NULL, + timestampMicros BIGINT NOT NULL + > NOT NULL, + allStrings ARRAY NOT NULL, + doubleLatestWithTsAndLabels ROW< + val DOUBLE NOT NULL, + timestampMicros BIGINT NOT NULL, + labels ARRAY NOT NULL + > NOT NULL, + binaryLatestWithLabels ROW< + val BINARY NOT NULL, + labels ARRAY NOT NULL + > NOT NULL + > NOT NULL + ) +TYPE bigtable +LOCATION 'googleapis.com/bigtable/projects/beam/instances/beamInstance/tables/beamTable' +``` + +Flat schema example: + +``` +CREATE EXTERNAL TABLE flatTable( + key VARCHAR NOT NULL, + boolColumn BOOLEAN NOT NULL, + longColumn BIGINT NOT NULL, + stringColumn VARCHAR NOT NULL, + doubleColumn DOUBLE NOT NULL, + binaryColumn BINARY NOT NULL +) +TYPE bigtable +LOCATION 'googleapis.com/bigtable/projects/beam/instances/beamInstance/tables/flatTable' +TBLPROPERTIES '{ + "columnsMapping": "f:boolColumn,f:longColumn,f:stringColumn,f2:doubleColumn,f2:binaryColumn" +}' +``` + +Write example: +``` +INSERT INTO writeTable(key, boolColumn, longColumn, stringColumn, doubleColumn) + VALUES ('key', TRUE, 10, 'stringValue', 5.5) +``` + ## Pub/Sub ### Syntax diff --git a/website/www/site/content/en/documentation/io/developing-io-java.md b/website/www/site/content/en/documentation/io/developing-io-java.md index 7de2024cf3c7..7836a3cd06ac 100644 --- a/website/www/site/content/en/documentation/io/developing-io-java.md +++ b/website/www/site/content/en/documentation/io/developing-io-java.md @@ -17,6 +17,9 @@ limitations under the License. --> # Developing I/O connectors for Java +**IMPORTANT:** Use ``Splittable DoFn`` to develop your new I/O. For more details, read the +[new I/O connector overview](/documentation/io/developing-io-overview/). + To connect to a data store that isn’t supported by Beam’s existing I/O connectors, you must create a custom I/O connector that usually consist of a source and a sink. All Beam sources and sinks are composite transforms; however, diff --git a/website/www/site/content/en/documentation/io/developing-io-overview.md b/website/www/site/content/en/documentation/io/developing-io-overview.md index 0ea507f2bf79..c8e0482aa9d3 100644 --- a/website/www/site/content/en/documentation/io/developing-io-overview.md +++ b/website/www/site/content/en/documentation/io/developing-io-overview.md @@ -46,33 +46,32 @@ are the recommended steps to get started: For **bounded (batch) sources**, there are currently two options for creating a Beam source: +1. Use `Splittable DoFn`. + 1. Use `ParDo` and `GroupByKey`. -1. Use the `Source` interface and extend the `BoundedSource` abstract subclass. -`ParDo` is the recommended option, as implementing a `Source` can be tricky. See -[When to use the Source interface](#when-to-use-source) for a list of some use -cases where you might want to use a `Source` (such as -[dynamic work rebalancing](/blog/2016/05/18/splitAtFraction-method.html)). +`Splittable DoFn` is the recommended option, as it's the most recent source framework for both +bounded and unbounded sources. This is meant to replace the `Source` APIs( +[BoundedSource](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/BoundedSource.html) and +[UnboundedSource](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/UnboundedSource.html)) +in the new system. Read +[Splittable DoFn Programming Guide](/learn/programming-guide/#splittable-dofns) for how to write one +Splittable DoFn. For more information, see the +[roadmap for multi-SDK connector efforts](/roadmap/connectors-multi-sdk/). -(Java only) For **unbounded (streaming) sources**, you must use the `Source` -interface and extend the `UnboundedSource` abstract subclass. `UnboundedSource` -supports features that are useful for streaming pipelines, such as -checkpointing. +For Java and Python **unbounded (streaming) sources**, you must use the `Splittable DoFn`, which +supports features that are useful for streaming pipelines, including checkpointing, controlling +watermark, and tracking backlog. -Splittable DoFn is a new sources framework that is under development and will -replace the other options for developing bounded and unbounded sources. For more -information, see the -[roadmap for multi-SDK connector efforts](/roadmap/connectors-multi-sdk/). -### When to use the Source interface {#when-to-use-source} +### When to use the Splittable DoFn interface {#when-to-use-splittable-dofn} -If you are not sure whether to use `Source`, feel free to email the [Beam dev -mailing list](/get-started/support) and we can discuss the -specific pros and cons of your case. +If you are not sure whether to use `Splittable DoFn`, feel free to email the +[Beam dev mailing list](/get-started/support) and we can discuss the specific pros and cons of your +case. -In some cases, implementing a `Source` might be necessary or result in better -performance: +In some cases, implementing a `Splittable DoFn` might be necessary or result in better performance: * **Unbounded sources:** `ParDo` does not work for reading from unbounded sources. `ParDo` does not support checkpointing or mechanisms like de-duping @@ -90,22 +89,40 @@ performance: jobs. Depending on your data source, dynamic work rebalancing might not be possible. -* **Splitting into parts of particular size recommended by the runner:** `ParDo` - does not receive `desired_bundle_size` as a hint from runners when performing - initial splitting. +* **Splitting initially to increase parallelism:** `ParDo` + does not have the ability to perform initial splitting. For example, if you'd like to read from a new file format that contains many records per file, or if you'd like to read from a key-value store that supports read operations in sorted key order. -### Source lifecycle {#source} -Here is a sequence diagram that shows the lifecycle of the Source during - the execution of the Read transform of an IO. The comments give useful - information to IO developers such as the constraints that - apply to the objects or particular cases such as streaming mode. - - -![This is a sequence diagram that shows the lifecycle of the Source](/images/source-sequence-diagram.svg) +### I/O examples using SDFs +**Java Examples** + +* [Kafka](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/ReadFromKafkaDoFn.java#L118): +An I/O connector for [Apache Kafka](https://kafka.apache.org/) +(an open-source distributed event streaming platform). +* [Watch](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/Watch.java#L787): +Uses a polling function producing a growing set of outputs for each input until a per-input +termination condition is met. +* [Parquet](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/java/io/parquet/src/main/java/org/apache/beam/sdk/io/parquet/ParquetIO.java#L365): +An I/O connector for [Apache Parquet](https://parquet.apache.org/) +(an open-source columnar storage format). +* [HL7v2](https://github.com/apache/beam/blob/6fdde4f4eab72b49b10a8bb1cb3be263c5c416b5/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/HL7v2IO.java#L493): +An I/O connector for HL7v2 messages (a clinical messaging format that provides data about events +that occur inside an organization) part of +[Google’s Cloud Healthcare API](https://cloud.google.com/healthcare). +* [BoundedSource wrapper](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/java/core/src/main/java/org/apache/beam/sdk/io/Read.java#L248): +A wrapper which converts an existing [BoundedSource](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/BoundedSource.html) +implementation to a splittable DoFn. +* [UnboundedSource wrapper](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/java/core/src/main/java/org/apache/beam/sdk/io/Read.java#L432): +A wrapper which converts an existing [UnboundedSource](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/UnboundedSource.html) +implementation to a splittable DoFn. + +**Python Examples** +* [BoundedSourceWrapper](https://github.com/apache/beam/blob/571338b0cc96e2e80f23620fe86de5c92dffaccc/sdks/python/apache_beam/io/iobase.py#L1375): +A wrapper which converts an existing [BoundedSource](https://beam.apache.org/releases/pydoc/current/apache_beam.io.iobase.html#apache_beam.io.iobase.BoundedSource) +implementation to a splittable DoFn. ### Using ParDo and GroupByKey @@ -157,7 +174,6 @@ example: cannot be parallelized. In this case, the `ParDo` would open the file and read in sequence, producing a `PCollection` of records from the file. - ## Sinks To create a Beam sink, we recommend that you use a `ParDo` that writes the @@ -169,8 +185,6 @@ For **file-based sinks**, you can use the `FileBasedSink` abstraction that is provided by both the Java and Python SDKs. See our language specific implementation guides for more details: -* [Developing I/O connectors for Java](/documentation/io/developing-io-java/) -* [Developing I/O connectors for Python](/documentation/io/developing-io-python/) diff --git a/website/www/site/content/en/documentation/io/developing-io-python.md b/website/www/site/content/en/documentation/io/developing-io-python.md index 039b633c4209..7c7705bb1be8 100644 --- a/website/www/site/content/en/documentation/io/developing-io-python.md +++ b/website/www/site/content/en/documentation/io/developing-io-python.md @@ -19,6 +19,9 @@ limitations under the License. --> # Developing I/O connectors for Python +**IMPORTANT:** Please use ``Splittable DoFn`` to develop your new I/O. For more details, please read +the [new I/O connector overview](/documentation/io/developing-io-overview/). + To connect to a data store that isn’t supported by Beam’s existing I/O connectors, you must create a custom I/O connector that usually consist of a source and a sink. All Beam sources and sinks are composite transforms; however, diff --git a/website/www/site/content/en/documentation/programming-guide.md b/website/www/site/content/en/documentation/programming-guide.md index 3eee8fef6d16..477152c23cb1 100644 --- a/website/www/site/content/en/documentation/programming-guide.md +++ b/website/www/site/content/en/documentation/programming-guide.md @@ -31,7 +31,7 @@ how to implement Beam concepts in your pipelines. {{< language-switcher java py >}} {{< paragraph class="language-py" >}} -The Python SDK supports Python 2.7, 3.5, 3.6, and 3.7. New Python SDK releases will stop supporting Python 2.7 in 2020 ([BEAM-8371](https://issues.apache.org/jira/browse/BEAM-8371)). For best results, use Beam with Python 3. +The Python SDK supports Python 3.6, 3.7, and 3.8. Beam 2.24.0 was the last Python SDK release to support Python 2 and 3.5. {{< /paragraph >}} ## 1. Overview {#overview} diff --git a/website/www/site/content/en/documentation/sdks/python-dependencies.md b/website/www/site/content/en/documentation/sdks/python-dependencies.md index 80130e5fb1cd..4e0bf0a36c51 100644 --- a/website/www/site/content/en/documentation/sdks/python-dependencies.md +++ b/website/www/site/content/en/documentation/sdks/python-dependencies.md @@ -41,18 +41,10 @@ Dependencies for your Beam SDK version are listed in `setup.py` in the Beam repo You can also retrieve the dependency list from the command line using the following process: -1. Create a clean virtual environment on your local machine. - - Python 3: - - ``` - $ python3 -m venv env && source env/bin/activate - ``` - - Python 2: +1. Create a clean virtual environment on your local machine using a supported python version. ``` - $ pip install virtualenv && virtualenv env && source env/bin/activate + $ python -m venv env && source env/bin/activate ``` 2. [Install the Beam Python SDK](/get-started/quickstart-py/#download-and-install). diff --git a/website/www/site/content/en/get-started/quickstart-py.md b/website/www/site/content/en/get-started/quickstart-py.md index b2a503e5803d..5036ee0020b7 100644 --- a/website/www/site/content/en/get-started/quickstart-py.md +++ b/website/www/site/content/en/get-started/quickstart-py.md @@ -23,13 +23,13 @@ If you're interested in contributing to the Apache Beam Python codebase, see the {{< toc >}} -The Python SDK supports Python 2.7, 3.5, 3.6, and 3.7. New Python SDK releases will stop supporting Python 2.7 in 2020 ([BEAM-8371](https://issues.apache.org/jira/browse/BEAM-8371)). For best results, use Beam with Python 3. +The Python SDK supports Python 3.6, 3.7, and 3.8. Beam 2.24.0 was the last release with support for Python 2.7 and 3.5. ## Set up your environment ### Check your Python version -The Beam SDK requires Python 2 users to use Python 2.7 and Python 3 users to use Python 3.5 or higher. Check your version by running: +The Beam SDK requires Python users to use Python version 3.6 or higher. Check your version by running: {{< highlight >}} python --version diff --git a/website/www/site/content/en/get-started/wordcount-example.md b/website/www/site/content/en/get-started/wordcount-example.md index 50634c75b9ad..940eb133bacf 100644 --- a/website/www/site/content/en/get-started/wordcount-example.md +++ b/website/www/site/content/en/get-started/wordcount-example.md @@ -147,7 +147,7 @@ Pipeline p = Pipeline.create(options); {{< /highlight >}} {{< highlight go >}} -p := beam.NewPipeline +p := beam.NewPipeline() s := p.Root() {{< /highlight >}} diff --git a/website/www/site/data/en/quotes.yaml b/website/www/site/data/en/quotes.yaml new file mode 100644 index 000000000000..537171a7d4c2 --- /dev/null +++ b/website/www/site/data/en/quotes.yaml @@ -0,0 +1,23 @@ +# Licensed 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. + +# TODO: +# Placeholder texts should be updated later +- text: A framework that delivers the flexibility and advanced functionality our customers need. + icon: icons/quote-icon.svg + logoUrl: images/quote-paypal-logo.png +- text: A framework that delivers the flexibility and advanced functionality our customers need. + icon: icons/quote-icon.svg + logoUrl: images/quote-paypal-logo.png +- text: A framework that delivers the flexibility and advanced functionality our customers need. + icon: icons/quote-icon.svg + logoUrl: images/quote-paypal-logo.png \ No newline at end of file diff --git a/website/www/site/i18n/home/en.yaml b/website/www/site/i18n/home/en.yaml index 8a1ac53eecf8..6ae87c04f465 100644 --- a/website/www/site/i18n/home/en.yaml +++ b/website/www/site/i18n/home/en.yaml @@ -10,10 +10,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -- id: home-hero-title - translation: "Apache Beam: An advanced unified programming model" -- id: home-hero-subtitle - translation: "Implement batch and streaming data processing jobs that run on any execution engine." - id: home-learn-more translation: "Learn more" - id: home-try-beam diff --git a/website/www/site/i18n/home/hero/en.yaml b/website/www/site/i18n/home/hero/en.yaml new file mode 100644 index 000000000000..85f4728d86be --- /dev/null +++ b/website/www/site/i18n/home/hero/en.yaml @@ -0,0 +1,20 @@ +# Licensed 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. + +- id: home-hero-title + translation: Introducing Apache Beam +- id: home-hero-heading + translation: An advanced unified programming model +- id: home-hero-subheading + translation: Implement batch and streaming data processing jobs that run on any execution engine. +- id: home-hero-button + translation: Install Beam diff --git a/website/www/site/i18n/home/quotes/en.yaml b/website/www/site/i18n/home/quotes/en.yaml new file mode 100644 index 000000000000..95c8e85b6453 --- /dev/null +++ b/website/www/site/i18n/home/quotes/en.yaml @@ -0,0 +1,14 @@ +# Licensed 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. + +- id: home-quotes-title + translation: "They tried it out" \ No newline at end of file diff --git a/website/www/site/i18n/navbar/en.yaml b/website/www/site/i18n/navbar/en.yaml index fd22c3a73821..ae6255e50683 100644 --- a/website/www/site/i18n/navbar/en.yaml +++ b/website/www/site/i18n/navbar/en.yaml @@ -16,10 +16,12 @@ translation: "Get Started" - id: nav-documentation translation: "Documentation" +- id: nav-documentation-general + translation: "General" - id: nav-languages translation: "Languages" - id: nav-runners - translation: "RUNNERS" + translation: "Runners" - id: nav-roadmap translation: "Roadmap" - id: nav-contribute diff --git a/website/www/site/layouts/_default/baseof.html b/website/www/site/layouts/_default/baseof.html index 6c245c51ac9f..b8b6e26cdfd9 100644 --- a/website/www/site/layouts/_default/baseof.html +++ b/website/www/site/layouts/_default/baseof.html @@ -22,10 +22,12 @@ {{ block "pillars-section" . }}{{ end }} {{ block "graphic-section" . }}{{ end }} {{ block "calendar-section" . }}{{ end }} + {{ block "quotes-section" . }}{{ end }} + {{ block "quotes-mobile-section" . }}{{ end }} {{ block "logos-section" . }}{{ end }} - {{ block "cards-section" . }}{{ end }} {{ block "ctas-section" . }}{{ end }} {{ partial "footer.html" . }} + {{ partial "hooks/body-end.html"}} diff --git a/website/www/site/layouts/index.html b/website/www/site/layouts/index.html index b574984ce232..ce86876017b3 100644 --- a/website/www/site/layouts/index.html +++ b/website/www/site/layouts/index.html @@ -1,191 +1,191 @@ {{/* - Licensed 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. See accompanying LICENSE file. - */}} - - {{ define "hero-section" }} -
- -
-
-
-

{{ T "home-hero-title" }}

-

{{ T "home-hero-heading" }}

-

{{ T "home-hero-subheading" }}

-
-
- {{ end }} - - {{ define "pillars-section" }} -
-

- {{ T "home-pillars-title" }} -

-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $pillar := $data.pillars }} - {{ partial "pillars/pillars-item" (dict "logo" $pillar.icon "header" $pillar.title "text" $pillar.body) }} - {{ end }} -
-
-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $pillars_social := $data.pillars_social }} - {{ partial "pillars/pillars-social" (dict "icon" $pillars_social.icon "url" $pillars_social.url "name" $pillars_social.name) }} - {{ end }} -
-

- {{ T "home-pillars-social-text" }} -

-
-
- {{ end }} - - {{ define "graphic-section" }} -
-
- Beam architecture -
-
- {{ end }} - - {{/* - TODO: - This is the implementation of the design. - The event sync functionality will be implemented when we have the event page. - */}} - {{ define "calendar-section" }} -
-

- {{ T "home-calendar-title" }} -

-
- - -
-

{{ T "home-calendar-card-events-title" }}

-
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $event := $data.calendar_events }} - {{ partial "calendar/calendar-events" (dict "icon" $event.icon "title" $event.title "place" $event.place "time" $event.time "url" $event.url) }} - {{ end }} -
- - - -
-
-
- {{ end }} - - {{ define "quotes-section" }} -
-
- {{ T "home-quotes-title" }} -
- -
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $quote := $data.quotes }} - {{ partial "quotes/quote.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} - {{ end }} -
- - {{/* - The id "my-keen-slider" and "dots" should be named as defaults to make the external library (Keen Slider) works well - */}} -
- {{ $data := index $.Site.Data .Site.Language.Lang }} - {{ range $quote := $data.quotes }} - {{ partial "quotes/quote-mobile.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} - {{ end }} -
-
-
- {{ end }} - - {{ define "logos-section" }} -
-
- {{ T "home-logos-title" }} -
-
- {{ range $logo := $.Site.Data.works_with }} - - {{ end }} -
-
- {{ end }} - - {{ define "ctas-section" }} - - {{ end }} - \ No newline at end of file + Licensed 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. See accompanying LICENSE file. +*/}} + +{{ define "hero-section" }} +
+ +
+
+
+

{{ T "home-hero-title" }}

+

{{ T "home-hero-heading" }}

+

{{ T "home-hero-subheading" }}

+
+
+{{ end }} + +{{ define "pillars-section" }} +
+

+ {{ T "home-pillars-title" }} +

+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $pillar := $data.pillars }} + {{ partial "pillars/pillars-item" (dict "logo" $pillar.icon "header" $pillar.title "text" $pillar.body) }} + {{ end }} +
+
+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $pillars_social := $data.pillars_social }} + {{ partial "pillars/pillars-social" (dict "icon" $pillars_social.icon "url" $pillars_social.url "name" $pillars_social.name) }} + {{ end }} +
+

+ {{ T "home-pillars-social-text" }} +

+
+
+{{ end }} + +{{ define "graphic-section" }} +
+
+ Beam architecture +
+
+{{ end }} + +{{/* + TODO: + This is the implementation of the design. + The event sync functionality will be implemented when we have the event page. +*/}} +{{ define "calendar-section" }} +
+

+ {{ T "home-calendar-title" }} +

+
+ + +
+

{{ T "home-calendar-card-events-title" }}

+
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $event := $data.calendar_events }} + {{ partial "calendar/calendar-events" (dict "icon" $event.icon "title" $event.title "place" $event.place "time" $event.time "url" $event.url) }} + {{ end }} +
+ + + +
+
+
+{{ end }} + + +{{ define "quotes-section" }} +
+
+ {{ T "home-quotes-title" }} +
+ +
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $quote := $data.quotes }} + {{ partial "quotes/quote.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} + {{ end }} +
+ + {{/* + The id "my-keen-slider" and "dots" should be named as defaults to make the external library (Keen Slider) works well + */}} +
+ {{ $data := index $.Site.Data .Site.Language.Lang }} + {{ range $quote := $data.quotes }} + {{ partial "quotes/quote-mobile.html" (dict "icon" $quote.icon "text" $quote.text "logoUrl" $quote.logoUrl) }} + {{ end }} +
+
+
+{{ end }} + +{{ define "logos-section" }} +
+
+ {{ T "home-logos-title" }} +
+
+ {{ range $logo := $.Site.Data.works_with }} + + {{ end }} +
+
+{{ end }} + +{{ define "ctas-section" }} + +{{ end }} diff --git a/website/www/site/layouts/partials/head.html b/website/www/site/layouts/partials/head.html index 2cb880669dbe..d0f4b884f4ea 100644 --- a/website/www/site/layouts/partials/head.html +++ b/website/www/site/layouts/partials/head.html @@ -1,57 +1,57 @@ {{/* - Licensed 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. See accompanying LICENSE file. - */}} - - - - + Licensed 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. See accompanying LICENSE file. +*/}} - {{ if .Title }}{{ .Title }}{{ else }}{{ .Site.Title }}{{ end }} - - - - - {{ $scssMain := "scss/main.scss"}} - {{ if .Site.IsServer }} - {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) | postCSS }} - - {{ else }} - {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }} - - - {{ end }} + + + + +{{ if .Title }}{{ .Title }}{{ else }}{{ .Site.Title }}{{ end }} + - + - +{{ $scssMain := "scss/main.scss"}} +{{ if .Site.IsServer }} + {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) | postCSS }} + +{{ else }} + {{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }} + + +{{ end }} + + + + + + + + + + + + + + + + - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/website/www/site/layouts/partials/header.html b/website/www/site/layouts/partials/header.html index 73c9867acffc..af8417087c20 100644 --- a/website/www/site/layouts/partials/header.html +++ b/website/www/site/layouts/partials/header.html @@ -10,18 +10,18 @@ limitations under the License. See accompanying LICENSE file. */}} -